Как самостоятельно создать внешнюю печатную форму для 1С:Управление торговлей 10.3

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

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

Особенности разработки для обычных форм

Прежде всего, нам необходимо учитывать, что УТ 10.3 построена на базе обычного приложения. Механизм внешних печатных форм здесь отличается от того, который используется в современных конфигурациях на управляемых формах (БСП). Основное взаимодействие системы с внешней обработкой происходит через строго определенный набор реквизитов и экспортных функций.

Рассмотрим по шагам процесс создания такой обработки в режиме «Конфигуратор».

Шаг 1. Создание объекта внешней обработки

Запустим Конфигуратор и создадим новую внешнюю обработку (Файл — Новый — Внешняя обработка). Дадим ей понятное имя, например, ПечатьНакладнойСДаннымиВодителя.

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

  1. Перейдем на вкладку «Реквизиты».
  2. Добавим новый реквизит с именем СсылкаНаОбъект.
  3. Установим тип данных для этого реквизита. Поскольку мы создаем форму для документа реализации, выбираем тип ДокументСсылка.РеализацияТоваровУслуг. Если вы планируете использовать одну форму для нескольких видов документов, можно установить составной тип данных.

Важный нюанс: в некоторых версиях механизмов печати также может потребоваться реквизит ДополнительныеПараметры с типом Произвольный, но для стандартной УТ 10.3 достаточно наличия СсылкаНаОбъект.

Шаг 2. Описание логики в модуле объекта

Теперь перейдем в Модуль объекта (кнопка «Действия» — «Модуль объекта» в окне редактирования обработки). Именно здесь должна располагаться главная функция, которую вызовет система при нажатии кнопки «Печать» в документе.

Проанализируем структуру кода. Функция обязательно должна называться Печать() и иметь ключевое слово Экспорт. Разберем минимальный каркас:


Функция Печать() Экспорт
    // Создаем новый табличный документ
    ТабДок = Новый ТабличныйДокумент;
    
    // Здесь будет логика заполнения документа данными
    // ...
    
    Возврат ТабДок;
КонецФункции

В этой функции система ожидает получить готовый объект типа ТабличныйДокумент, который в дальнейшем будет выведен на экран или отправлен на принтер.

Шаг 3. Подготовка макета печатной формы

Создадим макет, который будет определять внешний вид нашей формы. На вкладке «Макеты» добавим новый макет с типом «Табличный документ». Назовем его ОсновнойМакет.

В макете нам нужно определить области:

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

Шаг 4. Реализация формирования печатной формы

Теперь наполним функцию Печать() реальной логикой. Рассмотрим подробнее, как получить данные из документа и объединить их с данными из макета.


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

Шаг 5. Работа с дополнительными сведениями

Выясним, как вывести информацию о рейсе, если она хранится в регистре сведений или дополнительных реквизитах (характеристиках) документа. В УТ 10.3 часто используется механизм свойств. Для получения значения свойства «Рейс» или «Номер ВУ» можно использовать типовую функцию или дополнительный запрос к регистру ЗначенияСвойствОбъектов.

Рассмотрим пример запроса для получения свойства объекта:


ЗапросСвойства = Новый Запрос;
ЗапросСвойства.Текст = 
"ВЫБРАТЬ
|   ЗначенияСвойств.Значение
|ИЗ
|   РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
|ГДЕ
|   ЗначенияСвойств.Объект = &Объект
|   И ЗначенияСвойств.Свойство.Наименование = &ИмяСвойства";

ЗапросСвойства.УстановитьПараметр("Объект", СсылкаНаОбъект);
ЗапросСвойства.УстановитьПараметр("ИмяСвойства", "Водитель");

РезультатСвойство = ЗапросСвойства.Выполнить().Выбрать();
Если РезультатСвойство.Следующий() Тогда
    // Записываем полученное значение в параметры макета
КонецЕсли;

Шаг 6. Регистрация внешней печатной формы в программе

После того как мы сохранили нашу обработку в файл с расширением .epf, её необходимо подключить к информационной базе. Посмотрим на этот процесс в режиме «1С:Предприятие»:

  1. Откроем меню «Сервис» — «Дополнительные отчеты и обработки» — «Дополнительные внешние печатные формы».
  2. Нажмем кнопку «Добавить».
  3. В открывшемся окне нажмем на иконку папки («Заменить файл внешней обработки») и выберем созданный нами файл .epf.
  4. Система может автоматически заполнить поле «Наименование». Если нет — укажем его вручную.
  5. В табличной части «Принадлежность печатной формы» нажмем «Добавить» и выберем документ Реализация товаров и услуг.
  6. Нажмем «ОК» для сохранения.

Теперь, если мы откроем любой документ реализации, в подменю кнопки «Печать» появится новый пункт с названием нашей обработки. Проанализируем результат: при нажатии на этот пункт система передаст ссылку на текущий документ в реквизит СсылкаНаОбъект нашей обработки и выполнит функцию Печать(), отобразив сформированный нами табличный документ.

Важные советы по отладке

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

Таким образом, мы разобрали полный цикл создания внешней печатной формы для 1С:УТ 10.3. Этот навык позволяет гибко адаптировать систему под требования логистики и склада, не нарушая целостности типового решения.

← На главную