Автоматизация рутинных задач — одна из важнейших компетенций разработчика 1С. Часто возникает потребность формировать отчеты без участия пользователя: например, для ежедневной выгрузки остатков на сайт, отправки прайс-листов контрагентам или загрузки аналитики на внешний сервер. В данной статье мы подробно рассмотрим несколько способов реализации этой задачи в среде 1С:Предприятие 8.3 на примере конфигурации УТ 11.3.
Разберем ситуацию, когда нам необходимо запустить платформу через командную строку (бат-файл), выполнить отчет и закрыть программу. Этот метод удобен, если у вас нет доступа к конфигуратору или вы хотите управлять запуском через планировщик задач Windows.
Для реализации этого метода нам потребуется создать внешнюю обработку (файл .epf), которая при открытии будет программно формировать отчет. Рассмотрим алгоритм действий по шагам.
Во-первых, создадим процедуру формирования отчета на основе Системы компоновки данных (СКД). Нам нужно получить схему компоновки, применить настройки и вывести результат в табличный документ. Проанализируем пример кода:
// В модуле внешней обработки
Процедура ПриОткрытии()
СформироватьИСохранитьОтчет();
ЗавершитьРаботуСистемы(Ложь); // Закрываем 1С после выполнения
КонецПроцедуры
Процедура СформироватьИСохранитьОтчет()
// Получаем внешний отчет
ОтчетОбъект = ВнешниеОтчеты.Создать("D:\Reports\МойОтчет.erf");
СхемаСКД = ОтчетОбъект.СхемаКомпоновкиДанных;
Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
// Подготовка вывода
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Сохранение в Excel
ПутьКФайлу = "D:\Export\Report.xls";
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
КонецПроцедуры
Во-вторых, подготовим файл запуска (batch-файл). Выясним причину использования конкретных ключей запуска: ключ /Execute указывает путь к обработке, а /N и /P — логин и пароль робота. Пример текста батника:
chcp 1251
"C:\Program Files (x86)\1cv8\8.3.10.2580\bin\1cv8.exe" ENTERPRISE /DisableStartupMessages /F"D:\Bases\UT11" /N"Robot" /P"Password" /Execute "D:\NewWork\AutoExport.epf"
Если база данных работает в клиент-серверном варианте, использование бат-файлов считается «костыльным» методом. Правильнее использовать механизм РегламентныеЗадания. В современных конфигурациях, таких как УТ 11, встроен функционал Библиотеки стандартных подсистем (БСП), который позволяет добавлять внешние задания без изменения конфигурации.
Рассмотрим подробнее, как это реализовать:
СведенияОВнешнейОбработке().ВызовСерверногоМетода.Преимущество этого метода в том, что код будет выполняться на стороне сервера. Проанализируем ситуацию с программным кодом внутри такой обработки. Нам нужно учитывать, что сервер 1С не имеет доступа к локальным дискам вашего компьютера. Поэтому сохранение файла должно производиться либо в сетевую папку, либо во временное хранилище.
После того как файл Excel успешно сохранен, его необходимо отправить на внешний сервер. Разберем, как реализовать объект ФТПСоединение. Это встроенный механизм 1С, который позволяет работать с удаленными хранилищами.
Посмотрим на пример кода для отправки файла:
Процедура ОтправитьНаFTP(ЛокальныйПуть)
Сервер = "ftp.mysite.ru";
Порт = 21;
Логин = "admin";
Пароль = "pass123";
Попытка
// Важно использовать пассивный режим для обхода брандмауэров
Соединение = Новый ФТПСоединение(Сервер, Порт, Логин, Пароль, , Истина);
Соединение.Записать(ЛокальныйПуть, "reports/daily_report.xls");
Исключение
ЗаписьЖурналаРегистрации("Ошибка FTP", УровеньЖурналаРегистрации.Ошибка, , , КраткоеОписаниеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Прежде чем приступать к написанию кода, выясним, нельзя ли решить задачу стандартными средствами. В 1С:Управление торговлей 11 реализован мощный механизм «Рассылки отчетов». Он находится в разделе "НСИ и администрирование" — "Печатные формы, отчеты и обработки".
Этот механизм позволяет:
КомпоновщикНастроек.Если ваша задача не требует специфической логики обработки данных перед выгрузкой, использование Рассылки отчетов — самый надежный и быстрый способ, не требующий поддержки программного кода.
При автоматизации отчетов следует помнить о нескольких критических моментах, которые часто упускают начинающие разработчики:
1. Контекст выполнения. Если вы используете регламентное задание, помните, что оно выполняется на сервере. Объекты типа Предупреждение() или Вопрос() вызовут ошибку выполнения, так как на сервере нет пользовательского интерфейса.
2. Параметры СКД. При программном формировании отчета необходимо явно заполнять параметры данных (например, период). Если этого не сделать, отчет может выгрузиться пустым или за весь период существования базы. Используйте КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", Новый СтандартныйПериод(...)).
3. Обработка ошибок. Всегда оборачивайте блоки работы с внешними ресурсами (файловая система, FTP, почта) в конструкцию Попытка...Исключение. Обязательно записывайте ошибки в ЖурналРегистрации, чтобы иметь возможность диагностировать проблемы без визуального контроля процесса.
Таким образом, мы рассмотрели различные подходы к автоматизации: от простых бат-файлов до профессионального использования регламентных заданий и типовых подсистем БСП. Выбор метода зависит от ваших навыков программирования и архитектуры информационной базы.