При разработке собственных документов в конфигурациях, использующих Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с тем, что внешние обработки заполнения не появляются в меню или кнопка "Заполнить" остается недоступной (серой). Разберем по шагам, как правильно интегрировать самописный объект в подсистему "Дополнительные отчеты и обработки" и обеспечить корректную работу кнопок заполнения табличных частей.
Первым делом проанализируем настройки метаданных. Для того чтобы механизмы БСП в принципе начали взаимодействовать с вашим новым документом, его необходимо включить в состав специальных Определяемых типов. Без этого система не увидит связи между внешним файлом обработки и вашим документом.
Найдем в дереве конфигурации раздел ОпределяемыеТипы и добавим наш документ в следующие типы:
После добавления документа в эти типы, система "признает" его своим и позволит выбирать в справочнике "Дополнительные отчеты и обработки" при регистрации новой обработки.
Выясним причину, по которой кнопка может быть неактивна. Даже если подменю создано на командной панели вручную, оно не будет работать без вызова программных обработчиков БСП. В управляемых формах за это отвечают процедуры создания и чтения на сервере.
Рассмотрим код, который необходимо добавить в модуль формы вашего документа:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Инициализация дополнительных команд и обработок
ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// Обновление доступности команд при чтении объекта
ДополнительныеОтчетыИОбработки.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры
Проанализируем ситуацию: метод ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере динамически создает команды в вашем подменю, а ПриЧтенииНаСервере управляет их доступностью (например, блокирует кнопку, если документ помечен на удаление или закрыт для редактирования).
Если вы создаете группу "ПодменюЗаполнить" вручную, важно убедиться, что ее имя соответствует стандартам БСП или передается в обработчик. Однако наиболее надежный способ — использовать стандартную процедуру формирования подменю, которая часто встречается в типовых решениях.
Добавим в модуль формы процедуру, которая поможет связать вашу кнопку с механизмом заполнения:
&НаСервере
Процедура УстановитьКнопкиПодменюЗаполненияТЧ()
// Если кнопка создана программно или через механизм БСП,
// необходимо убедиться, что параметры заполнения переданы верно.
ПараметрыПодмена = Новый Структура;
ПараметрыПодмена.Вставить("ИмяГруппы", "ГруппаЗаполнить");
// Вызов общего модуля для инициализации
ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма, ПараметрыПодмена);
КонецПроцедуры
Важный нюанс: Если в меню нет ни одного пункта (например, ни одна обработка не прошла авторегистрацию для этого документа), само подменю "Заполнить" будет автоматически скрыто или станет неактивным. Это нормальное поведение платформы.
Посмотрим на пример функции СведенияОВнешнейОбработке внутри самого внешнего файла .epf. Чтобы кнопка стала активной, в параметрах регистрации должны быть четко указаны назначение и способ вызова.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Назначение.Добавить("Документ.МойСамописныйДокумент");
ПараметрыРегистрации.Наименование = "Заполнение товаров из файла";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заполнить таблицу товаров";
НоваяКоманда.Идентификатор = "ЗаполнитьТовары";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Обратите внимание на ТипКоманды. Если вы используете ВызовСерверногоМетода, в модуле объекта обработки обязательно должна быть процедура ВыполнитьКоманду. Если используется Инициализировать, убедитесь, что состав параметров соответствует требованиям вашей версии БСП.
Если код написан верно, но кнопка всё еще неактивна, разберем возможные административные причины:
ИспользоватьДополнительныеОтчетыИОбработки. Если она выключена, весь функционал подсистемы будет скрыт.СведенияОВнешнейОбработке необходимо зайти в справочник дополнительных обработок и нажать кнопку "Обновить из файла", чтобы система перечитала новые параметры регистрации.Проанализировав все эти этапы, мы можем сделать вывод: для корректной работы кнопки "Заполнить" требуется слаженная работа метаданных (определяемые типы), кода формы (вызовы БСП) и правильной регистрации внешнего файла в справочнике. Проверьте каждый пункт, и ваша кнопка станет активной.