При разработке и доработке форм списков в платформе 1С:Предприятие (обычные формы) разработчики часто сталкиваются с ситуацией, когда в таблицу выводится дополнительная колонка со ссылкой на другой документ (например, реквизит Оплата, ДокументОснование или СчетНаОплату). По умолчанию двойной клик по такой строке открывает основной документ текущей строки либо просто активирует редактирование ячейки, не открывая связанный объект. Разберем причины такого поведения и рассмотрим правильные способы настройки перехода к связанному документу.
Проанализируем основные факторы, препятствующие стандартному переходу по ссылке из колонки списка:
ТекущиеДанные.Ссылка), игнорируя то, на какую конкретно колонку нажал пользователь.ТолькоПросмотр установлено в значение Ложь, платформа при двойном клике начинает интерактивное редактирование значения ячейки, а не открытие ссылки.ПРЕДСТАВЛЕНИЕ()), платформа не воспринимает значение как объект базы данных.Рассмотрим основной способ решения задачи — переопределение логики в событии Выбор табличного поля списка. Важно настраивать обработчик именно для самого табличного поля, а не для отдельной колонки или ячейки.
Разберем по шагам порядок действий в конфигураторе:
Список или ДокументСписок).Посмотрим на пример кода с использованием универсальной процедуры ОткрытьЗначение():
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
// Проверяем, что пользователь кликнул именно по ссылочной колонке
Если Колонка.Имя = "Оплата" И ЗначениеЗаполнено(Элемент.ТекущиеДанные.Оплата) Тогда
// Отменяем стандартное открытие текущего документа списка
СтандартнаяОбработка = Ложь;
// Открываем форму связанного документа
ОткрытьЗначение(Элемент.ТекущиеДанные.Оплата);
КонецЕсли;
КонецПроцедуры
Важный нюанс: флаг СтандартнаяОбработка = Ложь необходимо устанавливать строго внутри условия проверки имени колонки. Если сбросить этот параметр безусловно, перестанет работать стандартное открытие основного документа списка при клике на любые другие колонки таблицы.
Рассмотрим альтернативный вариант, когда требуется дополнительно управлять параметрами открываемой формы или проверять ее текущее состояние перед открытием.
Посмотрим на пример реализации:
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
Если Колонка.Имя = "Оплата" И ЗначениеЗаполнено(Элемент.ТекущиеДанные.Оплата) Тогда
СтандартнаяОбработка = Ложь;
СсылкаНаДокумент = Элемент.ТекущиеДанные.Оплата;
ФормаДокумента = СсылкаНаДокумент.ПолучитьФорму("ФормаДокумента");
Если НЕ ФормаДокумента.Открыта() Тогда
ФормаДокумента.Открыть();
Иначе
ФормаДокумента.Активизировать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Разберем вариант интерфейсной настройки ячейки, позволяющий открывать документ с помощью специальной кнопки без написания сложного программного кода перехвата выбора:
ПолеВвода.Истина).Истина, чтобы исключить случайное изменение ссылки прямо в таблице.При такой настройке в ячейке появится кнопка перехода (лупа), а также станет доступно стандартное сочетание клавиш F4 для открытия связанного документа.
Проанализируем правила, которые помогут избежать ошибок при работе с пользовательскими ссылочными полями:
ЗначениеЗаполнено() перед вызовом методов открытия, чтобы избежать попыток открытия пустых ссылок или значений Неопределено.Таблица.Ссылка), а не его текстовое представление.ОткрытьЗначение() автоматически проверяет права пользователя на чтение и просмотр открываемого объекта, предотвращая аварийное завершение работы программы.