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

12.12.21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

См. также

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

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

60000 руб.

06.10.2023    4517    37    18    

45

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

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

14400 руб.

29.04.2020    33843    108    152    

75

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

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

3600 руб.

10.02.2017    111390    669    174    

708

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

Представьте, что есть система QR - кодирования, которая НЕ ТРЕБУЕТ изменения конфигурации, НЕ ТРЕБУЕТ изменения ни одной печатной формы для добавления QR-кода, включая внешние, НЕ ХРАНИТ данные штрихкодов и их связь, от чего база не "пухнет", ИМЕЕТ возможность закодировать в QR-коде произвольные данные параметров для последующей обработки полученных данных, УМЕЕТ прикреплять сканы, УМЕЕТ обработать считанный QR-код как ВЫ захотите. А также ХРАНИТ историю операций в обход базы для каждого пользователя в отдельности и УМЕЕТ работать с 2D - сканерами. А также автоматически распознавать отсканированные печатные формы (картинки или pdf-файлы) и выполнять заданные произвольные алгоритмы, в том числе прикрепление их к документам! Обновление 3.2 от 09.06.2024!

19200 руб.

26.08.2018    52621    16    61    

55

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

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

12000 руб.

02.11.2020    7540    6    0    

8

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

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

2400 руб.

13.07.2015    51372    175    29    

127

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

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

6000 руб.

22.01.2025    286    1    0    

3

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

Обработка служит для: выравнивания бухгалтерского и налогового учета на определенную дату по выбранным счетам; закрытия остатков по выбранным счетам; обнуления налогового учета (ПР, ВР также будут обнулены)

2880 руб.

05.05.2024    704    10    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. yegorovnv 1 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 373 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 Сейчас в теме
Оставьте свое сообщение