При внедрении системы 1С:Документооборот 3.0 (1С:ДО 3.0) пользователи часто сталкиваются с тем, что стандартные почтовые уведомления о новых задачах содержат лишь краткую информацию: заголовок (шапку) документа, автора и срок. Однако для полноценного согласования, особенно если оно происходит удаленно через почту, согласующему лицу (например, завхозу или руководителю, не имеющему постоянного доступа к базе) необходимо видеть содержание документа непосредственно в теле письма. Разберем, почему так происходит и какими способами можно вывести многострочное поле содержания в уведомление.
В типовой конфигурации 1С:ДО 3.0 уведомления формируются на основании шаблонов. Проблема заключается в том, что задача, которая инициирует отправку письма, является самостоятельным объектом метаданных. У задачи есть реквизит Описание, и именно он чаще всего транслируется в письмо. Если при старте процесса «Обработка документа» система не скопировала текст из реквизита Содержание предмета (самого документа) в Описание задачи, то в почту придет пустой блок текста.
Проанализируем ситуацию: письмо формируется регламентным заданием в фоновом режиме. В этот момент контекст формы отсутствует, и система собирает данные, обращаясь к реквизитам объектов. Если мы хотим изменить этот механизм, нам нужно либо научить систему заполнять описание задачи при её создании, либо вмешаться в процесс формирования HTML-тела письма.
Прежде чем приступать к написанию кода, рассмотрим наиболее «чистый» способ, предусмотренный разработчиками 1С:ДО 3.0. В версии 3.0 механизм уведомлений значительно переработан. Мы можем использовать справочник Шаблоны уведомлений и механизм Автоподстановок.
Рассмотрим по шагам, как это реализовать:
Содержание из предмета задачи.Этот метод хорош тем, что он не требует изменения типового кода и сохраняет поддержку конфигурации.
Если стандартных настроек недостаточно и требуется глубокая кастомизация HTML-представления, нам придется обратиться к общему модулю РаботаСУведомлениями или ДелопроизводствоТиповыеПередавать (в зависимости от версии релиза). Выясним причину, по которой данные не попадают в письмо, изучив процедуру СформироватьПредставлениеЗадачи.
Для реализации этого способа создадим расширение и добавим в него метод-перехватчик. Рассмотрим пример кода, который можно использовать для добавления текста содержания в описание:
&После("СформироватьПредставлениеЗадачи")
Процедура Расш_СформироватьПредставлениеЗадачи(ЗадачаСсылка, ДанныеУведомления, СтандартнаяОбработка)
// Получаем основной предмет задачи (Документ)
ПредметЗадачи = ЗадачаСсылка.Предмет;
Если ЗначениеЗаполнено(ПредметЗадачи) Тогда
// Проверяем наличие реквизита Содержание у объекта
Попытка
ТекстСодержания = ПредметЗадачи.Содержание;
Если ЗначениеЗаполнено(ТекстСодержания) Тогда
// Добавляем содержание в структуру данных, которая уйдет в HTML-шаблон
ДанныеУведомления.Вставить("СодержаниеДокумента", ТекстСодержания);
КонецЕсли;
Исключение
// Если реквизита нет или нет прав, ничего не делаем
КонецПопытки;
КонецЕсли;
КонецПроцедуры
После того как мы добавили данные в структуру ДанныеУведомления, их необходимо вывести в самом HTML-макете письма. Разберем подробнее: макеты часто хранятся в виде текстовых ресурсов или в справочнике шаблонов. Вам потребуется добавить параметр [СодержаниеДокумента] в нужное место HTML-кода шаблона.
В 1С:Документооборот 3.0 настройки процессов (обработок) стали более гибкими. Посмотрим на настройки действия (Согласование, Исполнение) внутри схемы обработки документа. В настройках каждого действия есть поле Описание задачи.
Мы можем настроить автоматическое заполнение этого поля. Если в поле описания задачи прописать инструкции или использовать теги подстановок, система будет генерировать задачу с уже заполненным содержанием. Если задача будет иметь заполненное описание, то типовой механизм уведомлений подхватит его и отправит на почту без дополнительных доработок кода.
Одной из главных трудностей, упомянутых в обсуждении, является отладка. Поскольку уведомления отправляются регламентным заданием, обычная точка остановки в конфигураторе не сработает. Рассмотрим, как эффективно отладить процесс формирования письма:
1. Использование параметра запуска:
Запустите сеанс «1С:Предприятие» с параметром /РежимОтладки. Это позволит системе более гибко реагировать на попытки подключения отладчика к фоновым процессам.
2. Настройка автоматического подключения:
В конфигураторе перейдите в меню Отладка — Подключение — Автоматическое подключение. Установите флажок Фоновые задания. Теперь, когда регламентное задание по отправке уведомлений (обычно это УведомлениеПользователейОСобытиях) запустится, конфигуратор «поймает» его, и вы сможете пройтись по коду по шагам.
3. Использование консоли регламентных заданий:
Чтобы не ждать срабатывания расписания, используйте обработку «Консоль заданий». Найдите задание, отвечающее за уведомления, и запустите его принудительно кнопкой «Выполнить в текущем сеансе». Это превратит фоновое задание в обычный процесс, который легко отлаживается.
При извлечении содержания документа для письма следует помнить о системе прав (RLS). Письма формируются под определенной учетной записью. Проанализируем ситуацию: если регламентное задание выполняется под системным пользователем, у которого нет прав на чтение конкретного вида документа, то поле Содержание вернется пустым.
Рекомендация: При программном получении текста в расширении используйте метод УстановитьПривилегированныйРежим(Истина), если вы уверены, что передача этой информации в почту не нарушает политику безопасности вашей организации. Однако помните о «коммерческой тайне», упомянутой в обсуждении: если содержание документа содержит конфиденциальные данные, передача их по открытым каналам электронной почты может быть рискованной.
Для решения задачи в 1С:ДО 3.0 мы рекомендуем сначала проверить возможности автоподстановок в шаблонах уведомлений. Если этого недостаточно, наиболее стабильным решением будет использование расширения для модификации структуры ДанныеУведомления. Не забывайте использовать инструменты отладки фоновых заданий для сокращения времени на поиск ошибок в коде формирования HTML.