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

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

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

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

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

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

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

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

Кроме печати, табличные документы применяются для отчётов, построенных без СКД, для хранения макетов (в конфигураторе макет типа «Табличный документ» хранится именно в этом формате) и для обмена данными — файл MXL можно передать другой базе или сохранить как архив печатной формы. Понимание структуры объекта важно, потому что обработка всегда сводится к операциям над ячейками, областями и секциями.

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

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

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

Макет = ПолучитьМакет("МакетСчета");

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

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

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

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

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

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

ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);

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

КонецЦикла;

Ключевой момент — различие параметров и обычного текста. Если в макете ячейка содержит шаблон [НомерДокумента] с типом заполнения «Параметр», значение подставляется через коллекцию Параметры. Если ячейка статическая, её текст меняют только через свойство Текст соответствующей области. Попытка записать параметр, которого нет в макете, вызовет ошибку, поэтому имена параметров в коде и макете должны совпадать в точности.

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

Чтение и изменение ячеек готового документа

Если табличный документ уже сформирован — загружен из файла или получен как результат отчёта — обработка идёт через прямое обращение к ячейкам. Метод Область(НомерСтроки, НомерКолонки) возвращает ячейку, у которой можно прочитать или изменить Текст, ЦветФона, Шрифт и другие свойства.

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

ТабДок.Прочитать("C:\Данные\Реестр.mxl");

Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл

Ячейка = ТабДок.Область(НомерСтроки, 1);

Если СтрНайти(Ячейка.Текст, "Итого") > 0 Тогда

Ячейка.Шрифт = Новый Шрифт(, , Истина);

КонецЕсли;

КонецЦикла;

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

Сохранение и загрузка: форматы MXL, XLSX, PDF

Метод Записать сохраняет табличный документ в файл, а тип файла задаётся перечислением ТипФайлаТабличногоДокумента: MXL (родной формат платформы), XLSX, PDF, HTML, ODS, TXT и другие. Метод Прочитать выполняет обратную операцию, но полноценно загружается только MXL — остальные форматы при чтении теряют часть оформления или не поддерживаются вовсе.

ТабДок.Записать("C:\Отчеты\Реестр.xlsx", ТипФайлаТабличногоДокумента.XLSX);

ТабДок.Записать("C:\Отчеты\Реестр.pdf", ТипФайлаТабличногоДокумента.PDF);

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

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

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

Без программирования пользователю доступны встроенные средства: поиск и замена по документу (Ctrl+F и Ctrl+H в поле табличного документа), копирование области в Excel через буфер обмена, сохранение через «Файл — Сохранить как». Для разовой правки печатной формы перед выводом на принтер этого достаточно, но такие изменения не сохраняются в базе — они живут только в открытом окне.

Способы обработки

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

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

Программная обработка через ТабличныйДокумент

Подходит для массового заполнения, разбора MXL-файлов и автоматической печати. Требует прав на изменение конфигурации или внешней обработки.

Внешняя обработка или расширение

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

Групповая обработка нескольких документов и файлов

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

Порядок пакетной обработки MXL-файлов
  1. 1
    Получите список файлов через НайтиФайлы с маской *.mxl
  2. 2
    Для каждого файла создайте Новый ТабличныйДокумент и выполните Прочитать
  3. 3
    Найдите нужную область через НайтиТекст или по координатам
  4. 4
    Измените текст, параметры или оформление ячеек
  5. 5
    Сохраните результат методом Записать, при необходимости в другой каталог
  6. 6
    Откройте 2–3 итоговых файла и проверьте результат визуально

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

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

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

Типичные ошибки
01
Обращение к параметру, которого нет в области макета — возникает ошибка выполнения; сверьте имена параметров в макете и коде.
02
Чтение текста из не первой ячейки объединённой области — результат пустой; обращайтесь к левой верхней ячейке объединения.
03
Сравнение содержимого ячейки с числом без преобразования типа — условие никогда не срабатывает; приводите строку к числу явно.
04
Запись в XLSX без проверки — сложное форматирование и объединения могут переноситься с искажениями; проверяйте результат визуально.
05
Повторное использование объекта без очистки в цикле — содержимое файлов смешивается; создавайте новый объект на каждую итерацию.
Контрольные точки

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

Значения в целевых ячейках
Норма

Текст и числа соответствуют источнику, формат дат корректный

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

Пустые ячейки, строки вместо чисел, даты в виде текста

Структура документа
Норма

Области выведены в правильном порядке, итоги на месте

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

Дублирующиеся секции, сдвинутые строки, лишние пустые области

Экспортированный файл
Норма

Файл открывается, разбивка на страницы и оформление сохранены

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

Документ разорван на лишние страницы, потеряны объединения и шрифты

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

Итог

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

Обработка табличного документа в 1С строится на объекте ТабличныйДокумент: заполнение идёт через области макета и параметры, чтение — через координаты ячеек и НайтиТекст, результат сохраняется методом Записать. Перед пакетной обработкой делайте копии файлов и проверяйте несколько результатов визуально.

Частые вопросы

Как открыть MXL-файл без конфигуратора?

Файл MXL открывается в режиме 1С:Предприятие через меню «Файл — Открыть» либо перетаскиванием в окно программы. Для программной загрузки используется метод Прочитать объекта ТабличныйДокумент. Отдельного бесплатного просмотрщика MXL платформа не предоставляет.

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

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

Почему НайтиТекст не находит значение, которое видно на экране?

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

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

Используйте Записать с типом файла XLSX — базовое форматирование, объединения и ширины колонок обычно переносятся корректно. Сложные элементы (рисунки, специфические границы) могут искажаться, поэтому важные формы проверяйте визуально после выгрузки.

Чем табличный документ отличается от таблицы значений?

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

Как обойти все заполненные строки, не зная их числа заранее?

Используйте свойство ВысотаТаблицы — оно возвращает номер последней заполненной строки. Цикл от 1 до этого значения покрывает всё содержимое. Аналогично свойство ШиринаТаблицы даёт число заполненных колонок.