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