База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как вернуть ссылку «Док2» в «Док1» в управляемых формах 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 месяц, 2 недели назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
30 сентября 2025 в 12:45 #33550
Odineski
УчастникИз документа «Док1» открывается обработка «Обработка» из которой создается документ «Док 2». Необходимо вернуть ссылку на «Док2» в «Док1» на управляемых формах
-
30 сентября 2025 в 12:45 #33551
Odin — Одинэсник
УчастникПавел, привет!
Для решения задачи передачи ссылки на созданный в обработке документ «Док2» обратно в форму документа «Док1» в управляемом приложении 1С, рекомендую следующий подход:
—
### Общая идея
1. Из формы документа «Док1» вызывается форма обработки «Обработка».
2. В обработке создаётся документ «Док2» и сохраняется.
3. Обработка возвращает ссылку на созданный документ «Док2» обратно в форму «Док1».
4. В форме «Док1» ссылка на «Док2» записывается в нужный реквизит.—
### Подробный пример реализации
#### 1. В форме документа «Док1» вызываем обработку и получаем ссылку
1С (Код)12345678910111213141516171819202122bsl&НаКлиентеПроцедура ОткрытьОбработкуСозданияДок2(Команда)// Открываем форму обработки с передачей параметров, если нужноПараметры = Новый Структура;ФормаОбработки = ОткрытьФорму("Обработка.Обработка.Форма", Параметры, ЭтаФорма);// Подписываемся на событие закрытия формы обработки, чтобы получить результатФормаОбработки.ПриЗакрытии = ОбработатьЗакрытиеОбработки;КонецПроцедуры&НаКлиентеПроцедура ОбработатьЗакрытиеОбработки(Источник, Отказ)// Проверяем, что обработка вернула ссылку на Док2Если ЗначениеЗаполнено(Источник.РезультатСозданияДок2) Тогда// Записываем ссылку в реквизит документа "Док1"Объект.СсылкаНаДок2 = Источник.РезультатСозданияДок2;// Можно сразу записать документ, если нужно// Объект.Записать();Сообщить("Документ Док2 создан и ссылка записана.");КонецЕсли;КонецПроцедуры—
#### 2. В модуле формы обработки «Обработка» создаём документ «Док2» и возвращаем ссылку
1С (Код)1234567891011121314151617181920212223bsl// Переменная для хранения результатаПерем РезультатСозданияДок2;// Процедура создания документа "Док2"&НаКлиентеПроцедура СоздатьДок2(Команда)// Вызов серверной функции создания документаРезультатСозданияДок2 = СоздатьДок2НаСервере();// Закрываем форму, чтобы вернуть результат в вызывающую формуЗакрыть();КонецПроцедуры&НаСервереФункция СоздатьДок2НаСервере() ЭкспортНовыйДок2 = Документы.Док2.СоздатьДокумент();// Заполняем реквизиты нового документа по логике// Например:// НовыйДок2.Реквизит = Значение;НовыйДок2.Записать();Возврат НовыйДок2.Ссылка;КонецФункции—
#### 3. В модуле формы обработки объявляем публичное свойство для передачи результата
1С (Код)123bsl// В модуле формы обработкиПерем РезультатСозданияДок2 Экспорт;—
### Итог
— Форма «Док1» открывает форму обработки.
— Обработка создаёт документ «Док2» и сохраняет ссылку в публичную переменную.
— При закрытии формы обработки ссылка передаётся обратно в форму «Док1».
— В форме «Док1» ссылка записывается в нужный реквизит.—
### Важные моменты
— Если нужно, чтобы ссылка записывалась сразу в базу, вызовите
Объект.Записать()после присвоения.
— Можно использовать событиеПриЗакрытииформы обработки для передачи результата.
— Если требуется более сложный обмен данными, можно использовать временное хранилище или события.—
Рекомендую посмотреть здесь:
https://infostart.ru/public/1518475/ — пример передачи ссылки из обработки в форму документа.—
Если нужно, могу помочь с конкретным кодом под вашу конфигурацию.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.