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

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

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

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

Способ 1. Программное изменение макета и модуля менеджера (через Расширение)

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

Проанализируем шаги по реализации этого метода:

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

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


// В модуле менеджера документа РасходнаяНакладная (в расширении)
// Используем аннотацию &После или &Вместо для процедуры печати

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
// Проверяем наличие документа-основания у ссылки
Если ЗначениеЗаполнено(МассивОбъектов[0].ДокументОснование) Тогда
    СсылкаНаЗаказ = МассивОбъектов[0].ДокументОснование;
    
    // Формируем строковое представление заказа: "Заказ покупателя №... от ..."
    ТекстЗаказа = ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаЗаказ, "Заказ покупателя");
    
    // Присваиваем значение параметру макета
    ОбластьШапка.Параметры.ДокументОснование = "Основание: " + ТекстЗаказа;
КонецЕсли;

Обратите внимание на использование функции ОбщегоНазначения.СформироватьЗаголовокДокумента. Это стандартный метод 1С, который корректно преобразует ссылку на документ в привычный пользователю текстовый вид, соблюдая форматирование даты и номера.

Способ 2. Использование внешних печатных форм (ВРПФ)

Если вы не хотите вносить изменения даже в расширения, оптимальным выбором станет создание внешней печатной формы. Это отдельный файл формата .epf, который подключается в режиме "1С:Предприятие". В качестве готовой основы подойдёт внешняя печатная форма расходной накладной для УНФ.

Посмотрим на преимущества этого подхода:

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	РасходнаяНакладнаяЗапасы.ЗаказПокупателя КАК Заказ
    |ИЗ
    |	Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
    |ГДЕ
    |	РасходнаяНакладнаяЗапасы.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", СсылкаНаРНК);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

СтрокаЗаказов = "";
Пока РезультатЗапроса.Следующий() Цикл
    СтрокаЗаказов = СтрокаЗаказов + ?(СтрокаЗаказов = "", "", ", ") + СокрЛП(РезультатЗапроса.Заказ);
КонецЦикла;

Способ 3. Пользовательское редактирование макета (без программирования)

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

Найдем в списке макет Расходная накладная. Мы можем открыть его для редактирования и добавить текст или изменить оформление. Однако стоит учитывать критически важный нюанс: простое добавление текста "Заказ покупателя" в ячейку не заставит программу выводить туда реальный номер. Если в стандартном наборе данных, который разработчики УНФ предусмотрели для этой формы, нет поля с заказом, то без правки кода (как описано в Способе 1) макет останется статичным или пустым.

Способ 4. Дополнительные реквизиты (No-code решение)

Если задача стоит "видеть номер и дату" и при этом допустимо ручное заполнение или использование простых скриптов, можно воспользоваться механизмом Дополнительных реквизитов:

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

Рекомендации и выводы

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

Важные моменты, которые стоит проверить:

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

← На главную