Как при запуске внешней обработки автоматически передать в нее ссылку на документ?

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

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

Понимание механизма передачи параметров

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

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

Решение 1: Использование события ПриСозданииНаСервере

Если ваша обработка открывает собственную форму (тип команды ОткрытиеФормы), данные о документах-источниках передаются в структуру Параметры этой формы. Это самый надежный способ заполнить реквизиты при старте.

Разберем реализацию по шагам:

  1. В модуле формы обработки создайте процедуру ПриСозданииНаСервере.
  2. Получите данные из параметра ОбъектыНазначения.
  3. Присвойте полученную ссылку вашему реквизиту формы.

Пример реализации:


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

Важно: Всегда учитывайте, что ОбъектыНазначения — это массив. Пользователь может выделить в списке сразу несколько документов, поэтому будьте готовы обрабатывать коллекцию, а не только один элемент.

Решение 2: Настройка модуля объекта для вызова клиентского метода

Если вы выбрали вид обработки ЗаполнениеОбъекта, система ожидает, что вы будете использовать метод ВыполнитьКоманду в модуле объекта. В этом случае вы можете передать данные, вызывая клиентский метод открытия формы.

Чтобы это работало корректно, убедитесь, что в функции СведенияОВнешнейОбработке правильно настроена таблица команд:


// Пример настройки в модуле объекта
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.0.1.351");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта;
    // ... дальнейшая настройка
    Возврат ПараметрыРегистрации;
КонецФункции

В самой процедуре ВыполнитьКоманду вы можете программно открыть форму, передав в нее параметры:


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

Рекомендации по разработке

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

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

← На главную