Когда регламентное задание не то, чем оно кажется. УНФ 1.6
Когда программисты используют объекты не для того, чего они предназначены «природой», у других программистов может возникнуть шок и не понимание.
Создал простое правило рабочего процесса:
Меняю состояние заказа, ничего не происходит. Правило не отрабатывает.
Думаю — ага, нужно проверить регламентное задание » Обработка правил рабочих процессов», может оно не включено. Смотрю — и точно, такого регламентного задания нет. И создать его вручную нельзя — нет такого задания в списке доступных для работы.
Самое удивительное, что в копии базы, где я ранее отлаживал, это задание есть.
Ну что же, расчехляю код-хаммер и пишу код по созданию этого задания:
РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.ОбработкаПравилРабочихПроцессов); РЗ.Использование = ложь; РЗ.Записать();
Задание создается, назначаю ему расписание:
Запускаю — ничего не происходит, почта не отправляется. Что же это такое думаю? Само регламентное задание выполняется с ошибкой, причем это архитектурная ошибка, а не Run-time:
И тут до меня доходит, что правило рабочего процесса не включено. Включаю его, но при попытке изменить состояние заказа теперь получаю ошибку:
28.07.2021 18:32:39
Индекс находится за границами массива
{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(3210)}: Записать(ПараметрыЗаписи);
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
Индекс находится за границами массива
{ОбщийМодуль.РабочиеПроцессы.Модуль(138)
Смотрю код и понимаю, что нужно очистить регламентные задания, вот тут то до меня и дошло, что программисты УНФ использовали регламентные задания не по назначению.
Пришлось написать код по удалению заданий:
СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбработкаПравилРабочихПроцессов)); Для Каждого Задание ИЗ СписокЗаданий Цикл Сообщить(Задание); Задание.Удалить(); КонецЦикла;
После этого все заработало.
А ведь если бы я не ошибся с галочкой включенного правила, то не пошел бы по этому пути и не узнал бы об этом.
В УНФ такие задания похоже, используются широко. Вот пример регламентного задания, где обработчики оставили метод пустым:
А вот для регламентного задания «Обработка правил рабочих процессов» сделали метод, который заранее не рабочий, если выполнять из регламентного задания, потому что содержит один метод:
В общем, архитектура УНФ так хитро составлена, что можно ошибиться даже знатоку. Будьте бдительны!
Недостатком в 1С в данном случае является возможность недокументированного использования регламентных заданий, которая вводит в заблуждение.
Среда: УНФ 1.6.20.189.
Свежие комментарии