Имя: Пароль:
1C
 
Получение ссылки по UID
0 Imv
 
08.07.22
16:00
Друзья, извиняюсь за тему, перечитал и форум и интернет...
Но не получается. Подскажите, что делаю не так...
Выдает пустую ссылку. Хотя "Строка_UID" берется с реального документа...

        СтрокаПодключения = "Srvr=""COMP-1C"";Ref=""Bak"";Usr=""Администратор"";Pwd=""""";    
        Попытка
            КоннекторV83 = Новый COMОбъект("V83.COMConnector");
            БазаCOM = КоннекторV83.Connect(СтрокаПодключения);
        Исключение
            Сообщить(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
        
        Строка_UID = "e2598f6d-fb65-11ec-90d7-086266a14506";

        // Преобразуем в GUID
        ГУИДУдОбъктаСтр = СтрЗаменить(ДокументПередачи,"<Объект не найден> (","");
        ГУИДУдОбъктаЧ = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
        ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаЧ,"0x","");
        ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
        ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);
        Строка_ГУИД = Строка(ГУИД);
        
        //НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
        
        COM_ГУИД1 = БазаCOM.NewObject("УникальныйИдентификатор", Строка(ГУИД));
        COM_ГУИД2 = БазаCOM.NewObject("УникальныйИдентификатор", Строка_UID);
        
        Ссылка_Док_БЗ1 = БазаCOM.Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(COM_ГУИД1);    
        Ссылка_Док_БЗ2 = БазаCOM.Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(COM_ГУИД2);                              
        
        Ссылка_Док_БЗ3 = БазаCOM.Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(БазаCOM.NewObject("УникальныйИдентификатор", Строка(ГУИД)));                                
        Ссылка_Док_БЗ4 = БазаCOM.Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(БазаCOM.NewObject("УникальныйИдентификатор", Строка_UID));
1 Мультук
 
гуру
08.07.22
16:07
(0)

Зачем всё это?

  // Преобразуем в GUID
        ГУИДУдОбъктаСтр = СтрЗаменить(ДокументПередачи,"<Объект не найден> (","");
        ГУИДУдОбъктаЧ = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
        ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаЧ,"0x","");
        ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
        ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);
        Строка_ГУИД = Строка(ГУИД);
2 ZDenis
 
08.07.22
16:08
(0) Куча всего непонятно чего, а главное закомментировано

//НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);

Вот получил гуид и по нему получай ссылку
3 youalex
 
08.07.22
16:10
Так не работает?

БазаCOM.XMLЗначение(БазаCOM.Тип("ДокументСсылка.ПоступлениеТоваровУслуг"), ГУИДУдОбъктаСтр)
4 Imv
 
08.07.22
16:13
// Преобразуем в GUID

        ГУИДУдОбъктаСтр = СтрЗаменить(ДокументПередачи,"<Объект не найден> (","");
        ГУИДУдОбъктаЧ = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
        ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаЧ,"0x","");
        ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
        ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);
        Строка_ГУИД = Строка(ГУИД);

Это я из: <Объект не найден> (166:b1a2086266a1450611ecf75eab1010e6) получаю гуид
5 Imv
 
08.07.22
16:15
Так не работает?
БазаCOM.XMLЗначение(БазаCOM.Тип("ДокументСсылка.ПоступлениеТоваровУслуг"), ГУИДУдОбъктаСтр)

Пишет:
Метод объекта не обнаружен (Тип)
6 Мультук
 
гуру
08.07.22
16:36
(0)

Я бы взял строку  <Объект не найден> (166:b1a2086266a1450611ecf75eab1010e6)
и пошел писать код в базу Srvr=""COMP-1C"";Ref=""Bak"

Там есть оригинальная ссылка и т.п.

Написал бы код, отладил. Сравнил бы реальную текстовую строку гуида и ту что ты получаешь.

Заработало?

Портируем код для работы через com-соединение.
7 youalex
 
08.07.22
16:39
Немного пятничной наркомании

БазаКОМ.XMLЗначение(БазаКОМ.Метаданные().Документы.ПоступлениеТоваровУслуг.StandardAttributes.Ref.Type.Типы().Get(0), ГУИДУдОбъктаСтр)
8 youalex
 
08.07.22
16:39
Но лучше, имхо, всю логику работы с объектами ком описывать на стороне ком
9 Imv
 
08.07.22
16:44
>>Портируем код для работы через com-соединение.
Мне и нужно то всего, что получить ссылку на документ в другой базе.

Документ в другой базе легко ищется обработкой восстановления битых ссылок по <Объект не найден> (166:b1a2086266a1450611ecf75eab1010e6).
Я кусок кода, который формирует ГУИД, из нее как раз и вытащил. Затем делаю запрос через COM и система возвращает пустую ссылку на документ...
Как будто ничего не находит...
10 Imv
 
08.07.22
16:46
>>Немного пятничной наркомании:
Произошла исключительная ситуация (1C:Enterprise 8.3.20.1838): Ошибка преобразования данных XML
ломка походу у 1С :)
11 youalex
 
08.07.22
16:48
(10) Строка_UID вторым параметром должно быть,
типа "e2598f6d-fb65-11ec-90d7-086266a14506"
12 Imv
 
08.07.22
17:07
s1 = БазаCOM.XMLЗначение(БазаCOM.Метаданные().Документы.ПоступлениеТоваровУслуг.StandardAttributes.Ref.Type.Типы().Get(0), Строка_UID);
Получаем пустую ссылку...
Ну не может быть... 5 разных методов дают одинаковый результат...
Значит я чего то недогоняю... Но чего ?!
13 Imv
 
08.07.22
17:11
14 Imv
 
08.07.22
17:13
Первая ссылка на то что через COM находит пустую ссылку.
Вторая, что в удаленной базе по ГУИДу находится.
15 lodger
 
08.07.22
17:20
(10) наркоманишь ты, а виновата 1с, ага.
16 Imv
 
08.07.22
17:25
Да у меня уже крышу сносит :)
Который час смотрю в 20 строк кода !!!
17 Imv
 
08.07.22
17:32
Я вот думаю, что конструкция
БазаCOM.NewObject("УникальныйИдентификатор", Строка_UID)
Возвращает COMОбъект а методу ПолучитьСсылку нужен объект с типом УникальныйИдентификатор.
Если раскрыть конструкцией БазаCOM.string(БазаCOM.NewObject("УникальныйИдентификатор", Строка_UID)) то опять строка... что ессно
Если бы было бы что: БазаCOM.УникальныйИдентификатор для приведения типа...
18 Imv
 
08.07.22
17:43
Все !!! Вопрос снят ! Это пятница друзья мои. ПЯТНИЦА !!!
Нужно доверять 1С. Хотя бы иногда :) :) :)

Админы !!!
Удалите этот позорный лонгрид. Пепел на мою седую голову...
19 Garykom
 
гуру
08.07.22
17:58
(18) Искал не в БазаCOM а в текущей базе?
20 Imv
 
08.07.22
18:17
Нет. искал там где нужно. Искал не тот документ :)
Но может кому пригодится. Все об одном :)

// Преобразуем в GUID
ГУИДУдОбъктаСтр = СтрЗаменить(ДокументПередачи,"<Объект не найден> (","");
ГУИДУдОбъктаЧ = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаЧ,"0x","");
ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);

COM_ГУИД1 = БазаCOM.NewObject("УникальныйИдентификатор", ГУИД);
Ссылка_Док_БЗ1 = БазаCOM.Документы.ПередачаТоваров.ПолучитьСсылку(COM_ГУИД1);    
                              
s1 = БазаCOM.XMLЗначение(БазаCOM.Метаданные().Документы.ПередачаТоваров.StandardAttributes.Ref.Type.Типы().Get(0), ГУИД);
ПолноеИмяОбъекта = "Документ.ПередачаТоваров";  
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);  
ОбъектМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта);    
ОбъектМенеджер = БазаCOM.ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта);    
СсылкаНаОбъект1 = ОбъектМенеджер.ПолучитьСсылку(БазаCOM.NewObject("УникальныйИдентификатор", ГУИД));

ИмяМенеджера = "ДокументМенеджер.ПередачаТоваров";
Менеджер = БазаCOM.NewObject(ИмяМенеджера);
СсылкаНаОбъект2 = Менеджер.ПолучитьСсылку(БазаCOM.NewObject("УникальныйИдентификатор", ГУИД));  

СсылкаНаОбъект3 = БазаCOM.Документы["ПередачаТоваров"].ПолучитьСсылку(БазаCOM.NewObject("УникальныйИдентификатор", ГУИД));
21 Imv
 
08.07.22
18:19
Блин... Это все таки пятница....