Внешняя обработка в 1С 8.3: способы подключения и запуска

· 10 мин

Содержание

Внешнюю обработку (файл .epf) в 1С 8.3 подключают одним из четырёх способов: открыть вручную через Файл → Открыть, зарегистрировать в списке дополнительных обработок на базе БСП, вызвать из встроенного языка объектом ВнешниеОбработки или запустить при старте платформы параметром командной строки /Execute. Выбор зависит от того, разовая это операция или регулярная, и работаете вы в файловой базе или в клиент-серверной.

Разовый запуск под конкретного пользователя — это Файл → Открыть. Регулярная обработка, которую запускают бухгалтеры, — список дополнительных обработок. Автоматизация без участия человека — код или командная строка. Ниже разберём каждый механизм с точными путями, примерами кода и правами, которые для этого нужны.

Способы открыть и подключить внешнюю обработку

Файл внешней обработки имеет расширение .epf, внешнего отчёта — .erf. Платформа работает с ними четырьмя путями:

  • 📂 Файл → Открыть — выбираете .epf на диске, обработка открывается как обычная форма. Подходит для разового запуска, требует права на интерактивное открытие.
  • 🧩 Дополнительные отчёты и обработки — обработку загружают в справочник конфигурации на базе БСП, после чего она доступна из нужных разделов без обращения к файлу.
  • ⌨️ Из встроенного языка — объект ВнешниеОбработки создаёт обработку в коде и вызывает её процедуры или форму.
  • 🖥️ Командная строка — параметр /Execute запускает обработку при старте 1cv8, обычно по расписанию или из скрипта.

Какой способ выбрать — зависит от задачи:

СпособКогда применятьЧто нужно
Файл → Открытьразовый запуск одним человекомправо на открытие внешних обработок
Доп. отчёты и обработкирегулярный запуск бухгалтерамимодуль с регистрацией, БСП в конфигурации
Из кодаподключение из другой обработки или заданияобъект ВнешниеОбработки, учёт безопасного режима
Командная строказапуск по расписанию без оператораслужебный пользователь, параметр /Execute

Самый частый сценарий для пользователя — список дополнительных обработок. В типовой «1С:Бухгалтерии 8» путь: Администрирование → Печатные формы, отчёты и обработки. Там включают флажок «Дополнительные отчёты и обработки» и по ссылке открывают список, куда загружают .epf. Для этого у обработки должен быть заполнен модуль со сведениями о регистрации (вид, команды, назначение) — без него список загрузить файл не даст.

У каждой дополнительной обработки есть вид, который определяет, где она появится:

  • 🖨️ Печатная форма — встраивается в кнопку печати документа или справочника.
  • ⚙️ Заполнение объекта — добавляет команду заполнения в форму документа.
  • 📊 Отчёт или Дополнительная обработка — доступна из раздела, к которому её привязали.
  • 🔗 Создание связанных объектов — формирует документы на основании текущего.

При загрузке файла указывают, в каких разделах и для каких объектов обработка доступна, и кому из пользователей её показывать. Так одна обработка аккуратно встраивается в интерфейс без правки конфигурации.

Если обработка нужна только вам и один раз — не загружайте её в справочник. Откройте через Файл → Открыть: так она не останется в базе и не повлияет на других.

Запуск внешней обработки через командную строку

Командная строка нужна, когда обработку запускают по расписанию (планировщик Windows, cron) или из внешнего скрипта — без открытия окна оператором.

Общий вид запуска клиента в режиме «Предприятие»:

"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /F"C:\base" /N"Администратор" /P"пароль" /Execute"C:\Обработки\Выгрузка.epf" /C"key=1;mode=auto"

Что означают параметры:

ПараметрНазначение
ENTERPRISEрежим запуска (пользовательский, не Конфигуратор)
/Fпуть к файловой базе; для серверной — /S"сервер\база"
/N /Pимя пользователя и пароль
/Executeпуть к .epf, которую запустить при старте
/Cстрока параметров, доступная в обработке

После /Execute платформа открывает обработку и выполняет её код. Логику, которая должна отработать автоматически, помещают в модуль обработки или в обработчик открытия её формы. Строку из /C читают внутри через свойство ПараметрЗапуска.

Пароль в открытой командной строке виден всем, кто читает скрипт или список процессов. Для регулярных задач заведите отдельного пользователя с минимальными правами, а не администратора.

Чтобы окно не всплывало на экране, добавляют /DisableStartupMessages и запускают сеанс под служебной учёткой. Для фоновых регламентных задач внутри базы командная строка не нужна — там работает регламентное задание.

Результат такого запуска нельзя увидеть на экране, поэтому обработку приучают писать журнал: в текстовый файл или в журнал регистрации базы. Тогда после ночного запуска видно, отработала задача или упала и на каком шаге. Путь к лог-файлу передают той же строкой /C — обработка читает его из ПараметрЗапуска и не хранит пути внутри себя.

Вызов внешней обработки из встроенного языка

Программный вызов удобен, когда обработку подключает другая обработка, расширение или регламентное задание. Центральный объект — ВнешниеОбработки.

В файловой базе и на толстом клиенте обработку создают прямо из файла:

Обработка = ВнешниеОбработки.Создать("C:\Обработки\Печать.epf");
Форма = Обработка.ПолучитьФорму();
Форма.Открыть();

В клиент-серверной базе сервер не видит файловую систему клиента. Файл сначала читают в двоичные данные, помещают во временное хранилище, а на сервере подключают из хранилища:

// Клиент: читаем файл в хранилище
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);

// Сервер: подключаем и создаём объект
Имя = ВнешниеОбработки.ПодключитьВнешнююОбработку(Адрес);
Обработка = ВнешниеОбработки.Создать(Имя);

Метод ПодключитьВнешнююОбработку возвращает имя подключённой обработки — его и передают в Создать. Дальше у объекта вызывают экспортные процедуры и функции из модуля обработки или открывают её форму.

Чтобы передать обработке данные и забрать результат, экспортируйте в её модуле процедуру и обратитесь к ней по имени:

Результат = Обработка.СформироватьВыгрузку(ПараметрыОтбора);

Создание обработки из произвольного файла — привилегированная операция. По умолчанию она выполняется в безопасном режиме, который блокирует часть действий; об этом ниже.

Передача параметров и обмен данными

Обмен данными с внешней обработкой организуют тремя путями, в зависимости от способа запуска.

Через командную строку. Строку из /C читают свойством ПараметрЗапуска. Это одна строка, которую вы сами разбираете на части:

Если ПараметрЗапуска <> "" Тогда
    Параметры = СтрРазделить(ПараметрЗапуска, ";");
    // Параметры[0] = "key=1", Параметры[1] = "mode=auto"
КонецЕсли;

Через параметры формы. Когда обработку открывают из кода, в метод открытия передают структуру параметров, а форма читает их в обработчике при создании:

Форма = Обработка.ПолучитьФорму("Форма", , , , , , 
    Новый Структура("Период, Организация", Период, Организация));

Через временное хранилище. Большие объёмы (таблицы значений, двоичные данные) не передают параметрами — их кладут во временное хранилище и передают адрес. Так же обработка возвращает результат: пишет его в хранилище и отдаёт адрес вызывающему коду.

Экспортные функции модуля обработки — самый прозрачный способ двустороннего обмена: на вход параметры, на выход — возвращаемое значение.

Совместимость: версии платформы и режим форм

Две самые частые причины, по которым «обработка не открывается», — несовпадение версии платформы и типа форм.

Версия платформы. Обработка, сохранённая в новой версии платформы, не откроется в более старой. Сравнивайте однозначно по номеру: платформа, в которой открывают обработку, должна быть не ниже той, в которой её сохранили. Узнать версию можно в меню Справка → О программе.

Режим форм. В управляемом приложении (тонкий клиент, веб-клиент) работают только управляемые формы. Обработка с обычными формами в тонком клиенте не откроется — её форму нужно пересоздать как управляемую. Проверить тип можно в Конфигураторе: у обычной и управляемой формы разные редакторы.

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

Храните исходник обработки в той же версии платформы, что стоит у пользователей, или ниже. Собрали в 8.3.24, а у бухгалтера 8.3.21 — откроет только после обновления платформы.

Конфигурации БП 3.0, ЗУП 3.1 и УТ 11 работают на управляемых формах в интерфейсе «Такси», поэтому обработки для них делают управляемыми.

Безопасный режим и права доступа

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

Права на открытие. За интерактивное открытие .epf и .erf отвечают отдельные права в корне конфигурации — на интерактивное открытие внешних обработок и внешних отчётов. Если у роли пользователя их нет, Файл → Открыть для этих файлов будет недоступен, а попытка вызова даст «Нарушение прав доступа». Выдают права через роль в Конфигураторе или в профиле групп доступа.

Безопасный режим. В нём платформа блокирует привилегированный режим, доступ к файловой системе, COM-соединения, загрузку внешних компонент и запуск приложений. При создании обработки из файла безопасный режим включён по умолчанию. Если обработке нужны ограниченные операции, их разрешают точечно через профиль безопасного режима, а не отключают защиту целиком.

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

Чек-лист перед подключением чужой обработки:

Проверка перед запуском внешней обработки
Выполнено: 0 / 5

Отладка и типичные ошибки

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

Порядок такой: открываете .epf в Конфигураторе, ставите точки останова в её модуле, затем в меню отладки подключаетесь к предмету отладки — запущенному сеансу, где открыта обработка. Когда код дойдёт до точки останова, выполнение остановится, и вы увидите значения переменных.

В клиент-серверной базе код обработки выполняется в двух контекстах — на клиенте и на сервере. Чтобы точка останова в серверной процедуре сработала, в предметах отладки выбирают именно серверный сеанс, а не только клиентский. Если обработка запускается регламентным заданием, отлаживают фоновый сеанс — он тоже виден в списке предметов отладки.

Когда отладчик не берёт точку останова, проверьте, что для базы вообще разрешена отладка и что открытый .epf — тот же файл, что подключён в сеансе. Отладка копии обработки, лежащей в другой папке, точек останова в запущенной копии не даст.

Самые частые ошибки и что с ними делать:

Диагностика: выберите симптом

Если ошибка возникает только в клиент-серверной базе и не воспроизводится в файловой — почти всегда дело в безопасном режиме или в том, что код обращается к файлу клиента с сервера. Разделите клиентскую и серверную части: чтение файла оставьте на клиенте, выполнение — на сервере.

Частые вопросы

Чем отличается внешняя обработка от внешнего отчёта?
Отчёт (.erf) строит данные на основе системы компоновки и предназначен для вывода информации. Обработка (.epf) выполняет действия: меняет данные, выгружает, загружает, печатает. Механизмы подключения у них одинаковые.
Можно ли запустить внешнюю обработку без изменения конфигурации?
Да. Файл → Открыть, список дополнительных обработок и вызов из кода не требуют снятия конфигурации с поддержки и её изменения. В этом и смысл внешних обработок — расширять функциональность без правки типовой.
Почему обработка работает в файловой базе, но падает в серверной?
В клиент-серверном режиме сервер не имеет доступа к файлам клиента, и действует безопасный режим. Читайте файл на клиенте во временное хранилище, а на сервере подключайте обработку из хранилища.
Как передать обработке параметры при запуске из командной строки?
Через параметр /C"строка". Внутри обработки эту строку читают свойством ПараметрЗапуска и разбирают самостоятельно, например функцией СтрРазделить.
Нужны ли особые права, чтобы открыть внешнюю обработку?
Да, нужно право на интерактивное открытие внешних обработок. Без него платформа выдаст «Нарушение прав доступа». Права назначают ролью в Конфигураторе или через профиль групп доступа.