Имя: Пароль:
1C
1С v8
УстановитьСсылкуНового или Как восстановить ссылку на объект
0 ejiki
 
06.05.15
09:57
Каким-то образом был удален объект из базы. Цель Восстановить по "<Объект не найден> (124:820694de80c8cdb911e4ed4b0f3b6683)"
Собственно Сабж. Вероятно я некорректно передаю ГУИД объекту. Причина в том что Документ создаю. Но как была ссылка в других доках на него "<Объект не найден> (124:820694de80c8cdb911e4ed4b0f3b6683)", так и осталась. Подскажите братцы в чем моя проблема в данном случае?




            ИначеЕсли ТипОбъекта = "Документ" Тогда
                ОбъектСсылка = Документы[ИмяОбъекта].СоздатьДокумент();
                ОбъектСсылка.УстановитьСсылкуНового(Документы[ИмяОбъекта].ПолучитьСсылку(УникальныйИд));
                        КонецЕсли;
            попытка
                ОбъектСсылка.ОбменДанными.Загрузка=Истина;
                        КонецПопытки;
            Форма = ОбъектСсылка.ПолучитьФорму("Документ.ОтчетОРозничныхПродажах.ФормаОбъекта");
            Форма.Открыть();

1 kosts
 
06.05.15
10:01
Записать объект надо
2 ejiki
 
06.05.15
10:02
(1) кхм. сейчас попробую, если так то это пойдет в мою книгу тупейших провалов xD
3 ejiki
 
06.05.15
10:29
Нет, всё далеко не так, понимаю что делаю по аналогии с обычными формами. Но все же: 1) Создаю документ, 2) Присваиваю ему ГУДИ при помощи "УстановитьСсылкуНового()", 3) Открываю форму для редактирования и записи. Так вот я так понимаю что на УФ, ГУИД присваивается в момент записи? Как логически это обойти?

Пытался ПолучитьОбъект(), а затем записать(), Но Увы получать пока нечего же. Вот как бы вы эту ситуацию обошли?)
4 patria0muerte
 
06.05.15
10:42
А если без открытия формы попробовать? Т.е. просто сразу записать...
5 hhhh
 
06.05.15
10:47
(3) а зачем открывать форму?
6 fisher
 
06.05.15
10:50
Не. Так не получится. Невозможно открыть форму для программно созданного объекта. Ты открываешь форму ДРУГОГО нового объекта.
7 fisher
 
06.05.15
10:53
Если хочешь непременно так, то устанавливать ссылку нового придется из модуля самого документа.
А лучше не заморачиваться, а сначала записать, а потом открыть форму уже записанного.
8 ejiki
 
06.05.15
11:06
(4) В любом случае необходимо обработать обязательные реквизиты и корректно заполнить документ. Меня интересовал другой вопрос. И я разобрался. Дело в том что Если я записываю до Назначения ОбменДанными.Загрузка =  Истина То программа игнорирует все что я стараюсь сделать и назначает свой ГУИД. Помогла запись объекта и установка даты после ОбменДанными.Загрузка = Истина.

            ОбъектСсылка.Дата = ТекущаяДата();
            ОбъектСсылка.Записать();

И тогда все прошло замечательно) сейчас гадаю как бы мне переделать обработку и сделать из неё универсальный механизм на будущее))
9 ejiki
 
06.05.15
11:08
Как имея тип объекта корректно передать сюда форму??


ОбъектСсылка.ПолучитьФорму("Документ.ОтчетОРозничныхПродажах.ФормаОбъекта");
10 ejiki
 
06.05.15
11:10
Ну хотя идея наверное ясна.. просто передам  попробую передать вот так насколько жизненна будет идея?)

ОбъектСсылка.ПолучитьФорму(""+Тип[ИмяОбъекта].ФормаОбъекта+"")
11 Ymryn
 
06.05.15
11:12
(0) День добрый. Не сочтите за оскорбление, но вы же понимаете, что в  "<Объект не найден> (124:820694de80c8cdb911e4ed4b0f3b6683)"  у вас не GUID указан?
12 Ymryn
 
06.05.15
11:16
(11) + это я к тому, как вы УникальныйИд получаете?
13 ejiki
 
06.05.15
11:17
(11) Gонимаю, естественно. Я из этой записи при помощи нехитрого кода получаю ГУИД. Суть то ведь ясна. Код ниже прилагаю если кому пригодится.


    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
    ГУИДУдОбъктаЧ = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаЧ,"0x","");
    ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
    // Преобразуем GUID
    ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);
    ГУИДУдОбъктаСтр=ГУИД;
14 ejiki
 
06.05.15
11:18
Хотя думаю если сделаю универсальную обработку для восстановления потерянных данных то если попросят обязательно выложу. По УФ ничего такого не нашел.
15 hhhh
 
06.05.15
11:22
(13) а дальше?

УникальныйИд = Новый УникальныйИдентификатор(ГУИДУдОбъктаСтр);

делаете?
16 ejiki
 
06.05.15
11:28
(15) Вот как присваиваю ГУИД вновь созданному объекту



ОбъектСсылка.УстановитьСсылкуНового(Документы[ИмяОбъекта].ПолучитьСсылку(УникальныйИд));

17 ejiki
 
06.05.15
11:29
(15) аааа дошло.

Да именно так.
18 ejiki
 
06.05.15
11:30
УникальныйИд = Новый УникальныйИдентификатор(ГУИДУдОбъктаСтр);
19 Ymryn
 
06.05.15
11:39
Что-то сейчас меня малость тупняк. По общению, сложилось впечатление, что все это делается на УФ.
Но приложенный код - СоздатьДокумент() - это сервер. Форма.Открыть(); - это клиент. Как это вообще внутри одной процедуры живет? Это точно УФ?
20 hhhh
 
06.05.15
12:16
(19) ну в общем модуле, например. Стоит галка и клиент и сервер. Почему нет?
21 ejiki
 
06.05.15
12:22
(19) Это в Процедуре &НаСервере в УФ все работает как ни странно.
22 hhhh
 
06.05.15
12:26
(21) наверно толстый клиент.
23 ejiki
 
07.05.15
03:51
(22) Да, так и есть xD
24 ЧеловекДуши
 
07.05.15
07:21
(3) Чето? Программно создай документ, программно ему привяжи Гуид, и Руками заполни его как надо. Или тоже программно заполни как надо.