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

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


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


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

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


не работает почему-то.
Скорее дело в том что у меня нет роли Если Роль <> "РедактированиеЗадачПроектовОУКД" Тогда
или может потому что реквизит который надо отключить
находится в другой вкладке
7. Octopus 338 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;
КонецЦикла;

Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот