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

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

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

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

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

Способ добавления зависит от типа формы: управляемая форма требует реквизита с типом «ТабличныйДокумент» и поля вида «Поле табличного документа», а на обычной форме элемент добавляется напрямую из панели элементов. Ниже разобраны оба варианта, программное заполнение и типичные ошибки.

Когда на форме нужен именно табличный документ

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

Если нужна редактируемая таблица с данными, лучше подойдёт таблица значений или динамический список. Табличный документ по умолчанию открывается в режиме просмотра, и интерактивное редактирование в нём ограничено. Неправильный выбор типа элемента — частая причина переделок формы.

Сравнение вариантов

Табличный документ

Подходит для печатных форм и отчётов с оформлением. Ограничение: не предназначен для редактирования данных построчно.

Таблица значений

Подходит для редактируемых списков данных с колонками. Ограничение: нет объединения ячеек и сложного оформления.

Динамический список

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

Добавление табличного документа на управляемую форму

Откройте форму в конфигураторе. В правой части редактора формы перейдите на вкладку «Реквизиты» и добавьте новый реквизит формы, например с именем РезультатДокумент. В свойстве «Тип» выберите ТабличныйДокумент. Колонки для такого реквизита не нужны — табличный документ хранит структуру внутри себя.

После создания реквизита перетащите его мышью из панели реквизитов в дерево элементов формы в левой части окна. Платформа автоматически создаст поле с видом «Поле табличного документа». Если перетаскивание не сработало, добавьте элемент вручную: кнопка «Добавить» в дереве элементов, тип «Поле», в свойстве «Путь к данным» укажите созданный реквизит, а вид поля установите «Поле табличного документа».

Порядок действий для управляемой формы
  1. 1
    Откройте форму в конфигураторе и перейдите на вкладку «Реквизиты»
  2. 2
    Добавьте реквизит с типом «ТабличныйДокумент»
  3. 3
    Перетащите реквизит в дерево элементов формы
  4. 4
    Проверьте, что вид поля — «Поле табличного документа»
  5. 5
    Заполните реквизит программно в обработчике ПриСозданииНаСервере или по команде
  6. 6
    Откройте форму в режиме предприятия и проверьте отображение

Настройка свойств поля

В свойствах поля обратите внимание на параметры «ТолькоПросмотр», «ОтображениеСетки», «ОтображениеЗаголовков» и «Редактирование». Для предпросмотра печатной формы обычно устанавливают «ТолькоПросмотр» в «Истина», чтобы пользователь случайно не испортил макет. Свойство «Растягивать по горизонтали/вертикали» управляет тем, как поле ведёт себя при изменении размеров окна.

Добавление на обычную форму

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

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

Программное заполнение табличного документа

Заполнять табличный документ на управляемой форме нужно на сервере, потому что тип «ТабличныйДокумент» недоступен в клиентском контексте управляемой формы. Типовой приём — обработчик ПриСозданииНаСервере или серверная процедура, вызываемая из команды формы.

&НаСервере

Процедура СформироватьНаСервере()

РезультатДокумент.Очистить();

Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетОтчета");

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

РезультатДокумент.Вывести(ОбластьШапка);

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

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

РезультатДокумент.Вывести(ОбластьСтрока);

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

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

Альтернатива — построчное заполнение без макета: обращение к ячейкам через РезультатДокумент.Область("R1C1") с установкой свойств Текст, ЦветФона, Границы. Такой способ гибче, но код быстро становится громоздким, поэтому для регулярных печатных форм предпочтителен макет.

Отображение результата и печать с формы

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

Для печати содержимого используйте метод РезультатДокумент.Напечатать() на сервере или предоставьте пользователю стандартную возможность: поле табличного документа в режиме предприятия поддерживает сохранение в файл и печать через контекстное меню, если не отключён доступ к этим действиям. Для сохранения программно применяется метод Записать с указанием типа файла.

Контрольные точки

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

Поле на форме
Норма

Отображается поле табличного документа, при формировании появляется содержимое

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

Поле отсутствует или пустое после выполнения кода

Тип реквизита
Норма

В свойствах реквизита указан тип «ТабличныйДокумент»

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

Выбран другой тип, поле создаётся с неправильным видом

Контекст кода
Норма

Заполнение выполняется в серверной процедуре

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

Ошибка при обращении к документу из клиентского кода

Типичные ошибки и ограничения

Наиболее частая проблема — попытка заполнить табличный документ в клиентской процедуре управляемой формы. Платформа выдаёт ошибку, потому что тип недоступен на клиенте. Решение — директива &НаСервере и вызов серверной процедуры из клиентской.

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

Типичные ошибки
01
Заполнение документа в клиентском коде — ошибка выполнения, перенесите код на сервер
02
Реквизит создан, но не перетащен в дерево элементов — поле не появляется на форме
03
Ожидание построчного редактирования как в таблице значений — табличный документ для этого не предназначен
04
Очистка документа забыта — при повторном формировании данные дублируются, вызывайте Очистить() перед выводом

FAQ

Можно ли редактировать табличный документ прямо на форме?

Да, если в свойствах поля установить «Редактирование» в «Истина» и снять «ТолькоПросмотр». Но такой режим подходит только для ручной правки оформления, а не для ввода структурированных данных — для ввода используйте таблицу значений.

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

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

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

Да, механизм полностью совпадает: в форме внешней обработки создаётся реквизит типа «ТабличныйДокумент», добавляется поле, а макет подключается из макетов самой обработки через ЭтотОбъект.ПолучитьМакет().

Почему на управляемой форме поле табличного документа выглядит обрезанным?

Проверьте свойства растягивания поля и свойства группы-родителя. Установите «Растягивать по горизонтали» и «Растягивать по вертикали», а у родительской группы — корректное поведение при изменении размеров формы.

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

На сервере вызовите метод Записать с типом файла ТипФайлаТабличногоДокумента.XLSX, затем передайте двоичные данные или путь клиенту для сохранения. Также пользователь может сохранить документ сам через контекстное меню поля в режиме предприятия.

Итог

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

Для управляемой формы создайте реквизит типа «ТабличныйДокумент» и перетащите его в элементы формы; заполняйте документ только на сервере, чаще всего через макет с областями. Перед повторным формированием очищайте документ, а для редактируемых данных выбирайте таблицу значений вместо табличного документа.