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