ПослеПроведения() - что можно придумать?

Автор alyuev, 27 мая 2024, 19:54

« назад - далее »

alyuev

Возникла задача изменять дату подчиненного документа к дате текущего. Автомат проводит документы, работает перехватчик. Там возникает событие ОбработкаПроведения() и вот после неё хотелось быть выполнить поиск подчиненных для текущего и изменить им даты.
Пробовал сделать через Сервис.ВнешнееСобытие(). Событие_ОбработкаВнешнегоСобытия() вызвалось. Но аж после всего пакета проведения. Т.е. сначала отработал весь пакет для проведения. Затем, видимо, запоминется стек ВнешнегоСобытия, и уже в конце стал изменять время. И то - это была проверка интерактивная. Под пользователем. А под автоматом еще не пробовали даже.

Злоп

Что есть "пакет проведения"...?
.
У меня сделано так при интерактивной работе пользователя:
После того как отработает проведение в самом конце процедуры ОбработкаПроведения генерится формексом внешнее событие "счетфактура" И после завершения модуля проведения отрабатывает создание счф.

Злоп

Как в пакете - если идёт проведение документов в цикле - чтобы отработало внешнее событие должен закончится код исполнения. И потом уже внешнее событие пошло отрабатывать. Накопить тысячу внешних событий мне не кажется хорошей илеей.может проще после проведения документа сделать код обработки подч. Справочников? Безо всяких внешних событий на каждое проведение? - я бы так сделал.
Или извращаться с ОО чтобы был тайм-аут в который может отработать внешнее событие - но жто мне кардинально не нравится

Злоп

Всё вышенаписанное про ситуацию когда не используется перехватчик.

alyuev

"Пакет проведения" - это цикл по тз документов. А что такое "ОО"?

Злоп


Злоп

Цитата: alyuev от 28 мая 2024, 10:36"Пакет проведения" - это цикл по тз документов."
Зачем тогда извращения всякие?
Делать просто
В цикле по ТЗ для каждого документа типа
Начать транзакцию
    Провести документ
    Обработать подчинённые
Зафиксировать транзакуию

alyuev

Провести документ можно из любого места: вручную, из внешней обработки своей, из внешней обработки чужой. Переватчик всё проглотит. И в нем место централизованной обработки. Но тут нашлось место более сложной задачи. Вот и думаем, как её решить. Если бы был обработчик ПослеПроведения(), т.е. когда завершилась транзакция текущего проводимого документа - тот тут можно было бы сделать нужные нам действия, но пока его нет. Поэтому использовали ВнешнееСобытие.

Злоп

Ну тут тогда внешнее событие отработает после завершения всего кода, если проводится один документ, то норм будет, а если пакет документов без перерываи и хз где и как может быть сформирован такой пакет - то будет уже кака при попытке сделать универсально при любой ситуации...
Может тут попробовать в конце проведения писать некое "задание" в "очередь заданий" (Например, справочник заданий) И после записи задания ещё и генерить ВС (внешнее событие). Тогда независимо от количества заданий в очереди первое же отработающее ВС обсчитает всю очередь заданий, а если будет следующее ВС - если очередь пуста, то и ок, непуста - обсчитает...

alyuev

Альф, а формексом можно ввобще сделать вызов такой процедры как ПослеПроведения(), т.е. чтобы она вызвалась в модуле проведения документа автоматом уже ПОСЛЕ выхода из ОбработкаПроведения()? Понятно, что перехватчик уже это не сделает (надо будет и его дореализовывать, как я понимаю, в 1cpp).

АЛьФ

Цитата: alyuev от 31 мая 2024, 11:52Альф, а формексом можно ввобще сделать вызов такой процедры как ПослеПроведения(), т.е. чтобы она вызвалась в модуле проведения документа автоматом уже ПОСЛЕ выхода из ОбработкаПроведения()? Понятно, что перехватчик уже это не сделает (надо будет и его дореализовывать, как я понимаю, в 1cpp).
Теоретически можно. Только в контексте озвученной задачи это должно быть ПослеЗавершенияТранзакции. И что там внутри транзакции было, какие документы менялись уже непонятно будет.

Arbuz

Ага, и тут выходит из тумана ПослеОтменыПроведения(), далее ПередПроведением() и ПередОтменойПроведения(), которую легендарный Wirth несколько приколхозил при успешно реализованных ПриЗаписи; ПередПроведением; ПослеПроведения; ПослеУдаленияПроведения; ПередУдалением; ПослеУдаления; ПередОтменойУдаления; ПослеОтменыУдаления. Оно у него называется ПередУдалениемПроведения(). Все эти события работают вне родной транзакции, но в одном контексте(!), окромя одного — того проблемного.

И для развлечения делаем такой прикол — создаём петлю подчинённых документов, желательно подлиннее и перепроводим один документ из неё )).

Злоп

Баба Яга против такого колхозекостыльного строения.
Наколхозить можно всякого полезного, но оно должно работать железобетонное. Нахрена нам ещё один глючный и тормозной а-ля снеговик?
.
Для одиночного интерактивного или программного проведения в интерактивном сеансе - хотелка ТС в (0) решается ф-штатно.
.
В пакетном проведении решается штатно нормально написанным кодом транзакций и попыток с сохранением кода отработки одиночного интерактивного проведения.

Злоп

Ф-штатно = с использованием текущих возможностей форекс.

Злоп

А если через ВК или как-то иначе умудряться доставать из объекта реквизит Verstamp - было бы кузяво.