Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 18:06

Где ошибка в коде?

Автор esip90100, 23 сен 2021, 12:33

0 Пользователей и 1 гость просматривают эту тему.

esip90100

Так отрабатывает подписки на события. При проведении документа, код начинает срабатывать как цикл бесконечное количество раз, а потом программа завершает свою работу из за ошибки. В чем причина? Помогите разобраться.



Процедура ПередЗаписьюТоварыНаСкладахПередЗаписью(Источник, Отказ, Замещение) Экспорт
Сообщить(Источник.отбор.Регистратор);
                                                 
        
      набор=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();   //обращение к товарам на складах
   набор.Отбор.регистратор.установить(Источник.отбор.Регистратор.Значение);
   набор.Прочитать();
                  
   для каждого запись из набор цикл
             запись.Мол =  "09";
            сообщить("молы");
           набор.Записать(истина); 

   КонецЦикла;
           

       

КонецПроцедуры

LexaK

ну вам же писали, что Источник - это уже набор записей
попробуйте такую процедуру
Процедура ПередЗаписьюТоварыНаСкладахПередЗаписью(Источник, Отказ, Замещение) Экспорт
//Сообщить(Источник.отбор.Регистратор);
                 
   для каждого запись из Источник цикл
запись.Мол =  "09"; //точно строка? наверно нужна ссылка!
   КонецЦикла;

КонецПроцедуры

если помогло нажмите: Спасибо!

esip90100

LexaK, И так тоже пробовал, но причина в другом. Код срабатывает нормально, но если добавить строчку набор.Записать(истина);  он начинает зацикливаться и вешает программу. В этой строчке причина скорее всего

LexaK

да, повторная запись не нужна!

а сейчас что не работает? с новым кодом?
если помогло нажмите: Спасибо!

esip90100

LexaK, с новым кодом Мол не записывается в регистр, поля пустые остаются. Точно строка, этот реквизит недавно был создан

LexaK

т.е. у вас МОЛ - это какой-то код "09", так? строка? или число =9? в нормальных базах это ссылка на справочник МОЛы

подписки на события отлично отлаживаются
поставьте точку остановки на код и выполните программу.
(еще раз проверьте Тип реквизита МОЛ)

если помогло нажмите: Спасибо!

esip90100

LexaK, Изменил немного программу. Сейчас весь код нормально отрабатывает, но записи в регистре накопления остаются пустыми. Почему это может быть?

Процедура ПриЗаписиТоварыНаСкладахОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
                     
   
   
   набор=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();   //обращение к товарам на складах
   набор.Отбор.регистратор.установить(Источник.ссылка);
   набор.Прочитать();
   набор.Записывать = истина;

   Для каждого элемент из набор цикл

       элемент.МОЛ = "5";

    набор.Записать();
 
   КонецЦикла;

esip90100

LexaK, МОЛ это точно строка. Его раньше не было, мы его сами создали. Строка - 100 процентов.

LexaK

esip90100, ну если так трудно даются подписки, зачем мучиться?

используйте процедуру ОбработкаПроведения в модуле документа
там где заполняете Движения.ТоварыНаСкладах, там же заполняйте и реквизит МОЛ.

потом, когда наберетесь опыта, сможете оформить это заполнение в Подписке.
не надо стараться быть круче, чем есть на самом деле.  :xfbnsdfb:
если помогло нажмите: Спасибо!

esip90100

LexaK, В модуле все срабатывает нормально, но нужно сделать именно через подписку

Теги:

Похожие темы (1)

Рейтинг@Mail.ru

Поиск