При работе в 1С:Управление нашей фирмой (УНФ) пользователи часто сталкиваются с необходимостью кастомизации почтовых рассылок и уведомлений. Стандартный набор параметров в шаблонах писем (таких как «Номер», «Дата», «Сумма документа») ограничен, и когда требуется вывести специфический реквизит, например, дополнительное свойство заказа или данные о складе, типовой интерфейс не предлагает очевидных кнопок для добавления. Рассмотрим подробно, как решить эту задачу с помощью технических инструментов платформы.
Для начала разберем, откуда программа берет список полей, которые мы видим при создании шаблона в меню CRM — Шаблоны писем, SMS. В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), список доступных подстановок не строится динамически по всем метаданным объекта. Вместо этого используется специальный механизм на основе Схемы компоновки данных (СКД).
Проанализируем структуру объекта, на примере документа ЗаказПокупателя. Внутри этого объекта в конфигураторе существует предопределенный макет, который отвечает за поставку данных в почтовые шаблоны. Если мы просто добавим новый реквизит в документ, он не появится в списке параметров автоматически. Нам необходимо явно «сообщить» системе, что это поле должно быть доступно для выбора.
Рассмотрим основной технический способ решения проблемы, который заключается в редактировании макета данных. Выполним следующие шаги:
ЗаказПокупателя).СКД_ДанныеШаблонаСообщений. Это стандартное имя для большинства документов в современных версиях УНФ.Контрагент, а вы хотите, чтобы в шаблоне он назывался Покупатель, установите соответствующий заголовок в колонке «Поле» или «Путь».После выполнения этих действий при создании или редактировании шаблона письма по данному документу в списке параметров появится ваш новый пункт.
Проанализируем ситуацию с точки зрения поддержки программного продукта. Изменение макетов напрямую в основной конфигурации крайне нежелательно, так как это затруднит последующие обновления программы. Правильным подходом будет использование Расширений конфигурации.
Разберем алгоритм действий при использовании расширения:
ЗаказПокупателя).СКД_ДанныеШаблонаСообщений в расширение.Такой метод гарантирует, что при обновлении типовой конфигурации ваши настройки параметров шаблонов сохранятся и не будут затерты.
Поскольку макет формирования данных — это полноценная СКД, мы можем использовать ее мощные инструменты для подготовки текста. Рассмотрим пример, когда нам нужно вывести не просто дату, а дату в специфическом формате, или объединить несколько строк в одну.
Выясним, как добавить сложное поле. На закладке Вычисляемые поля в СКД мы можем прописать выражение на языке 1С. Например, для формирования вежливого обращения можно использовать конструкцию:
ВЫБОР
КОГДА Контрагент.Пол = ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Женский)
ТОГДА "Уважаемая, " + Контрагент.Имя
ИНАЧЕ "Уважаемый, " + Контрагент.Имя
КОНЕЦ
Также мы можем управлять форматом чисел. Чтобы сумма в письме не содержала неразрывных пробелов или имела строго два знака после запятой, в настройках поля набора данных (колонка Оформление) зададим параметр Формат. Например: ЧДЦ=2; ЧГ=0.
Рассмотрим альтернативный способ, который не требует программирования и изменения конфигурации. В 1С:УНФ реализован механизм Дополнительных реквизитов и сведений. Если вы добавляете реквизит через пользовательский интерфейс (Настройки — Общие настройки), система зачастую умеет подтягивать их в шаблоны автоматически.
Однако, если «Доп. реквизит» не отображается в списке параметров шаблона, проверьте следующие настройки:
Одной из самых сложных задач является вывод списка товаров из Заказа покупателя прямо в текст письма. Стандартные параметры обычно работают только с «шапкой» документа. Чтобы вывести таблицу товаров, проанализируем возможности СКД в макете шаблона.
В современных версиях БСП для этого используются вложенные наборы данных или объединение строк в одну переменную через функцию СоединитьСтроки() в вычисляемых полях СКД. Если же конфигурация позволяет использовать итераторы в тексте самого шаблона, то в СКД достаточно добавить выборку из табличной части Запасы. В тексте письма это может выглядеть примерно так (в зависимости от версии БСП):
[СтрокаТовара.Номенклатура] — [СтрокаТовара.Количество] [СтрокаТовара.ЕдиницаИзмерения]
Если возможностей СКД недостаточно (например, данные нужно получить из внешнего API или произвести сложнейший расчет в момент отправки), следует использовать переопределяемые модули. В 1С:УНФ за это отвечает модуль УправлениеШаблонамиСообщенийПереопределяемый. При исследовании и программной доработке подсистем пригодится справочник по методам БСП.
Найдем процедуру ПриФормированииСпискаПараметров. В ней можно программно дозаполнить структуру параметров, которая будет передана в форму редактора шаблонов. Рассмотрим пример добавления параметра «ТекущаяПогода», который не хранится в базе:
Процедура ПриФормированииСпискаПараметров(ИмяШаблона, СписокПараметров) Экспорт
Если ИмяШаблона = "ЗаказПокупателя" Тогда
НоваяСтрока = СписокПараметров.Добавить();
НоваяСтрока.Имя = "ТекущаяПогодаНаСкладе";
НоваяСтрока.Заголовок = "Погода на складе (внешние данные)";
КонецЕсли;
КонецПроцедуры
Таким образом, мы проанализировали все уровни настройки параметров шаблонов: от простого пользовательского добавления реквизитов до глубокой модификации макетов СКД и программного кода. Использование макета СКД_ДанныеШаблонаСообщений является наиболее универсальным и рекомендуемым способом для разработчика 1С.