Как запустить внешнюю обработку по расписанию и сохранить её настройки без изменения конфигурации 1С

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При автоматизации бизнес-процессов часто возникает задача регулярной выгрузки данных (например, отчетов в формат Excel) без постоянного вмешательства пользователя и без внесения изменений в типовую конфигурацию. В этой статье мы подробно разберем, как реализовать автозапуск внешней обработки по расписанию в типовых конфигурациях на платформе 1С:Предприятие 8.3 (таких как ЗУП 3.1, ERP, КА, УТ), как решить проблему хранения настроек (например, пути выгрузки) для фоновых заданий и какие подводные камни могут возникнуть при работе с файлами на сервере.

Шаг 1. Организация регламентного запуска через БСП

В типовых конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), предусмотрен стандартный механизм интеграции внешнего кода. Для этого используется справочник Дополнительные отчеты и обработки.

Важно понимать одно принципиальное отличие: в БСП автоматический запуск по расписанию поддерживается только для обработок. У внешних отчетов такой встроенной функции нет. Если перед нами стоит задача регулярно формировать отчет (например, на базе системы компоновки данных — СКД) и сохранять его, мы пишем внешнюю обработку, которая программно инициализирует схему компоновки, выполняет ее и записывает результат в нужный файл.

Для регистрации обработки в системе необходимо правильно описать ее свойства в модуле объекта в экспортной функции СведенияОВнешнейОбработке(). Рассмотрим пример заполнения этой структуры:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.3.1");
    
    ПараметрыРегистрации.Вид = ПолучитьВидДополнительнойОбработки();
    ПараметрыРегистрации.Наименование = "Автоматическая выгрузка данных в Excel";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь; // Для записи файлов на сервере
    
    // Добавление команд
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Выполнить выгрузку по расписанию";
    НоваяКоманда.Идентификатор = "ВыгрузитьДанные";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипЗапускаВызовСерверногоМетода();
    
    Возврат ПараметрыРегистрации;
КонецФункции

После добавления такой обработки в справочник Дополнительные отчеты и обработки в режиме "1С:Предприятие" у нее появится вкладка Расписание, где можно гибко настроить периодичность ее выполнения.

Шаг 2. Разгадка проблемы путей к файлам на клиенте и сервере

Частой ошибкой при переносе интерактивного кода в фоновое задание является попытка использовать привычные пути к файлам. Разберем типичную ситуацию: в коде формы было прописано сохранение по пути D:\Export\data.xlsx. При ручном запуске все работало, а в фоновом задании файл перестал создаваться.

Выясним причину этого поведения. Фоновое (регламентное) задание выполняется на сервере 1С:Предприятия в неинтерактивном режиме. Это влечет за собой важные последствия:

  1. Путь D:\Export\data.xlsx при выполнении на сервере указывает на локальный диск самого физического сервера, где установлена служба 1С, а не на диск вашего рабочего компьютера.
  2. Если путь указывает на сетевой диск (например, Z:\Folder), сервер 1С его не увидит, так как сетевые диски монтируются в сессии конкретного пользователя Windows, а служба сервера работает в своей изолированной сессии. Для работы с сетью необходимо использовать только UNC-пути вида \\имя_сервера\общая_папка\file.xlsx.

Шаг 3. Хранение параметров выгрузки между сеансами запуска

Пользователю часто требуется изменить путь выгрузки, имя файла или другие параметры. Использование стандартной галочки в свойствах реквизитов формы "Сохранять данные в настройках" здесь не сработает. Данная галочка сохраняет настройки в привязке к конкретному пользователю информационной базы для интерактивного сеанса. Фоновое же задание выполняется без открытой формы, на сервере, и "не знает" о сохраненных интерактивных настройках.

Для решения этой проблемы рассмотрим два надежных способа хранения параметров.

Вариант А. Использование штатного ХранилищаНастроек БСП (Рекомендуемый)

Справочник ДополнительныеОтчетыИОбработки содержит специальный реквизит ХранилищеНастроек с типом ХранилищеЗначения. Мы можем использовать его для записи структуры наших параметров.

Разберем по шагам, как это реализовать. Сначала создадим интерактивную форму для нашей обработки, где пользователь сможет выбрать путь выгрузки и нажать кнопку "Сохранить параметры". В модуле формы пропишем процедуру записи настроек в элемент справочника дополнительных обработок:


&НаСервере
Процедура СохранитьНастройкиНаСервере()
    // Параметр ДополнительнаяОбработкаСсылка передается БСП при открытии формы обработки
    Если Не Параметры.Свойство("ДополнительнаяОбработкаСсылка") Тогда
        Возврат;
    КонецЕсли;
    
    СсылкаНаОбработку = Параметры.ДополнительнаяОбработкаСсылка;
    
    // Формируем структуру с настройками, которые нужно хранить
    НастройкиОбработки = Новый Структура;
    НастройкиОбработки.Вставить("ПутьКФайлу", Объект.ПутьКФайлу);
    НастройкиОбработки.Вставить("ФорматВыгрузки", Объект.ФорматВыгрузки);
    
    // Записываем настройки непосредственно в объект справочника БСП
    ОбъектСправочника = СсылкаНаОбработку.ПолучитьОбъект();
    ОбъектСправочника.ХранилищеНастроек = Новый ХранилищеЗначения(НастройкиОбработки);
    Попытка
        ОбъектСправочника.Записать();
        СообщитьПользователю("Настройки успешно сохранены для фонового выполнения.");
    Исключение
        ВызватьИсключение "Не удалось сохранить настройки: " + ОписаниеОшибки();
    КонецПопытки;
КонецПроцедуры

Теперь проанализируем, как прочитать эти настройки непосредственно при выполнении регламентного задания в модуле объекта внешней обработки:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    // БСП автоматически передает ссылку на текущую обработку в параметрах выполнения
    Если Не ПараметрыВыполненияКоманды.Свойство("ДополнительнаяОбработкаСсылка") Тогда
        Возврат;
    КонецЕсли;
    
    СсылкаНаОбработку = ПараметрыВыполненияКоманды.ДополнительнаяОбработкаСсылка;
    
    // Получаем реквизит ХранилищеНастроек из базы данных
    Хранилище = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбработку, "ХранилищеНастроек");
    Настройки = Хранилище.Получить();
    
    ПутьКФайлу = "";
    Если ТипЗнч(Настройки) = Тип("Структура") Тогда
        Настройки.Свойство("ПутьКФайлу", ПутьКФайлу);
    КонецЕсли;
    
    Если ПустаяСтрока(ПутьКФайлу) Тогда
        ЗаписатьВЖурналРегистрации("ВыгрузкаДанных", УровеньЖурналаРегистрации.Ошибка, , , "Не задан путь к файлу в настройках обработки!");
        Возврат;
    КонецЕсли;
    
    // Логика формирования отчета и записи файла на сервере
    ВыполнитьЭкспортДанных(ПутьКФайлу);
КонецПроцедуры

Вариант Б. Использование ХранилищаОбщихНастроек

Если вы не хотите программно изменять и записывать элементы справочника БСП, можно воспользоваться платформенным механизмом ХранилищеОбщихНастроек. При сохранении настроек крайне важно не привязывать их к конкретному пользователю ИБ, чтобы регламентное задание (которое запускается под системным или выделенным пользователем) имело к ним беспрепятственный доступ.

Для сохранения настроек из формы используем следующий код:


&НаСервере
Процедура СохранитьНастройкиВОбщееХранилище(ВыбранныйПуть)
    // Третий параметр ИмяПользователя оставляем пустым (""), чтобы настройки были общими для всех
    ХранилищеОбщихНастроек.Сохранить("АвтовыгрузкаДанныхExcel", "ПутьКФайлу", ВыбранныйПуть, , "");
КонецПроцедуры

Для получения этих настроек в фоновом задании в модуле объекта пишем:


// Чтение настроек без привязки к имени пользователя
ПутьКФайлу = ХранилищеОбщихНастроек.Загрузить("АвтовыгрузкаДанныхExcel", "ПутьКФайлу", , "");

Шаг 4. Настройка безопасности и прав доступа

Даже при абсолютно корректном коде выгрузка может завершаться ошибкой, если на уровне платформы или операционной системы не настроены соответствующие разрешения. Выделим основные параметры, которые необходимо проверить:

Применяя данные подходы, мы получаем надежное и полностью автономное решение для выгрузки аналитических данных из систем 1С, которое легко администрируется пользователями напрямую в пользовательском режиме предприятия.

← На главную