Можно ли добавить новый параметр в макет печатной формы 1С в пользовательском режиме?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Постановка задачи и базовые возможности

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

Способ 1. Использование механизма автоматического заполнения

Рассмотрим ситуацию, когда нам везет, и разработчик конфигурации заранее предусмотрел гибкое заполнение макета. В программном коде 1С часто используется метод Заполнить() для заполнения параметров области макета значениями из какого-либо объекта (структуры или самого документа).

Проанализируем алгоритм работы этого механизма. Если в коде формирования печатной формы встречается конструкция вида:


ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
ТабличныйДокумент.Вывести(ОбластьМакета);

В этом случае система ищет в структуре ДанныеПечати свойства, чьи имена совпадают с именами параметров в макете. Разберем по шагам, как это использовать:

  1. Перейдем в список макетов печатных форм в пользовательском режиме.
  2. Выберем нужный макет и нажмем «Изменить».
  3. В нужной ячейке в свойствах установим «Заполнение» — «Параметр».
  4. В поле «Параметр» впишем имя реквизита документа (например, Склад или Ответственный).

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

Способ 2. Добавление параметра через Расширение конфигурации

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

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


&Вместо("СформироватьДанныеДляПечати")
Функция Мой_СформироватьДанныеДляПечати(МассивОбъектов, ПараметрыПечати)
    // Получаем стандартную структуру данных
    Данные = ПродолжитьВызов(МассивОбъектов, ПараметрыПечати);
    
    // Добавляем в структуру свои данные для каждого объекта
    Для Каждого СтрокаДанных Из Данные Цикл
        // Например, нам нужно добавить артикул из связанного справочника
        СтрокаДанных.Вставить("МойНовыйПараметр", "Значение из БД");
    КонецЦикла;
    
    Возвращает Данные;
КонецФункции

После внесения таких изменений в расширение, мы можем вернуться в пользовательский режим и добавить в макет параметр с именем МойНовыйПараметр. Теперь система «увидит» его и заполнит данными.

Способ 3. Работа с типом заполнения «Шаблон»

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

Этот способ удобен тем, что позволяет пользователю самостоятельно форматировать вывод без изменения структуры ячеек таблицы. Если в коде используется метод Заполнить(), параметры внутри шаблона также будут обработаны автоматически.

Способ 4. Использование офисных шаблонов (Word / OpenOffice)

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

Разберем преимущества этого подхода:

  1. При редактировании такого макета 1С открывает специальное окно со списком всех доступных полей документа, включая дополнительные реквизиты.
  2. Пользователь может просто перетащить мышкой нужный параметр в текст документа Word.
  3. Не нужно знать точные программные имена реквизитов — они представлены в понятном виде.

Для активации этого механизма в некоторых конфигурациях достаточно создать новый макет на основе файла Word в справочнике «Шаблоны сообщений» или через «Макеты печатных форм» (в зависимости от версии БСП).

Вывод дополнительных реквизитов (БСП)

Часто возникает вопрос: как вывести «Дополнительные реквизиты», созданные пользователем в режиме «1С:Предприятие»? Это сложная задача, так как эти данные хранятся в отдельной табличной части. Проанализируем ситуацию: просто написать имя доп. реквизита в макете MXL обычно недостаточно, так как он не попадает в общую структуру ДанныеПечати автоматически.

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

Итоги

Подводя итоги, отметим, что возможность добавления параметра в макет в пользовательском режиме напрямую зависит от того, как написан исходный код печати. Если используется метод Параметры.Заполнить(), то задача решается за 2 минуты в пользовательском интерфейсе. Если же заполнение идет «точечно» (каждый параметр прописан в коде отдельно), то без расширения или Внешней печатной формы (ВПФ) не обойтись. Мы рекомендуем всегда начинать с анализа структуры данных через консоль запросов или отладчик, чтобы проверить, какие данные уже доступны для вывода.

← На главную