Рассмотрим распространенную ситуацию: возникает необходимость настроить автоматическую рассылку отчетов пользователям по расписанию в файловой базе (например, 1С:Управление торговлей 10.3). Часто для этого создают специальных «технических» пользователей (например, «Отчеты» или «ВзаиморасчетыВоскресенье») и прописывают логику запуска непосредственно в модуле обычного приложения, в процедуре ПриНачалеРаботыСистемы.
Проанализируем пример кода, который часто используют для таких задач:
Если ПолноеИмяПользователя() = "Отчеты" Тогда
ВнешнийОтчет = ВнешниеОтчеты.Создать("\\Serv\Base\Обмен\ОтчетЗаказыСервиса.erf");
ВнешнийОтчет.ОтчетВФайл();
ЗавершитьРаботуСистемы(Ложь);
ИначеЕсли ПолноеИмяПользователя() = "ВзаиморасчетыВоскресенье" Тогда
ВнешнийОтчет = ВнешниеОтчеты.Создать("\\Serv\Base\Обмен\ВзаиморасчетыСПокупателямиПочта.epf");
ВнешнийОтчет.ОтчетВФайл();
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
В первой части условия для файла .erf код отрабатывает корректно. Однако при копировании логики для другой задачи и использовании файла с расширением .epf (внешняя обработка) система при попытке вызова экспортной процедуры ОтчетВФайл() выдает ошибку: «Метод объекта не обнаружен (ОтчетВФайл)». При этом из формы самой обработки по кнопке этот же метод выполняется без проблем.
Разберем по шагам, почему платформа не видит экспортную процедуру модуля. Ошибка кроется в несоответствии типа файла и менеджера, который используется для его инициализации.
В 1С внешние отчеты (файлы .erf) и внешние обработки (файлы .epf) имеют разную внутреннюю структуру и являются концептуально разными типами объектов. В приведенном коде для файла .epf ошибочно используется метод ВнешниеОтчеты.Создать().
Когда мы пытаемся инициализировать файл обработки через менеджер отчетов, платформа 1С создает в оперативной памяти объект отчета, но не может корректно связать его с программным кодом из модуля обработки. В результате сам объект создается, но все экспортные процедуры и функции его модуля становятся «невидимыми» для системы. Для решения этой проблемы достаточно либо переделать файл в полноценный внешний отчет (изменить тип файла на .erf), либо использовать правильный менеджер в коде: ВнешниеОбработки.Создать().
Посмотрим на более правильные подходы. Постоянно дорабатывать процедуру ПриНачалеРаботыСистемы и плодить фиктивных пользователей для каждого нового регламентного отчета — не самая лучшая практика, так как это усложняет поддержку при обновлениях конфигурации. Рассмотрим, как можно решить задачу средствами командной строки платформы.
1cv8.exe в режиме «Предприятия» с параметром /Execute <Полный путь к файлу .epf>. При таком сценарии 1С автоматически откроет указанную внешнюю обработку сразу после старта сеанса. Всю логику формирования отчета и отправки писем необходимо поместить в обработчик ПриОткрытии() модуля формы этой внешней обработки. Там же последней строкой следует прописать ЗавершитьРаботуСистемы(Ложь), чтобы сеанс самостоятельно закрылся после выполнения задачи./C РассылкаЗаказов. Внутри 1С, в процедуре ПриНачалеРаботыСистемы, этот текст можно перехватить через системную переменную ПараметрЗапуска. Проверка параметра запуска является более надежным и гибким подходом для ветвления логики старта, чем привязка к именам пользователей.Поскольку речь идет о файловой версии (на примере УТ 10.3), важно помнить об ее архитектурных ограничениях при работе с фоновыми и регламентными заданиями. В клиент-серверном варианте рассылку берет на себя кластер серверов, выполняя задачи в фоне.
В файловой же базе регламентные задания сами по себе не стартуют. Для их работы требуется постоянно держать открытым отдельный сеанс 1С, в котором будет циклично вызываться платформенный метод ВыполнитьОбработкуЗаданий(). Именно поэтому для файловых баз наиболее надежным считается использование связки «Планировщик задач Windows + bat-файл». Планировщик инициирует запуск базы строго по расписанию, скрипт выполняет полезную работу и закрывает сеанс.
Дополнительная рекомендация: хранение запускаемых скриптов в виде файлов на сетевых дисках (как в первоначальном коде: \\Serv\Base\Обмен\...) часто приводит к сбоям из-за кратковременных проблем с сетью или доступом к папкам. Более отказоустойчивым методом является использование стандартного справочника «Внешние обработки» (или аналогичного). Если хранить исполняемые файлы внутри самой базы 1С в хранилище значений, при автозапуске программа сможет программно находить нужный элемент справочника, извлекать обработку во временный каталог ОС и выполнять её. Это делает информационную базу более автономной.