К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как писать внешние обработки для 1С

Как создать внешнюю обработку для 1С: структура EPF-файла, формы, код на встроенном языке, отладка, подключение к конфигурации и типичные ошибки разработчиков.

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

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

Ниже разобран полный цикл: от создания пустого EPF-файла до отладки, безопасного запуска на рабочей базе и типичных ошибок, которые допускают даже опытные разработчики.

Когда внешняя обработка — правильный выбор

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

Обработка не подходит, если нужно хранить новые данные (свои справочники, регистры, документы) или встроиться в бизнес-процессы через подписки на события. Эти задачи решаются доработкой конфигурации или расширением (.cfe) — расширения во многих сценариях вытеснили внешние обработки, поскольку тоже не снимают конфигурацию с поддержки, но работают как часть системы.

Сравнение вариантов

Внешняя обработка (.epf)

Разовые операции, загрузка/выгрузка, дополнительные отчёты. Не хранит собственных данных, запускается вручную или через механизм дополнительных отчётов и обработок.

Расширение конфигурации (.cfe)

Постоянная доработка без снятия с поддержки: новые роли, формы, подписки на события. Требует контроля совместимости при обновлениях.

Доработка конфигурации

Глубокие изменения логики, новые объекты метаданных. Усложняет обновление типовых релизов.

Создание файла обработки в конфигураторе

Откройте конфигуратор любой базы (можно пустой учебной) и выберите «Файл — Новый — Внешняя обработка». Задайте имя и синоним — синоним увидит пользователь при открытии файла. Сохраните заготовку через «Файл — Сохранить как»: получится файл с расширением .epf.

Для управляемого приложения (такси-интерфейс большинства современных конфигураций) добавьте управляемую форму: в дереве обработки правой кнопкой — «Добавить — Форма». На форму перетаскиваются реквизиты, команды и элементы интерфейса. Если обработка предназначена для обычного приложения (старые конфигурации на 8.2), создаётся обычная форма — её поведение и модуль отличаются.

Порядок создания обработки
  1. 1
    Откройте конфигуратор, меню «Файл — Новый — Внешняя обработка»
  2. 2
    Укажите имя латиницей без пробелов и понятный синоним
  3. 3
    Добавьте управляемую форму и разместите на ней реквизиты и команды
  4. 4
    Напишите код в модуле формы и (при необходимости) в модуле объекта
  5. 5
    Сохраните файл .epf и откройте его в режиме Предприятия через «Файл — Открыть»
  6. 6
    Проверьте работу на тестовой копии базы

Структура кода: клиент и сервер

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

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

&НаКлиенте

Процедура ВыполнитьОбработку(Команда)

ВыполнитьОбработкуНаСервере(ПериодОтчета);

ПоказатьПредупреждение(, "Обработка завершена");

КонецПроцедуры

&НаСервере

Процедура ВыполнитьОбработкуНаСервере(Период)

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Документ.РеализацияТоваровУслуг.Ссылка

|ГДЕ Документ.Дата МЕЖДУ &Начало И &Конец";

Запрос.УстановитьПараметр("Начало", Период.ДатаНачала);

Запрос.УстановитьПараметр("Конец", Период.ДатаОкончания);

// обход выборки и изменение данных

КонецПроцедуры

Работа с данными и безопасность изменений

Обработки, которые только читают данные (отчёты, анализ), безопасны. Опасность представляют обработки записи: массовые перепроведения, изменение реквизитов, удаление объектов. Любая такая операция должна выполняться в транзакции, чтобы при ошибке база не осталась в частично изменённом состоянии.

Перед записью объекта полезно проверять блокировки и права: пользователь, запустивший обработку, может не иметь прав на изменение части объектов. Используйте Попытка ... Исключение с записью ошибок в журнал регистрации через ЗаписьЖурналаРегистрации — тогда по итогам прогона видно, какие объекты не обработались и почему.

Отладка внешней обработки

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

Если точка останова «не срабатывает», проверьте три вещи: включён ли режим отладки в настройках конфигуратора, тем ли пользователем запущен сеанс (подключение фильтруется по предметам отладки), и не выполняется ли код в фоновом задании — фоновые задания подключаются к отладке отдельно через настройку предметов отладки.

Типичные ошибки
01
Обращение к базе данных из контекста &НаКлиенте — код не компилируется или падает в рантайме
02
Запись объектов вне транзакции — при сбое часть данных изменена, часть нет
03
Отсутствие проверки прав пользователя — обработка падает на первом же недоступном объекте
04
Жёсткая привязка к именам реквизитов типовой конфигурации — после обновления релиза обработка перестаёт работать
05
Хранение паролей и строк подключения прямо в коде обработки — файл .epf легко открывается и читается

Подключение к конфигурации и распространение

Простейший способ запуска — «Файл — Открыть» в режиме Предприятия, если у пользователя включено право интерактивного открытия внешних обработок. Для регулярного использования удобнее подсистема «Дополнительные отчеты и обработки» в конфигурациях на БСП: обработка регистрируется в справочнике, появляется в нужных разделах интерфейса, доступ к ней разграничивается правами.

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

Маршрут решения

Как выбрать способ запуска

Обработка нужна один раз администраторуЗапустите через «Файл — Открыть» под полными правами на копии базы
Обработкой пользуются рядовые пользователи регулярноЗарегистрируйте её в подсистеме дополнительных отчётов и обработок и настройте права
Нужна автоматическая реакция на события базыИспользуйте расширение конфигурации — внешняя обработка сама по себе не срабатывает по событиям

Проверка результата перед передачей в работу

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

Дополнительно проверьте обработку под пользователем с ограниченными правами — то, что работает под полными правами, у менеджера может не открыться или упасть на середине. Убедитесь, что все сообщения об ошибках понятны пользователю: «Не удалось записать документ Реализация №123 от 15.03: недостаточно прав» вместо технического текста исключения.

Контрольные точки

Как проверить результат

Запуск на тестовой копии
Норма

Обработка завершается, данные изменены только в ожидаемых объектах

Тревожный признак

Ошибки в журнале регистрации, частично изменённые данные

Запуск под ограниченными правами
Норма

Обработка либо работает, либо выдаёт понятное сообщение о нехватке прав

Тревожный признак

Аварийное завершение с техническим текстом ошибки

Повторный запуск
Норма

Повторный прогон не создаёт дублей и не портит данные

Тревожный признак

Каждый запуск дублирует записи или меняет уже обработанные объекты

Часто задаваемые вопросы

Чем внешняя обработка отличается от внешнего отчёта?

Технически — только расширением файла и базовым шаблоном: обработка (.epf) ориентирована на действия с данными, отчёт (.erf) — на построение отчёта через СКД. Внешний отчёт можно собрать и в виде обработки с макетом СКД, разница проявляется в основном при регистрации в подсистеме дополнительных отчётов и обработок, где вид влияет на поведение.

Можно ли открыть файл .epf и посмотреть его код?

Да, любой файл .epf открывается в конфигураторе через «Файл — Открыть», и весь код доступен для чтения. Поэтому в обработках нельзя хранить пароли, токены и строки подключения — их выносят в настройки, защищённые хранилища или запрашивают у пользователя при запуске.

Почему обработка работает в файловой базе, но не в клиент-серверной?

Чаще всего причина в путях к файлам и контексте исполнения: в клиент-серверном режиме серверный код выполняется на сервере и не видит локальные диски пользователя. Файлы для загрузки нужно передавать на сервер через временное хранилище (ПоместитьВоВременноеХранилище), а не читать напрямую по локальному пути в серверной процедуре.

Как обновить обработку, если она перестала работать после обновления конфигурации?

Откройте её в конфигураторе и проверьте, какие объекты и реквизиты переименованы или удалены в новом релизе — обычно ошибка указывает на конкретное обращение. Исправьте имена, при необходимости добавьте проверки существования реквизитов. Чтобы снизить зависимость от релизов, по возможности обращайтесь к данным через запросы и программные интерфейсы БСП, а не к внутренним деталям объектов.

Можно ли выполнять внешнюю обработку по расписанию?

Напрямую — нет, внешняя обработка не является регламентным заданием. Обходные пути: зарегистрировать её в подсистеме дополнительных отчётов и обработок с настройкой расписания (если версия БСП это поддерживает) или перенести логику в расширение конфигурации с собственным регламентным заданием.

Нужна ли полная лицензия на конфигурацию для разработки обработки?

Для разработки достаточно любой базы на той же версии платформы — часто используют пустую или учебную. Но тестировать обработку нужно на копии той конфигурации и того релиза, где она будет работать: состав объектов и реквизитов различается между конфигурациями.

Итог

Что важно запомнить

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