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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему регистры сведений ограничены в стандартном механизме БСП?

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

При формировании списка «Назначение» в справочнике дополнительных обработок система фильтрует объекты метаданных. Регистры сведений исключаются из этого списка программно в коде БСП, так как вид обработки ЗаполнениеОбъекта технически ожидает передачи контекста ссылки, которой у регистра нет.

Способ 1: Использование вида «Дополнительная обработка»

Если нам не принципиально, чтобы кнопка находилась именно внутри командного интерфейса формы регистра (в меню «Заполнить»), мы можем пойти по самому простому пути. Рассмотрим алгоритм настройки:

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

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

Способ 2: Интеграция через расширение и программный вызов

Если бизнес-задача требует, чтобы кнопка вызова обработки находилась непосредственно в форме списка регистра, нам потребуется использовать расширение. Рассмотрим, как это реализовать:

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


&НаКлиенте
Процедура ИсполнитьКомандуЗаполнения(Команда)
    
    // Получаем ссылку на внешнюю обработку (можно найти по наименованию или идентификатору)
    СсылкаНаОбработку = ПолучитьСсылкуНаВнешнююОбработку(); 
    
    ПараметрыВыполнения = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВнешнейОбработки(ЭтаФорма);
    ПараметрыВыполнения.ДополнительныеПараметры.Вставить("ИмяРегистра", "ИмяВашегоРегистра");
    
    ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВнешнейОбработки(СсылкаНаОбработку, "ИмяКоманды", ПараметрыВыполнения);
    
КонецПроцедуры

Этот метод позволяет полностью имитировать поведение стандартных кнопок заполнения, сохраняя при этом гибкость управления данными регистра.

Способ 3: Доработка определяемых типов (для опытных разработчиков)

Существует возможность попытаться внедрить регистр в общую систему команд БСП, но это потребует более серьезного вмешательства. Выясним, какие шаги для этого необходимы:

  1. В метаданных конфигурации (или через расширение) найдем ОпределяемыйТип.ОбъектСДополнительнымиКомандами.
  2. Добавим в состав этого типа РегистрСведенийНаборЗаписей.ИмяВашегоРегистра.
  3. Поскольку платформа автоматически не выводит команды БСП в формы регистров, нам придется вручную добавить вызов в модуле формы регистра:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Вызов стандартного механизма подготовки команд БСП
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
    
КонецПроцедуры

Важно: Даже при выполнении этих действий стандартный механизм выбора назначения в справочнике «Дополнительные отчеты и обработки» может продолжать скрывать регистры из-за внутренних фильтров в общих модулях. В таком случае назначение придется прописывать программно в коде внешней обработки в функции СведенияОВнешнейОбработке, принудительно добавляя строку "РегистрСведений.ИмяВашегоРегистра" в массив Назначение.

Выводы и рекомендации

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

← На главную