Как добавить гиперссылку на регистр сведений в форму справочника через расширение 1С

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

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

Метод 1. Использование свойства Ведущее для измерения

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

Проанализируем шаги для реализации этого в расширении:

  1. Добавим необходимый регистр сведений в расширение.
  2. В расширении найдем нужное измерение (тип которого соответствует нашему справочнику).
  3. Установим флаг Ведущее.

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

Метод 2. Создание собственной команды (универсальный способ)

Если свойство Ведущее по каким-то причинам не подходит (например, тип связи — ресурс, а не измерение) или флаг Использовать стандартные команды в основной конфигурации выключен и заблокирован, мы можем создать альтернативную команду перехода. Это самый надежный способ для расширения, который позволяет выполнить добавление элементов формы на управляемые формы с минимальными затратами усилий.

Выполним следующие действия по шагам:

  1. В расширении создадим новый объект Команда внутри нашего регистра сведений.
  2. В свойствах команды укажем Группа: Панель навигации формы.Перейти.
  3. В поле Тип параметра команды выберем ссылку на наш справочник (например, СправочникСсылка.Номенклатура).
  4. В модуле команды пропишем программное открытие формы списка регистра с отбором.

Рассмотрим пример кода для процедуры ОбработкаКоманды:


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

Метод 3. Программная настройка в форме списка регистра

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


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

Почему ссылка может не отображаться?

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

Таким образом, мы выяснили, что создание собственной команды в расширении — это наиболее гибкий метод, позволяющий обойти платформенные ограничения на изменение стандартных свойств типовой конфигурации.

← На главную