Как вывести на внешнюю печатную форму данные реквизитов из разных документов?

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

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

Определяем архитектуру решения

Основная проблема при разработке печатных форм — это неправильное обращение к данным. Многие пытаются «дотянуться» до нужных реквизитов напрямую через СсылкаНаОбъект.ИмяРеквизита. Однако, если этих данных нет в объекте напрямую (например, вес и объем в документе доставки, а не в реализации), такой подход не сработает.

Для решения этой задачи необходимо использовать запросы. Запрос позволяет «собрать» данные из разных таблиц базы данных, используя общие поля для связи.

Этап 1: Подготовка запроса с соединениями

Разберем ситуацию, когда нам нужно получить данные из документа ЗаданиеНаПеревозку и дополнительно вытянуть реквизиты из документа ЗаказКлиента, который указан в табличной части задания. Для этого воспользуемся ЛЕВОЕ СОЕДИНЕНИЕ. Это позволит нам получить данные, даже если в каких-то строках связь с заказом отсутствует.

Пример построения запроса:


ВЫБРАТЬ
    ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Дата КАК Дата,
    ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Номер КАК Номер,
    ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК ПолучательОтправитель,
    ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК Распоряжение,
    ЗаказКлиента.ФормаОплаты КАК ФормаОплаты,
    ЗаказКлиента.Менеджер КАК Менеджер
ИЗ
    Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
ЛЕВОЕ СОЕДИНЕНИЕ
    Документ.ЗаказКлиента КАК ЗаказКлиента
ПО
    ЗаданиеНаПеревозкуРаспоряжения.Распоряжение = ЗаказКлиента.Ссылка
ГДЕ
    ЗаданиеНаПеревозкуРаспоряжения.Ссылка = &СсылкаНаОбъект

Этап 2: Выполнение запроса и обработка результата

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

Рассмотрим пример кода для функции формирования печатной формы:


Запрос = Новый Запрос;
Запрос.Текст = ...; // Текст запроса из предыдущего примера
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

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

Этап 3: Частые ошибки и советы по отладке

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

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

← На главную