Имя: Пароль:
1C
1С v8
8.3 УФ.Получить ссылку на созданный элемент справочника
0 jamesgold
 
02.02.21
17:44
Добрый день, прошу помочь!

Такая задача получить существующую анкету или создать новую и вернуть ссылку
Делаю так:
&НаКлиенте
Процедура ОбработчикКонтактнаяИнформация(Результат, Параметры) Экспорт
    Если Результат <> неопределено Тогда
        Закрыть(Результат);
    КонецЕсли;
КонецПроцедуры // ОбработчикКонтактнаяИнформация()

&НаСервереБезКонтекста
Процедура ЗаполнитьНаСервере(НовыйОбъект, Телефон)
    НовыйОбъект.МобильныйТелефон = Телефон;
КонецПроцедуры

&НаКлиенте
Функция ВыполнитьРегистрацию(Телефон)    
    
    Анкета = ОбщегоНазначенияСервер.ПолучитьКонтактнуюИнформациюПоТелефону(Телефон);
    Если НЕ значениезаполнено(Анкета) Тогда
        
        СтруктураПараметров = новый Структура;
        СтруктураПараметров.Вставить("Телефон", Телефон);
        Форма = ОткрытьФорму("Справочник.КонтактнаяИнформация.ФормаОбъекта", СтруктураПараметров, ЭтаФорма,,,,новый ОписаниеОповещения("ОбработчикКонтактнаяИнформация", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
        ДанныеФормы = Форма.Объект;
        ЗаполнитьНаСервере(ДанныеФормы, Телефон);
        КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
        
    КонецЕсли;
КонецФункции

В итоге получается форма нового элемента открывается только когда отработает вся функция ВыполнитьРегистрацию, можно ли получить ссылку на созданную анкету уже в функции ВыполнитьРегистрацию?
1 Курцвейл
 
02.02.21
17:47
Нельзя. Она еще не существует. Можно для нового объекта установить гуид. И далее его использовать. Хотя с точки зрения архитектуры решение спорное.
2 Курцвейл
 
02.02.21
17:51
А еще можно сделать асинхронную обработку события.
Справочник еще не записан. При записи используйте оповещение. И в самом обработчике оповещения делайте вторую часть функции ВыполнитьРегистрацию
3 jamesgold
 
02.02.21
18:00
(1) А если я в текущем элементе запрошу всю информацию на форме обработки, далее на основании этой информации програмно создам элемент справочника и возьму с него сразу ссылку уже в это функции, так можно?
4 Жан Пердежон
 
02.02.21
18:06
всё в (0) переделать и форма тебе не нужна
5 jamesgold
 
02.02.21
18:07
(4) Эту информацию я не знаю, ее должен пользователь ввести в тот момент, все равно нужен интерактив.
6 Курцвейл
 
02.02.21
18:07
(3) Можно, но ИМХО это не нужное извращение. Лучше за счет асинхронности разделить ВыполнитьРегистрацию на 2 части.
7 PCcomCat
 
02.02.21
18:08
(0) В обработчике ОбработчикКонтактнаяИнформация нужно продолжать что либо делать
8 jamesgold
 
02.02.21
18:09
(7) Он отрабатывает уже после функции ВыполнитьРегистрацию
9 Курцвейл
 
02.02.21
18:11
(8) Если пользователь форму КонтактнаяИнформация не закроет, то ничего не выполниться. И ссылку не получишь. Хотя данные скопируешь.
10 PCcomCat
 
02.02.21
18:11
(8) Он отработает после заполнения формы нового элемента, если правильно всё сделать. т.к. на то он и нужен, чтобы работать по вызову после каких-то действий и не раньше
11 Жан Пердежон
 
02.02.21
18:12
(5) нужен интерактив -  делай всё в обработчике оповещения (в процедуре "ОбработчикКонтактнаяИнформация")
12 Курцвейл
 
02.02.21
18:13
Лучше отказаться от обработчика закрытия и использовать свои оповещения. Пользователь может записать элемент и оставить форму открытой. Алгоритм не сработает.
13 PCcomCat
 
02.02.21
18:16
(12) можно же на запись оповещение прилепить, тогда пофигу на остальные действия пользователя. Тут-то важна ссылка, а она после записи появится
14 Курцвейл
 
02.02.21
18:21
(13) Я об этом и говорю.
15 jamesgold
 
02.02.21
18:29
Курцвейл, PCcomCat спасибо за помощь!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.