Как вывести новые реквизиты документа в макет печатной формы в 1С:УНФ 1.6

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Сфера услуг, туризм и социальный сектор
← На главную

При адаптации типовой конфигурации «1С:Управление нашей фирмой 1.6» под требования бизнеса часто возникает задача: в документ добавлены новые реквизиты, и их значения требуется отобразить в печатной форме (например, в документе «Прием в ремонт»). Простого размещения реквизитов на экранной форме недостаточно — печатная форма формируется программно по собственному алгоритму. Разберем, как устроен этот механизм, как правильно отредактировать макет и программный код формирования печатной формы, а также проанализируем варианты реализации без снятия конфигурации с поддержки.

Причина, почему реквизиты не появляются в печатной форме автоматически

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

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

Если мы просто добавим реквизит в структуру объекта и отредактируем макет в конфигураторе или в режиме «1С:Предприятие» через раздел Администрирование — Макеты печатных форм, печатная форма останется пустой в местах новых параметров: запрос в коде конфигурации просто не считывает эти поля из базы данных.

Способ 1. Доработка макета и модуля менеджера в конфигураторе

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

  1. Настройка макета печатной формы:

    Открываем макет печатной формы документа (например, ПФ_MXL_ПриемВРемонт). Выбираем ячейку, куда необходимо поместить значение нового реквизита. Открываем палитру свойств ячейки (клавиша F4) и в свойстве Заполнение переключаем значение с Текст на Параметр. В поле Параметр указываем точное имя переменной (например, НовыйРеквизит1).

  2. Изменение запроса в модуле менеджера:

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

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

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

    ОбластьШапка.Параметры.Заполнить(ВыборкаШапка);

    Если требуется нестандартное форматирование или параметры названы иначе, заполняем значение параметра явным образом:

    ОбластьШапка.Параметры.НовыйРеквизит1 = ВыборкаШапка.НовыйРеквизит1;

Способ 2. Использование расширения конфигурации

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

  1. Создаем новое расширение конфигурации с назначением Дополнение или Адаптация.
  2. Добавляем в расширение документ ПриемВРемонт, его макет печатной формы и модуль менеджера.
  3. Если версия платформы и режим совместимости поддерживают добавление реквизитов в расширениях, создаем нужные реквизиты непосредственно в расширении.
  4. В модуле менеджера расширения переопределяем процедуру печати с помощью аннотации &Вместо или &ИзменениеИКонтроль, внедряя в запрос выборку новых полей и заполнение отредактированного макета.

Способ 3. Создание внешней печатной формы (ВПФ)

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

  1. Создаем внешнюю обработку в конфигураторе. В модуле объекта объявляем экспортную функцию для интеграции с подсистемой БСП Дополнительные отчеты и обработки:
    
    Функция СведенияОВнешнейОбработке() Экспорт
        ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
        ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
        ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемВРемонт");
        
        Команда = ПараметрыРегистрации.Команды.Добавить();
        Команда.Представление = НСтр("ru = 'Прием в ремонт (пользовательский)'");
        Команда.Идентификатор = "ПриемВРемонтПользовательский";
        Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
        Команда.Модификатор = "ПечатьMXL";
        
        Возврат ПараметрыРегистрации;
    КонецФункции
    
  2. Реализуем в модуле объекта экспортную процедуру печати, формирующую ТабличныйДокумент:
    
    Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
        ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ПриемВРемонтПользовательский",
            "Прием в ремонт (пользовательский)",
            ТабличныйДокумент
        );
    КонецПроцедуры
    
  3. Подключаем готовую обработку в режиме предприятия через Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.

Разница между реквизитами, дополнительными реквизитами и сведениями

При проектировании доработок важно четко понимать различия механизмов хранения данных:

  1. Реквизиты объекта: Добавляются в дерево метаданных конфигурации или расширения. Они физически являются полями таблицы самого объекта, всегда доступны при открытии формы и напрямую выбираются в запросах.
  2. Дополнительные реквизиты БСП: Хранятся в специальной табличной части ДополнительныеРеквизиты объекта. Настраиваются пользователем в режиме предприятия без изменения конфигурации и отображаются непосредственно на форме объекта. Если у документа в типовой конфигурации отсутствует данная табличная часть, добавить дополнительные реквизиты через пользовательский интерфейс невозможно.
  3. Дополнительные сведения БСП: Хранятся в независимом регистре сведений ДополнительныеСведения. Они не изменяют сам объект при записи, доступны для любых ссылочных типов по отдельной кнопке на командной панели, но не отображаются по умолчанию в теле формы документа.

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

← На главную