Как правильно выводить секции макета в 1С при использовании горизонтального размещения?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

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

Понимание природы областей макета

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

Когда вы задаете имя области в редакторе, вы просто помечаете координаты ячеек (строк и колонок). Система не знает о том, что одна область «лежит» внутри другой. Соответственно, при вызове метода ПолучитьОбласть() вы всегда получаете только тот диапазон, который был закреплен за конкретным именем.

Разбираем ошибку «вложенности»

Многие разработчики пытаются сначала вывести «родительскую» область, ожидая, что «дочерние» элементы появятся автоматически. Это главная ошибка. Если вы выводите область «Шапка», в табличный документ попадают только ячейки, входящие в эту область. Если внутри шапки есть область «НазванияСтолбцов», она не станет частью шапки автоматически — ее нужно выводить или присоединять отдельно.

Правильный алгоритм вывода горизонтальных секций

Чтобы вывести структуру, в которой элементы расположены в одну строку (горизонтально), необходимо следовать принципу независимых областей. Рассмотрим подробнее по шагам, как это реализовать на практике:

  1. Определение областей: В макете выделите каждую часть (шапка, названия столбцов, строки, подвал) как отдельную область.
  2. Получение объектов: Используйте метод ПолучитьОбласть() для каждой из них отдельно. При необходимости используйте синтаксис ИмяОбласти|ИмяКолонки, если вы работаете с горизонтальными секциями.
  3. Последовательный вывод: Для вывода первой части используйте метод Вывести(). Для всех последующих частей, которые должны стоять в той же строке, используйте метод Присоединить().

Пример программного кода

Давайте посмотрим, как правильно организовать вывод шапки и заголовков столбцов в цикле. Такой подход обеспечит корректное формирование табличного документа:


// Получаем объекты областей из макета
ОбластьШапка = Макет.ПолучитьОбласть(\"Шапка|ОбластьГоризонтальная\");
ОбластьНазванияСтолбцов = Макет.ПолучитьОбласть(\"НазванияСтолбцов|ОбластьГоризонтальная\");

// Выводим основную шапку
ТДВыводПечатиУТ.Вывести(ОбластьШапка);

// Организуем вывод колонок в цикле
Индекс = 1;
Для Каждого Колонка Из ТзРез.Колонки Цикл
    // Заполняем параметры ячейки (например, заголовок)
    ОбластьНазванияСтолбцов.Параметры.Заголовок = Колонка.Заголовок;
    
    // Присоединяем область к текущей строке
    ТДВыводПечатиУТ.Присоединить(ОбластьНазванияСтолбцов);
    
    Индекс = Индекс + 1;
КонецЦикла;

Почему метод Присоединить() лучше?

Метод Присоединить() добавляет область в текущую строку табличного документа, справа от уже выведенных элементов. Это ключевой момент при работе с динамическими колонками. Если вы будете использовать Вывести(), каждая область будет начинаться с новой строки, что разрушит структуру вашей таблицы.

Если вы хотите создать сложный заголовок, разбивайте его на части: «ШапкаЛево», «ШапкаКолонка» (которая будет повторяться) и «ШапкаПраво». Таким образом, вы полностью контролируете процесс формирования документа, избегая логических ошибок «вложенности».

Важное примечание: всегда проверяйте, чтобы имена областей в коде строго соответствовали именам, заданным в макете. Ошибки в именовании — самая частая причина, по которой метод ПолучитьОбласть() возвращает пустой результат или вызывает ошибку.

← На главную