При разработке собственных документов в типовых конфигурациях (таких как «1С:Управление торговлей 11», «1С:ERP» или «1С:Комплексная автоматизация») разработчики часто сталкиваются с ситуацией, когда подключаемые команды БСП (печать, ввод на основании, контекстные отчеты) отлично функционируют в форме документа, но наотрез отказываются появляться в форме списка. Разберем по шагам, почему возникает эта проблема, как ее быстро диагностировать и правильно настроить командные панели и программный код формы.
Самая распространенная ошибка заключается в том, куда именно разработчик помещает группы подменю для подключаемых команд в дереве элементов формы. По умолчанию подсистема «Подключаемые команды» Библиотеки Стандартных Подсистем ищет стандартные группы (например, ПодменюПечать, ПодменюЗаполнить, ПодменюОтчеты) в главной командной панели формы (Элементы.ФормаКоманднаяПанель).
Если вы создаете форму списка и помещаете группы подменю внутрь командной панели таблицы динамического списка (например, Элементы.СписокКоманднаяПанель), подсистема БСП при стандартном вызове не сможет их обнаружить и, соответственно, не заполнит командами.
Для устранения этой проблемы рассмотрим два возможных решения:
Посмотрим, как выглядит инициализация команд с явным указанием целевой командной панели в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем структуру параметров подключаемых команд
ПараметрыПодключаемыхКоманд = ПодключаемыеКоманды.ПараметрыПодключаемыхКоманд();
// Явно указываем командную панель динамического списка
ПараметрыПодключаемыхКоманд.КоманднаяПанель = Элементы.СписокКоманднаяПанель;
// Инициализируем подсистему с передачей параметров
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПодключаемыхКоманд);
КонецПроцедуры
Выясним следующую причину, из-за которой команды могут не обновляться или не срабатывать при выборе строк в списке. Подключаемые команды динамически изменяют свою доступность и состав в зависимости от того, какой именно объект сейчас выделен в таблице. За это отвечает обработчик события ПриАктивизацииСтроки динамического списка.
Проанализируем обязательный состав процедур в модуле управляемой формы списка:
ПриСозданииНаСервере должно быть связано с процедурой в свойствах формы, а внутри должен присутствовать вызов ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);.Список) обязательно должно быть назначено событие ПриАктивизацииСтроки, вызывающее клиентский метод обновления команд.Разберем пример стандартного клиентского кода для формы списка:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
// Обновляем доступность команд при переключении между строками
ПодключаемыеКомандыКлиент.ПриАктивизацииСтроки(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
// Выполняем выбранную подключаемую команду
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
Подсистема подключаемых команд извлекает идентификаторы выбранных объектов непосредственно из данных текущей строки таблицы. Поэтому критически важно проверить настройки динамического списка:
Ссылка. Имя поля не должно быть переименовано псевдонимом (например, нельзя писать Документ.Ссылка КАК ДокументСсылка).Ссылка должен быть установлен флаг «Использовать всегда». Если флаг не установлен, платформа в целях оптимизации может не считывать значение ссылки при отображении таблицы, и подсистема не сможет передать контекст объекта в обработчик команды печати или ввода на основании.Рассмотрим серверную сторону регистрации объекта. Для того чтобы команды БСП стали доступны для документа, его необходимо зарегистрировать в соответствующих общих модулях конфигурации:
УправлениеПечатьюПереопределенный в процедуре ПриОпределенииОбъектовСКомандамиПечати необходимо зарегистрировать метаданные документа:
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.НашСамописныйДокумент);
КонецПроцедуры
ОтчетыПереопределенный (или ВариантыОтчетовПереопределенный), а для ввода на основании — в свойствах метаданных на вкладке «Ввод на основании» либо через модуль ВводНаОснованииПереопределенный.Перейдем в модуль менеджера самого документа к экспортной процедуре ДобавитьКомандыПечати. При формировании команд печати часто используется параметр ФормыИнтерфейса. Проверьте условия формирования описания команды:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "АктПриемаПередачи";
КомандаПечати.Представление = НСтр("ru = 'Акт приема-передачи'");
// Если указана только форма документа, в списке команда не появится
// Обязательно проверяем список форм, где должна выводиться команда:
КомандаПечати.ФормыИнтерфейса = "ФормаДокумента,ФормаСписка";
КонецПроцедуры
Если параметр ФормыИнтерфейса заполнен значением "ФормаДокумента", то в форме списка эта печатная форма отображаться не будет.
Если все настройки проверены, но команды по-прежнему не выводятся, выясним состояние кэша подсистем. БСП хранит состав команд и объектов во внутренних служебных регистрах сведений. При добавлении нового объекта метаданных или изменении состава процедур в модуле менеджера кэш может не обновиться автоматически в режиме предприятия.
Для принудительного обновления выполните следующие шаги:
/ЗапуститьОбновлениеИнформационнойБазы.
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные();
После применения этих рекомендаций подключаемые команды гарантированно займут свое место в командной панели формы списка.