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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Основные ошибки при создании печатной формы

Прежде чем приступать к исправлению кода, проанализируем, где именно возникли сложности:

  1. Отсутствие фильтрации. В запросе отсутствовало условие ГДЕ Ссылка = &Ссылка. В результате система пыталась выбрать данные по всем документам в базе, что не только избыточно, но и ведет к выводу неверной информации.
  2. Ошибка при обходе результата запроса. Попытка обратиться к параметрам области ОбластьШапка.Параметры до вызова метода Выборка.Следующий() приведет к ошибке, так как указатель выборки еще не установлен на первую запись.
  3. Смешение логики шапки и табличной части. Попытка перебрать строки табличной части в одном цикле с данными шапки документа — это фундаментальная ошибка. Табличная часть документа — это коллекция строк, и для их вывода требуется отдельный цикл обхода.

Шаг 1: Правильное составление запроса

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

Рассмотрим, как должен выглядеть исправленный запрос:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    ЗаявкаНаТранспорт.Номер КАК Номер,
    |    ЗаявкаНаТранспорт.Дата КАК Дата,
    |    ЗаявкаНаТранспорт.Покупатель КАК Покупатель,
    |    ЗаявкаНаТранспорт.Покупатель.Телефон КАК Телефон,
    |    ЗаявкаНаТранспорт.Покупатель.Адрес КАК Адрес
    |ИЗ
    |    Документ.ЗаявкаНаТранспорт КАК ЗаявкаНаТранспорт
    |ГДЕ
    |    ЗаявкаНаТранспорт.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();

Шаг 2: Корректный вывод данных в табличный документ

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


Если Выборка.Следующий() Тогда
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.Заполнить(Выборка);
    ТабличныйДокумент.Вывести(ОбластьШапка);
КонецЕсли;

Обратите внимание на использование метода Параметры.Заполнить(Выборка). Это профессиональный подход: если имена полей в запросе совпадают с именами параметров в макете, 1С автоматически распределит значения, избавляя вас от ручного написания каждой строки.

Шаг 3: Обработка табличной части

Для вывода товаров (табличной части) необходимо использовать отдельную выборку из самого объекта. Если мы работаем внутри сервера, правильнее будет обратиться к табличной части документа напрямую через Ссылка.


// Вывод заголовка таблицы
ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицы"));

ОбластьТаблица = Макет.ПолучитьОбласть("Таблица");

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

Рекомендации по профессиональной разработке

Чтобы ваши печатные формы всегда выглядели профессионально и работали стабильно, придерживайтесь следующих правил:

Следуя этим простым шагам, вы сможете создавать надежные печатные формы, которые будут корректно работать даже при сложной структуре данных вашего документа ЗаявкаНаТранспорт.

← На главную