При разработке отчетов и печатных форм в системе 1С:Предприятие часто возникает необходимость визуально выделить структуру макета. Одним из удобных инструментов для этого является отображение именованных областей (строк и колонок) непосредственно на экране, аналогично тому, как это делает разработчик при редактировании макета в конфигураторе. Пользователь или разработчик может включить этот режим интерактивно через меню Таблица — Имена — Отображение именованных строк/колонок. Однако при попытке автоматизировать это действие программно разработчики часто сталкиваются с трудностями.
В этой статье мы подробно разберем, почему возникает путаница при попытке программного включения этого режима, выясним причину технических ограничений и рассмотрим рабочее решение для современных конфигураций.
Проанализируем типичный сценарий, с которого начинается поиск решения. Разработчик создает новый табличный документ в коде, заполняет его данными и пытается настроить его отображение с помощью стандартных свойств объекта:
ТабДок = Новый ТабличныйДокумент;
ТабДок.ОтображатьЗаголовки = Истина;
ТабДок.ОтображатьСетку = Истина;
// Попытка включить отображение именованных областей:
ТабДок.ОтображатьИменаСтрокИКолонок = Истина; // Ошибка! Поле объекта не обнаружено
Попытка обратиться к свойству ОтображатьИменаСтрокИКолонок у самого объекта ТабличныйДокумент всегда будет приводить к ошибке времени выполнения. Причина кроется в архитектурном разделении платформы на данные (объект) и элементы интерфейса (формы).
Сам по себе объект ТабличныйДокумент содержит только данные ячеек, параметры форматирования и структуру областей. Он ничего «не знает» о том, как именно он выводится на экран конкретному пользователю. Свойство управления показом имен областей относится исключительно к визуальному элементу управления на форме.
Если вы работаете в управляемом приложении (интерфейс «Такси» или стандартные управляемые формы платформы 8.3), то программное решение существует. Начиная с версии платформы 8.3.3, разработчики добавили необходимое свойство для элемента формы типа «Поле табличного документа».
Разберем по шагам, как правильно применить это свойство в коде управляемой формы:
Поле табличного документа (например, с именем Результат).Элементы.Истина.Рассмотрим пример готового кода для процедуры вывода отчета на управляемой форме:
&НаСервере
Процедура ВывестиТабличныйДокументНаФорму()
// Получаем макет и заполняем табличный документ данными
Макет = Обработки.МояОбработка.ПолучитьМакет("Макет");
ТабДок = РеквизитФормыВЗначение("Объект").ПолучитьТабличныйДокумент(Макет);
// Помещаем подготовленный документ в реквизит формы, связанный с полем экрана
ЗначениеВРеквизитФормы(ТабДок, "Результат");
// Включаем отображение именованных строк и колонок через Элементы формы
Элементы.Результат.ОтображатьИменаСтрокИКолонок = Истина;
// Важно: для показа именованных областей обязательно должны быть включены стандартные заголовки!
Элементы.Результат.ОтображатьЗаголовки = Истина;
КонецПроцедуры
Обратите внимание на ключевой момент: мы устанавливаем свойство ОтображатьИменаСтрокИКолонок не у переменной ТабДок, а у элемента интерфейса Элементы.Результат.
Если ваша конфигурация работает на обычных (толстых) формах, то реализовать данную задачу полностью программными средствами платформы невозможно. Элемент управления ПолеТабличногоДокумента в старой технологии форм не имеет свойства ОтображатьИменаСтрокИКолонок в своем программном интерфейсе.
В этой ситуации у разработчика остаются следующие альтернативные варианты:
Проанализируем еще одну важную деталь, без которой отображение имен работать не будет. Даже если вы установите свойство ОтображатьИменаСтрокИКолонок в значение Истина, имена областей могут остаться невидимыми на экране. Это происходит в тех случаях, когда в поле табличного документа отключен показ стандартных заголовков (номеров строк 1, 2, 3... и буквенных обозначений колонок A, B, C...).
Область отображения имен технически совмещена со стандартной панелью заголовков. Поэтому для успешного вывода имен всегда используйте связку двух свойств:
// Включаем отображение номеров строк и букв колонок
Элементы.ПолеТаблицы.ОтображатьЗаголовки = Истина;
// Включаем отображение названий именованных областей поверх стандартных заголовков
Элементы.ПолеТаблицы.ОтображатьИменаСтрокИКолонок = Истина;
Также стоит учитывать состояние свойства ТолькоПросмотр у табличного документа. Если документ открывается исключительно для чтения (ТолькоПросмотр = Истина), в некоторых релизах платформы отображение структуры макета может блокироваться, так как этот функционал изначально ориентирован на разработчиков и архитекторов отчетов в режиме редактирования. Если вы столкнулись с тем, что имена областей не выводятся, проверьте доступность редактирования документа на форме.
Используя описанный подход с разделением объекта данных и элемента формы, вы сможете гибко управлять внешним видом отчетов и предоставлять пользователям удобные инструменты для анализа макетов непосредственно в режиме работы предприятия.