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

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

Как добавить обработку в расширение 1С

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

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

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

Ниже разобраны оба подхода с конкретными шагами, ограничениями и способами проверки результата. Материал ориентирован на конфигурации на управляемых формах (БСП), но основные принципы применимы и к самописным решениям.

Какой способ добавления обработки выбрать

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

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

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

Внешняя обработка через «Дополнительные отчеты и обработки»

Подходит для разовых и пользовательских операций. Ограничение: нельзя назначить регламентное задание напрямую, зависит от подсистемы БСП.

Обработка как объект метаданных расширения

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

Обработка + регламентное задание в расширении

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

Подготовка: создание и подключение расширения

Откройте конфигуратор и перейдите в меню «Конфигурация» → «Расширения конфигурации». Создайте новое расширение: задайте имя (латиницей, без пробелов), префикс и синоним. Префикс будет добавляться к именам объектов, чтобы избежать конфликтов с типовой конфигурацией.

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

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

Создание обработки внутри расширения через конфигуратор

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

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

Код размещается в модуле формы (клиентские и серверные процедуры) и в модуле объекта обработки (серверная логика, доступная без открытия формы). Для операций с данными используйте серверные процедуры с директивой &НаСервере — это снижает сетевой трафик между клиентом и сервером.

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

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

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

Учтите нюанс: во внешней обработке объект доступен через ЭтотОбъект, а в обработке расширения обращение к объекту из формы идет через РеквизитФормыВЗначение("Объект") или через менеджер обработки Обработки.ИмяОбработки.Создать(). Проверьте все обращения к реквизитам объекта после переноса.

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

В конфигурациях на базе Библиотеки стандартных подсистем есть справочник «Дополнительные отчеты и обработки» (раздел «Администрирование» → «Печатные формы, отчеты и обработки»). Через него внешняя обработка подключается к базе без изменения метаданных.

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

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

bsl
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.0";
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Загрузка прайсов'");
	НоваяКоманда.Идентификатор = "ЗагрузкаПрайсов";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	Возврат ПараметрыРегистрации;
КонецФункции

Запуск обработки по расписанию

Частая потребность — выполнять обработку автоматически: ночную загрузку курсов, очистку данных, синхронизацию. Для этого в расширении создается регламентное задание, а обработка выступает источником логики.

В ветке «Регламентные задания» расширения добавьте новое задание. В свойстве «Имя метода» укажите экспортную процедуру общего модуля расширения (модуль должен быть серверным). Внутри этой процедуры создайте экземпляр обработки и вызовите её метод:

bsl
Процедура ВыполнитьЗагрузкуПрайсов() Экспорт
	Обработка = Обработки.ЗагрузкаПрайсовПоставщиков.Создать();
	Обработка.ВыполнитьЗагрузку();
КонецПроцедуры

Расписание настраивается уже в режиме предприятия: «Администрирование» → «Обслуживание» → «Регламентные и фоновые задания». Найдите задание по имени и задайте расписание. Учтите, что в файловой базе фоновые задания выполняются только при запущенном сеансе с соответствующей настройкой — в клиент-серверном варианте их выполняет сервер.

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

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

Для регламентных заданий отладка сложнее: включите в конфигураторе «Отладка» → «Подключение» → «Автоматическое подключение» к фоновым заданиям. Либо временно вызывайте метод задания вручную из внешней обработки — это быстрее для поиска ошибок в логике.

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

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

Обработка открывается из интерфейса
Норма

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

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

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

Регламентное задание в списке
Норма

Состояние «Выполняется» или дата последнего выполнения актуальна

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

Состояние «Ошибка» — смотрите журнал регистрации с деталями

Результат работы в данных
Норма

Загруженные/измененные записи присутствуют и корректны

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

Данных нет или они частичные — проверяйте транзакционность кода

Права пользователей
Норма

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

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

Команды нет в интерфейсе — проверьте роли расширения и настройки доступа

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

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

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

Типичные ошибки
01
Забыли обновить конфигурацию базы данных после изменения расширения — пользователи видят старую версию или ошибки
02
Использование интерактивных вызовов в серверном коде регламентного задания — задание падает с ошибкой
03
Перенос кода из внешней обработки без адаптации обращений к ЭтотОбъект — ошибки «Поле не обнаружено»
04
Отсутствие собственных ролей в расширении — обработка недоступна никому, кроме администратора
05
Несколько расширений с пересекающейся логикой — непредсказуемый порядок применения и конфликты

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

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

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

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

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

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

Да, типовую обработку можно заимствовать в расширение и изменить её формы, команды и модули (через аннотации «ИзменениеИКонтроль» и подобные). Полностью заменить модуль объекта нельзя — только дополнить через перехватчики «После», «Перед», «Вместо».

Что произойдет с обработкой в расширении при обновлении конфигурации?

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

Как выполнить обработку расширения по расписанию в файловой базе?

В файловом варианте фоновые задания выполняются только из запущенного сеанса. Варианты: настроить отдельный сеанс с параметром запуска для выполнения фоновых заданий, либо запускать обработку через планировщик Windows с параметром /Execute и вызовом нужной процедуры.

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

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

Итог

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

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