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

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

Как добавить строку в макет 1С

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

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

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

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

Как устроен макет и что нужно подготовить

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

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

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

Запустите конфигуратор и откройте конфигурацию (меню «Конфигурация → Открыть конфигурацию»). Макеты хранятся в двух местах: внутри объекта (документа, справочника, отчёта) на закладке «Макеты» либо в ветке «Общие → Макеты». Чаще всего печатные формы документов лежат в макетах самого документа — например, «Документы → РеализацияТоваровУслуг → Макеты → МакетПечати».

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

Если вы не знаете, какой именно макет использует печатная форма, откройте модуль менеджера объекта или общий модуль, где выполняется печать, и найдите вызов вида ПолучитьМакет("ИмяМакета") — по имени легко найти нужный макет поиском по дереву конфигурации.

Добавляем строку внутрь существующей области

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

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

После вставки заполните ячейки. Статический текст вводится как есть. Значение, которое подставит программа, оформляется как параметр в квадратных скобках: [НомерДокумента]. Текст с подстановкой внутри фразы — шаблон: Договор № [НомерДоговора] от [ДатаДоговора]. Тип заполнения ячейки (текст, параметр или шаблон) задаётся в палитре свойств ячейки в поле «Заполнение».

Порядок добавления строки в область
  1. 1
    Откройте макет и включите отображение именованных областей
  2. 2
    Вставьте пустую строку в нужную позицию через контекстное меню заголовка строки
  3. 3
    Расширьте именованную область так, чтобы новая строка вошла в её диапазон
  4. 4
    Заполните ячейки: текст, параметры [Имя] или шаблоны
  5. 5
    Проверьте в палитре свойств тип заполнения каждой ячейки
  6. 6
    Сохраните конфигурацию и проверьте печатную форму в режиме предприятия

Создаём отдельную область для новой строки

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

В ячейках новой области разместите параметры для каждого выводимого значения: [Номенклатура], [Количество], [Сумма]. Настройте формат ячеек — выравнивание, границы, формат чисел — через палитру свойств, чтобы строка выглядела согласованно с остальным макетом. Формат числа удобно задавать прямо в макете, тогда в коде не потребуется функция Формат().

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

Дополняем программный код вывода

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

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

// Новая область для строки табличной части

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

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

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

ОбластьСтрока.Параметры.Количество = СтрокаТовара.Количество;

ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма;

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

КонецЦикла;

Если строка добавлена внутрь существующей области, код менять не нужно при условии, что новые параметры уже заполняются. Если вы добавили новый параметр, дополните заполнение: ОбластьШапка.Параметры.Комментарий = Шапка.Комментарий;. Параметр, который объявлен в макете, но не заполнен в коде, выведется пустым — ошибки не будет, но и данных не будет.

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

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

Обновите конфигурацию базы данных (F7 или «Конфигурация → Обновить конфигурацию базы данных»), запустите режим предприятия и сформируйте печатную форму на тестовом документе. Проверьте: новая строка появилась в нужной позиции, параметры заполнены реальными данными, ширина колонок не «поплыла», перенос на страницы работает корректно.

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

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

Альтернативы прямому изменению макета

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

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

Способы изменить печатную форму

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

Быстро и наглядно, но требует снятия с поддержки и усложняет обновление типовой конфигурации

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

Доработка сохраняется при обновлениях; требует понимания механизма расширений и аннотаций

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

Конфигурация не меняется вообще; подходит для отдельных новых форм, а не правки встроенных

Редактирование макета из режима предприятия

Доступно пользователю без конфигуратора; годится только для простых правок текста и оформления

Итог

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

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

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

Добавил строку в макет, но в печатной форме её нет. Что проверить?

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

Как вывести в строке макета значение реквизита документа?

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

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

В типовых конфигурациях на БСП в форме предприятия есть команда «Изменить макет» (или «Редактировать макет») у печатной формы. Через неё можно добавить строку со статическим текстом и настроить оформление. Вывод новых параметров из базы таким способом недоступен — понадобится доработка кода.

Чем параметр отличается от шаблона в ячейке макета?

Параметр — ячейка, целиком заполняемая одним значением из кода: [Сумма]. Шаблон — текст с встроенными подстановками: «Итого: [Сумма] руб.». Шаблон удобен для фраз, параметр — для значений, к которым нужен формат числа или даты, заданный в свойствах ячейки.

Ошибка «Область не найдена» при печати — из-за чего возникает?

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

Как не потерять доработку макета при обновлении типовой конфигурации?

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