Имя: Пароль:
1C
1С v8
Странное поведение поиска по УИДу через ОЛЕ.
0 batmansoft
 
14.02.14
13:48
Добрый день.
Делаю так:
          строкаТип = АОбъект.Метаданные().ПолноеИмя();
        поз = Найти(строкаТип, ".");
        типСтрокой = мСоответствияЕдЧМнЧ[Лев(строкаТип, поз - 1)];
        лЗнач=мБаза[типСтрокой][Сред(строкаТип, поз +1)].ПолучитьСсылку(мБаза.NewObject("УникальныйИдентификатор", Сокрлп(Выборка.УИД)));
        лПредставление=мБаза.String(лЗнач);
        если Найти(нрег(лПредставление),"объект не найден")>0 тогда
            сообщить("для "+строкаТип+" "+строка(АОбъект)+" кривое соотвествие "+лПредставление,СтатусСообщения.Важное);    
            сообщить("ИБ="+строка(мВнешняяБаза),СтатусСообщения.Внимание);    
            сообщить("УИД="+Выборка.УИД,СтатусСообщения.Внимание);    
            возврат Неопределено;
        конецесли;

и почему то для существующих объектов возвращает ненайденные ссылки типа ""<Объект не найден> (62:be7fbcee7b4e9a0c11e3840e470b6b86)""
То что реально объект в базе есть видно по другому участку кода:
            Запись=РегистрыСведений.шапСоответствиеВыгружаемыхОбъектов.СоздатьМенеджерЗаписи();
            Запись.ИБ=мВнешняяБаза;
            Запись.Объект=АОбъект;
            Запись.УИД=лОбработка.УИД;
            Запись.НазваниеОбъектаВПриемнике=лОбработка.ОбъектВБазе;
            Запись.Записать();
            
              строкаТип = АОбъект.Метаданные().ПолноеИмя();
            поз = Найти(строкаТип, ".");
            типСтрокой = мСоответствияЕдЧМнЧ[Лев(строкаТип, поз - 1)];
            лЗнач=мБаза[типСтрокой][Сред(строкаТип, поз +1)].ПолучитьСсылку(мБаза.NewObject("УникальныйИдентификатор", лОбработка.УИД));
            возврат лЗнач;

в этом случае возвращает нормальное значение при том же УИД-е (конкретно проверил в отладчике и сравнил их).
Подскажите пожалуйста, как лечить?
1 H A D G E H O G s
 
14.02.14
13:50
бррр, ну и кодище
2 H A D G E H O G s
 
14.02.14
13:50
Используй промежуточные переменные для
класса метаданных
типа метаданных
уникального идентификатора
и.т.д.
3 batmansoft
 
14.02.14
13:59
(2)
Это типа так что ли?
    если Выборка.Следующий() тогда        
          строкаТип = АОбъект.Метаданные().ПолноеИмя();
        поз = Найти(строкаТип, ".");
        типСтрокой = мСоответствияЕдЧМнЧ[Лев(строкаТип, поз - 1)];
        лУИД=Сокрлп(Выборка.УИД);
        лМенеджерОбщий=мБаза[типСтрокой];
        лМенеджерОбъекта=лМенеджерОбщий[Сред(строкаТип, поз +1)];
        лЗнач=лМенеджерОбъекта.ПолучитьСсылку(мБаза.NewObject("УникальныйИдентификатор", лУИД));
        лПредставление=мБаза.String(лЗнач);
        если Найти(нрег(лПредставление),"объект не найден")>0 тогда
            сообщить("для "+строкаТип+" "+строка(АОбъект)+" кривое соотвествие "+лПредставление,СтатусСообщения.Важное);    
            сообщить("ИБ="+строка(мВнешняяБаза),СтатусСообщения.Внимание);    
            сообщить("УИД="+Выборка.УИД,СтатусСообщения.Внимание);    
            возврат Неопределено;
        конецесли;
        возврат лЗнач;
    иначе
        возврат Неопределено;
    конецесли;        

и потом смотреть в отладчике что в промежуточных переменных?
4 batmansoft
 
14.02.14
14:12
(2) сделал так, посмотрел в отладчике, ничего это не дало. И что еще можно сделать? Как заставить платформу работать правильно????
5 Serginio1
 
14.02.14
14:18
6 batmansoft
 
14.02.14
15:05
(5) Что то я не нашел в этой ветке решение проблемы. И вообще там немного другое обсуждатеся
7 hhhh
 
14.02.14
15:20
(6) лЗнач чему равно в отладчике? Точно "Объект не найден"??
8 batmansoft
 
14.02.14
15:23
(7) лЗнач  равно COMObject, открываю плюсиком - ничего нет. Ни кода, ни наименования, все пустое. Его строковое представление "объект не найден". Но в другом случае по тому же самому УИДу получается нормлаьный ком объект, где есть наименование, код и прочее
9 Serginio1
 
14.02.14
15:39
Вообще лучше отладкой в ком пользоваться ВнешнимиОтчетами

v8: 8.2, COM-соединение, C#, dynamic строки

Профит в изначальной отладке в конфигураторе выполнение всего код, а затем уже вызывать через ком передавая нужные праметры
v8: Можно ли по OLE выполнять запросы из 1с 7.7 в 1с 8.2