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

Документы и Печать · 11 мин

Как вставить строку в печатную форму 1С

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

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

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

Ниже разобраны оба подхода с конкретными действиями, примерами кода, проверкой результата и типичными ошибками. Материал применим к типовым конфигурациям на обычных и управляемых формах (Бухгалтерия, Управление торговлей, ERP), а также к самописным решениям.

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

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

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

Маршрут решения

Как выбрать способ

Строка нужна во всех документах и не зависит от данныхДобавьте строку в макет печатной формы через конфигуратор
Строка появляется по условию или внутри цикла вывода товаровИспользуйте ВставитьОбласть() в модуле менеджера печати
Форма подключена как внешняя печатная формаОткройте файл обработки и правьте макет и код внутри неё
Нужна разовая правка одного напечатанного документаОтредактируйте табличный документ вручную, но сохраните его как файл MXL или Excel

Добавляем строку в макет печатной формы

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

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

Критический момент — области макета. Если вы вставили строку внутрь именованной области (например, «Шапка»), она попадёт в вывод автоматически. Если строка вставлена между областями, она не выведется никогда, потому что код выводит области целиком, а не весь макет подряд. Проверяйте границы областей: они отображаются в левой серой панели редактора.

Заполняем строку параметрами и данными

Статичный текст вводится прямо в ячейку. Но чаще строка должна показывать данные документа — сумму, ответственного, комментарий. Для этого в свойстве ячейки «Заполнение» выберите «Параметр», а в самой ячейке укажите имя параметра в квадратных скобках, например: [Комментарий].

Имена параметров должны совпадать с тем, что код передаёт в область при выводе. Если в макете параметр называется «Комментарий», а в коде заполняется «КомментарийДокумента», ячейка выйдет пустой без какого-либо сообщения об ошибке. Это одна из самых коварных причин «не работающих» строк.

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

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

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

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

Если Скидка > 0 Тогда

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

ОбластьСкидка.Параметры.СуммаСкидки = Скидка;

ТабДок.ВставитьОбласть(ОбластьСкидка.Область(),

ТабДок.Область(НомерСтрокиВставки, 1, НомерСтрокиВставки, 1),

ТипСмещенияТабличногоДокумента.ПоВертикали);

КонецЕсли;

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

bsl
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовар");
Для Каждого СтрокаТовара Из Товары Цикл
    ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

Где искать код формирования печатной формы

В типовых конфигурациях на управляемых формах логика печати сосредоточена в модуле менеджера документа (процедуры вида «ДобавитьКомандыПечати», «Печать») и в общих модулях менеджеров печати. Найдите процедуру, формирующую нужную форму, по имени макета или по имени команды печати.

В обычных формах код часто находится в модуле объекта документа — процедура «Печать» с конструкцией «Если ИмяМакета = ...». Во внешних печатных формах ищите экспортную функцию «Печать» или «СведенияОВнешнейОбработке» в модуле объекта обработки.

Быстрый способ найти нужное место — глобальный поиск по конфигурации (Ctrl+Shift+F) по имени макета. Все места, где макет получается и выводится, будут найдены за секунды.

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

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

Проверьте не только наличие строки, но и нумерацию последующих строк, итоги, разрывы страниц. Вставленная строка может сдвинуть подвал так, что он перестанет помещаться на страницу, или нарушить повтор шапки таблицы на каждом листе. Для печатных форм с фиксированным бланком (счета-фактуры, ТОРГ-12) сверьте, что строки не съехали относительно утверждённой сетки.

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

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

Новая строка в сформированной форме
Норма

Строка видна и содержит правильные данные

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

Строки нет или ячейки пустые — проверяйте область и имена параметров

Поведение при отключённом условии
Норма

Условная строка скрывается, итоги корректны

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

Пустая строка или нулевые значения остаются в форме

Пагинация
Норма

Подвал и подписи на своих местах, шапка таблицы повторяется

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

Подвал уехал на отдельный лист, таблица разорвана

Форма после повторного формирования
Норма

Строка появляется стабильно

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

Строка пропала — значит, правили готовый документ, а не макет

Альтернативы: внешние печатные формы и расширения

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

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

Сравнение подходов

Правка макета в конфигураторе

Быстро и просто, но снимает объект с поддержки и затирается при обновлении

Внешняя печатная форма

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

Расширение конфигурации

Сохраняет обновляемость и замещает типовую команду, но требует аккуратности при обновлениях платформы

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

Подходит только для разовой правки с сохранением в файл, не влияет на будущие печати

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

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

Почему добавленная в макет строка не появляется при печати?

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

Как вставить строку в середину уже выведенной таблицы товаров?

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

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

Только разово: откройте сформированный табличный документ, включите редактирование (если оно не запрещено защитой) и вставьте строку вручную, затем сохраните документ как файл MXL или Excel. На будущие печатные формы это не повлияет — для постоянных изменений нужен макет или внешняя печатная форма.

Что будет с доработанным макетом при обновлении конфигурации?

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

Как вывести в новой строке данные, которых нет среди параметров макета?

Добавьте в ячейку макета параметр с новым именем (заполнение «Параметр»), а в коде перед выводом области заполните его: Область.Параметры.МойПараметр = Значение. Имена должны совпадать точно, включая регистр букв.

Почему после вставки строки подвал формы уехал на следующую страницу?

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

Итог

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

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