Как в табличном поле интерактивно открыть справочник?

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

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

Разбор причин некорректного поведения

Основная проблема заключается в том, как именно мы описываем типы данных для колонок нашей ТаблицаЗначений. В платформе 1С существует принципиальная разница между передачей типа в виде строки и использованием объекта Тип.

Когда мы пытаемся создать колонку, передавая строку "СправочникСсылка.ИмяСправочника", платформа не всегда может однозначно интерпретировать это значение как ссылочный тип, поддерживающий стандартные механизмы открытия форм объектов. Чтобы система поняла, что в ячейке должна быть именно «ссылка», необходимо использовать конструктор Тип().

Пошаговое решение задачи

Рассмотрим, как правильно реализовать типизацию данных, чтобы табличное поле автоматически «подхватило» нужные элементы управления, включая кнопку открытия.

  1. Создание массива типов данных: Вместо добавления строки, мы должны добавить объект Тип, содержащий нужную нам ссылку на справочник.
  2. Создание колонки: Используем ОписаниеТипов на основе подготовленного массива.
  3. Настройка элемента управления: Убедимся, что колонка действительно использует ПолеВвода, и активируем свойство КнопкаОткрытия.

Давайте посмотрим на пример кода, который решает эту проблему:


СписокТипов = Новый Массив;
// Правильный способ: используем Тип("...")
СписокТипов.Добавить(Тип("СправочникСсылка.Пользователи"));

Таблица = Новый ТаблицаЗначений;
// Создаем колонку с корректным описанием типов
Таблица.Колонки.Добавить("Пользователь", Новый ОписаниеТипов(СписокТипов));

// Назначаем таблицу на форму
ЭлементыФормы.ТабличноеПоле.Значение = Таблица;
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();

// Настраиваем колонку для интерактивного открытия
Кол = ЭлементыФормы.ТабличноеПоле.Колонки["Пользователь"];
Кол.УстановитьЭлементУправления(Тип("ПолеВвода"));
Кол.ЭлементУправления.КнопкаОткрытия = Истина;

Важные замечания по настройке

При работе с ТабличноеПоле важно помнить о следующих нюансах:

Использование метода УстановитьЭлементУправления: Этот метод позволяет принудительно задать тип элемента управления, который будет отображаться в ячейке. Однако, если сама ТаблицаЗначений не содержит корректно типизированных данных, даже принудительная установка ПолеВвода может не привести к желаемому результату. Стандартное поведение (открытие справочника) активируется только тогда, когда платформа «видит» в колонке ссылку на объект конфигурации.

Свойства элемента управления: После вызова УстановитьЭлементУправления(Тип("ПолеВвода")) у колонки появляется свойство ЭлементУправления. Именно в нем мы управляем видимостью и доступностью кнопок через свойства КнопкаОткрытия и КнопкаВыбора.

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

Итоги

Если кнопка открытия не появляется или открывает что-то иное (например, строку), в 99% случаев проблема заключается в ОписаниеТипов. Заменив строковое описание на Тип("..."), вы позволяете платформе автоматически применить все встроенные механизмы работы со ссылочными данными. Этот подход является стандартом разработки при работе с обычными формами 1С.

← На главную