Разработка и Конфигурация · 12 мин
Как сделать таблицу в макете 1С
Как создать таблицу в макете 1С: типы макетов, именованные области, заполнение параметров, вывод секций и типичные ошибки при работе с табличным документом.
Макет в 1С — это шаблон, по которому программа формирует печатную форму, отчёт или табличный документ. Чаще всего в макете требуется таблица: шапка с названиями колонок, строки с данными и итоги. Вся работа строится в два этапа: сначала таблица рисуется в редакторе макета, затем из программного кода заполняется параметрами и выводится в результирующий табличный документ.
Инструмент одинаков для большинства конфигураций: и в «1С:Бухгалтерии», и в «1С:Управление торговлей», и в самописных решениях макеты создаются в конфигураторе через редактор табличного документа. Различия касаются только того, где именно хранится макет — в общих макетах, в объекте метаданных (документ, справочник, отчёт) или во внешней обработке.
Ниже разобран полный цикл: создание макета, оформление таблицы, выделение областей, заполнение данными из кода, проверка результата и типичные ошибки, из-за которых таблица выводится пустой или «разваливается» при печати.
Где создаётся макет и какой тип выбрать
Макет можно добавить в нескольких местах дерева конфигурации. Если таблица нужна для печатной формы конкретного документа, макет создают в ветке этого документа: правый клик по объекту — «Добавить» — «Макет». Если таблица используется в нескольких местах, логичнее создать общий макет в ветке «Общие» — «Общие макеты». Для внешних печатных форм макет добавляется в состав самой внешней обработки.
При создании мастер предложит выбрать тип макета. Для таблицы нужен тип «Табличный документ» — именно он открывается визуальным редактором, похожим на электронную таблицу. Тип «Схема компоновки данных» нужен для отчётов на СКД, а «Текстовый документ» и «HTML-документ» для таблиц не подходят.
После выбора типа откроется редактор: сетка ячеек с номерами строк и буквами колонок. Каждая ячейка имеет свойства — текст, тип заполнения, шрифт, границы, выравнивание. Именно здесь «рисуется» будущая таблица.
Как нарисовать таблицу в редакторе макета
Таблица в макете — это обычные ячейки с настроенными границами и текстом. Практический порядок такой: в первой строке введите названия колонок («Номенклатура», «Количество», «Цена», «Сумма»), во второй строке оставьте заготовку для данных, в третьей — строку итогов. Затем выделите диапазон и через панель свойств задайте границы ячеек, жирный шрифт для шапки и выравнивание чисел по правому краю.
Ширину колонок удобнее задавать не мышью, а через свойство «Ширина колонки» в панели свойств — так значения будут точными и одинаковыми для однотипных колонок. Если таблица должна растягиваться по ширине страницы при печати, используйте свойство «АвтоМасштаб» у итогового табличного документа, а не подгонку ширины вручную.
Для ячеек, куда будут подставляться данные, важно изменить свойство «Заполнение» со значения «Текст» на «Параметр», а в свойстве «Параметр» указать имя, например «Номенклатура» или «Сумма». Альтернатива — оставить заполнение «Шаблон» и вписать текст вида «Заказ №[Номер] от [Дата]», где в квадратных скобках указаны имена параметров. Шаблон удобен, когда в одной ячейке нужно склеить несколько значений.
- 1Создайте макет с типом «Табличный документ» в нужном объекте или в общих макетах
- 2Введите заголовки колонок и оформите границы, шрифты, выравнивание
- 3Для ячеек с данными установите заполнение «Параметр» и задайте имена параметров
- 4Выделите строки в именованные области: шапка, строка данных, итог
- 5Напишите код: получите макет, заполните параметры областей, выведите их в табличный документ
- 6Сформируйте печатную форму и проверьте результат на реальных данных
Именованные области: как разбить таблицу на секции
Без областей макет остаётся статичной картинкой. Чтобы программа могла выводить шапку один раз, строки — многократно в цикле, а итог — в конце, каждую часть таблицы выделяют в именованную область. Для этого выделите нужные строки (клик по заголовку строки слева с протягиванием) и нажмите Ctrl+Shift+N либо используйте меню «Таблица» — «Имена» — «Назначить имя».
Типовой набор областей для табличной части: «Шапка» (заголовок документа и названия колонок), «Строка» (одна строка данных, которая будет выводиться в цикле), «Итог» или «Подвал» (суммы по документу). Имена принято давать латиницей без пробелов: Shapka, Stroka, Itog — либо кириллицей, это тоже допустимо, главное — не допускать опечаток при обращении из кода.
Области бывают горизонтальные (строки) и вертикальные (колонки). Для таблиц почти всегда используются горизонтальные. Вертикальные нужны, когда таблица строится слева направо — например, колонки соответствуют периодам. Учтите, что область включает строки целиком, поэтому лишние пустые строки внутри области попадут в вывод.
Как заполнить таблицу данными из кода
Заполнение выполняется в модуле — например, в модуле менеджера документа в процедуре печати. Общая схема: получить макет, создать табличный документ, в цикле по данным получать область «Строка», заполнять её параметры и выводить.
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент)
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
// Шапка
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = СсылкаНаДокумент.Номер;
ОбластьШапка.Параметры.Дата = Формат(СсылкаНаДокумент.Дата, "ДЛФ=D");
ТабДок.Вывести(ОбластьШапка);
// Строки таблицы
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТовара Из СсылкаНаДокумент.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
// Итог
ОбластьИтог = Макет.ПолучитьОбласть("Итог");
ОбластьИтог.Параметры.ИтогоСумма = СсылкаНаДокумент.Товары.Итог("Сумма");
ТабДок.Вывести(ОбластьИтог);
Возврат ТабДок;
КонецФункции
Метод Параметры.Заполнить(СтрокаТовара) удобен тем, что автоматически подставляет в параметры области значения одноимённых полей строки табличной части: параметр «Номенклатура» заполнится реквизитом «Номенклатура» и так далее. Если имена не совпадают, параметры присваивают по одному: ОбластьСтрока.Параметры.Цена = СтрокаТовара.Цена;.
Обратите внимание: область «Строка» получается из макета один раз до цикла, а выводится многократно — это нормальная практика, при каждом вызове Вывести() текущие значения параметров копируются в табличный документ. Но если нужно выводить строки с разным оформлением (например, чередовать цвет фона), понадобятся две области или работа с оформлением уже выведенных ячеек.
Горизонтальные итоги, разрывы страниц и повтор шапки
Когда таблица длинная и не помещается на одну страницу, возникает две задачи: повторять шапку на каждом листе и не разрывать строку пополам. Повтор шапки настраивается в свойствах итогового табличного документа: свойство «ПовторятьПриПечатиСтроки» (в коде) либо через «Таблица» — «Настройка печати» в режиме предприятия, если документ уже сформирован.
Чтобы строка не разрывалась, перед выводом проверяют, поместится ли она на текущей странице: метод ТабДок.ПроверитьВывод(МассивОбластей). Если возвращает Ложь, выводят горизонтальный разделитель страниц методом ВывестиГоризонтальныйРазделительСтраниц() и затем повторно выводят шапку. Это стандартный приём для многостраничных печатных форм.
Для итогов по группам (например, суммы по каждому складу внутри одной таблицы) добавляют область «ИтогГруппы» и выводят её при смене группировки в цикле. Накопление промежуточных сумм делают обычными переменными либо методом Итог() по отбору таблицы значений.
Как проверить результат
Названия колонок выведены один раз, текст не обрезан
Шапка пустая или дублируется перед каждой строкой
Количество строк совпадает с табличной частью документа, суммы заполнены
Вместо значений выводятся имена параметров или пустые ячейки
Итог равен сумме колонки по документу
Итог пустой или равен нулю при заполненных строках
Таблица помещается по ширине листа, строки не разрываются
Колонки уходят за край страницы, строка делится между листами
Типичные ошибки и их причины
Самая частая проблема — вместо значений на печати видны имена параметров в угловых или квадратных скобках. Причина почти всегда одна: у ячейки не изменено свойство «Заполнение» с «Текст» на «Параметр», либо параметр с таким именем не заполнен из кода. Вторая по частоте — ошибка «Поле объекта не обнаружено» при обращении к параметру: имя в коде не совпадает с именем параметра ячейки, включая регистр и опечатки.
Если таблица выводится без границ, проверьте, что границы заданы именно для ячеек области, а не для соседних строк. Если колонки «плывут» при разном объёме данных, обычно виновато объединение ячеек разной ширины в разных областях — ширину колонок нужно держать одинаковой во всех областях таблицы (шапка, строка, итог).
Отдельный случай — изменение макета типовой конфигурации. Прямая правка макета в типовом решении затруднит обновление: при обновлении изменённый макет может быть замещён. Безопаснее реализовывать доработку через внешнюю печатную форму или расширение конфигурации, если речь идёт о поддерживаемой типовой базе.
Альтернативы: когда макет не нужен
Не для каждой таблицы требуется макет. Если нужен отчёт с группировками, отборами и настройками для пользователя, правильнее использовать схему компоновки данных — там таблица строится автоматически по запросу, а макет секций генерируется системой. Ручной макет оправдан для строго регламентированных печатных форм: счетов, актов, ТОРГ-12, где важно точное расположение каждой ячейки.
Ещё один вариант — программное построение табличного документа без макета: создать ТабличныйДокумент и писать значения прямо в ячейки (ТабДок.Область("R1C1").Текст). Так делают для простых выгрузок, но поддерживать оформление в коде тяжелее, чем в визуальном редакторе макета.
Сравнение подходов
Подходит для регламентированных печатных форм с фиксированной структурой. Ограничение: любая смена оформления требует правки макета
Подходит для отчётов с отборами, группировками и пользовательскими настройками. Ограничение: сложнее добиться точного соответствия унифицированной форме
Подходит для простых служебных выгрузок. Ограничение: оформление описывается кодом и плохо читается
Что важно запомнить
Таблица в макете 1С строится из ячеек с параметрами и именованных областей: шапка выводится один раз, строка — в цикле, итог — в конце. Ключевые точки контроля: тип заполнения ячеек «Параметр», точное совпадение имён областей и параметров в макете и в коде, одинаковая ширина колонок во всех областях. Для типовых конфигураций правку выполняйте через внешние печатные формы или расширения.
Частые вопросы
Как вывести в ячейку несколько значений одной строкой?
Используйте тип заполнения «Шаблон»: в тексте ячейки напишите, например, «Заказ №[Номер] от [Дата]», а в коде заполните параметры Номер и Дата. Платформа подставит значения в квадратные скобки автоматически.
Почему параметр заполнен в коде, но на печати ячейка пустая?
Проверьте три вещи: тип заполнения ячейки должен быть «Параметр», имя в свойстве «Параметр» должно совпадать с именем в коде посимвольно, и область, которую вы заполняете, должна быть той же, что выводится методом Вывести().
Как сделать, чтобы шапка таблицы повторялась на каждой странице?
У итогового табличного документа задайте повторяющиеся строки: программно через свойство ПовторятьПриПечатиСтроки или в режиме предприятия через настройку печати табличного документа. Дополнительно используйте ПроверитьВывод() перед выводом строки, чтобы вовремя вставить разрыв страницы.
Можно ли редактировать макет без конфигуратора?
Макеты, встроенные в конфигурацию, редактируются только в конфигураторе. Для типовых решений предусмотрены пользовательские макеты печатных форм через «Администрирование» — «Печатные формы, отчеты и обработки», где макет можно загрузить в формате табличного документа, если конфигурация это поддерживает.
Чем область отличается от параметра?
Область — это именованный диапазон строк или колонок макета, который целиком получают и выводят из кода. Параметр — это именованное место внутри конкретной ячейки, куда подставляется значение. Сначала получают область, затем заполняют её параметры.
Как вывести картинку или логотип в таблицу макета?
Добавьте в макет рисунок через меню «Таблица» — «Рисунки» либо вставьте картинку в ячейку с типом заполнения, допускающим изображение. Из кода картинку можно подставить через объект Картинка, загруженный из двоичных данных или файла.