При разработке расширений функционала в системе 1С:Предприятие 8.3 часто возникает задача автоматизации процессов. Например, нужно, чтобы внешняя обработка выполняла обмен данными, рассылку писем или очистку временных таблиц в фоновом режиме по заданному расписанию. Основная сложность для начинающих разработчиков заключается в том, что стандартное открытие обработки через Форму блокирует возможность её использования в регламентных заданиях через подсистему БСП (Библиотека стандартных подсистем).
В этой статье мы подробно разберем, как правильно спроектировать внешнюю обработку, чтобы она запускалась программно, не требовала взаимодействия с пользователем и корректно работала в справочнике Дополнительные отчеты и обработки.
Для начала проанализируем ситуацию: почему обычная обработка с формой не подходит для расписания? Когда мы добавляем обработку в справочник дополнительных обработок, система ожидает, что мы укажем ей способ выполнения. Если в коде прописано только открытие формы, то регламентное задание просто не сможет «нажать» кнопку на этой форме. Следовательно, нам нужно перенести логику из МодуляФормы в МодульОбъекта и правильно описать регистрационные данные.
Ключевым инструментом здесь является экспортная функция СведенияОВнешнейОбработке, которую система вызывает при регистрации файла в справочнике.
Рассмотрим, как должна выглядеть структура функции регистрации в модуле объекта. Мы должны сообщить системе, что наша команда имеет тип Вызов серверного метода. Это принципиальный момент, который позволяет коду выполняться на сервере без создания интерфейсного окна.
Разберем пример кода для регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Моя фоновая обработка";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь; // Если нужны права на запись файлов или сеть
// Создаем таблицу команд
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Выполнить регламентную операцию";
НоваяКоманда.Идентификатор = "ГлавнаяКоманда";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
В данном примере мы используем ТипКомандыВызовСерверногоМетода(). Именно эта настройка указывает 1С, что при запуске команды нужно сразу обращаться к серверной процедуре в модуле объекта, не открывая никаких окон.
После того как мы зарегистрировали команду с идентификатором "ГлавнаяКоманда", нам необходимо создать «приемник» для этого вызова. БСП ищет в модуле объекта строго определенную процедуру — ВыполнитьКоманду. Обратите внимание, что она обязательно должна быть с ключевым словом Экспорт.
Проанализируем структуру этой процедуры:
Процедура ВыполнитьКоманду(ИдентификаторКоманда, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманда = "ГлавнаяКоманда" Тогда
ВыполнитьОсновнуюЛогику();
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьОсновнуюЛогику()
// Здесь размещается ваш полезный код
// Например, запись в журнал регистрации или работа с данными
ЗаписьЖурналаРегистрации("ВнешняяОбработка.Выполнение",
УровеньЖурналаРегистрации.Информация,
,
,
"Обработка успешно запущена в фоновом режиме.");
КонецПроцедуры
Важно помнить, что при выполнении кода в фоновом задании (по расписанию) интерактивные функции, такие как Сообщить() или Вопрос(), работать не будут так, как вы привыкли. Сообщения, выведенные через Сообщить(), попадут в лог фонового задания, но пользователь их не увидит. Поэтому для отладки и мониторинга лучше использовать ЗаписьЖурналаРегистрации.
Часто возникает вопрос: как хранить настройки обработки (например, логин и пароль от FTP), если мы не хотим менять конфигурацию? БСП предоставляет механизм хранения настроек прямо в справочнике Дополнительные отчеты и обработки.
Выясним, как это работает по шагам:
СведенияОВнешнейОбработке добавьте вторую команду с типом ОткрытиеФормы.Параметры (тип ХранилищеЗначения) того элемента справочника, к которому привязана ваша обработка.Пример получения настроек внутри модуля объекта:
// Внутри процедуры ВыполнитьКоманду
СсылкаНаОбработку = ПараметрыВыполненияКоманды.ДополнительнаяОбработкаСсылка;
Настройки = СсылкаНаОбработку.Параметры.Получить();
Если ТипЗнч(Настройки) = Тип("Структура") Тогда
АдресСервера = Настройки.FTPАдрес;
// Используем полученные данные
КонецЕсли;
Разберем типичную проблему: когда вы открываете файл через меню Файл -> Открыть, выполняется код формы, а не регистрационные механизмы БСП. Чтобы проверить работу серверного метода, не загружая каждый раз обработку в справочник, рекомендуется добавить на основную форму кнопку «Тест», которая будет вызывать процедуру ВыполнитьКоманду модуля объекта вручную.
Также посмотрим на ситуацию с безопасным режимом. Если ваша обработка должна обращаться к внешним ресурсам (интернет-сайты, COM-объекты, файловая система сервера), в функции регистрации необходимо либо установить БезопасныйРежим = Ложь, либо программно запросить нужные разрешения в таблице Разрешения параметров регистрации.
Подводя итог, для создания «невидимой» обработки, работающей по расписанию, необходимо соблюсти три условия:
СведенияОВнешнейОбработке с командой типа ВызовСерверногоМетода.ВыполнитьКоманду, которая и будет точкой входа.Используя этот подход, вы сможете эффективно интегрировать любые внешние инструменты в экосистему 1С, обеспечивая их автономную работу без участия пользователей.