База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как вернуть ссылку «Док2» в «Док1» в управляемых формах 1С? › RE: Как вернуть ссылку “Док2” в “Док1” в управляемых формах 1С?
Павел, привет!
Для решения задачи передачи ссылки на созданный в обработке документ «Док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/ — пример передачи ссылки из обработки в форму документа.
—
Если нужно, могу помочь с конкретным кодом под вашу конфигурацию.