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

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

Работа в облачном сервисе, таком как 1C:Fresh, накладывает определенные ограничения на привычные методы разработки. Самое главное из них — отсутствие прямого доступа к Конфигуратору. Если перед нами стоит задача вывести пользовательский дополнительный реквизит в печатную форму документа (например, в «Счет на оплату» или «Заказ покупателя»), стандартный подход с редактированием макета в конфигурации не сработает. Разберем детально, как решить эту задачу, используя доступные инструменты облачной версии 1С:УНФ.

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

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

Разберем процесс по шагам:

  1. Перейдем в раздел Настройки, затем выберем пункт Печать и далее Шаблоны печатных форм.
  2. Создадим новый шаблон или выберем существующий для нужного типа документа.
  3. В открывшемся окне редактора мы увидим две области: текст самого документа и правую панель со списком доступных полей.
  4. Критически важный момент: все созданные вами дополнительные реквизиты автоматически попадают в этот список. Найдем нужный реквизит в дереве доступных полей.
  5. Просто перетащим параметр мышкой в нужное место шаблона. Программа сама сформирует конструкцию вида {Объект.ИмяВашегоРеквизита}.

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

Способ 2. Внешние печатные формы (ВПФ)

Если нам требуется классическая печатная форма в формате MXL, придется создать внешний файл обработки (.epf). Как правильно заметили участники обсуждения, просто вставить параметр в макет недостаточно — необходимо назначить ему значение в коде модуля обработки.

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

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


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

После того как значение получено, его нужно передать в область макета:


ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ВашПараметрИзМакет = ПолучитьЗначениеДопРеквизита(СсылкаНаДокумент, "МойДопРеквизит");
ТабДок.Вывести(ОбластьМакета);

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

Способ 3. Расширения конфигурации

Проанализируем современный способ доработки — использование расширений (.cfe). Расширение позволяет дополнить типовую логику формирования печатной формы, не изменяя саму конфигурацию. Это особенно удобно, когда нужно добавить одно поле в уже существующую сложную печатную форму, не переписывая её с нуля.

Посмотрим на алгоритм действий:

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

Пример перехвата процедуры в расширении:


&После("СформироватьПечатнуюФорму")
Процедура Расш1_СформироватьПечатнуюФорму(ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати)
    // Здесь мы можем дозаполнить параметры в уже сформированном ТабличномДокументе
    // или модифицировать структуру данных перед выводом
КонецПроцедуры

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

Особенности загрузки в 1C:Fresh

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

Разберем последовательность действий:

Резюме: Если вы новичок, настоятельно рекомендуем начать с первого способа (Word-шаблоны). Это сэкономит время на разработку и ожидание аудита. Если же требуется сложная логика и формат MXL, готовьте внешнюю печатную форму или расширение, соблюдая требования безопасности 1C:Fresh.

← На главную