Почему не активна или не отображается кнопка подменю Заполнить в самописном документе

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

При разработке собственных документов в конфигурациях, использующих Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с тем, что внешние обработки заполнения не появляются в меню или кнопка "Заполнить" остается недоступной (серой). Разберем по шагам, как правильно интегрировать самописный объект в подсистему "Дополнительные отчеты и обработки" и обеспечить корректную работу кнопок заполнения табличных частей.

Шаг 1. Интеграция объекта в метаданных через определяемые типы

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

Найдем в дереве конфигурации раздел ОпределяемыеТипы и добавим наш документ в следующие типы:

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

После добавления документа в эти типы, система "признает" его своим и позволит выбирать в справочнике "Дополнительные отчеты и обработки" при регистрации новой обработки.

Шаг 2. Подготовка модуля формы документа

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

Рассмотрим код, который необходимо добавить в модуль формы вашего документа:


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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    // Обновление доступности команд при чтении объекта
    ДополнительныеОтчетыИОбработки.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
    
КонецПроцедуры

Проанализируем ситуацию: метод ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере динамически создает команды в вашем подменю, а ПриЧтенииНаСервере управляет их доступностью (например, блокирует кнопку, если документ помечен на удаление или закрыт для редактирования).

Шаг 3. Настройка командной панели и программного интерфейса

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

Добавим в модуль формы процедуру, которая поможет связать вашу кнопку с механизмом заполнения:


&НаСервере
Процедура УстановитьКнопкиПодменюЗаполненияТЧ()
    
    // Если кнопка создана программно или через механизм БСП, 
    // необходимо убедиться, что параметры заполнения переданы верно.
    ПараметрыПодмена = Новый Структура;
    ПараметрыПодмена.Вставить("ИмяГруппы", "ГруппаЗаполнить");
    
    // Вызов общего модуля для инициализации
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма, ПараметрыПодмена);
    
КонецПроцедуры

Важный нюанс: Если в меню нет ни одного пункта (например, ни одна обработка не прошла авторегистрацию для этого документа), само подменю "Заполнить" будет автоматически скрыто или станет неактивным. Это нормальное поведение платформы.

Шаг 4. Требования к внешней обработке

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


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

Обратите внимание на ТипКоманды. Если вы используете ВызовСерверногоМетода, в модуле объекта обработки обязательно должна быть процедура ВыполнитьКоманду. Если используется Инициализировать, убедитесь, что состав параметров соответствует требованиям вашей версии БСП.

Шаг 5. Проверка прав и функциональных опций

Если код написан верно, но кнопка всё еще неактивна, разберем возможные административные причины:

  1. Функциональная опция: В константах системы должна быть включена опция ИспользоватьДополнительныеОтчетыИОбработки. Если она выключена, весь функционал подсистемы будет скрыт.
  2. Состояние документа: Если форма открыта в режиме "Только просмотр", БСП автоматически отключает все команды заполнения, так как изменение данных запрещено.
  3. Публикация: В справочнике "Дополнительные отчеты и обработки" проверьте статус обработки. Если стоит "В разработке", она может быть видна только администраторам. Установите статус "Используется".
  4. Обновление кэша: После любых изменений в модуле СведенияОВнешнейОбработке необходимо зайти в справочник дополнительных обработок и нажать кнопку "Обновить из файла", чтобы система перечитала новые параметры регистрации.

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

← На главную