Поиск COM-объекта в таблице значений. #150872


#0 by FarFar
Ситуация: есть 1С 7.7 и есть 1С 8.0, в которую перетягиваю остатки. Для того, чтобы ускорить загрузку, хочу хранить в таблице значений COM-объекты - элементы справочника 1С 7.7. То есть, грубо говоря, в таблице 2 поля: "ОЛЕ" и "Ссылка8". В "ОЛЕ" запихивается Com-объект, в "Ссылка8" - ссылка на соотвествующий ему элемент справочника в восьмерке. Проблема: не могу заставить восьмеру искать ОЛЕ-объект в этой таблице значений. Для простоты беру случай, когда в табличке всего 1 строка. В ней ТОЧНО тот самый ОЛЕ-объект, который я хочу найти. Но и мЭлементы78 = тзЭлементы78.НайтиСтроки(Новый Структура("ОЛЕ",ОЛЕ)) возвращает массив с .Количество=0 , и стзЭлемент78 = тзЭлементы78.Найти(ОЛЕ,"ОЛЕ") - строку Неопределено.  Пробовал и запихивать в табличку ОЛЕ.ТекущийЭлемент , и что вообще только не пробовал - не помогает.  Ужасно не хочется делать составной индекс, типа ОЛЕ.Вид+"/"+ОЛЕ.Код, так как в этом случае каждый раз придется обращаться к ОЛЕ через точку ,что долго. Если б в таблице можно было найти по ОЛЕ - все было бы идеально.  Самый прикол, что недавно мой знакомый запихивал в табличку ОЛЕ-объекты - документы, и восьмера НАХОДИЛА нужный через НайтиСтроки. В 4 глаза смотрели мою ситуацию - не нашли бага. ХЕЛП!
#1 by Волшебник
Используй объект Соответствие и ключ примитивного типа данных, будет быстро.
#2 by vde69
1. храни в 2 разных таблицах (7.7 и 8.0) 2. для поиска элементов 8 (справочники, документы) используй уникальный идентификатор (хотя не знаю бутет-ли искать как по реквезиту) 3. можно попробовать искать запросом (всетаки таблица)
#3 by FAR
to Волшебник: Если буду использовать Соответствие с примитивным ключом - все-равно придется каждый обращаться к семерочному объекту через точку: ОЛЕ.код   Именно этого я хочу избежать!  Вся суть в том, что хочу, получив очередной ОЛЕ - объект  через ПолучитьСубконто, сразу же понять, что это такое в восьмерке.
#4 by FAR
to vde69: Читай пред.пост.  Как восьмерочный то объект искать - с этим проблем нет -)
#5 by fixin
Используй из семерки ЗначениеВстрокуВнутренее по ключу... :)
#6 by vde69
OLE передает только приметивные типы, поэтому формируй таблицу значений в 7.7 и осуществляй поиск тоже в 7.7 (через OLE) а ипользуй в 8.0 уже готовые результаты поиска
#7 by FAR
to fixin: думаю, это будет не быстрее, чем обращаться к ОЛЕ через точку. to vde69: что ты имеешь ввиду под словами: ОЛЕ передает толко примитивные типы??? Ты же получаешь СОМ-объект, в котором дофигища атрибутов. Где ж тут примитивизм? А насчет формирования тз в 77 - да, этот вариант, возможно покатит. Замечание к обсуждению: если после добавления строки в таблицу, типа: СРАЗУ выполнить тзЭлементы78.Найти(ОЛЕ,"ОЛЕ") - он НАХОДИТ! А если выполнить после нового получения этого же ОЛЕ из семерочной базы, то уже не находит.
#8 by vde69
да в том-то и дело, что то-что ты видиш как обьект оле находиться в 7.7 и его не существует в клиенте, у тебя есть только доступ к оле серверу и ссылка на обьект. то-есть если у тебя две одинаковых базы 7.7 и в одной ты нашел элемент База.НайденнаяНоменклатура, то следующей код будет ошибочным поскольку обьект База.НайденнаяНоменклатура из другой базы, а вото с приметивными типами прокатит Поэтому ты и найти не можешь, поскольку обьект не существует в твоей базе
#9 by vde69
+ опечатался, надо
#10 by FarFar
to vde69:  пример интересный, но отвлеченный, поскольку у меня то база 1С 7.7 одна. Просто один и тот же элемент справочника ,взятый по ОЛЕ второй раз - видимо считается другим объектом.
#11 by vde69
нет не так, еще раз оле НЕ передает обьекты сложного типа (он этого просто не умеет) поэтому ДЛЯ КЛИЕНТА ОЛЕ - это ссылка на обьект ОЛЕ сервера и ОБЬЕКТА ОЛЕ просто НЕСУЩЕСТВУЕТ для клиента
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С