Разработка и Конфигурация · 11 мин
Как писать внешние обработки для 1С
Как создать внешнюю обработку для 1С: структура EPF-файла, формы, код на встроенном языке, отладка, подключение к конфигурации и типичные ошибки разработчиков.
Внешняя обработка — это файл с расширением .epf, который выполняется в 1С:Предприятии без изменения конфигурации. Она подходит для разовых операций с данными, дополнительных печатных форм, загрузки и выгрузки информации, а также для проверки гипотез перед тем, как вносить доработку в основную конфигурацию. Главное преимущество — база остаётся на поддержке, а обновления типовых релизов проходят без конфликтов.
Разработка внешней обработки почти не отличается от работы внутри конфигуратора: тот же встроенный язык, те же объекты метаданных, та же модель форм. Различия касаются способа хранения (отдельный файл вместо дерева конфигурации), механизмов подключения и некоторых ограничений — например, внешняя обработка не может содержать собственных справочников или документов, она оперирует только объектами существующей базы.
Ниже разобран полный цикл: от создания пустого EPF-файла до отладки, безопасного запуска на рабочей базе и типичных ошибок, которые допускают даже опытные разработчики.
Когда внешняя обработка — правильный выбор
Внешняя обработка оправдана, когда задача разовая или вспомогательная: массовое изменение реквизитов, загрузка данных из Excel, поиск дублей, формирование нестандартного отчёта, дополнительная печатная форма. В таких случаях снимать конфигурацию с поддержки ради одной функции нерентабельно.
Обработка не подходит, если нужно хранить новые данные (свои справочники, регистры, документы) или встроиться в бизнес-процессы через подписки на события. Эти задачи решаются доработкой конфигурации или расширением (.cfe) — расширения во многих сценариях вытеснили внешние обработки, поскольку тоже не снимают конфигурацию с поддержки, но работают как часть системы.
Сравнение вариантов
Разовые операции, загрузка/выгрузка, дополнительные отчёты. Не хранит собственных данных, запускается вручную или через механизм дополнительных отчётов и обработок.
Постоянная доработка без снятия с поддержки: новые роли, формы, подписки на события. Требует контроля совместимости при обновлениях.
Глубокие изменения логики, новые объекты метаданных. Усложняет обновление типовых релизов.
Создание файла обработки в конфигураторе
Откройте конфигуратор любой базы (можно пустой учебной) и выберите «Файл — Новый — Внешняя обработка». Задайте имя и синоним — синоним увидит пользователь при открытии файла. Сохраните заготовку через «Файл — Сохранить как»: получится файл с расширением .epf.
Для управляемого приложения (такси-интерфейс большинства современных конфигураций) добавьте управляемую форму: в дереве обработки правой кнопкой — «Добавить — Форма». На форму перетаскиваются реквизиты, команды и элементы интерфейса. Если обработка предназначена для обычного приложения (старые конфигурации на 8.2), создаётся обычная форма — её поведение и модуль отличаются.
- 1Откройте конфигуратор, меню «Файл — Новый — Внешняя обработка»
- 2Укажите имя латиницей без пробелов и понятный синоним
- 3Добавьте управляемую форму и разместите на ней реквизиты и команды
- 4Напишите код в модуле формы и (при необходимости) в модуле объекта
- 5Сохраните файл .epf и откройте его в режиме Предприятия через «Файл — Открыть»
- 6Проверьте работу на тестовой копии базы
Структура кода: клиент и сервер
В управляемых формах код делится директивами компиляции. Директива &НаКлиенте используется для работы с интерфейсом, файловой системой пользователя, диалогами. Директива &НаСервере — для запросов к базе данных, обхода документов, записи объектов. Обращение к данным базы напрямую из клиентского контекста невозможно — это частая причина ошибок у новичков.
Типичный каркас выглядит так: клиентская процедура команды вызывает серверную, передавая параметры, серверная выполняет запрос и возвращает результат. Для длительных операций в современных версиях платформы применяют фоновое выполнение через ДлительныеОперации, чтобы интерфейс не зависал.
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
ВыполнитьОбработкуНаСервере(ПериодОтчета);
ПоказатьПредупреждение(, "Обработка завершена");
КонецПроцедуры
&НаСервере
Процедура ВыполнитьОбработкуНаСервере(Период)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Документ.РеализацияТоваровУслуг.Ссылка
|ГДЕ Документ.Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Начало", Период.ДатаНачала);
Запрос.УстановитьПараметр("Конец", Период.ДатаОкончания);
// обход выборки и изменение данных
КонецПроцедуры
Работа с данными и безопасность изменений
Обработки, которые только читают данные (отчёты, анализ), безопасны. Опасность представляют обработки записи: массовые перепроведения, изменение реквизитов, удаление объектов. Любая такая операция должна выполняться в транзакции, чтобы при ошибке база не осталась в частично изменённом состоянии.
Перед записью объекта полезно проверять блокировки и права: пользователь, запустивший обработку, может не иметь прав на изменение части объектов. Используйте Попытка ... Исключение с записью ошибок в журнал регистрации через ЗаписьЖурналаРегистрации — тогда по итогам прогона видно, какие объекты не обработались и почему.
Отладка внешней обработки
Отладка выполняется стандартно: в конфигураторе включите «Отладка — Начать отладку» или подключитесь к уже запущенному сеансу через «Отладка — Подключение». Откройте в отлаживаемом сеансе файл обработки, поставьте точку останова в её модуле — конфигуратор остановится на ней, когда код выполнится.
Если точка останова «не срабатывает», проверьте три вещи: включён ли режим отладки в настройках конфигуратора, тем ли пользователем запущен сеанс (подключение фильтруется по предметам отладки), и не выполняется ли код в фоновом задании — фоновые задания подключаются к отладке отдельно через настройку предметов отладки.
Подключение к конфигурации и распространение
Простейший способ запуска — «Файл — Открыть» в режиме Предприятия, если у пользователя включено право интерактивного открытия внешних обработок. Для регулярного использования удобнее подсистема «Дополнительные отчеты и обработки» в конфигурациях на БСП: обработка регистрируется в справочнике, появляется в нужных разделах интерфейса, доступ к ней разграничивается правами.
Для регистрации в этой подсистеме в модуле объекта обработки реализуют функцию СведенияОВнешнейОбработке(), возвращающую структуру с видом обработки (дополнительная обработка, отчёт, печатная форма, заполнение объекта), версией и назначением. Точный состав возвращаемой структуры зависит от версии БСП — сверяйтесь с документацией к используемой версии библиотеки.
Как выбрать способ запуска
Проверка результата перед передачей в работу
Готовую обработку проверяют в трёх сценариях: на пустой выборке (нет данных — обработка не должна падать), на типовой выборке и на граничных случаях (очень большой объём, объекты с незаполненными реквизитами, помеченные на удаление). Каждый сценарий регулярно выявляет свои дефекты.
Дополнительно проверьте обработку под пользователем с ограниченными правами — то, что работает под полными правами, у менеджера может не открыться или упасть на середине. Убедитесь, что все сообщения об ошибках понятны пользователю: «Не удалось записать документ Реализация №123 от 15.03: недостаточно прав» вместо технического текста исключения.
Как проверить результат
Обработка завершается, данные изменены только в ожидаемых объектах
Ошибки в журнале регистрации, частично изменённые данные
Обработка либо работает, либо выдаёт понятное сообщение о нехватке прав
Аварийное завершение с техническим текстом ошибки
Повторный прогон не создаёт дублей и не портит данные
Каждый запуск дублирует записи или меняет уже обработанные объекты
Часто задаваемые вопросы
Чем внешняя обработка отличается от внешнего отчёта?
Технически — только расширением файла и базовым шаблоном: обработка (.epf) ориентирована на действия с данными, отчёт (.erf) — на построение отчёта через СКД. Внешний отчёт можно собрать и в виде обработки с макетом СКД, разница проявляется в основном при регистрации в подсистеме дополнительных отчётов и обработок, где вид влияет на поведение.
Можно ли открыть файл .epf и посмотреть его код?
Да, любой файл .epf открывается в конфигураторе через «Файл — Открыть», и весь код доступен для чтения. Поэтому в обработках нельзя хранить пароли, токены и строки подключения — их выносят в настройки, защищённые хранилища или запрашивают у пользователя при запуске.
Почему обработка работает в файловой базе, но не в клиент-серверной?
Чаще всего причина в путях к файлам и контексте исполнения: в клиент-серверном режиме серверный код выполняется на сервере и не видит локальные диски пользователя. Файлы для загрузки нужно передавать на сервер через временное хранилище (ПоместитьВоВременноеХранилище), а не читать напрямую по локальному пути в серверной процедуре.
Как обновить обработку, если она перестала работать после обновления конфигурации?
Откройте её в конфигураторе и проверьте, какие объекты и реквизиты переименованы или удалены в новом релизе — обычно ошибка указывает на конкретное обращение. Исправьте имена, при необходимости добавьте проверки существования реквизитов. Чтобы снизить зависимость от релизов, по возможности обращайтесь к данным через запросы и программные интерфейсы БСП, а не к внутренним деталям объектов.
Можно ли выполнять внешнюю обработку по расписанию?
Напрямую — нет, внешняя обработка не является регламентным заданием. Обходные пути: зарегистрировать её в подсистеме дополнительных отчётов и обработок с настройкой расписания (если версия БСП это поддерживает) или перенести логику в расширение конфигурации с собственным регламентным заданием.
Нужна ли полная лицензия на конфигурацию для разработки обработки?
Для разработки достаточно любой базы на той же версии платформы — часто используют пустую или учебную. Но тестировать обработку нужно на копии той конфигурации и того релиза, где она будет работать: состав объектов и реквизитов различается между конфигурациями.
Что важно запомнить
Внешняя обработка создаётся в конфигураторе за несколько минут, но требует дисциплины: разделяйте клиентский и серверный код, изменяйте данные только в транзакциях, обрабатывайте ошибки через журнал регистрации и всегда тестируйте на копии базы. Для постоянных доработок рассмотрите расширение конфигурации — внешняя обработка остаётся инструментом разовых и вспомогательных задач.