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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как вернуть ссылку «Док2» в «Док1» в управляемых формах 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33550
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        Из документа «Док1» открывается обработка «Обработка» из которой создается документ «Док 2». Необходимо вернуть ссылку на «Док2» в «Док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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С