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