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