Как заменить заголовок во внешней печатной форме Заказа покупателя в УТ 10.3

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

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

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

Выясним причину возникшей проблемы и пошагово разберем процесс её устранения.

Почему возникает ошибка при обращении к переменной Шапка?

В сообщении №7 автор темы пытается использовать следующий код в модуле своей внешней печатной формы:


ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Счёт-договор по предоплате");

При проверке кода система выдает ошибку. Это происходит по двум ключевым причинам:

  1. Область видимости переменной: В стандартном модуле менеджера или объекта документа структура Шапка собирается в одной функции и передается в другую. Во внешней печатной форме (обработке) контекст выполнения меняется. Локальной переменной Шапка в функции вывода области макета просто не существует, поэтому компилятор выдает ошибку о неопределенном идентификаторе.
  2. Особенности работы ВПФ: Во внешних печатных формах для связи с документом-основанием используется специальная экспортная переменная реквизита обработки — СсылкаНаОбъект. Именно в ней хранится ссылка на документ «Заказ покупателя», из которого была запущена печать.

Рассмотрим подробнее, как работает функция формирования заголовков в УТ 10.3, чтобы правильно использовать её возможности.

Как устроена функция СформироватьЗаголовокДокумента

В общем модуле ОбщегоНазначения конфигурации УТ 10.3 присутствует экспортная функция, отвечающая за генерацию красивой шапки документа:


Функция СформироватьЗаголовокДокумента(ДокументОбъект, НазваниеДокумента = "") Экспорт
    Возврат ?(ЗначениеНеЗаполнено(НазваниеДокумента), ДокументОбъект.Метаданные().Синоним, НазваниеДокумента) 
            + " № " + ПолучитьНомерНаПечать(ДокументОбъект) 
            + " от " + Формат(ДокументОбъект.Дата, "ДФ='дд ММММ гггг'");
КонецФункции

Эта функция ожидает на вход первым параметром ссылку на документ (или сам объект документа), а вторым параметром — текстовую строку нового названия. Она автоматически удаляет префиксы из номера и приводит дату к стандартному печатному виду. Таким образом, нам достаточно передать туда правильную ссылку на объект и наш новый текст.

Теперь разберем два способа решения нашей задачи.

Вариант 1. Быстрое переопределение параметра при выводе области

Этот способ идеально подходит, если вы хотите внести изменения с минимальным вмешательством в алгоритмы сбора данных печатной формы. Мы перехватим заполнение параметра ТекстЗаголовка непосредственно перед вызовом метода Вывести() табличного документа.

Выполним следующие шаги:

  1. Откроем модуль нашей внешней печатной формы (ВПФ).
  2. Найдем функцию СоздатьТабличныйДокументПечатиСчетаЗаказа(Тип, ПараметрыПечати).
  3. Найдем строки, отвечающие за вывод области "Заголовок".
  4. Вставим код принудительной перезаписи параметра, используя СсылкаНаОбъект вместо несуществующей переменной Шапка.

Посмотрим на пример измененного кода функции вывода:


Функция СоздатьТабличныйДокументПечатиСчетаЗаказа(Тип, ПараметрыПечати)
    
    // ... Инициализация табличного документа и получение макета ...
    
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    
    // Заполняем параметры области стандартными данными из структуры
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    
    // Перезаписываем параметр ТекстЗаголовка нужным нам значением
    ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, "Счёт-договор поставки по предоплате");
    
    // Выводим заполненную область в итоговый табличный документ
    ТабДокумент.Вывести(ОбластьМакета);
    
    // ... Продолжение вывода остальных областей (Строка, Подвал и т.д.) ...
    
КонецФункции

При таком подходе в макете печатной формы параметр ТекстЗаголовка заполнится правильной строкой вида: «Счёт-договор поставки по предоплате № 00000012 от 15 мая 2024 г.».

Вариант 2. Изменение на этапе формирования структуры параметров (Архитектурно правильный)

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

Разберем по шагам, как переопределить заголовок на этапе сборки параметров:

  1. Найдем в модуле внешней печатной формы функцию ПолучитьПараметрыПечатиСчетаЗаказа(Тип).
  2. Найдем условную конструкцию Если Тип = "Счет" Тогда....
  3. В ветке Иначе (которая отвечает за вывод параметров Заказа покупателя) заменим стандартный текст на наш новый заголовок.

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


Функция ПолучитьПараметрыПечатиСчетаЗаказа(Тип)
    
    ПараметрыПечати = Новый Структура;
    
    // ... Код запроса и заполнения базовых реквизитов ...
    
    Если Тип = "Счет" Тогда
        ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, "Счет на оплату"));
    Иначе
        // Заменяем стандартный "Заказ покупателя" на наш новый заголовок
        ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, "Счёт-договор поставки по предоплате"));
    КонецЕсли;
    
    // ... Заполнение остальных параметров структуры ...
    
    Возврат ПараметрыПечати;
    
КонецФункции

При использовании этого варианта функция вывода СоздатьТабличныйДокументПечатиСчетаЗаказа останется абсолютно нетронутой. Метод ОбластьМакета.Параметры.Заполнить(ПараметрыПечати) автоматически применит новое значение для параметра ТекстЗаголовка.

Важные рекомендации по тестированию ВПФ

После внесения изменений в код внешней печатной формы обязательно выполните следующие действия:

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

← На главную