Как вывести команду регистра сведений в панель навигации формы справочника в расширении?

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

Разберем типичную задачу разработчика при создании расширения конфигурации: на форму элемента пользовательского справочника необходимо вывести команду перехода к записям регистра сведений (например, к регистру ШтрихкодыНоменклатуры). Нередко после добавления регистра и формы в расширение команда в командной панели или панели навигации формы попросту не появляется в режиме «1С:Предприятие». Выясним причину такого поведения платформы и рассмотрим, как правильно настроить параметризованные команды и какие есть альтернативные варианты решения.

Анализ проблемы: почему стандартная команда не отображается

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

  1. Несоответствие типа параметра команды: в свойствах команды регистра в поле Тип параметра команды не указана ссылка на целевой справочник. Если тип не совпадает с типом основного реквизита формы (СправочникСсылка.НашСправочник), платформа скрывает такую команду, так как не может передать в нее контекст текущего элемента.
  2. Неверная группа размещения: команда должна располагаться строго в ветке Панель навигации формы.Перейти (или Панель навигации формы.Важное/Обычное).
  3. Объект не записан в базе данных: команды панели навигации, требующие ссылку на объект, по умолчанию не отображаются для новых, еще не записанных элементов справочника. Ссылка появляется только после нажатия кнопки «Записать».
  4. Пользовательские настройки формы: если карточка справочника уже открывалась пользователем ранее, платформа могла сохранить структуру элементов. В режиме «1С:Предприятие» можно выполнить команду Еще — Изменить форму — Установить стандартные настройки.
  5. Права доступа в расширении: у текущего пользователя могут отсутствовать права на чтение регистра или просмотр самой команды в рамках ролей расширения.

Пошаговое решение через параметризованную команду регистра

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

  1. Добавим регистр сведений и целевой справочник в расширение конфигурации.
  2. Откроем свойства команды регистра (или создадим новую команду регистра сведений).
  3. В палитре свойств команды найдем свойство Тип параметра команды и укажем в нем тип ссылки нашего справочника (например, СправочникСсылка.МойСправочник).
  4. Откроем управляемую форму элемента справочника в расширении. В верхнем левом окне перейдем на вкладку Командный интерфейс.
  5. Найдем наш регистр сведений в списке доступных команд и установим флаг видимости в группе Перейти (Панель навигации формы).
  6. Убедимся, что в регистре сведений есть измерение соответствующего ссылочного типа, и для него установлен признак Ведущее — это необходимо для автоматической фильтрации записей при переходе.

Альтернатива 1: Программное открытие регистра через команду формы

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

  1. На форме элемента справочника создадим команду формы, назовем ее КомандаОткрытьШтрихкоды.
  2. Перетащим созданную команду в командную панель формы или в группу Панель навигации формы.Перейти.
  3. Создадим клиентский обработчик команды со следующим кодом:

&НаКлиенте
Процедура КомандаОткрытьШтрихкоды(Команда)
    
    Если Объект.Ссылка.Пустая() Тогда
        ПоказатьПредупреждение(, НСтр("ru = 'Сначала необходимо записать элемент!'"));
        Возврат;
    КонецЕсли;
    
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", Объект.Ссылка);
    
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("Отбор", ПараметрыОтбора);
    
    ОткрытьФорму("РегистрСведений.ШтрихкодыНоменклатуры.ФормаСписка", ПараметрыОткрытия, ЭтаФорма);
    
КонецПроцедуры

Такой подход обеспечивает полный контроль над открытием формы списка и установкой произвольных отборов по любым реквизитам.

Альтернатива 2: Встраивание динамического списка непосредственно на форму

Проанализируем еще один удобный вариант, позволяющий пользователю видеть связанные записи без перехода в отдельное окно:

  1. Откроем форму элемента справочника и перейдем на вкладку Реквизиты.
  2. Создадим новый реквизит формы Штрихкоды с типом ДинамическийСписок.
  3. В свойствах динамического списка укажем основную таблицу РегистрСведений.ШтрихкодыНоменклатуры.
  4. Перенесем реквизит Штрихкоды в элементы формы (в виде таблицы формы).
  5. В обработчике события формы ПриСозданииНаСервере настроим отбор по текущему элементу:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЭлементОтбора = Штрихкоды.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Объект.Ссылка;
    ЭлементОтбора.Использование = Истина;
    
КонецПроцедуры

Таким образом, для решения задачи достаточно правильно настроить тип параметра команды в расширении либо применить программное открытие формы с отбором через метод ОткрытьФорму.

← На главную