|
Странное поведение поиска по УИДу через ОЛЕ. | ☑ | ||
---|---|---|---|---|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |