Использование подписок на событие для корректировки движений документов «извне»

12.12.21

Разработка - Механизмы платформы 1С

Рассмотрим на практическом примере использование объекта "Подписка на событие" для корректировки движений документа.

В ходе решения различных задач пользователей иногда возникает необходимость уже сформированные движения документов (а именно определенные наборы регистров) подвергать какой-либо корректировке.

Для данных целей очень хорошо подходит объект «Подписка на событие», который позволяет выполнять какие-то действия при наступлении определенного события для большого количества объектов (например, при записи платежных документов или при установке нового номера справочников, связанных с налоговым учетом).

Также подписка на событие удобна тем, что позволяет производить различные действия, не изменяя типовые механизмы, описанные в разных модулях.

 Например, возникла задача – нужно в платежные документы записывать определенные данные (информацию о направлениях деятельности компании) после формирования основных движений документа (сформированных в событии «ОбработкаПроведения»). Задача будем реализовывать на конфигурации «Управление производственным предприятием» ред. 1.3.

 Давайте рассмотрим решение более подробно:

 Создадим новую подписку на событие «ЗаписьНаправленияВПлатежки». У подписки существует ряд свойств, которые будут определять ее поведение:

 Источник – это объект (например, документ или список документов) для которого будет вызываться действия. Для нашего случая – выберем  Платежное поручение исходящее и Платежное поручение входящее

 События – само действия, после которого будет выполняться наш код. Согласно условиям задачи, выберем ОбработкаПроведения

 Обработчик – указание на процедуру, в которой будет происходить обработка. Выберем для этих целей общий модуль ОбщегоНазначения.

 После вышеозначенных целей создается процедура, в которой необходимо поместить код для заполнения данных о направлении (предположим, что такая информация в платежках уже содержится).

 Рассмотрим ее параметры:

 Источник – этот объект вида СправочникОбъект или ДокументОбъект, для которого происходит действие.

Отказ – параметр, позволяющий отменить проведение документа при определенных условиях.

РежимПроведения – варианты проведения (оперативное или неоперативное), позволяющее по-разному строить алгоритмы обработки.

 Остановимся на параметре Источник. Для нашей задачи тип этого параметра будет – ДокументОбъект. Для этого типа доступна коллекция Движения, которая содержит все наборы записей регистров, для которых данный документ является регистратором.

 В данной коллекции содержится набор записей РасчетыСКонтрагентамиНаборЗаписей, который нас интересует. Допустим, что в регистре создано измерение Направление, которое нам необходимо заполнять из документа.

Напишем следующий код:

Наборы = Источник.Движения;
Расчеты = Наборы.РасчетыСКонтрагентами;
Для каждого Стр из Расчеты Цикл
	Стр.Направление = Источник.Направление;
КонецЦикла;

 

Как мы видим, реализация достаточно простая, после обработки действия по записи набора предпринимать дополнительно не нужно – подписка на событие выполняется в рамках транзакции события ОбработкаПроведения, после ее окончания набор будет записан автоматически.

Плюсы данного подхода: обработка данных вне типовых алгоритмов, уменьшение объема работ по поиску и переносу изменений при обновлении, большая наглядность – весь код в одной процедуре.

Минус такого подхода: увеличение времени проведения документов и записи  элементов справочников.

Надеюсь, данная информация будет полезна как начинающим программистам, так и их более опытным коллегам в качестве расширения кругозора.

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2326    29    15    

33

Тестирование и исправление ключей аналитики ERP, УТ11, КА

Корректировка данных Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    106811    633    173    

676

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27383    79    146    

59

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22323    299    35    

71

SALE! 20%

Заполнение документа "Корректировка регистров" произвольными данными

Закрытие периода Корректировка данных Платформа 1С v8.3 Система компоновки данных 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 1920 руб.

13.07.2015    50169    171    29    

121
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. yegorovnv 02.10.12 09:34 Сейчас в теме
не понимаю смысла в данной подписке. при необходимости вне типовых алгоритмов и не внося изменения в конфигурацию можно такую задачу решить с помощью внешней обработки
3. dimonster 90 02.10.12 11:26 Сейчас в теме
(1) каким образом эту задачу предлагаете решить внешней обработкой? Предлагаете использовать ОбработчикОжидания или вызывать заполнение вручную? Цель - именно автоматизировать добавление данных после их основной записи в ОбработкеПроведения без участия пользователей.
2. AnryMc 849 02.10.12 09:51 Сейчас в теме
"-" Кроме копипаста практически ничего нет
4. Модератор раздела 02.10.12 11:26 Сейчас в теме
>> Создадим новую подписку на событие «ЗаписьНаправленияВПлатежки»
Что за событие? у 1С нет такого типового события :)
5. Alex Star 10 04.10.12 08:06 Сейчас в теме
Я так понимаю так подписка сама называется
6. FractonKireyev 11.10.12 19:30 Сейчас в теме
На кого рассчитана статья? Новичок в ней ничего не поймет, а профи это всё знает не хуже автора. Похоже, что это статья ради статьи.
vvh74; OksanaM; +2 Ответить
9. dimonster 90 12.10.12 15:12 Сейчас в теме
(6) FractonKireyev, статья рассчитана и на новичков (алгоритмы настройки подписки простые, тестовый код приведен) и на профи (для узких специалистов это может быть полезной информацией). Также с момента их (подписок) появления в 8.1 описание работы остается достаточно скудным (например, тот факт, что несколько подписок на одно событие вызываются в произвольном порядке).
user847462; +1 Ответить
7. klel 11.10.12 20:35 Сейчас в теме
8. and_r 12.10.12 06:00 Сейчас в теме
Полность согласен с FractonKireyev. Ничего нового, от автор не сообщил, надо было добавить какой-нибудь интересный пример или ловкий обход сложной ситуации... а так бумагомарательство....
10. artichoke 14.10.12 13:56 Сейчас в теме
Метод имеет право на жизнь, непонятным осталось только зачем, так стараясь не вмешиваться в типовые механизмы, в качестве обработчика выбирается модуль "Общего назначения", где, по всей видимости, и предполагается создание процедуры-обработчика...
"Выберем для этих целей общий модуль ОбщегоНазначения. После вышеозначенных целей создается процедура..."
11. CaSH_2004 372 14.11.12 00:05 Сейчас в теме
А почему идет замедление выполнения? Просто из-за дополнительного вызова или сама суть подписки выполняется платформой медленнее?
Ведь это не внешняя обработка, какая разница где прописан модуль?
12. AndrewVVS 10.01.14 15:19 Сейчас в теме
Набор записей в обработке проведения не всегда может быть заполнен - не мешало бы указать, алгоритм действия в таком случае и не всегда Ваш вариант будет отрабатывать, может понадобиться строчка Записать Движения (а рассмотреть вариант, когда данные берутся из Табличной части)... А также могли бы рассмотреть вариант решения данной задачи через подписку на событие "ПередЗаписью" Регистра накопления.
BrainWashed; user1021352; SP2000; irbalash; +4 Ответить
13. mikele_bes 8 06.02.14 09:46 Сейчас в теме
столкнулся с проблемой по подпискам:
для корректной отработки подписки в свойствах модуля не нужно указывать "вызов сервера"
иначе ругается на мутабельное значение первого параметра
14. nailmail 06.06.21 22:27 Сейчас в теме
Приветсвую всех! Вижу, много воды с тех пор утекло, но может кто отзовется)

Пытаюсь добавить общение с внешним миром сразу после проведения чека, сунулся было в дебри модуля объекта в проводки, недолго думая вспомнил про механизм событий, которым до сих пор не пользовался, гугл привел меня как раз по адресу, но..

Подцепил событие к проведению Чек ККМ в УТ11 - пока для теста вызываю только Сообщить("Hello 1C"), при оформлении чека первый раз прога попадает в обработчик события после нажатия "Оплатить наличными" на форме чека, второй раз - после "Пробить чек" на форме калькулятора "Оплата наличными" - получается, документ дважды проводится? Мне бы как-то привязаться к уже проведенному чеку, подскажите пожалуйста, в каком направлении копать?
15. nailmail 06.06.21 22:43 Сейчас в теме
(14)
Сообщение "Hello 1C" появляется дважды, а в отладчике в обработчик события прога залетает трижды(

В первый заход параметр "РежимПроведения" установлен в "Оперативный", во второй - в "Неоперативный". Думал по этому признаку определять второй заход, но потом заметил, что если в "калькуляторе" оплаты отказаться от оплаты, то последующее нажатие на "Оплатить наличными" уже с первого захода в "РежимПроведения" ставит "Неоперативный" (логично, если документ уже был проведен).

Еще больше заплутал(
16. nailmail 06.06.21 22:47 Сейчас в теме
(15)
Возможно, будет проще организовать свои дополнительные действия в процедуре "ВыполнитьКонтрольРезультатовПроведения" общего модуля "ПроведениеСерверУТ"?
17. nailmail 07.06.21 12:52 Сейчас в теме
(14)
(16)
Разобрался, спасибо - вопрос больше не актуален
18. Hexed 2 24.11.21 17:33 Сейчас в теме
поработаю синтаксис помощником ))
в тестовом примере ошибка: КонецЦикла а не КонецЕсли
Прикрепленные файлы:
19. dimonster 90 12.12.21 01:43 Сейчас в теме
Оставьте свое сообщение