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

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

Как создать свою обработку в 1С

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

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

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

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

Что понадобится перед началом работы

Минимальный набор — установленная платформа 1С:Предприятие 8.3, конфигуратор и права на запуск конфигуратора в тестовой базе. Для подключения готовой обработки в рабочей базе нужны права администратора или роль, позволяющая добавлять дополнительные отчёты и обработки.

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

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

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

Откройте конфигуратор тестовой базы. В меню выберите «Файл → Новый» (или Ctrl+N) и в списке типов документов укажите «Внешняя обработка». Платформа откроет окно новой обработки, где задаётся имя — оно станет синонимом, который увидит пользователь.

Сохраните файл через «Файл → Сохранить как» с понятным именем, например МассовоеИзменениеЦен.epf. Имя файла не обязано совпадать с именем обработки внутри, но удобнее, когда они одинаковые.

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

Проектируем форму обработки

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

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

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

Пишем код: пример рабочей обработки

Рассмотрим типовой сценарий: обработка выбирает документы за период и выводит их список в таблицу значений на форме. В модуле формы создаём серверную процедуру с запросом.

&НаКлиенте

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

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

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

&НаСервере

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

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

Запрос.Текст =

"ВЫБРАТЬ

| РеализацияТоваровУслуг.Ссылка КАК Документ,

| РеализацияТоваровУслуг.СуммаДокумента КАК Сумма

|ИЗ

| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

|ГДЕ

| РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

| И РеализацияТоваровУслуг.Проведен";

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

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

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

ТаблицаРезультатов.Загрузить(РезультатЗапроса);

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

Здесь НачалоПериода и КонецПериода — реквизиты формы, ТаблицаРезультатов — реквизит типа «ТаблицаЗначений». Параметры в запрос передаются только через УстановитьПараметр — прямая подстановка строк в текст запроса опасна и считается плохой практикой.

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

НачатьТранзакцию();

Попытка

Для Каждого Строка Из ТаблицаРезультатов Цикл

ДокОбъект = Строка.Документ.ПолучитьОбъект();

ДокОбъект.Комментарий = "Обработано";

ДокОбъект.Записать();

КонецЦикла;

ЗафиксироватьТранзакцию();

Исключение

ОтменитьТранзакцию();

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

bsl
&НаСервере
Процедура ЗаполнитьНаСервере()
    Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 100 Ссылка ИЗ Справочник.Номенклатура");
    Результат = Запрос.Выполнить().Выгрузить();
КонецПроцедуры

Отладка и проверка работы

Отладку запускают из конфигуратора: «Отладка → Начать отладку» (F5). Откроется режим «Предприятие», в нём откройте файл обработки через «Файл → Открыть». Точки останова ставятся кликом по полю слева от строки кода или клавишей F9.

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

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

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

Запрос к данным
Норма

Возвращает ожидаемое количество строк без ошибки

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

Пустой результат при заведомо существующих данных или ошибка синтаксиса

Запись объектов
Норма

Изменённые реквизиты видны при повторном открытии объекта

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

Данные не сохраняются или объект не проводится после изменения

Работа формы
Норма

Кнопки отрабатывают, ошибки выводятся понятным текстом

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

Модальные окна, падение сеанса, «тихие» сбои без сообщений

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

Есть два способа использовать готовый .epf-файл. Первый — просто открыть его в режиме «Предприятие» через «Файл → Открыть». Это подходит для разовых операций, но неудобно для регулярной работы пользователей.

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

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

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

Типичные ошибки начинающих

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

Типичные ошибки
01
Выполнение запроса в процедуре &НаКлиенте — ошибка компиляции, переносите обращения к БД на сервер
02
Запись объектов в цикле без транзакции — при сбое часть данных изменена, часть нет
03
Прямая вставка строк в текст запроса вместо параметров — риск ошибок и уязвимостей
04
Отладка записи на рабочей базе — испорченные данные без возможности отката
05
Отсутствие функции СведенияОВнешнейОбработке — обработка не регистрируется в типовом механизме
06
Получение объекта через ПолучитьОбъект() для чтения — лишняя нагрузка, для чтения используйте запросы

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

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

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

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

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

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

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

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

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

Изменение основной конфигурации

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

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

Итог

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

Обработка создаётся в конфигураторе как файл .epf: форма, реквизиты, клиентские команды и серверные процедуры с запросами. Разработку ведите на копии базы, запись оборачивайте в транзакции, параметры передавайте в запрос явно. Готовый файл подключается через «Дополнительные отчеты и обработки» с функцией СведенияОВнешнейОбработке в модуле объекта.

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

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

Нет, файл .epf создаётся и редактируется только в конфигураторе. Существуют сторонние инструменты и редакторы, но они всё равно опираются на формат платформы, и для полноценной разработки форм и модулей нужен конфигуратор установленной платформы.

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

Технически это почти одинаковые объекты: отчёт (.erf) строится на схеме компоновки данных и предназначен для вывода информации, обработка (.epf) — для действий над данными. На практике отчёт тоже может содержать произвольный код, но по смыслу и интерфейсу их разделяют.

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

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

Как защитить код обработки от просмотра?

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

Можно ли запускать обработку автоматически по расписанию?

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

Обработка работает в файловой базе, а на сервере — ошибка. В чём причина?

Типичные причины: разный контекст выполнения (на сервере недоступны клиентские операции с файлами), права сервисного пользователя сервера 1С на каталоги, различия в разрядности и версии платформы. Проверяйте, где именно исполняется проблемный код, и не используйте локальные пути в серверных процедурах.