Создание внешних печатных форм (ВПФ) — это одна из самых востребованных задач при сопровождении конфигураций 1С, особенно таких классических, как «Управление торговлей, редакция 10.3». Внешние формы позволяют изменять печатный вид документов, не внося правки в основную конфигурацию, что существенно облегчает процесс последующего обновления программы. В данной статье мы подробно разберем процесс создания ВПФ для документа РеализацияТоваровУслуг, которая должна выводить не только список товаров, но и специфические данные: информацию о рейсе, водителе и транспортном средстве.
Прежде всего, нам необходимо учитывать, что УТ 10.3 построена на базе обычного приложения. Механизм внешних печатных форм здесь отличается от того, который используется в современных конфигурациях на управляемых формах (БСП). Основное взаимодействие системы с внешней обработкой происходит через строго определенный набор реквизитов и экспортных функций.
Рассмотрим по шагам процесс создания такой обработки в режиме «Конфигуратор».
Запустим Конфигуратор и создадим новую внешнюю обработку (Файл — Новый — Внешняя обработка). Дадим ей понятное имя, например, ПечатьНакладнойСДаннымиВодителя.
Для того чтобы система опознала нашу обработку как печатную форму, необходимо добавить в неё обязательный реквизит:
СсылкаНаОбъект.ДокументСсылка.РеализацияТоваровУслуг. Если вы планируете использовать одну форму для нескольких видов документов, можно установить составной тип данных.Важный нюанс: в некоторых версиях механизмов печати также может потребоваться реквизит ДополнительныеПараметры с типом Произвольный, но для стандартной УТ 10.3 достаточно наличия СсылкаНаОбъект.
Теперь перейдем в Модуль объекта (кнопка «Действия» — «Модуль объекта» в окне редактирования обработки). Именно здесь должна располагаться главная функция, которую вызовет система при нажатии кнопки «Печать» в документе.
Проанализируем структуру кода. Функция обязательно должна называться Печать() и иметь ключевое слово Экспорт. Разберем минимальный каркас:
Функция Печать() Экспорт
// Создаем новый табличный документ
ТабДок = Новый ТабличныйДокумент;
// Здесь будет логика заполнения документа данными
// ...
Возврат ТабДок;
КонецФункции
В этой функции система ожидает получить готовый объект типа ТабличныйДокумент, который в дальнейшем будет выведен на экран или отправлен на принтер.
Создадим макет, который будет определять внешний вид нашей формы. На вкладке «Макеты» добавим новый макет с типом «Табличный документ». Назовем его ОсновнойМакет.
В макете нам нужно определить области:
Рейс, Водитель, ГосНомер и НомерВУ.Поскольку в типовом документе Реализация товаров и услуг может не быть полей «Водитель» или «Рейс», часто их хранят в дополнительных свойствах объекта. Проанализируем, как программно получить эти данные.
Теперь наполним функцию Печать() реальной логикой. Рассмотрим подробнее, как получить данные из документа и объединить их с данными из макета.
Функция Печать() Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ВнешняяФорма";
Макет = ПолучитьМакет("ОсновнойМакет");
// Получаем данные из документа через СсылкаНаОбъект
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Номер,
| Реализация.Дата,
| Реализация.Контрагент.Наименование КАК Получатель,
| Реализация.Товары.(
| Номенклатура.Наименование КАК Товар,
| Количество,
| Цена,
| Сумма
| )
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Ссылка = &ТекущийДокумент";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
// Заполняем область заголовка
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьЗаголовок.Параметры.ТекстЗаголовка = "Реализация № " + Выборка.Номер + " от " + Формат(Выборка.Дата, "ДЛФ=DD");
ТабДок.Вывести(ОбластьЗаголовок);
// Выводим данные о рейсе и водителе
// В реальной задаче данные могут браться из доп. свойств или связанных документов
ОбластьВодитель = Макет.ПолучитьОбласть("ДанныеВодителя");
ОбластьВодитель.Параметры.Водитель = "Иванов И.И."; // Пример заполнения
ОбластьВодитель.Параметры.ГосНомер = "А777АА 77";
ТабДок.Вывести(ОбластьВодитель);
// Выводим шапку таблицы
ОбластьШапкаТаб = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДок.Вывести(ОбластьШапкаТаб);
// Выводим строки товаров
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ВыборкаТовары = Выборка.Товары.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(ВыборкаТовары);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
КонецЕсли;
Возврат ТабДок;
КонецФункции
Выясним, как вывести информацию о рейсе, если она хранится в регистре сведений или дополнительных реквизитах (характеристиках) документа. В УТ 10.3 часто используется механизм свойств. Для получения значения свойства «Рейс» или «Номер ВУ» можно использовать типовую функцию или дополнительный запрос к регистру ЗначенияСвойствОбъектов.
Рассмотрим пример запроса для получения свойства объекта:
ЗапросСвойства = Новый Запрос;
ЗапросСвойства.Текст =
"ВЫБРАТЬ
| ЗначенияСвойств.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
|ГДЕ
| ЗначенияСвойств.Объект = &Объект
| И ЗначенияСвойств.Свойство.Наименование = &ИмяСвойства";
ЗапросСвойства.УстановитьПараметр("Объект", СсылкаНаОбъект);
ЗапросСвойства.УстановитьПараметр("ИмяСвойства", "Водитель");
РезультатСвойство = ЗапросСвойства.Выполнить().Выбрать();
Если РезультатСвойство.Следующий() Тогда
// Записываем полученное значение в параметры макета
КонецЕсли;
После того как мы сохранили нашу обработку в файл с расширением .epf, её необходимо подключить к информационной базе. Посмотрим на этот процесс в режиме «1С:Предприятие»:
.epf.Реализация товаров и услуг.Теперь, если мы откроем любой документ реализации, в подменю кнопки «Печать» появится новый пункт с названием нашей обработки. Проанализируем результат: при нажатии на этот пункт система передаст ссылку на текущий документ в реквизит СсылкаНаОбъект нашей обработки и выполнит функцию Печать(), отобразив сформированный нами табличный документ.
Если при печати возникает ошибка или документ выводится пустым, рассмотрим методы отладки:
ДокументСсылка.РеализацияТоваровУслуг и кнопку, которая будет вызывать процедуру печати. Это позволит вам запускать отладку через F5, не перезагружая файл в справочник после каждого изменения кода.СсылкаНаОбъект назван именно так, без опечаток, и его тип строго соответствует документу.ТабДок.ПроверитьВывод(МассивОбластей). Это поможет корректно обрабатывать разрывы страниц, чтобы подписи не «висели» на отдельном листе без данных.Таким образом, мы разобрали полный цикл создания внешней печатной формы для 1С:УТ 10.3. Этот навык позволяет гибко адаптировать систему под требования логистики и склада, не нарушая целостности типового решения.