В процессе казначейского контроля в крупных и средних компаниях важнейшим этапом является согласование заявок на расходование денежных средств (ЗРДС). Для оперативного принятия решений руководству и ответственным лицам необходимо своевременно получать уведомления о поступивших задачах. Электронная почта (в частности, почтовый клиент Microsoft Outlook) остается основным каналом коммуникации в корпоративной среде. В этой статье мы подробно разберем, какими способами можно организовать отправку писем-уведомлений из 1С:ERP в Outlook, проанализируем архитектурные подходы и приведем примеры реализации программного решения.
Для конфигурации 1С:ERP Управление предприятием наиболее гибким, масштабируемым и поддерживаемым решением является использование бесшовной интеграции с системой 1С:Документооборот (1С:ДО). Фирма 1С изначально закладывала архитектуру ERP таким образом, чтобы сложные бизнес-процессы согласования выносились во внешнюю специализированную систему.
Рассмотрим подробнее, как функционирует эта схема:
ДокументСсылка.ЗаявкаНаРасходованиеДенежныхСредств и отправляет его на согласование.Этот подход идеален, так как он не требует внесения изменений в программный код 1С:ERP, легко масштабируется на любые другие виды документов и предоставляет пользователям возможность согласования без необходимости заходить в саму базу 1С.
Если на предприятии развернута флагманская конфигурация 1С:ERP Управление холдингом, то задача существенно упрощается. В ERP УХ встроен мощный модуль «Универсальные процессы», который совмещает в себе лучшие практики автоматизации документооборота и казначейских процессов.
В этой системе функционал согласования по электронной почте поставляется «из коробки». Достаточно настроить шаблон этапа согласования в конструкторе маршрутов, указать признак уведомления по электронной почте и прописать параметры системной учетной записи. Письма-оповещения будут генерироваться автоматически, содержать в себе гиперссылки для принятия решений и возвращать статусы согласования в документ 1С.
Если внедрение «1С:Документооборот» избыточно, а в компании используется классическая ERP без модулей управления холдингом, задачу можно решить с помощью создания собственного расширения конфигурации. Посмотрим на этот процесс глазами разработчика.
Важное архитектурное предупреждение: в сообщениях на форумах часто советуют использовать технологию COM-соединения для работы с Outlook (например, COMОбъект("Outlook.Application")). Делать это категорически не рекомендуется!
Проанализируем причины, почему COM-объекты — это технологическая ошибка:
OUTLOOK.EXE, блокируя оперативную память и требуя ручного перезапуска службы.Правильным решением является использование встроенных кроссплатформенных средств платформы 1С:Предприятие 8.3 — объектов ИнтернетПочта и механизмов БСП (Библиотеки Стандартных Подсистем).
Разберем по шагам алгоритм создания собственного расширения для уведомлений:
Перед написанием кода убедимся, что в базе 1С:ERP настроена системная почта. Для этого перейдем в раздел Администрирование — Органайзер — Почтовый клиент и настроим учетную запись (укажем SMTP-сервер, порт, логин, пароль и протокол шифрования SSL/TLS). Проверим успешность отправки тестового сообщения.
Создадим расширение конфигурации. В расширении добавим подписку на событие ПриЗаписи для документа ЗаявкаНаРасходованиеДенежныхСредств. Мы должны реагировать на ситуацию, когда документ записывается со статусом «Не согласован» или отправляется на согласование.
Посмотрим на пример программного кода обработчика события:
Процедура ПередЗаписьюДокумента_Подписка(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// Проверим, что документ проводится или записывается в нужном статусе
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Проанализируем изменение статуса документа
// Для этого сравним текущее значение статуса в базе данных с новым значением в объекте
СтарыйСтатус = СсылкаНаОбъект.Статус; // Ссылку получаем запросом из БД
НовыйСтатус = Источник.Статус;
Если НовыйСтатус = ПредопределенноеЗначение("Перечисление.СтатусыЗаявокНаРасходованиеДенежныхСредств.НеСогласована") Тогда
// Вызываем процедуру отправки почтового уведомления
ОтправитьУведомлениеОСогласовании(Источник);
КонецЕсли;
КонецПроцедуры
Чтобы согласующий менеджер мог в один клик открыть нужный документ в 1С:ERP прямо из письма в Outlook, нам необходимо сформировать правильную навигационную ссылку. Навигационная ссылка позволяет открыть документ как в тонком клиенте 1С, так и через веб-браузер.
Рассмотрим пример функции генерации HTML-письма и отправки его средствами БСП:
Процедура ОтправитьУведомлениеОСогласовании(ДокументОбъект) Экспорт
// 1. Получаем адрес электронной почты согласующего (например, куратора или руководителя подразделения)
АдресПолучателя = ДокументОбъект.Куратор.Email; // Допустим, email хранится в реквизитах физического лица
Если ПустаяСтрока(АдресПолучателя) Тогда
ЗаписьЖурналаРегистрации("ОтправкаУведомлений", СистемнаяИнформацияПочтовогоАдресаОшибки, , , "Не найден email для куратора по документу " + ДокументОбъект.Ссылка);
Возврат;
КонецЕсли;
// 2. Формируем навигационную ссылку для тонкого клиента и веб-клиента
// Получаем базовый URL публикации веб-клиента 1С:ERP (хранится в константах или параметрах учета)
БазовыйURLВебКлиента = "https://erp.company.ru/base/";
НавигационнаяСсылка1С = ПолучитьНавигационнуюСсылку(ДокументОбъект.Ссылка);
ПолнаяСсылкаДляOutlook = БазовыйURLВебКлиента + "#" + НавигационнаяСсылка1С;
// 3. Формируем текст письма в формате HTML
ТемаПисьма = "Требуется согласование: Заявка на расходование ДС № " + ДокументОбъект.Номер + " от " + Формат(ДокументОбъект.Дата, "ДФ=dd.MM.yyyy");
ТекстHTML = "<html><body style='font-family: Arial, sans-serif;'>"
+ "<h2>На согласование поступила новая заявка на оплату</h2>"
+ "<table border='1' cellpadding='5' cellspacing='0' style='border-collapse: collapse;'>"
+ "<tr><td><strong>Документ:</strong></td><td>Заявка на расходование ДС № " + ДокументОбъект.Номер + "</td></tr>"
+ "<tr><td><strong>Организация:</strong></td><td>" + Строка(ДокументОбъект.Организация) + "</td></tr>"
+ "<tr><td><strong>Получатель:</strong></td><td>" + Строка(ДокументОбъект.Получатель) + "</td></tr>"
+ "<tr><td><strong>Сумма:</strong></td><td style='color: green; font-weight: bold;'>" + Формат(ДокументОбъект.СуммаДокумента, "ЧДЦ=2") + " " + Строка(ДокументОбъект.Валюта) + "</td></tr>"
+ "<tr><td><strong>Назначение платежа:</strong></td><td>" + ДокументОбъект.НазначениеПлатежа + "</td></tr>"
+ "</table>"
+ "<br/>"
+ "<p>Для просмотра и согласования перейдите по ссылке:</p>"
+ "<p><a href='" + ПолнаяСсылкаДляOutlook + "' style='background-color: #4CAF50; color: white; padding: 10px 20px; text-decoration: none; display: inline-block; border-radius: 5px;'>Открыть заявку в 1С:ERP</a></p>"
+ "<p><em>Письмо сформировано автоматически подсистемой казначейства.</em></p>"
+ "</body></html>";
// 4. Отправка письма с использованием механизмов БСП
ПараметрыОтправки = Новый Структура;
ПараметрыОтправки.Вставить("Кому", АдресПолучателя);
ПараметрыОтправки.Вставить("Тема", ТемаПисьма);
ПараметрыОтправки.Вставить("Тело", ТекстHTML);
ПараметрыОтправки.Вставить("ТипТекста", "HTML");
// Получаем системную учетную запись почты
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
Попытка
РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыОтправки);
ЗаписьЖурналаРегистрации("ОтправкаУведомлений", УровеньЖурналаРегистрации.Информация, , , "Письмо успешно отправлено на " + АдресПолучателя);
Исключение
ЗаписьЖурналаРегистрации("ОтправкаУведомлений", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка отправки письма: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
В данном примере мы сформировали красивую адаптивную HTML-таблицу с кнопкой быстрого перехода. Клик по кнопке «Открыть заявку в 1С:ERP» мгновенно откроет Outlook-пользователю нужную страницу в веб-интерфейсе 1С, где он сможет нажать стандартные кнопки «Согласовать» или «Отклонить».
Если бюджет проекта ограничен по времени, а писать собственный код и тестировать его нет возможности, можно прибегнуть к покупке готовых тиражных модулей согласования для 1С:ERP. На рынке представлено множество таких решений. Их преимущества:
Выбор оптимального способа настройки отправки писем из 1С:ERP в Outlook зависит от масштабов вашей компании:
РаботаСПочтовымиСообщениями и навигационные ссылки. Это современный, безопасный и чистый с точки зрения архитектуры 1С подход.