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

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

Как добавить дополнительный реквизит в печатную форму 1С

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

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

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

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

Где хранятся дополнительные реквизиты и как их найти

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

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

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

Подготовка: что проверить перед изменением печатной формы

Перед доработкой определите, какая именно процедура формирует нужную печатную форму. В типовых конфигурациях печать реализована в модуле менеджера документа (например, «РеализацияТоваровУслуг») в процедурах вида «Печать» и функциях «ПолучитьДанныеДляПечатнойФормы…» либо в общем модуле менеджера печати. Быстрый способ найти нужное место — открыть макет печатной формы и по имени макета найти обращения к нему через глобальный поиск по конфигурации (Ctrl+Shift+F).

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

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

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

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

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

Способ 1: доработка типового макета и модуля печати

Откройте конфигуратор, найдите документ и его макет печатной формы (раздел «Макеты» в дереве объекта). В макете добавьте в нужную область новую ячейку, задайте для неё тип заполнения «Параметр» и придумайте имя параметра, например «ДопРеквизитДоговор». Если реквизит нужно вывести частью строки, используйте тип «Шаблон» и вставьте параметр в текст в квадратных скобках: [ДопРеквизитДоговор].

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

Присвойте найденное значение параметру области: ОбластьМакета.Параметры.ДопРеквизитДоговор = ЗначениеРеквизита. Если значение не найдено, лучше подставить пустую строку, а не оставлять параметр незаполненным — иначе в некоторых случаях в документе останется текст вида «[ДопРеквизитДоговор]».

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДопРеквизиты.Значение КАК Значение
|ИЗ
| Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты
|ГДЕ
| ДопРеквизиты.Ссылка = &Ссылка
| И ДопРеквизиты.Свойство = &Свойство";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);
Запрос.УстановитьПараметр("Свойство", СвойствоДоговор);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    ОбластьМакета.Параметры.ДопРеквизитДоговор = Выборка.Значение;
Иначе
    ОбластьМакета.Параметры.ДопРеквизитДоговор = "";
КонецЕсли;

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

Способ 2: внешняя печатная форма без изменения конфигурации

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

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

Порядок подключения внешней печатной формы
  1. 1
    Создайте внешнюю обработку с макетом и процедурой печати в конфигураторе
  2. 2
    Сохраните файл .epf
  3. 3
    В режиме предприятия откройте «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки»
  4. 4
    Добавьте файл, укажите объекты назначения (документы, для которых работает форма)
  5. 5
    Откройте документ, нажмите «Печать» и выберите новую форму
  6. 6
    Проверьте вывод реквизита на заполненном и пустом документе

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

Способ 3: пользовательское редактирование макета

Ряд конфигураций на современных версиях БСП позволяет редактировать макет печатной формы прямо в режиме предприятия: «Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм». Макет открывается в виде табличного документа, где можно добавить ячейку и параметр без конфигуратора.

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

Сравнение способов вывода реквизита

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

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

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

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

Пользовательский макет

Быстро и без программирования, но работает только с параметрами, которые уже передаёт типовой код; новый реквизит вывести нельзя

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

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

Контрольные точки

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

Реквизит в сформированном документе
Норма

Выводится значение из текущего документа

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

Пусто при заполненном реквизите или текст вида [ИмяПараметра]

Документ без реквизита
Норма

Пустая строка, форма формируется без ошибок

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

Ошибка «Поле объекта не обнаружено» или падение печати

Пакетная печать нескольких документов
Норма

У каждого документа своё значение реквизита

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

Во всех документах значение из первого

Другие печатные формы документа
Норма

Работают как раньше

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

Перестали формироваться после доработки модуля

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

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

FAQ

Можно ли вывести дополнительный реквизит контрагента, а не документа?

Да. Логика та же, но запрос обращается к табличной части «ДополнительныеРеквизиты» справочника «Контрагенты» по ссылке на контрагента из документа. Получите ссылку контрагента из шапки документа и подставьте её в параметр запроса вместо ссылки на документ.

Почему в печатной форме выводится текст в квадратных скобках вместо значения?

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

Обновление конфигурации затрёт мою доработку печатной формы?

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

Как вывести в печатную форму сразу несколько дополнительных реквизитов?

Добавьте в макет отдельный параметр под каждый реквизит и получайте все значения одним запросом: выберите строки табличной части с условием «Свойство В (&СписокСвойств)», затем в цикле по выборке распределите значения по параметрам в зависимости от свойства. Это быстрее, чем отдельный запрос на каждый реквизит.

Нужны ли права администратора для подключения внешней печатной формы?

Да, добавление обработки в справочник «Дополнительные отчеты и обработки» обычно доступно только пользователям с правами администратора или с ролью настройки дополнительных обработок. Само использование уже подключённой формы доступно обычным пользователям с правом печати документа.

Можно ли вывести дополнительное сведение, а не реквизит?

Дополнительные сведения хранятся отдельно — в регистре сведений «ДополнительныеСведения», а не в табличной части объекта. Запрос строится к этому регистру с отбором по объекту и свойству. Остальная механика — параметр макета и присвоение значения — полностью совпадает с реквизитами.

Итог

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

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