К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как в 1С сделать табличный документ

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

Табличный документ в 1С — это универсальный объект для вывода данных в виде таблицы: печатных форм, отчётов, прайс-листов и накладных. Он строится на основе макета, в котором заранее описаны области, шрифты, границы и параметры, а затем заполняется данными программно. Именно так работает большинство печатных форм в типовых конфигурациях.

Задача возникает в двух сценариях. Первый — вы разработчик или внедренец и создаёте новую печатную форму или отчёт. Второй — вы администратор или бухгалтер, которому нужно понять, как устроена существующая форма, чтобы поправить её или добавить свою. В обоих случаях базовый принцип один: макет плюс программный вывод областей.

Ниже разобран полный цикл: создание макета, настройка областей, программный вывод данных, оформление, вывод на печать и типичные ошибки, из-за которых документ «не собирается» или выглядит криво.

Что такое табличный документ и где он применяется

Табличный документ — объект встроенного языка 1С, представляющий двумерную таблицу с ячейками, объединениями, картинками и форматированием. Его можно показать пользователю на форме, отправить на печать, сохранить в файл Excel, PDF или MXL. По сути это аналог листа Excel внутри платформы.

Типичные применения: печатные формы документов (счета, акты, ТОРГ-12), простые отчёты без СКД, прайс-листы, этикетки, выгрузки для обмена с контрагентами. Если данные нужно вывести строго по заданному шаблону с точным расположением элементов — табличный документ подходит лучше, чем СКД.

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

Создаём макет табличного документа

Макет создаётся в конфигураторе. Откройте ветку объекта, для которого нужна печатная форма (например, документа «РеализацияТоваровУслуг»), либо общий раздел «Общие → Макеты», если форма универсальная. Через контекстное меню выберите «Добавить», в поле «Тип макета» укажите «Табличный документ» и задайте имя, например «МакетПечати».

Откроется редактор, похожий на Excel. Здесь вы рисуете будущую форму: вводите текст в ячейки, задаёте ширину колонок, настраиваете шрифты, границы и заливку через палитру свойств. Статический текст (заголовки, подписи) просто впечатывается в ячейки.

Места, куда будут подставляться данные, оформляются параметрами. Выделите ячейку, в палитре свойств установите свойство «Заполнение» в значение «Параметр», а в тексте ячейки укажите имя параметра в угловых скобках, например <НомерДокумента>. Если ячейка должна содержать и текст, и параметр, используйте заполнение «Шаблон»: Счёт № <Номер> от <Дата>.

Разбиваем макет на области

Макет выводится в табличный документ не целиком, а по областям — это даёт гибкость: шапку вывести один раз, строки товаров — в цикле, подвал — в конце. Область создаётся выделением строк или колонок и назначением имени через меню «Таблица → Имена → Назначить имя» (Ctrl+Shift+N).

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

Области бывают горизонтальные (строки) и вертикальные (колонки). Для обычных печатных форм достаточно горизонтальных. Вертикальные нужны, когда таблица растёт вправо — например, при выводе данных по месяцам в колонках.

Порядок создания макета
  1. 1
    Создайте макет типа «Табличный документ» у объекта или в общих макетах
  2. 2
    Нарисуйте статическую часть формы: заголовки, рамки, подписи
  3. 3
    Пометьте ячейки с данными как параметры или шаблоны
  4. 4
    Выделите строки и назначьте имена областям: Шапка, Строка, Итого, Подвал
  5. 5
    Сохраните конфигурацию и проверьте, что макет открывается без ошибок

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

Вывод выполняется в модуле объекта, в модуле менеджера объекта (для команд печати) или в общем модуле. Общая схема: создать объект ТабличныйДокумент, получить макет, в цикле получать области, заполнять параметры и выводить.

Процедура СформироватьПечатнуюФорму(СсылкаНаДокумент) Экспорт

ТабДок = Новый ТабличныйДокумент;

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетПечати");

// Шапка

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;

ОбластьШапка.Параметры.ДатаДокумента = Формат(СсылкаНаДокумент.Дата, "ДЛФ=D");

ТабДок.Вывести(ОбластьШапка);

// Строки табличной части

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрокаТовары Из СсылкаНаДокумент.Товары Цикл

ОбластьСтрока.Параметры.Номенклатура = СтрокаТовары.Номенклатура;

ОбластьСтрока.Параметры.Количество = СтрокаТовары.Количество;

ОбластьСтрока.Параметры.Сумма = СтрокаТовары.Сумма;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

// Подвал

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьПодвал.Параметры.ИтогоСумма = СсылкаНаДокумент.Товары.Итог("Сумма");

ТабДок.Вывести(ОбластьПодвал);

ТабДок.Показать("Печатная форма");

КонецПроцедуры

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

Вместо обращения к реквизитам ссылки напрямую в больших формах лучше использовать запрос: выбрать шапку и табличную часть одним пакетом запросов, затем обойти выборки. Это быстрее и безопаснее при печати нескольких документов сразу.

Если печатная форма вызывается для массива документов, выводите их в один ТабличныйДокумент и разделяйте методом ВывестиГоризонтальныйРазделительСтраниц() — тогда каждый документ начнётся с новой страницы при печати.
ПЗ
Практическое замечание

Оформление: внешний вид и параметры страницы

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

Ключевые свойства объекта ТабличныйДокумент: ОриентацияСтраницы (книжная или альбомная), АвтоМасштаб (вписать в ширину страницы), ПолеСлева, ПолеСправа и другие поля в миллиметрах, ЧерноБелаяПечать, КоличествоЭкземпляров. Также полезно Защита — запрещает редактирование документа пользователем, что важно для официальных печатных форм.

Для повторения шапки таблицы на каждой странице при печати задайте свойство ПовторятьПриПечатиСтроки — укажите диапазон строк заголовка. Без этого длинная таблица на второй странице останется без шапки, что часто становится замечанием при проверке форм.

Вывод пользователю: показ, печать и сохранение

Готовый табличный документ показывают методом Показать() или размещают на управляемой форме через реквизит типа ТабличныйДокумент (элемент формы «Поле табличного документа»). В типовых конфигурациях печатные формы обычно открываются в стандартном окне предварительного просмотра через подсистему печати БСП.

Для сохранения в файл используется метод Записать с указанием типа файла: ТабДок.Записать("C:\Форма.xlsx", ТипФайлаТабличногоДокумента.XLSX). Поддерживаются форматы MXL, XLSX, PDF, HTML, ODS и другие. Учтите: при записи в PDF и Excel часть сложного форматирования (некоторые объединения, картинки) может отображаться иначе, чем на экране, — проверяйте результат на реальных данных.

Прямая печать без предпросмотра выполняется методом Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать). Используйте её осторожно и только там, где пользователь осознанно запускает печать, иначе легко отправить на принтер лишние десятки страниц.

Проверка результата и типичные ошибки

После формирования проверьте документ на тестовых данных разного объёма: один товар, двадцать товаров, пустая табличная часть, длинные наименования. Особое внимание — переносу строк: если в ячейке длинный текст, включите в макете свойство «Размещение текста» с переносом и проверьте, не «съезжает» ли высота строк.

Самые частые проблемы: ошибка «Область не найдена» из-за опечатки в имени области, пустые значения вместо данных из-за несовпадения имён параметров, съехавшая вёрстка из-за вывода области не той ширины и отсутствие итогов, потому что область «Итого» выведена до цикла строк.

Типичные ошибки
01
Имя области в коде не совпадает с именем в макете — ошибка «Область не найдена» при выполнении
02
Ячейка оставлена как обычный текст вместо параметра — данные не подставляются, виден только шаблонный текст
03
Область строки выводится один раз вместо цикла — в форме только один товар
04
Не очищаются параметры области между итерациями — в следующих строках дублируются данные предыдущих
05
Не задана ориентация и автомасштаб — широкая форма обрезается при печати
Контрольные точки

Как проверить результат

Откройте форму на документе с одной строкой и с двадцатью строками
Норма

Все строки выведены, итоги совпадают с данными документа

Тревожный признак

Часть строк отсутствует или итоги не сходятся

Предварительный просмотр печати
Норма

Форма помещается в ширину страницы, шапка повторяется на каждом листе

Тревожный признак

Колонки обрезаны справа, на второй странице нет шапки

Ячейки с параметрами
Норма

Все подстановки заполнены реальными данными

Тревожный признак

Видны угловые скобки с именами параметров или пустые места

FAQ: частые вопросы о табличных документах в 1С

Чем табличный документ отличается от отчёта на СКД?

Табличный документ даёт полный ручной контроль над каждой ячейкой и подходит для строго регламентированных печатных форм. СКД лучше для аналитических отчётов с группировками, отборами и настройками пользователя, но точную вёрстку в ней делать сложнее.

Как добавить печатную форму, не меняя конфигурацию?

Используйте механизм внешних печатных форм (в конфигурациях на БСП — «Администрирование → Печатные формы, отчеты и обработки»). Внешняя обработка реализует функцию Печать, возвращающую готовый табличный документ, и подключается без снятия конфигурации с поддержки.

Почему вместо данных выводится текст в угловых скобках?

Ячейке не задано свойство «Заполнение» в значение «Параметр» или «Шаблон» — платформа воспринимает текст как обычную строку. Откройте макет, выделите ячейку и измените свойство заполнения в палитре свойств.

Как вывести несколько документов одной печатной формой?

Сформируйте один ТабличныйДокумент, в цикле по массиву ссылок выводите области каждого документа, а между документами вызывайте ВывестиГоризонтальныйРазделительСтраниц(), чтобы каждый начинался с нового листа.

Можно ли сохранить табличный документ в Excel?

Да, методом Записать с типом файла XLSX или XLS. Учтите, что сложное форматирование и некоторые элементы оформления могут переноситься с искажениями, поэтому файл стоит открыть и проверить визуально.

Как запретить пользователю редактировать готовую форму?

Установите свойству Защита табличного документа значение Истина перед показом. Для отдельных ячеек доступность настраивается свойством «Защита» в макете или программно через область.

Итог

Что важно запомнить

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