Документы и Печать · 13 мин
Как вывести дополнительный реквизит в печатную форму 1С
Пошаговая инструкция: как вывести дополнительный реквизит в печатную форму 1С через макет, расширение и внешнюю печатную форму. Примеры кода и типичные ошибки.
Дополнительные реквизиты в 1С (например, «Срок доставки», «Внутренний номер заказа», «Особые условия») не попадают в типовые печатные формы автоматически — макет печатной формы содержит только предопределённые параметры. Чтобы вывести дополнительный реквизит на печать, нужно определить, какой механизм печати используется в вашей конфигурации, и выбрать один из трёх путей: доработку макета в конфигураторе, расширение конфигурации или внешнюю печатную форму.
Выбор способа зависит от того, стоит ли конфигурация на поддержке, есть ли у вас доступ к конфигуратору и навыки программирования на встроенном языке. Внешняя печатная форма — самый безопасный вариант: она не меняет конфигурацию и не мешает обновлениям. Прямая доработка макета быстрее, но усложняет последующие обновления.
Ниже разобраны все три подхода с конкретными шагами, примером кода получения значения дополнительного реквизита и способами проверки результата. Инструкции ориентированы на конфигурации с Библиотекой стандартных подсистем (УТ 11, ERP, КА, БП 3.0), где действует подсистема «Дополнительные реквизиты и сведения».
Как устроено хранение дополнительных реквизитов и почему их нет в печати
Дополнительные реквизиты хранятся не в шапке документа, а в отдельной табличной части «ДополнительныеРеквизиты» объекта. Каждая строка содержит ссылку на свойство (элемент плана видов характеристик «ДополнительныеРеквизитыИСведения») и значение. Дополнительные сведения хранятся ещё отдельнее — в одноимённом регистре сведений, привязанном к объекту.
Типовая процедура печати формирует табличный документ из макета, заполняя параметры данными запроса к шапке и табличным частям документа. Поскольку дополнительные реквизиты в этот запрос не входят, их значения в макете отсутствуют. Поэтому задача всегда состоит из двух частей: получить значение дополнительного реквизита в коде и добавить для него область и параметр в макет.
Прежде чем что-то менять, узнайте точное имя свойства. Откройте карточку дополнительного реквизита (Администрирование → Общие настройки → Дополнительные реквизиты), посмотрите заголовок и, при необходимости, имя для разработчиков. Искать значение в коде надёжнее по ссылке на свойство, а не по строке заголовка — заголовок могут переименовать.
Определяем, какой механизм печати используется
В конфигурациях на БСП печатные формы формируются в модуле менеджера объекта (например, «Документы.РеализацияТоваровУслуг» → процедура «ДобавитьКомандыПечати» и функция печати в модуле менеджера или в общем модуле). Найти нужную процедуру можно через конфигуратор: глобальный поиск по имени макета или по строке «Печать» в модуле менеджера документа.
Если форма подключена как внешняя (Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки), то дорабатывать нужно именно файл внешней обработки .epf, а не конфигурацию. Проверьте этот список до начала работ — частая ситуация: программист правит типовой макет, а пользователи печатают через подключённую внешнюю форму, и изменений не видят.
Как выбрать способ доработки
Способ 1. Доработка макета и процедуры печати в конфигураторе
Откройте конфигуратор, найдите макет печатной формы (обычно в ветке документа → Макеты, например «МакетСчетаНаОплату»). Добавьте в нужную область новую ячейку, в свойстве «Заполнение» укажите «Параметр», а в качестве текста — имя параметра, например СрокДоставки. Если параметр должен выводиться внутри предложения, вставьте его в текст ячейки через квадратные скобки: [СрокДоставки].
Затем откройте процедуру формирования печатной формы в модуле менеджера. Найдите место, где заполняются параметры области (строки вида ОбластьШапка.Параметры.Заполнить(Выборка)), и добавьте получение значения дополнительного реквизита.
Функция ЗначениеДопРеквизита(ОбъектСсылка, СвойствоСсылка)
Для Каждого Строка Из ОбъектСсылка.ДополнительныеРеквизиты Цикл
Если Строка.Свойство = СвойствоСсылка Тогда
Возврат Строка.Значение;
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
// В процедуре печати:
СвойствоСрок = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Срок доставки");
ОбластьШапка.Параметры.СрокДоставки = ЗначениеДопРеквизита(СсылкаНаДокумент, СвойствоСрок);После сохранения конфигурации и обновления базы данных сформируйте печатную форму документа, у которого реквизит заполнен. Если параметр пустой — проверьте, что ищете свойство по тому же наименованию, что указано в справочнике дополнительных реквизитов, и что реквизит действительно заполнен у конкретного документа, а не у связанного объекта (например, контрагента).
Способ 2. Внешняя печатная форма
Внешняя печатная форма — это файл .epf, который подключается через «Дополнительные отчеты и обработки» и подменяет или дополняет типовую кнопку печати. Конфигурация при этом не изменяется, обновления проходят штатно, а при проблемах форму можно просто отключить из списка.
Создайте внешнюю обработку в конфигураторе (Файл → Новый → Внешняя обработка). В модуле объекта добавьте экспортную функцию СведенияОВнешнейОбработке(), где укажите вид «ПечатнаяФорма», назначение (например, «Документ.ЗаказКлиента») и команду печати. Добавьте макет табличного документа — проще всего скопировать типовой макет из конфигурации и дополнить его своим параметром.
- 1Создайте внешнюю обработку с функцией СведенияОВнешнейОбработке и процедурой Печать
- 2Скопируйте типовой макет и добавьте параметр для дополнительного реквизита
- 3В процедуре Печать получите значение реквизита из табличной части ДополнительныеРеквизиты и присвойте параметру
- 4Сохраните .epf и подключите: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки
- 5Укажите размещение (для каких документов показывать) и при необходимости отключите типовую команду
- 6Откройте документ с заполненным реквизитом и сформируйте печатную форму
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) должна заполнить коллекцию печатных форм табличными документами. Внутри используется тот же приём получения значения реквизита, что и в первом способе. Если конфигурация работает в модели сервиса или с безопасным режимом, убедитесь, что обработке разрешён запуск — иначе команда появится, но форма не сформируется.
Способ 3. Расширение конфигурации
Расширение подходит, когда нужно изменить типовую печатную форму, не трогая основную конфигурацию, а внешняя форма по каким-то причинам неудобна (например, требуется сохранить все типовые команды и добавить параметр в одну из них). В расширении заимствуется макет и процедура печати с аннотацией &ИзменениеИКонтроль или &Вместо.
Практическая сложность: при обновлении конфигурации типовая процедура печати может измениться, и расширение начнёт формировать устаревшую форму. Поэтому после каждого обновления проверяйте расширение на совместимость — конфигуратор показывает такие проблемы при проверке применимости расширения. Для простых случаев (вывести один-два реквизита) внешняя печатная форма обычно надёжнее и дешевле в сопровождении.
Сравнение способов
Быстро и прямолинейно, но усложняет обновления и требует снятия с поддержки
Не меняет конфигурацию, легко отключается; минус — отдельный файл и копия макета, которую нужно синхронизировать с типовым
Сохраняет типовую команду печати, но требует проверки совместимости после каждого обновления
Подходит только если значение уже доступно в параметрах макета; новый дополнительный реквизит так не вывести без кода
Вывод дополнительного сведения и реквизита связанного объекта
Дополнительные сведения (в отличие от реквизитов) хранятся в регистре сведений «ДополнительныеСведения» и читаются запросом по отбору «Объект» и «Свойство». В коде печати это выглядит как запрос к регистру с параметром-ссылкой на документ и ссылкой на свойство.
Если нужно вывести реквизит не самого документа, а связанного объекта — например, дополнительный реквизит договора или контрагента, — сначала получите ссылку на связанный объект из шапки документа, а затем ищите значение в его табличной части «ДополнительныеРеквизиты». Учитывайте, что у разных видов объектов наборы дополнительных реквизитов свои: реквизит с одинаковым названием у договора и у документа — это два разных элемента плана видов характеристик.
Проверка результата и типичные ошибки
После доработки проверьте печать минимум в трёх ситуациях: документ с заполненным реквизитом, документ с пустым реквизитом (в ячейке не должно быть мусора или служебного текста) и печать из списка документов сразу для нескольких объектов, если такая возможность предусмотрена. Также проверьте форму у пользователя с ограниченными правами — недостаток прав на чтение дополнительных реквизитов может приводить к пустым значениям только у части сотрудников.
Как проверить результат
Совпадает со значением реквизита в карточке документа
Пусто при заполненном реквизите — неверно найдено свойство или реквизит у другого объекта
Ячейка пустая или содержит осмысленный дефолт
Выводится служебный текст или код не обрабатывает пустое значение
У каждого документа своё значение
Во всех формах значение первого документа — значение вычисляется вне цикла
После обновления форма работает как раньше
Доработка затёрта типовым обновлением — не была использована внешняя форма или расширение
Для значений нестроковых типов применяйте функцию Формат() или приведение к строке: даты без формата выводятся со временем, булево — как «Да/Нет» или «Истина/Ложь» в зависимости от контекста. Если реквизит ссылочного типа (например, ссылка на сотрудника), в печать обычно выводят представление — простого присвоения параметру достаточно, но при необходимости можно вывести конкретное поле связанного объекта.
FAQ
Можно ли вывести дополнительный реквизит без программирования?
Частично. Кнопка «Изменить макет» в форме печати позволяет редактировать макет, но только с теми параметрами, которые уже передаёт типовая процедура. Новый дополнительный реквизит в этот список не входит, поэтому без доработки кода его не вывести — потребуется внешняя печатная форма, расширение или правка конфигурации.
Почему в печатной форме пусто, хотя реквизит заполнен?
Чаще всего свойство не найдено: поиск по наименованию не сработал из-за лишнего пробела, переименования или потому, что реквизит заведён для другого вида объектов. Вторая причина — значение заполнено у связанного объекта (контрагента, договора), а читается оно из документа. Проверьте в отладчике, что возвращает поиск свойства и цикл по табличной части.
Чем дополнительный реквизит отличается от дополнительного сведения?
Реквизит виден на форме объекта и хранится в его табличной части «ДополнительныеРеквизиты». Сведение открывается отдельной командой и хранится в регистре сведений «ДополнительныеСведения». Для печати реквизит читается прямо из объекта, а сведение — запросом к регистру по отбору «Объект» и «Свойство».
Пропадёт ли доработка после обновления конфигурации?
Прямая правка типового макета и модуля — может быть затёрта или вызвать конфликт при обновлении. Внешняя печатная форма обновлению не мешает, но её макет не обновится автоматически вместе с типовым. Расширение сохранится, однако требует проверки совместимости, если типовая процедура печати изменилась.
Как вывести реквизит в табличную часть печатной формы, а не в шапку?
Логика та же, но значение должно относиться к строке табличной части — например, дополнительный реквизит номенклатуры. Внутри цикла по строкам товаров получайте значение из табличной части «ДополнительныеРеквизиты» элемента справочника «Номенклатура» и присваивайте параметру области строки до её вывода в табличный документ.
Нужны ли особые права для чтения дополнительных реквизитов при печати?
Да, в типовых конфигурациях существуют отдельные роли на чтение и изменение дополнительных реквизитов и сведений. Если у пользователя печатная форма выводит пустые значения, а у администратора — заполненные, проверьте права на соответствующий набор дополнительных реквизитов в профиле группы доступа.
Что важно запомнить
Дополнительный реквизит выводится в печать двумя действиями: чтением значения из табличной части «ДополнительныеРеквизиты» по ссылке на свойство и добавлением параметра в макет. Предпочтительные способы — внешняя печатная форма или расширение, чтобы не мешать обновлениям. Обязательно проверяйте печать с пустым значением, при групповой печати и под пользователем с ограниченными правами.