Как настроить заголовки колонок и открытие документов в табличном поле обработки 1С на обычных формах?

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

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

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

Причины поведения элементов формы и особенности метода СоздатьКолонки()

Рассмотрим, что происходит при стандартном выводе результата запроса в элемент формы:

  1. Метод Запрос.Выполнить().Выгрузить() формирует таблицу значений с именами колонок, соответствующими псевдонимам из языка запросов (например, ДатаЗаказа).
  2. Вызов метода ЭлементыФормы.ТЗ.СоздатьКолонки() полностью сбрасывает все колонки, настроенные ранее в редакторе формы, и пересоздает их заново на основе источника данных. При этом визуальное оформление и человекочитаемые тексты шапки теряются.

Проанализируем основные способы решения этой задачи.

Способ 1. Программная обходная настройка заголовков колонок

Если колонки создаются динамически с помощью метода СоздатьКолонки(), мы можем программно перебрать коллекцию колонок табличного поля и установить для них свойство ТекстШапки.

Разберем пример кода с перебором колонок в цикле:


Результат = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТЗ.Значение = Результат;
ЭлементыФормы.ТЗ.СоздатьКолонки();

Для Каждого Кол Из ЭлементыФормы.ТЗ.Колонки Цикл
	Если Кол.Имя = "ДатаЗаказа" Тогда
		Кол.ТекстШапки = "Дата заказа";
	ИлиЕсли Кол.Имя = "НомерЗаказа" Тогда
		Кол.ТекстШапки = "Номер заказа";
	КонецЕсли;
КонецЦикла;

Если имена колонок известны заранее, обращаемся к конкретным колонкам по их именам напрямую без применения цикла:


ЭлементыФормы.ТЗ.СоздатьКолонки();

// Прямая установка текста шапки для колонок
ЭлементыФормы.ТЗ.Колонки.ДатаЗаказа.ТекстШапки = "Дата заказа";
ЭлементыФормы.ТЗ.Колонки.НомерЗаказа.ТекстШапки = "Номер заказа";

Способ 2. Интерактивная настройка колонок в конфигураторе

Наиболее удобным подходом является настройка структуры колонок непосредственно в редакторе формы в конфигураторе:

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

Для связывания данных достаточно просто присвоить результат выгрузки или заполнить таблицу построчно:


// Присвоение таблицы значений источнику данных без сброса колонок
ЭлементыФормы.ТЗ.Значение = Запрос.Выполнить().Выгрузить();

// ИAlternate-вариант построчного заполнения сохраненной структуры:
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого Стр Из РезультатЗапроса Цикл
	ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Стр);
КонецЦикла;

Интерактивное открытие документа из табличного поля

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

Вариант 1. Включение кнопки открытия у элемента управления колонки

Чтобы в ячейке с ссылкой на документ появилась стандартная кнопка открытия (лупа или стрелка), необходимо активировать свойство КнопкаОткрытия для элемента управления колонки:


Для Каждого Кол Из ЭлементыФормы.ТЗ.Колонки Цикл
	Если Кол.Имя = "Заказ" Тогда
		Кол.ЭлементУправления.КнопкаОткрытия = Истина;
	КонецЕсли;
КонецЦикла;

Данную процедуру обычно вызывают при первоначальной инициализации формы (в событии ПриОткрытии) или сразу после выполнения запроса и формирования колонок.

Вариант 2. Использование события Выбор табличного поля

Если нужно открывать форму объекта по двойному клику мыши или по нажатию Enter, используем событие Выбор для табличного поля:


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

Применение процедуры ОткрытьЗначение() перехватывает клик пользователя и стандартно открывает форму документа ЗаказПокупателя, переданного в строке таблицы.

← На главную