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

Как вернуть ссылку ...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Из документа "Док1" открывается обработка "Обработка" из которой создается документ "Док 2". Необходимо вернуть ссылку на "Док2" в "Док1" на управляемых формах



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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

Для решения задачи передачи ссылки на созданный в обработке документ "Док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/ — пример передачи ссылки из обработки в форму документа.

---

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



   
ОтветитьЦитата