Разработка и Конфигурация · 10 мин
Как вставить текст в табличный документ 1С
Как вставить текст в табличный документ 1С: методы ПолучитьОбласть, УстановитьТекст, параметры макета, примеры кода на встроенном языке и типичные ошибки.
Табличный документ в 1С — универсальный объект, который используется для печатных форм, отчётов и вывода произвольных данных в виде таблицы. Вставка текста в него выполняется программно: напрямую через адрес ячейки, через область макета или через параметры шаблона. Выбор способа зависит от того, создаёте вы документ «с нуля» или заполняете готовый макет.
Основной объект для работы — ТабличныйДокумент. Он существует только в памяти до тех пор, пока его не вывели на форму, не записали в файл или не отправили на печать. Поэтому любые манипуляции с текстом выполняются в коде модуля, а результат проверяется визуально — через отображение документа пользователю.
Ниже разобраны четыре рабочих подхода: прямая запись в ячейку, вывод области из макета, подстановка параметров и заполнение по шаблону. Для каждого приведены условия применения, примеры кода и способы проверки результата.
Способ 1. Прямая вставка текста в ячейку по адресу
Самый быстрый вариант — обратиться к ячейке по её адресу и присвоить текст свойству Текст. Адресация ведётся в формате R1C1: буква R и номер строки, буква C и номер колонки. Например, R2C3 — вторая строка, третья колонка.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Отчёт по продажам";
ТабДок.Область("R2C1").Текст = "Период:";
ТабДок.Область("R2C2").Текст = "с 01.01 по 31.01";
Такой подход подходит для простых документов, которые формируются целиком в коде: служебных выгрузок, отладочных таблиц, небольших отчётов без сложного оформления. Оформление (шрифт, границы, цвет) придётся задавать тоже программно, через свойства области — Шрифт, ЦветФона, Границы.
Ограничение способа очевидно: при изменении структуры документа все адреса в коде придётся переписывать вручную. Поэтому для печатных форм, которые видят контрагенты, прямую адресацию лучше не использовать.
Способ 2. Вставка текста через макет и области
Стандартный подход для печатных форм — макет табличного документа. Макет создаётся в конфигураторе: в нём рисуют шапку, строки, подвал и размечают именованные области. В коде эти области получают, заполняют и выводят в итоговый документ последовательно, сверху вниз.
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТовара Из Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовара.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовара.Количество;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Ключевой момент: область получают один раз, а выводят многократно, каждый раз меняя значения параметров. Метод Вывести() добавляет область вниз документа. Если нужно строить таблицу горизонтально, используют Присоединить().
Текст, который не изменяется, обычно зашит прямо в макет как фиксированный. Меняющиеся данные оформляют параметрами — в макете они выглядят как [ИмяПараметра] в квадратных скобках.
- 1Создайте макет табличного документа в конфигураторе и нарисуйте структуру формы
- 2Выделите ячейки области и задайте имя области через Свойства или меню Таблица — Имена
- 3В ячейках с изменяемыми данными укажите параметры в квадратных скобках, например [НомерДокумента]
- 4В коде получите макет методом ПолучитьМакет(), затем область методом ПолучитьОбласть()
- 5Заполните параметры через Область.Параметры.ИмяПараметра и выведите область методом Вывести()
- 6Откройте печатную форму и проверьте, что все параметры подставились и текст не обрезан
Способ 3. Заполнение параметров и шаблонов
В макете 1С ячейка может содержать не только фиксированный текст или параметр, но и шаблон — смесь того и другого. Тип заполнения задаётся в свойствах ячейки: «Текст», «Параметр» или «Шаблон». Шаблон позволяет вставить несколько параметров в одну строку: Договор № [НомерДоговора] от [ДатаДоговора].
Параметр против шаблона
Если ячейка целиком — один параметр, используйте тип «Параметр». Если параметры встроены в предложение, удобнее шаблон: не придётся склеивать строки в коде, и верстальщик макета видит итоговый вид фразы. Ошибка в имени параметра внутри шаблона приведёт к тому, что на печать выйдет пустое место или сам текст в квадратных скобках — это первое, что проверяют при «пропавших» данных.
Заполнение через структуру
Когда параметров много, удобно заполнять их массово методом Заполнить(), передав структуру или выборку из запроса. Имена ключей структуры должны совпадать с именами параметров макета.
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(ВыборкаШапка);
ТабДок.Вывести(ОбластьШапка);
Сравнение способов вставки текста
Быстро для простых и служебных документов; не подходит для форм, которые часто меняются по оформлению
Стандарт для печатных форм: оформление отделено от кода, легко править макет без изменения программы
Удобен для фраз с несколькими подстановками; требует аккуратного совпадения имён параметров
Способ 4. Вставка многострочного и форматированного текста
Длинный текст (условия договора, комментарии, спецификации) вставляется теми же методами, но требует настройки размещения. Если текст не помещается в ячейку, он визуально обрезается. Чтобы этого избежать, в свойствах ячейки макета включите «Автовысота строки» и «Размещение текста — Переносить» либо задайте высоту строки программно.
ОбластьТекст = Макет.ПолучитьОбласть("Условия");
ОбластьТекст.Параметры.УсловияДоговора = ДлинныйТекст;
ТабДок.Вывести(ОбластьТекст);
Переносы строк внутри значения параметра сохраняются, если в тексте есть символы переноса (в коде — Символы.ПС или многострочный строковый литерал через вертикальную черту). Однако табличный документ не отображает HTML или форматированный текст: для полужирного, курсива и цвета внутри одной ячейки придётся разбивать содержимое на несколько ячеек с разным оформлением.
Проверка результата и типичные ошибки
После формирования документ проверяют визуально: выводят на форму (элемент «Поле табличного документа») или открывают через ТабДок.Показать() в толстом клиенте, либо сразу отправляют на печать в режиме предпросмотра. Дополнительно полезно сохранить документ в файл методом Записать() в формате MXL или Excel и открыть его отдельно.
Чаще всего проблемы вызваны не самим методом вставки, а несоответствием имён и настроек макета. Ниже — признаки, по которым быстро находят причину.
Как проверить результат
Подставлено реальное значение из данных
Виден текст в квадратных скобках — имя параметра в коде не совпадает с макетом
Строка увеличила высоту, текст виден полностью
Текст обрезан — не включён перенос или автовысота
Метод Вывести() отработал без исключения
Ошибка «Область не найдена» — опечатка в имени области или макета
Каждая строка содержит свои данные
Во всех строках одинаковые значения — параметры заполняются вне цикла
Вывод документа пользователю и сохранение
После заполнения табличный документ нужно куда-то поместить. Типовые варианты: присвоить его реквизиту формы типа «ТабличныйДокумент», вызвать ТабДок.Показать("Печатная форма"), отправить на печать через ТабДок.Напечатать() или сохранить в файл.
// Сохранение в файл Excel
ТабДок.Записать("C:\Temp\Форма.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Перед выводом полезно задать служебные свойства: ОриентацияСтраницы, АвтоМасштаб, ИмяПараметровПечати — они влияют на то, как документ будет выглядеть на бумаге. Если форма предназначена только для экрана, эти настройки можно опустить.
Что важно запомнить
Для простых случаев текст вставляют напрямую через Область("R1C1").Текст, для печатных форм — через макет: ПолучитьОбласть, заполнение параметров, Вывести. Заполняйте параметры до вывода области, включайте перенос для длинного текста и проверяйте совпадение имён параметров с макетом.
Частые вопросы
Как вставить текст в уже существующий табличный документ, не очищая его?
Обратитесь к нужной ячейке по адресу: ТабДок.Область("R5C2").Текст = "Новое значение". Содержимое остальных ячеек не изменится. Если нужно добавить область в конец, используйте Вывести() — он дописывает область ниже существующего содержимого.
Почему вместо значения на печати виден текст в квадратных скобках?
Имя параметра в коде не совпадает с именем в макете: лишний пробел, другой регистр букв или опечатка. Откройте макет, сверьте имя параметра посимвольно и убедитесь, что заполнение происходит до метода Вывести().
Можно ли вставить в ячейку текст с разным форматированием внутри?
Нет. Ячейка табличного документа имеет единое оформление целиком. Чтобы часть строки была полужирной, разбейте содержимое на несколько соседних ячеек с разными шрифтами или используйте форматированный документ вместо табличного.
Как вставить перенос строки внутри одной ячейки?
Включите в текст символ переноса: Текст = "Строка 1" + Символы.ПС + "Строка 2" или многострочный литерал через вертикальную черту. В свойствах ячейки должен быть включён перенос текста и, желательно, автовысота строки.
Чем отличается Вывести() от Присоединить()?
Вывести() добавляет область вниз, под уже выведенное содержимое. Присоединить() добавляет область справа от текущей строки — так строят таблицы с переменным числом колонок. Для типовых печатных форм почти всегда используется Вывести().
Как программно прочитать текст из ячейки табличного документа?
Тем же свойством, но на чтение: Значение = ТабДок.Область("R3C1").Текст. Это удобно при разборе загруженных из файла табличных документов, когда нужно извлечь данные из конкретных позиций.