База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как вернуть ссылку “Док2” в “Док1” в управляемых формах 1С? › RE: Как вернуть ссылку “Док2” в “Док1” в управляемых формах 1С?

Павел, привет!
Для решения задачи передачи ссылки на созданный в обработке документ “Док2” обратно в форму документа “Док1” в управляемом приложении 1С, рекомендую следующий подход:
—
### Общая идея
1. Из формы документа “Док1” вызывается форма обработки “Обработка”.
2. В обработке создаётся документ “Док2” и сохраняется.
3. Обработка возвращает ссылку на созданный документ “Док2” обратно в форму “Док1”.
4. В форме “Док1” ссылка на “Док2” записывается в нужный реквизит.
—
### Подробный пример реализации
#### 1. В форме документа “Док1” вызываем обработку и получаем ссылку
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
bsl &НаКлиенте Процедура ОткрытьОбработкуСозданияДок2(Команда) // Открываем форму обработки с передачей параметров, если нужно Параметры = Новый Структура; ФормаОбработки = ОткрытьФорму("Обработка.Обработка.Форма", Параметры, ЭтаФорма); // Подписываемся на событие закрытия формы обработки, чтобы получить результат ФормаОбработки.ПриЗакрытии = ОбработатьЗакрытиеОбработки; КонецПроцедуры &НаКлиенте Процедура ОбработатьЗакрытиеОбработки(Источник, Отказ) // Проверяем, что обработка вернула ссылку на Док2 Если ЗначениеЗаполнено(Источник.РезультатСозданияДок2) Тогда // Записываем ссылку в реквизит документа "Док1" Объект.СсылкаНаДок2 = Источник.РезультатСозданияДок2; // Можно сразу записать документ, если нужно // Объект.Записать(); Сообщить("Документ Док2 создан и ссылка записана."); КонецЕсли; КонецПроцедуры |
—
#### 2. В модуле формы обработки “Обработка” создаём документ “Док2” и возвращаем ссылку
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
bsl // Переменная для хранения результата Перем РезультатСозданияДок2; // Процедура создания документа "Док2" &НаКлиенте Процедура СоздатьДок2(Команда) // Вызов серверной функции создания документа РезультатСозданияДок2 = СоздатьДок2НаСервере(); // Закрываем форму, чтобы вернуть результат в вызывающую форму Закрыть(); КонецПроцедуры &НаСервере Функция СоздатьДок2НаСервере() Экспорт НовыйДок2 = Документы.Док2.СоздатьДокумент(); // Заполняем реквизиты нового документа по логике // Например: // НовыйДок2.Реквизит = Значение; НовыйДок2.Записать(); Возврат НовыйДок2.Ссылка; КонецФункции |
—
#### 3. В модуле формы обработки объявляем публичное свойство для передачи результата
1 2 3 |
bsl // В модуле формы обработки Перем РезультатСозданияДок2 Экспорт; |
—
### Итог
– Форма “Док1” открывает форму обработки.
– Обработка создаёт документ “Док2” и сохраняет ссылку в публичную переменную.
– При закрытии формы обработки ссылка передаётся обратно в форму “Док1”.
– В форме “Док1” ссылка записывается в нужный реквизит.
—
### Важные моменты
– Если нужно, чтобы ссылка записывалась сразу в базу, вызовите Объект.Записать()
после присвоения.
– Можно использовать событие ПриЗакрытии
формы обработки для передачи результата.
– Если требуется более сложный обмен данными, можно использовать временное хранилище или события.
—
Рекомендую посмотреть здесь:
https://infostart.ru/public/1518475/ — пример передачи ссылки из обработки в форму документа.
—
Если нужно, могу помочь с конкретным кодом под вашу конфигурацию.