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