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

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

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

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

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

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

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

Когда нужна обработка, а когда другой объект

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

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

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

Как выбрать действие

Нужно разово или вручную выполнить действие над даннымиСоздайте внешнюю обработку (.epf)
Действие должно выполняться по расписанию без участия пользователяРеализуйте логику в общем модуле и запускайте регламентным заданием
Нужен результат в виде таблицы с отборами и группировкамиИспользуйте отчёт на СКД вместо обработки
Обработка нужна многим пользователям типовой базыПодключите её через «Дополнительные отчеты и обработки»

Создание внешней обработки: первые шаги

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

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

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

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

Структура обработки: формы, реквизиты, модули

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

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

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

Пример: обработка массового изменения реквизита

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

Серверная часть выбирает данные запросом и изменяет их в транзакции. Транзакция обязательна: если при обработке тысячи элементов произойдёт ошибка на середине, база не останется в полуизменённом состоянии.

&НаСервереБезКонтекста

Процедура ВыполнитьНаСервере(Организация, НовоеЗначение)

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

Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура

|ГДЕ Организация = &Организация И НЕ ПометкаУдаления";

Запрос.УстановитьПараметр("Организация", Организация);

Выборка = Запрос.Выполнить().Выбрать();

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

Попытка

Пока Выборка.Следующий() Цикл

Объект = Выборка.Ссылка.ПолучитьОбъект();

Объект.СтавкаНДС = НовоеЗначение;

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

КонецЦикла;

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

Исключение

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

ВызватьИсключение ОписаниеОшибки();

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

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

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

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

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

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

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

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

Тестирование и проверка результата

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

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

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

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

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

Сообщение «данные не найдены», ошибок нет

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

Исключение или необработанная ошибка

Тестовый режим на одной записи
Норма

В списке изменений ровно один ожидаемый объект

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

Лишние объекты или неверные значения

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

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

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

Создаются дубли документов или записей

Права обычного пользователя
Норма

Обработка доступна и работает под целевой ролью

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

Нарушение прав доступа при выполнении

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

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

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

Третья группа — совместимость. Обработка, написанная под конкретную типовую конфигурацию, обращается к конкретным объектам метаданных; на другой конфигурации или после обновления релиза она перестанет компилироваться. По возможности проверяйте наличие объектов через Метаданные.НайтиПоПолномуИмени() и выносите конфигурационно-зависимый код в отдельные процедуры.

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

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

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

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

Чем внешняя обработка отличается от встроенной в конфигурацию?

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

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

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

Как открыть внешнюю обработку в 1С:Предприятии?

Через меню «Файл → Открыть» и выбор файла .epf. В типовых конфигурациях удобнее зарегистрировать обработку в справочнике «Дополнительные отчеты и обработки» — тогда она появится в штатном интерфейсе с настройкой прав.

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

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

Как защитить код внешней обработки от просмотра?

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

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

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