Как вывести договор в печатную форму счета на оплату в 1С:Управление торговлей 11?

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

При переходе с конфигураций на базе обычных форм (например, 1С:Управление торговлей ред. 10.3) на современные конфигурации с управляемыми формами (1С:Управление торговлей ред. 11) разработчики часто сталкиваются с изменениями в архитектуре подсистемы печати Библиотеки Стандартных Подсистем (БСП).

Если в 1С:УТ 10.3 получение договора и его заполнение в макете выполнялось одной строкой вида ОбластьМакета.Параметры.Договор = СсылкаНаОбъект.ДоговорКонтрагента;, то в 1С:УТ 11 процесс разделен на этап подготовки данных печатной формы и этап непосредственного вывода этих данных в макет. Разберем, как устроена подсистема печати в УТ 11 и как корректно передать реквизит договора в макет печатной формы счета на оплату.

Разбор архитектуры вывода печатных форм в 1С:УТ 11

Проанализируем процедуру заполнения макета печатной формы счета на оплату. В типовых конфигурациях УТ 11 формирование и заполнение табличного документа происходит с использованием служебной структуры или выборки ДанныеПечати.

Процедура заполнения печатной формы получает сформированные данные через аргумент ДанныеПечати:


Процедура ЗаполнитьРеквизитыШапкиСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, ТаблицаТовары)
    
    // Получение области и заполнение параметров из структуры ДанныеПечати
    ОбластьМакета = Макет.ПолучитьОбласть("Грузополучатель");
    СтруктураДанныхГрузополучатель = Новый Структура;
    
    // Для вывода договора необходимо обратиться к свойству структуры
    СтруктураДанныхГрузополучатель.Вставить("Договор", ДанныеПечати.Договор);
    ОбластьМакета.Параметры.Заполнить(СтруктураДанныхГрузополучатель);
    ТабличныйДокумент.Вывести(ОбластьМакета);

КонецПроцедуры

Если обратиться к несуществующему полю структуры ДанныеПечати.Договор, система выдаст ошибку или вернет пустое значение. Выясним, почему так происходит.

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

Инструкция по выведению договора в печатную форму

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

  1. Проверяем наличие поля в источнике данных: Посмотрим на вышестоящую функцию в стеке вызовов отладчика, где формируется структура ДанныеПечати. Убедимся, что в тексте запроса выборки данных присутствует реквизит договора (например, ЗаказКлиента.Договор КАК Договор).
  2. Запрашиваем реквизит договора: В случае отсутствия поля в выборке добавляем его в текст запроса функции формирования данных печати или в расширение модуля.
  3. Передаем значение в параметры макета: В процедуре формирования макета передаем полученный реквизит из структуры ДанныеПечати в параметры области макета:
    
    СтруктураДанныхШапки = Новый Структура;
    СтруктураДанныхШапки.Вставить("Договор", ДанныеПечати.Договор);
    ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
    
    Или напрямую заполняем параметр области макета: ОбластьМакета.Параметры.Договор = ДанныеПечати.Договор;
  4. Проверяем обращение через ссылку: Если в структуру ДанныеПечати уже передается ссылка на документ (поле ДанныеПечати.Ссылка), то получить реквизит договора можно непосредственно от нее: ОбластьМакета.Параметры.Договор = ДанныеПечати.Ссылка.Договор; Однако наиболее предпочтительным с точки зрения производительности является получение договора напрямую в исходном запросе формирования данных печати.

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

← На главную