Автоматизация формирования отчетов — одна из наиболее востребованных задач в среде 1С. Это позволяет экономить время пользователей и руководства, обеспечивая получение актуальных данных точно в срок. В зависимости от версии вашей конфигурации (современная на управляемых формах или старая на обычных формах, как УТ 10.3), подходы к решению будут различаться. Разберем подробно все доступные варианты.
Если вы работаете в современной конфигурации, созданной на базе Библиотеки стандартных подсистем (БСП) (например, УТ 11, ERP 2, КА 2, БП 3.0), вам не потребуется писать программный код. В системе уже заложен мощный механизм рассылок.
Для настройки выполним следующие шаги:
Excel, PDF, HTML, MXL. При необходимости можно установить флаг архивации в ZIP (с возможностью установки пароля).Важная особенность: в настройках рассылки можно использовать персонализацию. Это означает, что если мы укажем в качестве получателей список руководителей подразделений, каждый из них получит отчет, отфильтрованный только по его подразделению. Это настраивается через механизм «Настройки получателей» в самой рассылке.
Если типовых возможностей рассылки недостаточно или нужно выполнить специфическую логику обработки данных перед отправкой, мы можем создать собственное РегламентноеЗадание. Рассмотрим программную реализацию формирования отчета на базе Системы компоновки данных (СКД).
Проанализируем пример кода, который должен располагаться в серверном модуле:
Процедура СформироватьИОтправитьОтчетПоРасписанию() Экспорт
// Получаем отчет из метаданных
ОтчетОбъект = Отчеты.Продажи.Создать();
СхемаКомпоновкиДанных = ОтчетОбъект.СхемаКомпоновкиДанных;
// Загружаем настройки (вариант отчета)
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
// Инициализируем макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
// Выполняем компоновку данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
// Выводим результат в табличный документ
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Сохраняем во временный файл и отправляем (логика отправки почты)
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
// Здесь должен быть вызов процедуры отправки почты...
КонецПроцедуры
Технический нюанс: код регламентного задания всегда выполняется на сервере. Это означает, что внутри нельзя использовать интерактивные методы: Предупреждение(), Вопрос() или Сообщить(). Если в коде встретится обращение к клиентскому контексту, задание завершится с ошибкой. Для отладки таких заданий рекомендуется использовать внешнюю обработку «Консоль регламентных заданий».
В старых конфигурациях на обычных формах подсистема рассылок часто отсутствует, а механизмы расширений в старых версиях платформы работают некорректно. В этом случае мы воспользуемся запуском 1С через Планировщик задач Windows с использованием специальных ключей командной строки.
Разберем алгоритм настройки:
.epf), которая в процедуре ПриОткрытии() выполняет формирование отчета, его сохранение и отправку.ЗавершитьРаботуСистемы(Ложь);, чтобы сеанс закрылся после выполнения задачи.1cv8.exe).ENTERPRISE /F "ПутьКБазе" /N "ИмяРобота" /P "Пароль" /Execute "C:\Scripts\НашОтчет.epf"
Параметр /C: Если нам нужно передать в обработку дополнительные данные (например, какой именно отдел обрабатывать), мы можем использовать ключ /C "ЗначениеПараметра". Внутри 1С это значение можно получить с помощью функции ПараметрЗапуска.
Выясним важный момент относительно лицензий. Каждый запуск 1С через планировщик Windows создает новый пользовательский сеанс. Если база файловая, это потребует одну свободную клиентскую лицензию. В клиент-серверном варианте регламентные задания, настроенные внутри метаданных, работают под лицензией сервера и не расходуют обычные пользовательские лицензии, что делает этот способ более предпочтительным для крупных организаций.
Рассмотрим более современную альтернативу электронной почте — отправку отчетов в Telegram или Slack. Для этого в коде регламентного задания вместо почтового клиента используется HTTP-запрос к API мессенджера. Это позволяет руководителю получать ключевые показатели (например, «Продажи за вчера») в виде PDF-файла или картинки прямо в телефон. Это значительно повышает оперативность контроля и вовлеченность сотрудников.
Подводя итог, выбор метода зависит от вашей инфраструктуры:
/Execute.