В процессе работы с конфигурацией 1С:Управление нашей фирмой (УНФ) версии 1.6 часто возникает необходимость кастомизации стандартных печатных форм. Типовая ситуация: при печати Расходной накладной (РНК) клиент хочет видеть информацию о том, на основании какого Заказа покупателя была произведена отгрузка. По умолчанию эта информация не всегда выводится в шапке документа, что затрудняет идентификацию поставки для конечного получателя.
Разберем детально, как реализовать эту задачу, используя несколько подходов: от программной модификации до использования механизмов расширений и дополнительных реквизитов.
Наиболее надежный и правильный метод — использование Расширения конфигурации. Это позволит сохранить основную базу на поддержке и избежать проблем при обновлении. Нам необходимо выполнить два основных действия: изменить макет печатной формы и дописать логику заполнения данных в программном коде.
Проанализируем шаги по реализации этого метода:
РасходнаяНакладная и его макет печатной формы (например, ПФ_MXL_РасходнаяНакладная).ДокументОснование.Параметры для области шапки. Обычно это процедура Печать или вспомогательная функция СформироватьПечатнуюФорму.Рассмотрим пример кода, который необходимо внедрить для заполнения нашего нового параметра. Выясним, как программа получает данные об основании:
// В модуле менеджера документа РасходнаяНакладная (в расширении)
// Используем аннотацию &После или &Вместо для процедуры печати
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
// Проверяем наличие документа-основания у ссылки
Если ЗначениеЗаполнено(МассивОбъектов[0].ДокументОснование) Тогда
СсылкаНаЗаказ = МассивОбъектов[0].ДокументОснование;
// Формируем строковое представление заказа: "Заказ покупателя №... от ..."
ТекстЗаказа = ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаЗаказ, "Заказ покупателя");
// Присваиваем значение параметру макета
ОбластьШапка.Параметры.ДокументОснование = "Основание: " + ТекстЗаказа;
КонецЕсли;
Обратите внимание на использование функции ОбщегоНазначения.СформироватьЗаголовокДокумента. Это стандартный метод 1С, который корректно преобразует ссылку на документ в привычный пользователю текстовый вид, соблюдая форматирование даты и номера.
Если вы не хотите вносить изменения даже в расширения, оптимальным выбором станет создание внешней печатной формы. Это отдельный файл формата .epf, который подключается в режиме "1С:Предприятие". В качестве готовой основы подойдёт внешняя печатная форма расходной накладной для УНФ.
Посмотрим на преимущества этого подхода:
Для реализации в коде внешней обработки нам потребуется создать запрос к базе данных. Важно помнить специфику 1С:УНФ: связь с заказом может храниться не только в реквизите ДокументОснование в шапке, но и в табличной части Запасы. Это происходит, когда одна накладная закрывает сразу несколько разных заказов.
Проанализируем ситуацию с несколькими заказами в одном документе. В таком случае в шапку лучше выводить список заказов через запятую или указывать заказ для каждой строки товара. Пример запроса для получения всех заказов из табличной части:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РасходнаяНакладнаяЗапасы.ЗаказПокупателя КАК Заказ
|ИЗ
| Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
|ГДЕ
| РасходнаяНакладнаяЗапасы.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаРНК);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
СтрокаЗаказов = "";
Пока РезультатЗапроса.Следующий() Цикл
СтрокаЗаказов = СтрокаЗаказов + ?(СтрокаЗаказов = "", "", ", ") + СокрЛП(РезультатЗапроса.Заказ);
КонецЦикла;
В современных версиях 1С:УНФ 1.6 существует возможность редактировать макеты печатных форм прямо в пользовательском интерфейсе. Для этого перейдем в раздел Компания — Печатные формы, отчеты и обработки — Макеты печатных форм.
Найдем в списке макет Расходная накладная. Мы можем открыть его для редактирования и добавить текст или изменить оформление. Однако стоит учитывать критически важный нюанс: простое добавление текста "Заказ покупателя" в ячейку не заставит программу выводить туда реальный номер. Если в стандартном наборе данных, который разработчики УНФ предусмотрели для этой формы, нет поля с заказом, то без правки кода (как описано в Способе 1) макет останется статичным или пустым.
Если задача стоит "видеть номер и дату" и при этом допустимо ручное заполнение или использование простых скриптов, можно воспользоваться механизмом Дополнительных реквизитов:
Расходная накладная дополнительный реквизит строкового типа.Выбор способа зависит от ваших навыков и требований к системе. Если вы программист, мы рекомендуем использовать Расширение конфигурации с переопределением процедуры печати. Это наиболее "чистый" метод с точки зрения архитектуры 1С.
Важные моменты, которые стоит проверить:
ДокументОснование действительно заполнен. В УНФ документ может быть создан "просто так", и тогда попытка обращения к основанию вызовет пустое поле в печати.ДФ=dd.MM.yyyy (например, 01.01.2023).Таким образом, мы рассмотрели основные методы вывода связанных документов в печатные формы. Следуя этим инструкциям, вы сможете сделать работу пользователей в 1С:УНФ более эффективной и прозрачной.