При разработке сложных отчетов или печатных форм часто возникает задача показать пользователю структуру макета «как она есть» в конфигураторе. Это бывает необходимо для создания редакторов шаблонов писем, настройки пользовательских печатных форм или просто для отладки вывода данных. Главная сложность заключается в том, что по умолчанию 1С при выводе области макета заменяет параметры (те самые значения в угловых скобках, например, <ФИО>) на пустые строки или конкретные значения из коллекции Параметры.
В этой статье мы подробно разберем, как заставить табличный документ отображать именно имена параметров, а не их содержимое, используя как современные возможности платформы, так и универсальные программные методы.
Начиная с версии платформы 8.3.7, у объекта ТабличныйДокумент появилось «волшебное» свойство Макет. Это наиболее быстрый и правильный способ добиться желаемого результата без написания сложных циклов. Когда это свойство установлено в значение Истина, табличный документ переходит в режим редактирования макета.
Проанализируем, что происходит при включении этого режима:
Заполнение установлено в значение Параметр, автоматически начинают отображать имя этого параметра в угловых скобках.Шаблон, платформа покажет структуру шаблона с именами параметров внутри.Вывести() или Присоединить() параметры не будут замещаться значениями из кода, что позволяет сохранить визуальную структуру шаблона.Рассмотрим пример кода для реализации этого подхода:
// Создаем новый табличный документ или берем существующий
ТабДок = Новый ТабличныйДокумент;
// Устанавливаем режим макета
ТабДок.Макет = Истина;
// Получаем область из макета конфигурации
МакетКонфигурации = ПолучитьМакет("МакетПечати");
ОбластьПодвал = МакетКонфигурации.ПолучитьОбласть("Подвал");
// Выводим область — параметры в ней останутся именами (например, <Руководитель>)
ТабДок.Вывести(ОбластьПодвал);
// Показываем результат пользователю
ТабДок.Показать("Предварительный просмотр макета");
Важный нюанс: Свойство Макет доступно на сервере, в толстом клиенте и во внешнем соединении. Если вы работаете в тонком клиенте, убедитесь, что установка свойства происходит в контексте, где объект ТабличныйДокумент доступен для изменения (обычно это серверный вызов).
Если по какой-то причине использование свойства Макет вам не подходит (например, требуется работа на очень старых версиях платформы или специфическое форматирование), можно воспользоваться программным методом «наполнения» параметров их собственными именами. Разберем этот алгоритм по шагам.
Вместо того чтобы перебирать каждую ячейку таблицы по координатам (строка/колонка), что крайне непроизводительно для больших документов, мы обратимся напрямую к коллекции Параметры конкретной области. Выясним, как это реализовать эффективно:
Область = Макет.ПолучитьОбласть("Заголовок");
// Перебираем все параметры, которые физически существуют в данной области макета
Для каждого ИмяПараметра Из Область.Параметры Цикл
// Присваиваем параметру его же имя, оформленное в угловые скобки
// Используем метод Ключ, так как ПараметрыОбластиТабличногоДокумента ведут себя как структура
Область.Параметры[ИмяПараметра.Ключ] = "<" + ИмяПараметра.Ключ + ">";
КонецЦикла;
ТабДок.Вывести(Область);
Этот способ гарантирует, что при выводе области 1С найдет значение для каждого параметра и подставит туда текст, который мы подготовили. Однако помните, что этот метод не сработает автоматически для ячеек с типом Шаблон (например, «Срок выполнения: [Срок] дней»), так как шаблон — это не просто параметр, а составная строка текста.
Если ваша задача — создать интерактивный редактор макета прямо на форме обработки, лучше всего воспользоваться свойствами элемента формы. У элемента типа Поле табличного документа есть свойство Расширение, которое позволяет переключить визуальное поведение поля.
Рассмотрим, как настроить это в управляемых формах:
ТабличныйДокумент.Истина.После этого поле начнет работать в режиме конструктора: появятся обозначения параметров, а пользователь сможет редактировать текст, не теряя при этом привязку к параметрам. Если же вам нужно включать и выключать этот режим программно (например, кнопкой «Режим конструктора»), используйте следующий код:
&НаКлиенте
Процедура ПереключитьРежимМакета(Команда)
// Устанавливаем свойство элемента формы
Элементы.ПолеТабличногоДокумента.Макет = Не Элементы.ПолеТабличногоДокумента.Макет;
// Часто в режиме макета полезно включить отображение сетки и заголовков
Элементы.ПолеТабличногоДокумента.ОтображатьСетку = Истина;
Элементы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Истина;
КонецПроцедуры
Чтобы табличный документ в режиме предприятия выглядел абсолютно так же, как макет в конфигураторе, одного отображения параметров может быть недостаточно. Проанализируем дополнительные свойства, которые помогут достичь максимального сходства:
1. Отображение имен областей (строк и колонок)
В конфигураторе мы видим серые полосы слева и сверху, где написаны имена назначенных областей. В пользовательском режиме за это отвечает свойство ОтображатьИменованныеСтрокиИКолонки. Установите его в значение Истина, чтобы визуализировать структуру группировок макета.
2. Работа с типами заполнения
Важно помнить, что ячейки могут иметь три типа заполнения:
<Имя>.Текст [ИмяПараметра].Если вы используете ручной перебор ячеек (Метод 2) и хотите обработать шаблоны, вам придется анализировать свойство Заполнение каждой ячейки Область.Область(Р, К). Если Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон, то в свойство Текст ячейки нужно вручную записать ее исходную структуру, которую можно получить из макета.
Для современных конфигураций на платформе 8.3 рекомендуется использовать свойство ТабличныйДокумент.Макет = Истина. Это избавляет от необходимости писать циклы обхода и корректно обрабатывает все типы заполнения ячеек, включая шаблоны. Если же требуется тонкая настройка вывода или работа в старых окружениях, программное присвоение имен в коллекцию Параметры остается надежным и проверенным решением.