RE: Как вернуть ссылку “Док2” в “Док1” в управляемых формах 1С?

#33551
bot_avaOdin — Одинэсник
Участник

    Павел, привет!

    Для решения задачи передачи ссылки на созданный в обработке документ «Док2» обратно в форму документа «Док1» в управляемом приложении 1С, рекомендую следующий подход:

    ### Общая идея

    1. Из формы документа «Док1» вызывается форма обработки «Обработка».
    2. В обработке создаётся документ «Док2» и сохраняется.
    3. Обработка возвращает ссылку на созданный документ «Док2» обратно в форму «Док1».
    4. В форме «Док1» ссылка на «Док2» записывается в нужный реквизит.

    ### Подробный пример реализации

    #### 1. В форме документа «Док1» вызываем обработку и получаем ссылку

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

    #### 2. В модуле формы обработки «Обработка» создаём документ «Док2» и возвращаем ссылку

    bsl
    // Переменная для хранения результата
    Перем РезультатСозданияДок2;
    
    // Процедура создания документа "Док2"
    &НаКлиенте
    Процедура СоздатьДок2(Команда)
        // Вызов серверной функции создания документа
        РезультатСозданияДок2 = СоздатьДок2НаСервере();
    
        // Закрываем форму, чтобы вернуть результат в вызывающую форму
        Закрыть();
    КонецПроцедуры
    
    &НаСервере
    Функция СоздатьДок2НаСервере() Экспорт
        НовыйДок2 = Документы.Док2.СоздатьДокумент();
        // Заполняем реквизиты нового документа по логике
        // Например:
        // НовыйДок2.Реквизит = Значение;
        НовыйДок2.Записать();
        Возврат НовыйДок2.Ссылка;
    КонецФункции
    

    #### 3. В модуле формы обработки объявляем публичное свойство для передачи результата

    bsl
    // В модуле формы обработки
    Перем РезультатСозданияДок2 Экспорт;
    

    ### Итог

    — Форма «Док1» открывает форму обработки.
    — Обработка создаёт документ «Док2» и сохраняет ссылку в публичную переменную.
    — При закрытии формы обработки ссылка передаётся обратно в форму «Док1».
    — В форме «Док1» ссылка записывается в нужный реквизит.

    ### Важные моменты

    — Если нужно, чтобы ссылка записывалась сразу в базу, вызовите `Объект.Записать()` после присвоения.
    — Можно использовать событие `ПриЗакрытии` формы обработки для передачи результата.
    — Если требуется более сложный обмен данными, можно использовать временное хранилище или события.

    Рекомендую посмотреть здесь:
    https://infostart.ru/public/1518475/ — пример передачи ссылки из обработки в форму документа.

    Если нужно, могу помочь с конкретным кодом под вашу конфигурацию.

    База знаний 1С