Как получить ссылку на объект во внешней печатной форме в 1С?

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

При разработке внешних печатных форм для конфигураций 1С на платформе «1С:Предприятие 8.3» (например, «1С:Комплексная автоматизация 2», «1С:Управление торговлей 11» или «1С:Бухгалтерия 3.0») разработчики часто сталкиваются с проблемой получения ссылки на текущий документ. В старых конфигурациях на обычных формах существовал стандартный реквизит СсылкаНаОбъект, который заполнялся автоматически. В управляемом приложении работа построена на механизмах Библиотеки Стандартных Подсистем (БСП), и передача данных происходит через параметры формы и вызываемые методы.

Рассмотрим подробно, почему не заполняется реквизит СсылкаНаОбъект, как правильно получить выбранные документы в форме обработки и как настроить удобную отладку.

Основные причины проблемы

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

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

Способ 1. Получение объектов при типе команды «ОткрытиеФормы»

Если в функции СведенияОВнешнейОбработке зарегистрирована команда с типом ОткрытиеФормы, платформа передает массив ссылок в параметры создаваемой формы. Разберем следующий алгоритм получения ссылки в модуле управляемой формы внешней обработки:

В серверном обработчике ПриСозданииНаСервере необходимо обратиться к структуре Параметры и извлечь массив ОбъектыНазначения:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    МассивОбъектов = Новый Массив;
    Если Параметры.Свойство("ОбъектыНазначения", МассивОбъектов) И МассивОбъектов.Количество() > 0 Тогда
        // Получаем первую ссылку на выбранный документ
        СсылкаНаОбъект = МассивОбъектов[0];
    КонецЕсли;
КонецПроцедуры

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

Способ 2. Получение объектов при типе команды «ВызовКлиентскогоМетода»

Если команда печатной формы зарегистрирована с типом ВызовКлиентскогоМетода, БСП вызывает экспортную процедуру в модуле управляемой формы обработки. В этом случае массив ссылок передается напрямую в качестве одного из параметров процедуры.

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


&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    Если ОбъектыНазначения.Количество() > 0 Тогда
        СсылкаНаОбъект = ОбъектыНазначения[0];
    КонецЕсли;
КонецПроцедуры

Как отлаживать форму через «Файл — Открыть»

Чтобы не подключать внешнюю обработку в справочник «Дополнительные отчеты и обработки» при каждом изменении кода, добавим в процедуру ПриСозданииНаСервере проверку на наличие параметров. Это позволит отлаживать форму при прямом открытии файл-обработки:


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

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

← На главную