Как программно выключить проверку заполнения?

1. arsen_botashev 25.03.19 15:34 Сейчас в теме
В обработкепроверкизаполнения
Программно добавляются реквизиты для проверки, но мне надо если соблюдается определнное условие их удалить из проверки. пишу так:
так они добавляются.
Если Роль <> "РедактированиеЗадачПроектовОУКД" Тогда
		ПроверяемыеРеквизиты.Добавить("Заказчик");
		ПроверяемыеРеквизиты.Добавить("ФилиалЗаказчика");
	КонецЕсли;


а так я их удаляю
Если ТипКонкурса = Перечисления.ТипыКонкурса.Продвижения Тогда
		Проверка = ПроверяемыеРеквизиты.Найти("Заказчик");
		Проверка1 = ПроверяемыеРеквизиты.Найти("ФилиалЗаказчика");	
	Если Проверка <> Неопределено ИЛИ Проверка1 <> Неопределено Тогда
			ПроверяемыеРеквизиты.Удалить(Проверка);
			ПроверяемыеРеквизиты.Удалить(Проверка1);
		КонецЕсли;                                
	КонецЕсли;
Показать


ошибка: начение индекса выходит за границы диапазона

если удалять один реквизит, то пишет неверный параметр 1.
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Octopus 337 25.03.19 15:37 Сейчас в теме
Ну так после удаления первого элемента индекс второго может поменяться, что скорее всего и произошло )
user591216_mail_oll; user1881120; mrcamomile; +3 Ответить
3. Octopus 337 25.03.19 15:39 Сейчас в теме
    Проверка = ПроверяемыеРеквизиты.Найти("Заказчик");
    Если Проверка <> Неопределено Тогда
        ПроверяемыеРеквизиты.Удалить(Проверка);
    КонецЕсли;
    Проверка1 = ПроверяемыеРеквизиты.Найти("ФилиалЗаказчика");    
    Если Проверка1 <> Неопределено Тогда
        ПроверяемыеРеквизиты.Удалить(Проверка1);
    КонецЕсли;
6. arsen_botashev 25.03.19 15:47 Сейчас в теме
(3)
Проверка = ПроверяемыеРеквизиты.Найти("Заказчик");
Если Проверка <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(Проверка);
КонецЕсли;
Проверка1 = ПроверяемыеРеквизиты.Найти("ФилиалЗаказчика");
Если Проверка1 <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(Проверка1);
КонецЕсли;


не работает почему-то.
Скорее дело в том что у меня нет роли Если Роль <> "РедактированиеЗадачПроектовОУКД" Тогда
или может потому что реквизит который надо отключить
находится в другой вкладке
7. Octopus 337 25.03.19 15:52 Сейчас в теме
(6) Значит, этот кусок кода не выполняется. А почему - это уж смотрите отладчиком.
8. arsen_botashev 25.03.19 16:01 Сейчас в теме
(7)Смотрел, код выполняется)
4. popro 25.03.19 15:40 Сейчас в теме
Создать массив удаляемых реквизитов, добавить туда элементы, потом удалить в цикле по элементам массива.
5. popro 25.03.19 15:46 Сейчас в теме
(4) Как-то так



Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) 

  НепроверяемыеРеквизиты = Новый Массив();
  ...

  Если ТипКонкурса = Перечисления.ТипыКонкурса.Продвижения Тогда
        Проверка = ПроверяемыеРеквизиты.Найти("Заказчик");
        Проверка1 = ПроверяемыеРеквизиты.Найти("ФилиалЗаказчика");    
    Если Проверка <> Неопределено ИЛИ Проверка1 <> Неопределено Тогда
            НепроверяемыеРеквизиты .Добавить(Проверка);
            НепроверяемыеРеквизиты .Добавить(Проверка1);
        КонецЕсли;                                
    КонецЕсли;

  ... 
  УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты);
КонецПроцедуры;

Процедура УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) Экспорт

  Для Каждого ЭлементМассива Из МассивНепроверяемыхРеквизитов Цикл
 
    // перед удалением реквизита из массива необходимо проверить, что он там есть
    // (не был удален ранее платформой или в коде).
    ПорядковыйНомер = МассивРеквизитов.Найти(ЭлементМассива);
    Если ПорядковыйНомер <> Неопределено Тогда
      МассивРеквизитов.Удалить(ПорядковыйНомер);
    КонецЕсли;
 
  КонецЦикла;
 
КонецПроцедуры

Показать


Взято с ИТС https://its.1c.ru/db/v8std#content:-2145783184:hdoc
9. user1172463 10.01.23 12:25 Сейчас в теме
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	
	Если ЭтотОбъект.Резерв Тогда 

		Если ПроверяемыеРеквизиты.Найти("Контрагент") <> Неопределено И ПроверяемыеРеквизиты.Найти("Договор") <> Неопределено Тогда
            ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Контрагент"));
            ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Договор"));
		КонецЕсли;   
		
	КонецЕсли;                                
	
КонецПроцедуры 
Показать
10. пользователь 10.01.23 15:11
Сообщение было скрыто модератором.
...
12. пользователь 10.01.23 19:13
Сообщение было скрыто модератором.
...
11. user591216_mail_oll 10.01.23 17:33 Сейчас в теме
Нужно перебирать с конца, по индексу.

https://its.1c.ru/db/pubprogforbeginners/content/88/hdoc

ТекущийИндекс = Числа.ВГраница();
   Пока ТекущийИндекс >= 0 Цикл
     Если Числа[ТекущийИндекс] < 10 Тогда
         Числа.Удалить(ТекущийИндекс);
     КонецЕсли;
ТекущийИндекс = ТекущийИндекс – 1;
КонецЦикла;

Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)