Разработка и Конфигурация · 11 мин
Как в 1С запустить обработку программно
Как программно запустить обработку в 1С: методы ПолучитьФорму, Создать, подключение внешних обработок, безопасный режим. Примеры кода и типичные ошибки.
Запуск обработки из кода — стандартная задача при автоматизации 1С: обработку нужно вызвать из регламентного задания, из другой обработки, по кнопке в форме или при старте системы. Способ зависит от того, встроенная это обработка (входит в состав конфигурации) или внешняя (файл .epf на диске), а также от того, нужно ли получить результат выполнения или только открыть форму пользователю.
В управляемом приложении для встроенных обработок используется объект Обработки.ИмяОбработки, для внешних — менеджер ВнешниеОбработки с методами Создать() и ПолучитьФорму(). В обычном приложении логика аналогична, но обращение к формам происходит напрямую. Ниже разобраны оба сценария с рабочими примерами кода.
Чем отличается запуск встроенной и внешней обработки
Встроенная обработка хранится внутри конфигурации, обновляется вместе с ней и доступна через менеджер Обработки. К ней применимы права доступа, настроенные в ролях, и она не требует указания пути к файлу. Это предпочтительный вариант для кода, который работает постоянно.
Внешняя обработка — это файл с расширением .epf, лежащий в файловой системе или подключенный через механизм дополнительных отчетов и обработок. Для её запуска платформе нужен путь к файлу, а у пользователя — права на интерактивное открытие внешних обработок или на выполнение в безопасном режиме. В клиент-серверном варианте путь должен быть доступен с того компьютера, где выполняется код: серверный вызов ищет файл на сервере, а не на машине пользователя.
Запуск встроенной обработки программно
Выполнение кода обработки без формы
Если нужно выполнить логику обработки без показа интерфейса, создают объект обработки и вызывают его экспортные процедуры или обращаются к реквизитам:
ОбработкаОбъект = Обработки.ЗагрузкаДанныхИзФайла.Создать();
ОбработкаОбъект.ИмяФайла = "C:\Data\import.xml";
ОбработкаОбъект.ВыполнитьЗагрузку();
Метод Создать() доступен и на клиенте, и на сервере, но при вызове с клиента в управляемом приложении объект создаётся на сервере, а дальнейшие обращения идут через серверные вызовы. Для массовых операций код лучше выполнять целиком на сервере — в серверной процедуре общего модуля.
Открытие формы обработки пользователю
Когда результат должен увидеть пользователь, открывают форму обработки:
ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма");
Метод ОткрытьФорму() — самый простой способ в управляемом приложении. Если нужно передать параметры, их передают вторым аргументом структурой:
ПараметрыФормы = Новый Структура("Организация, Период", Организация, ТекущаяДатаСеанса());
ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма", ПараметрыФормы);
Программный запуск внешней обработки (.epf)
Выполнение на сервере
Для выполнения кода внешней обработки без формы используют менеджер ВнешниеОбработки:
ВнешняяОбработка = ВнешниеОбработки.Создать("C:\Обработки\МояОбработка.epf", Ложь);
ВнешняяОбработка.ВыполнитьОсновноеДействие();
Второй параметр метода Создать() отвечает за безопасный режим: Истина — выполнение в безопасном режиме, Ложь — с полными правами. В файловой базе путь указывается относительно компьютера, где запущен клиент; в клиент-серверном — относительно сервера 1С.
Открытие формы внешней обработки
Чтобы показать пользователю форму внешней обработки, применяют ПолучитьФорму():
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму("C:\Обработки\МояОбработка.epf");
Если ФормаОбработки <> Неопределено Тогда
ФормаОбработки.Открыть();
КонецЕсли;
Если у внешней обработки несколько форм, имя нужной указывают вторым параметром. Метод возвращает Неопределено, если форма не найдена, поэтому проверка результата обязательна — иначе получите ошибку при вызове Открыть().
// Универсальный запуск внешней обработки с проверкой файла
ПутьКОбработке = "C:\Обработки\МояОбработка.epf";
Файл = Новый Файл(ПутьКОбработке);
Если Не Файл.Существует() Тогда
ВызватьИсключение "Файл обработки не найден: " + ПутьКОбработке;
КонецЕсли;
Обработка = ВнешниеОбработки.Создать(ПутьКОбработке, Ложь);
Обработка.Выполнить();Запуск через дополнительные отчеты и обработки (БСП)
В конфигурациях на Библиотеке стандартных подсистем (УТ, ERP, БП и других типовых) внешние обработки подключают через справочник «Дополнительные отчеты и обработки». Это безопасный и управляемый способ: обработка хранится в базе, назначаются права, разделы командного интерфейса и расписание.
Программно такую обработку запускают через модуль ДополнительныеОтчетыИОбработки:
ПараметрыВыполнения = ДополнительныеОтчетыИОбработкиКлиентСервер.СтруктураПараметровВыполненияКоманды();
ДополнительныеОтчетыИОбработки.ВыполнитьКоманду(ПараметрыВыполнения);
Либо получают объект обработки по ссылке на элемент справочника и вызывают его команды. Точный состав API зависит от версии БСП, поэтому перед использованием сверьтесь с кодом общего модуля ДополнительныеОтчетыИОбработки в вашей конфигурации.
Запуск обработки из регламентного задания или по расписанию
Регламентные задания выполняются на сервере в фоновом сеансе, где нет пользовательского интерфейса. Поэтому из фонового задания можно только создать объект обработки и выполнить её код — открыть форму невозможно. Вызов ПолучитьФорму() или ОткрытьФорму() на сервере приведёт к ошибке.
Типовая схема: в модуле регламентного задания создают объект обработки через Обработки.Имя.Создать() или ВнешниеОбработки.Создать(), оборачивают вызов в попытку/исключение и пишут результат в журнал регистрации. Это позволяет отследить сбои, которые в фоновом сеансе иначе остаются незамеченными.
- 1Создайте в конфигурации регламентное задание с методом в общем серверном модуле
- 2В коде метода создайте объект обработки через Обработки.Имя.Создать() или ВнешниеОбработки.Создать()
- 3Оберните выполнение в Попытка/Исключение и запишите ошибки в журнал регистрации
- 4Задайте расписание и проверьте выполнение через консоль заданий или журнал регистрации
Безопасный режим, права и типичные ограничения
Для интерактивного открытия внешних обработок пользователю нужно право «Интерактивное открытие внешних отчетов и обработок». Для программного создания объекта внешней обработки платформа также проверяет права, если включён безопасный режим или настроены профили групп доступа. В файловых базах без разделения прав ограничений обычно меньше, но в клиент-серверных и в сервисе 1С:Фреш прямой запуск .epf с диска недоступен вовсе.
В безопасном режиме обработке запрещены операции с файловой системой, COM-объектами и внешними компонентами. Если обработка работает с файлами, её нужно либо запускать вне безопасного режима (параметр Ложь в Создать()), либо переработать логику под ограничения безопасного режима.
Типичные ошибки и как их исправить
Чаще всего программный запуск обработки ломается на путях, правах и контексте выполнения. Ниже — ошибки, которые встречаются регулярно.
Как проверить результат
Переменная содержит объект, экспортные методы вызываются без ошибки
Ошибка «Ошибка при вызове метода контекста» или Неопределено вместо объекта
ПолучитьФорму вернула форму, метод Открыть() показал окно пользователю
Форма = Неопределено или окно не появляется
В журнале регистрации есть запись об успешном выполнении, данные обработаны
В журнале регистрации ошибка фонового задания или записи отсутствуют
FAQ
Как передать параметры в программно открываемую обработку?
Для формы — через структуру параметров во втором аргументе ОткрытьФорму() или через реквизиты формы. Для объекта обработки — заполните её реквизиты после вызова Создать() и до вызова рабочего метода. Если обработка внешняя, убедитесь, что нужные реквизиты объявлены в ней экспортными.
Можно ли запустить внешнюю обработку в 1С:Фреш или в веб-клиенте?
Прямой запуск .epf-файла с диска в сервисе 1С:Фреш недоступен по соображениям безопасности. Используйте подключение через «Дополнительные отчеты и обработки» — обработка должна быть подготовлена по требованиям безопасного режима. В веб-клиенте ограничения аналогичны: файловая система пользователя недоступна серверу.
Почему ВнешниеОбработки.Создать() выдаёт ошибку «Файл не найден», хотя файл есть?
В клиент-серверном варианте код, выполняемый на сервере, ищет файл на диске сервера, а не на компьютере пользователя. Либо перенесите файл на сервер и укажите серверный путь, либо сначала поместите файл во временное хранилище с клиента, затем выгрузите его на сервере во временный файл и запускайте оттуда.
Как запустить обработку в обычном приложении (толстый клиент)?
Синтаксис аналогичен: Обработки.Имя.ПолучитьФорму() для встроенных и ВнешниеОбработки.ПолучитьФорму(Путь) для внешних. Отличие в том, что в толстом клиенте код часто выполняется целиком на клиенте, поэтому локальные пути к файлам работают напрямую.
Как выполнить обработку из другой обработки?
В модуле вызывающей обработки создайте объект целевой — Обработки.Имя.Создать() или ВнешниеОбработки.Создать(Путь) — и вызовите её экспортные процедуры. Учитывайте контекст: если вызов происходит на клиенте, а логика требует сервера, вынесите её в серверную процедуру общего модуля.
Что делать, если обработку нужно запускать автоматически при старте системы?
Используйте обработчики ПриНачалеРаботыСистемы в модуле управляемого приложения (для интерактивных действий) или регламентное задание с расписанием (для фоновых). Учтите, что ПриНачалеРаботыСистемы выполняется у каждого пользователя при входе — для разовых серверных задач это не подходит.
Что важно запомнить
Встроенные обработки запускают через Обработки.Имя.Создать() и ОткрытьФорму(), внешние — через ВнешниеОбработки.Создать() и ПолучитьФорму(). В фоновых заданиях доступно только выполнение кода без формы. В клиент-серверной базе помните, что пути к файлам ищутся на сервере, а в типовых конфигурациях безопаснее подключать обработки через «Дополнительные отчеты и обработки».