При автоматизации бизнес-процессов в 1С:Бухгалтерия 3.0 часто возникает необходимость оповестить одного или нескольких сотрудников о проведении определенного документа. Рассмотрим подробно, с какими архитектурными и техническими ограничениями сталкивается разработчик при решении этой задачи и какие существуют механизмы для отправки уведомлений.
Проанализируем особенности работы платформы 1С:Предприятие 8.3. Проведение документа происходит на стороне сервера в процедуре ОбработкаПроведения внутри транзакции записи. В этот момент выполнение интерактивных клиентских методов, таких как ПоказатьОповещениеПользователя, строго запрещено платформой.
Вызвать всплывающее окно для пользователя, проводящего документ, можно только на клиенте — например, в обработчике события формы ПослеЗаписи. Кроме того, клиентские сеансы пользователей изолированы друг от друга. Вызвать прямое экранное оповещение в сеансе другого сотрудника из кода проведения невозможно. Для передачи уведомлений сторонним пользователям необходимо либо сохранять состояние в базу данных, либо задействовать специальные сервисы.
В типовой 1С:Бухгалтерия (начиная с версии 3.0.81) разработчиками 1С официально включена подсистема «Напоминания» из Библиотеки Стандартных Подсистем (БСП). Для активизации механизма перейдем в раздел Администранция — Органайзер и установим флаг Напоминания.
После включения функционала мы можем программно создавать записи в регистре сведений НапоминанияПользователя. Платформа самостоятельно отслеживает наступление срока и выводит всплывающее окно нужным пользователям в указанное время.
Разберем пример программного формирования напоминания:
ЗаписьРегистра = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
ЗаписьРегистра.Пользователь = СсылкаНаПользователя;
ЗаписьРегистра.ВремяСобытия = ТекущаяДата();
ЗаписьРегистра.СрокНапоминания = ТекущаяДата();
ЗаписьРегистра.Источник = СсылкаНаДокумент;
ЗаписьРегистра.Описание = "Проведен документ: " + Строка(СсылкаНаДокумент);
ЗаписьРегистра.Записать();
Посмотрим на вариант интеграции со встроенным в конфигурацию механизмом задач. В 1С:Бухгалтерия 3.0 присутствует общая форма СписокЗадач и регистр сведений ЗадачиБухгалтера. Формируя записи в данном регистре, можно выводить нужные события в списке задач конкретных пользователей.
Для реализации этого подхода запишем необходимые данные в регистр сведений ЗадачиБухгалтера при проведении документа на сервере или в обработчике клиентской формы ПослеЗаписи.
Если в информационной базе активирована Система взаимодействия, мы можем отправлять сообщения пользователям в режиме реального времени. В этом случае у адресата появляется контекстное всплывающее уведомление и индикатор в центре оповещений.
Выясним, как программно отправить сообщение в обсуждение:
Обсуждение = СистемыВзаимодействия.СоздатьОбсуждение();
Обсуждение.Участники.Добавить(ИдентификаторПользователя);
Сообщение = СистемыВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор);
Сообщение.Текст = "Проведен документ " + Строка(СсылкаНаДокумент);
Сообщение.Записать();
Платформа 1С:Предприятие 8.3 позволяет добавлять собственные объекты метаданных и дорабатывать логику через механизмы расширений без снятия конфигурации с типовой поддержки. Проанализируем пошаговый алгоритм создания такого решения:
HTTPСоединение и HTTPЗапрос).Выполнение отправки писем или внешних HTTP-запросов через фоновые и регламентные задания позволяет избежать зависания интерфейса и замедления транзакции проведения документа.