Как заполнить макет внешней обработки данными выбранного объекта в 1С?

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

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

Этап 1: Получение макета внешней обработки

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

Рассмотрим правильный подход к получению макета с помощью метода РеквизитФормыВЗначение:


&НаСервере
Функция ПолучитьМакетНаСервере()
    // Получаем объект внешней обработки из реквизита формы
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");
    Возврат ОбъектОбработки.ПолучитьМакет("Макет");
КонецФункции

Важно помнить, что если в обработке используется реквизит с именем Объект (стандартный реквизит основной формы обработки), то обращаться следует именно к нему. Использование промежуточной переменной помогает избежать проблем с контекстом исполнения и упрощает отладку кода.

Этап 2: Фильтрация данных с помощью запроса

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

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


&НаСервере
Процедура ПечатьНаСервере(ТабДок, СсылкаНаОбъект)
    Макет = ПолучитьМакетНаСервере();
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Сотрудники.Ссылка.Наименование КАК Наименование,
        |   Сотрудники.Должность КАК Должность
        |ИЗ
        |   Справочник.Сотрудники.ТрудоваяДеятельность КАК Сотрудники
        |ГДЕ
        |   Сотрудники.Ссылка = &Ссылка";
        
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    РезультатЗапроса = Запрос.Выполнить();
    // Далее следует логика вывода в ТабличныйДокумент
КонецПроцедуры

Этап 3: Работа с табличными частями

Часто возникают вопросы при обращении к данным, которые хранятся в табличных частях. Если наименование сотрудника находится в самом справочнике, а должность — в табличной части ТрудоваяДеятельность, важно правильно выстроить путь к данным в запросе:

Этап 4: Вывод в табличный документ

После того как данные получены, переходим к заполнению макета. Рекомендуется разделить логику подготовки документа и логику получения данных.

Рассмотрим структуру вывода:


// Инициализируем документ
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакетНаСервере();
ОбластьСотрудник = Макет.ПолучитьОбласть("данныеосотрудниках");

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

// Отображаем пользователю
ТабДок.Показать("Печатная форма");

Советы для начинающих:

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

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

← На главную