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

12.12.21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

См. также

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

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

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

4800 руб.

06.10.2023    2607    29    15    

35

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

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

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

3600 руб.

10.02.2017    107262    636    173    

679

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

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

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

14400 руб.

29.04.2020    27919    82    146    

61

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 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    22547    302    35    

74

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

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

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

2400 руб.

13.07.2015    50315    171    29    

121

Исправление ошибок по НДФЛ и взаиморасчетам с сотрудниками в 1С:Бухгалтерия 3.0

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

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    709    3    4    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
(18) Спасибо, поправил)
+
Оставьте свое сообщение