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

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

Внешняя обработка 1С: как создать с нуля

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

Внешняя обработка — это файл с расширением .epf, который выполняется внутри информационной базы 1С, но не входит в состав конфигурации. Такой механизм позволяет добавлять печатные формы, групповые операции над документами, загрузку данных и сервисные функции без изменения типовой конфигурации и без снятия её с поддержки. Это главный способ расширять типовые решения, когда возможностей расширения конфигурации недостаточно или нужна быстрая разработка «на коленке» для конкретной задачи.

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

Ниже разобран полный цикл: от создания пустого файла в конфигураторе до регистрации обработки в базе и проверки её работы. Материал ориентирован на управляемые формы (такси), поскольку именно этот режим используется во всех современных конфигурациях.

Что такое внешняя обработка и когда она нужна

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

Типичные сценарии применения: печатные формы, которых нет в типовой поставке; групповая обработка документов (перепроведение, изменение реквизитов); загрузка данных из Excel и CSV; сервисные утилиты для администраторов; тестовые инструменты разработчика. Обработки также используются как «песочница» — в них удобно отлаживать запросы и алгоритмы перед переносом в конфигурацию или расширение.

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

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

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

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

После создания в дереве обработки доступны стандартные разделы: «Формы», «Макеты», «Модуль объекта». Макеты нужны для печатных форм (табличные документы) и шаблонов, модуль объекта — для кода, который выполняется на сервере и не привязан к интерфейсу, формы — для интерактивной части.

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

Форма обработки: реквизиты, команды, элементы

Форма — это интерфейс обработки. В редакторе формы слева находится дерево элементов, справа — список реквизитов и команд. Минимальный рабочий набор для большинства задач: реквизиты для параметров (период, организация, ссылка на документ), таблица значений для результатов и команда «Выполнить» с обработчиком.

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

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

&НаКлиенте

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

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

ПоказатьОповещениеПользователя("Обработка завершена");

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

&НаСервере

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

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

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

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

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

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

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

// дальнейшая обработка результата

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

Модуль объекта и регистрация в типовой конфигурации

Чтобы обработку можно было подключить через типовой механизм «Дополнительные отчеты и обработки» (подсистема БСП), в модуле объекта нужно реализовать экспортную функцию СведенияОВнешнейОбработке(). Она возвращает структуру с описанием: вид обработки, название, версия, безопасный режим и таблицу команд.

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.1");

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();

ПараметрыРегистрации.Версия = "1.0";

ПараметрыРегистрации.БезопасныйРежим = Истина;

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();

НоваяКоманда.Представление = "Загрузка прайса поставщика";

НоваяКоманда.Идентификатор = "ЗагрузкаПрайса";

НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();

НоваяКоманда.ПоказыватьОповещение = Ложь;

Возврат ПараметрыРегистрации;

КонецФункции

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

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

Подключение обработки к информационной базе

Есть два способа запустить обработку. Первый — отладочный: в режиме «1С:Предприятие» открыть файл через «Файл → Открыть». Это быстро, но требует у пользователя права на интерактивное открытие внешних файлов, и в защищённых базах такое право часто отключено.

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

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

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

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

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

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

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

Обработка открывается
Норма

Форма появляется без ошибок компиляции

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

Сообщение «Ошибка при вызове конструктора» или «Метод не обнаружен» — проверьте код модулей

Регистрация в БСП
Норма

При загрузке файла заполняются вид, версия и команды

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

Ошибка «функция СведенияОВнешнейОбработке не обнаружена» — функция не экспортная или не в модуле объекта

Работа с данными
Норма

Запросы возвращают ожидаемые строки, записанные объекты видны в списках

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

Пустой результат без ошибок — проверьте параметры запроса и отборы

Типичные ошибки и ограничения

Типичные ошибки
01
Код работы с данными размещён в клиентской процедуре — в управляемых формах это вызывает ошибку компиляции или недоступность менеджеров объектов; переносите логику на сервер
02
Функция СведенияОВнешнейОбработке без ключевого слова Экспорт — БСП не видит функцию и отказывается регистрировать обработку
03
Использование абсолютных путей к файлам (C:\...) — на сервере или у другого пользователя такого пути нет; используйте диалоги выбора файла или временные файлы
04
Изменение объектов без транзакции при групповой обработке — при сбое посередине данные остаются в противоречивом состоянии; оборачивайте пакетную запись в транзакцию
05
Забытый безопасный режим: обработка с БезопасныйРежим = Ложь требует повышенных прав и блокируется в сервисах с защитой от опасных действий

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

При работе в клиент-серверном режиме помните, что код «НаСервере» выполняется на сервере 1С: файлы, COM-объекты и внешние компоненты должны быть доступны именно там, а не на компьютере пользователя. Загрузку файла с клиента на сервер выполняйте через НачатьПомещениеФайла и передачу адреса временного хранилища.

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

Внешняя обработка или расширение конфигурации

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

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

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

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

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

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

Крайний вариант для глубоких изменений логики. Усложняет обновление и требует снятия объектов с поддержки — используйте только когда обработка и расширение не справляются

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

Итог

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

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

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

Можно ли создать внешнюю обработку без конфигуратора?

Нет, файл .epf — бинарный формат платформы, и собрать его можно только в конфигураторе. Однако есть альтернатива: внешние отчёты и обработки можно разрабатывать в EDT (1C:Enterprise Development Tools) и выгружать в тот же формат .epf. Для пользователя без навыков разработки проще попросить готовый файл и подключить его через «Дополнительные отчеты и обработки».

Обработка не регистрируется в базе: «Не удалось получить сведения». Что проверить?

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

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

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

Почему обработка работает у администратора, но не у рядового пользователя?

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

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

Да, если конфигурация на базе БСП: при регистрации команды укажите тип «ВызовСерверногоМетода» и реализуйте в модуле объекта процедуру ВыполнитьКоманду. После этого в карточке дополнительной обработки появится возможность настроить расписание — платформа будет запускать её как регламентное задание. Обработка не должна открывать формы и ждать действий пользователя.

Как передать обработку коллеге с другой базой?

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