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

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

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

Причины, по которым клик не открывает документ

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

  1. Стандартное поведение табличного поля: по умолчанию обработка двойного клика открывает форму текущей строки (основной документ списка, находящийся в ТекущиеДанные.Ссылка), игнорируя то, на какую конкретно колонку нажал пользователь.
  2. Режим редактирования ячейки: если для колонки свойство ТолькоПросмотр установлено в значение Ложь, платформа при двойном клике начинает интерактивное редактирование значения ячейки, а не открытие ссылки.
  3. Неверный тип данных в источнике: если в колонку выводится не ссылка, а строка (например, номер или строковое представление через функцию запроса ПРЕДСТАВЛЕНИЕ()), платформа не воспринимает значение как объект базы данных.

Способ 1. Обработка события «Выбор» табличного поля (рекомендуемый подход)

Рассмотрим основной способ решения задачи — переопределение логики в событии Выбор табличного поля списка. Важно настраивать обработчик именно для самого табличного поля, а не для отдельной колонки или ячейки.

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

  1. Открываем форму списка документов в конфигураторе.
  2. Выделяем элемент управления — табличное поле списка (например, Список или ДокументСписок).
  3. В палитре свойств находим категорию События и создаем обработчик для события Выбор.
  4. В модуле формы прописываем проверку имени активированной колонки и команду открытия значения.

Посмотрим на пример кода с использованием универсальной процедуры ОткрытьЗначение():


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

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

Способ 2. Явное получение формы объекта через «ПолучитьФорму()»

Рассмотрим альтернативный вариант, когда требуется дополнительно управлять параметрами открываемой формы или проверять ее текущее состояние перед открытием.

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


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

Способ 3. Использование кнопки открытия в поле ввода

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

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

При такой настройке в ячейке появится кнопка перехода (лупа), а также станет доступно стандартное сочетание клавиш F4 для открытия связанного документа.

Рекомендации по оптимизации и безопасности

Проанализируем правила, которые помогут избежать ошибок при работе с пользовательскими ссылочными полями:

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