Документы и Печать · 11 мин
Как вставить строку в печатную форму 1С
Как вставить строку в печатную форму 1С: редактирование макета, метод ВставитьОбласть, изменение табличного документа. Примеры кода и типичные ошибки.
Строка в печатную форму 1С добавляется двумя принципиально разными способами: вручную — через редактирование макета печатной формы в конфигураторе, и программно — методами табличного документа в момент формирования отчёта. Выбор зависит от того, нужна ли строка постоянно (тогда правится макет) или она появляется по условию (тогда нужен код).
Печатные формы в 1С строятся на объекте «Табличный документ» и макетах формата MXL. Макет хранит статичную структуру: шапку, подписи, области строк. Программный вывод заполняет эти области данными и может вставлять дополнительные строки между уже выведенными. Понимание этой двухслойной модели избавляет от главной ошибки новичков — попытки «дорисовать» строку прямо в сформированном результате, которая исчезнет при следующей печати.
Ниже разобраны оба подхода с конкретными действиями, примерами кода, проверкой результата и типичными ошибками. Материал применим к типовым конфигурациям на обычных и управляемых формах (Бухгалтерия, Управление торговлей, ERP), а также к самописным решениям.
Определяем, где именно нужно вставить строку
Перед изменениями ответьте на три вопроса. Первый: строка должна появляться всегда или только при определённых условиях (например, строка «Скидка» — лишь когда скидка есть)? Второй: строка относится к статичной части (шапка, подвал) или к повторяющейся табличной части с товарами? Третий: печатная форма типовая или уже доработанная?
Если строка постоянная и статичная — правится макет. Если условная или относится к циклу вывода товаров — правится код формирования. Если печатная форма подключена как внешняя через механизм «Дополнительные отчеты и обработки», макет и код находятся в файле внешней обработки, а не в конфигураторе.
Как выбрать способ
Добавляем строку в макет печатной формы
Откройте конфигуратор и найдите нужный макет. Обычно он лежит в ветке «Общие → Макеты» либо в макетах конкретного документа (например, «Документы → РеализацияТоваровУслуг → Макеты → МакетСчетФактура»). В типовых конфигурациях на управляемых формах макет часто привязан к менеджеру печати объекта.
Двойной щелчок открывает макет в редакторе табличного документа. Чтобы вставить строку, выделите строку, перед которой должна появиться новая, кликните правой кнопкой и выберите «Вставить» (или используйте пункт меню «Таблица → Вставить строки»). Пустая строка появится выше выделенной. Далее введите текст в ячейки, настройте шрифт, границы и выравнивание через палитру свойств.
Критический момент — области макета. Если вы вставили строку внутрь именованной области (например, «Шапка»), она попадёт в вывод автоматически. Если строка вставлена между областями, она не выведется никогда, потому что код выводит области целиком, а не весь макет подряд. Проверяйте границы областей: они отображаются в левой серой панели редактора.
Заполняем строку параметрами и данными
Статичный текст вводится прямо в ячейку. Но чаще строка должна показывать данные документа — сумму, ответственного, комментарий. Для этого в свойстве ячейки «Заполнение» выберите «Параметр», а в самой ячейке укажите имя параметра в квадратных скобках, например: [Комментарий].
Имена параметров должны совпадать с тем, что код передаёт в область при выводе. Если в макете параметр называется «Комментарий», а в коде заполняется «КомментарийДокумента», ячейка выйдет пустой без какого-либо сообщения об ошибке. Это одна из самых коварных причин «не работающих» строк.
Для сложных случаев используйте шаблон: в свойстве «Заполнение» выберите «Шаблон», а в тексте ячейки напишите конструкцию вида «Итого к оплате: [СуммаДокумента] руб.». Тогда и текст, и значение параметра выведутся в одной ячейке.
Вставляем строку программно методом ВставитьОбласть
Когда строка зависит от условий, её выводят из кода. Основной инструмент — метод табличного документа ВставитьОбласть, который вставляет область макета в указанное место сформированного документа, сдвигая существующее содержимое вниз.
Типичный сценарий: нужно вставить строку «Итого скидка» после табличной части, но только если скидка ненулевая. Сначала в макете создаётся отдельная именованная область (выделите строки макета, правый клик — «Свойства», задайте имя, например «СтрокаСкидка»). Затем в модуле формирования печати добавляется код:
Если Скидка > 0 Тогда
ОбластьСкидка = Макет.ПолучитьОбласть("СтрокаСкидка");
ОбластьСкидка.Параметры.СуммаСкидки = Скидка;
ТабДок.ВставитьОбласть(ОбластьСкидка.Область(),
ТабДок.Область(НомерСтрокиВставки, 1, НомерСтрокиВставки, 1),
ТипСмещенияТабличногоДокумента.ПоВертикали);
КонецЕсли;
Параметр ТипСмещенияТабличногоДокумента.ПоВертикали означает, что всё, что было ниже точки вставки, сдвинется вниз. Альтернатива — не вставлять, а выводить области последовательно методом Вывести() в нужном порядке: сначала строки товаров, потом условную строку, потом подвал. На практике последовательный вывод проще и предсказуемее, чем вставка в середину.
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовар");
Для Каждого СтрокаТовара Из Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;Где искать код формирования печатной формы
В типовых конфигурациях на управляемых формах логика печати сосредоточена в модуле менеджера документа (процедуры вида «ДобавитьКомандыПечати», «Печать») и в общих модулях менеджеров печати. Найдите процедуру, формирующую нужную форму, по имени макета или по имени команды печати.
В обычных формах код часто находится в модуле объекта документа — процедура «Печать» с конструкцией «Если ИмяМакета = ...». Во внешних печатных формах ищите экспортную функцию «Печать» или «СведенияОВнешнейОбработке» в модуле объекта обработки.
Быстрый способ найти нужное место — глобальный поиск по конфигурации (Ctrl+Shift+F) по имени макета. Все места, где макет получается и выводится, будут найдены за секунды.
Проверяем результат и типичные ошибки
После изменений сформируйте печатную форму на реальном документе с типичными и граничными данными: с длинными наименованиями, с пустой и заполненной табличной частью, с условием, при котором новая строка должна и не должна появляться.
Проверьте не только наличие строки, но и нумерацию последующих строк, итоги, разрывы страниц. Вставленная строка может сдвинуть подвал так, что он перестанет помещаться на страницу, или нарушить повтор шапки таблицы на каждом листе. Для печатных форм с фиксированным бланком (счета-фактуры, ТОРГ-12) сверьте, что строки не съехали относительно утверждённой сетки.
Как проверить результат
Строка видна и содержит правильные данные
Строки нет или ячейки пустые — проверяйте область и имена параметров
Условная строка скрывается, итоги корректны
Пустая строка или нулевые значения остаются в форме
Подвал и подписи на своих местах, шапка таблицы повторяется
Подвал уехал на отдельный лист, таблица разорвана
Строка появляется стабильно
Строка пропала — значит, правили готовый документ, а не макет
Альтернативы: внешние печатные формы и расширения
Если конфигурация типовая и обновляется, прямая правка макета — худший вариант. Внешняя печатная форма подключается через «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки» и полностью заменяет типовую при вызове, не трогая конфигурацию. Внутри неё — собственный макет и код, где строки добавляются теми же способами.
Расширение конфигурации позволяет переопределить макет и модуль менеджера печати, сохранив обновляемость основной конфигурации. Это предпочтительный путь, когда внешняя форма не подходит — например, нужно изменить существующую команду печати, а не добавить новую.
Сравнение подходов
Быстро и просто, но снимает объект с поддержки и затирается при обновлении
Не трогает конфигурацию, легко переносится, но добавляет отдельную команду печати
Сохраняет обновляемость и замещает типовую команду, но требует аккуратности при обновлениях платформы
Подходит только для разовой правки с сохранением в файл, не влияет на будущие печати
Перед вставкой строки в середину табличной части посмотрите, не проще ли изменить порядок вывода областей: вывести сначала часть строк, затем новую строку, затем остальные. Последовательный вывод методом Вывести() почти всегда читается и отлаживается легче, чем ВставитьОбласть в середину готового документа.
Частые вопросы
Почему добавленная в макет строка не появляется при печати?
Чаще всего строка вставлена вне именованной области, которую выводит код. Откройте макет, посмотрите границы областей в левой панели и убедитесь, что строка находится внутри нужной области, либо создайте для неё отдельную область и выведите её в коде.
Как вставить строку в середину уже выведенной таблицы товаров?
Используйте ТабДок.ВставитьОбласть() с указанием номера строки вставки и смещением по вертикали. Либо измените логику: выводите строки товаров циклом, а в нужной позиции цикла выводите дополнительную область методом Вывести().
Можно ли добавить строку без доступа к конфигуратору?
Только разово: откройте сформированный табличный документ, включите редактирование (если оно не запрещено защитой) и вставьте строку вручную, затем сохраните документ как файл MXL или Excel. На будущие печатные формы это не повлияет — для постоянных изменений нужен макет или внешняя печатная форма.
Что будет с доработанным макетом при обновлении конфигурации?
Изменённый типовой макет не обновится автоматически: механизм обновления пропустит его или предложит сравнение. Новые исправления вендора в этот макет не попадут. Поэтому доработки надёжнее выносить во внешние печатные формы или расширения.
Как вывести в новой строке данные, которых нет среди параметров макета?
Добавьте в ячейку макета параметр с новым именем (заполнение «Параметр»), а в коде перед выводом области заполните его: Область.Параметры.МойПараметр = Значение. Имена должны совпадать точно, включая регистр букв.
Почему после вставки строки подвал формы уехал на следующую страницу?
Новая строка увеличила высоту документа, и содержимое перестало помещаться на лист. Варианты: уменьшить высоту других строк, настроить автомасштаб в свойствах табличного документа, проверить область печати и настройки разрывов страниц.
Что важно запомнить
Постоянные строки добавляются в макет внутрь именованной области, условные — кодом через Вывести() или ВставитьОбласть(). Имена параметров в макете и коде должны совпадать. Типовые конфигурации правьте через внешние печатные формы или расширения, а результат проверяйте на граничных данных и с контролем разрывов страниц.