Как открыть форму связанного справочника при нажатии на колонку динамического списка

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

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

Метод 1: Использование события Выбор

Самый распространенный способ решения задачи — перехват события Выбор у таблицы формы, которая отображает динамический список. Это событие срабатывает при двойном клике мышью или при нажатии клавиши Enter на клавиатуре.

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

  1. Найдем в дереве элементов формы нашу таблицу (динамический список).
  2. Перейдем в палитру свойств и создадим обработчик события Выбор на клиенте.
  3. Внутри обработчика напишем код, который будет проверять, какая именно колонка была выбрана.

Рассмотрим пример кода для этого события:


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

КонецПроцедуры

В этом примере мы используем параметр СтандартнаяОбработка. Установка его в значение Ложь критически важна, так как она сообщает системе, что мы берем управление на себя и выполнять стандартное открытие основного справочника не нужно. Если этого не сделать, откроются сразу две формы: и основной объект, и связанный реквизит.

Метод 2: Использование свойства Гиперссылка

С точки зрения пользовательского опыта (UX), более удобным и современным решением является использование гиперссылок. В этом случае текст в колонке подсвечивается синим цветом, а переход осуществляется одиночным кликом. Рассмотрим, как это реализовать.

Выясним последовательность действий:

  1. Выберем элемент формы (поле ввода), соответствующий нашей колонке в списке.
  2. В свойствах элемента установим флаг Гиперссылка в значение Истина.
  3. Создадим обработчик события Нажатие для этого поля.

Посмотрим на пример реализации кода:


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

Преимущество этого метода в том, что нам не нужно анализировать имя поля через Поле.Имя, так как обработчик привязан непосредственно к конкретной колонке. Это делает код более чистым и понятным.

Выбор между ПоказатьЗначение и ОткрытьФорму

Проанализируем ситуацию: какой метод открытия формы лучше использовать? Платформа предоставляет как минимум два основных способа.

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

Метод ОткрытьФорму следует использовать в более сложных сценариях. Например, если нам нужно:

Пример использования метода ОткрытьФорму:


ПараметрыФормы = Новый Структура("Ключ", ТекущиеДанные.Контрагент);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);

Важные нюансы при работе с Динамическим списком

При реализации подобных механизмов нужно учитывать особенности работы динамических списков. Проверим несколько важных моментов:

Во-первых, убедимся, что реквизит, который мы хотим открыть, включен в запрос динамического списка. Если вы используете произвольный запрос, проверьте, что поле выбрано и его тип определен однозначно. Если поле в запросе является составным типом, 1С может не сразу понять, какую форму открывать, поэтому лучше типизировать его с помощью оператора ВЫРАЗИТЬ в тексте запроса.

Во-вторых, обратим внимание на производительность. Использование метода Элементы.Список.ТекущиеДанные — это самый быстрый способ получить значения полей текущей строки, так как эти данные уже кэшированы на стороне клиента. Не стоит делать дополнительные вызовы к серверу для получения ссылки, если она уже есть в колонках списка.

В-третьих, не забывайте про мобильный клиент. Если ваше решение будет использоваться на мобильных устройствах, использование модальных окон запрещено. Методы с префиксом Показать (такие как ПоказатьЗначение) идеально подходят для работы в мобильном приложении, обеспечивая корректную работу интерфейса.

Резюме

Мы рассмотрели два основных подхода к открытию связанных форм из динамического списка. Использование события Выбор подходит для классического управления через двойной клик, в то время как свойство Гиперссылка вместе с событием Нажатие обеспечивает более современный интерфейс. В обоих случаях ключом к успеху является правильное использование СтандартнаяОбработка = Ложь и корректное извлечение данных из ТекущиеДанные.

← На главную