Имя: Пароль:
1C
 
OLE: сравнение двух элементов справочника внешней базы, как?
Ø
0 Eugene G
 
29.06.05
06:07
В текущей базе имеются две ссылки на один и тот же элемент справочника ОЛЕ базы, необходимо выяснить равны ли они.
Например, код:
  // Поиск элементов справочника. Реальный алгоритм работает иначе, чем приведенный здесь
  спрТовары = БазаОле.CreateObject("Справочник.Номенклатура");
  Сообщить(спрТовары.НайтиПоКоду("00000003"));
  
  спрТовары1 = БазаОле.CreateObject("Справочник.Номенклатура");
  Сообщить(спрТовары1.НайтиПоКоду("00000003"));
  
  // Проверка на равенство
  Если спрТовары.ТекущийЭлемент()=спрТовары1.ТекущийЭлемент() Тогда
    Сообщить("Равны");
  КонецЕсли;
не выдает сообщения что элементы равны.
Как сделать проверку на равенство если имеются 2 ссылки на справочник во внешней базе?
1 Морозов Александр
 
29.06.05
06:10
Круто...
2 Eugene G
 
29.06.05
06:15
Есть мысль получить id обеих ссылок и их сравнивать, только как?
3 Sirus Virus
 
29.06.05
06:17
Евгений ты маньяк :-)
4 Eugene G
 
29.06.05
06:36
(3) Нет, просто очень надо :)
Сравнивать по коду и наименованию тоже не лучший вариант, т.к. могут отсутсвовать оба реквизита...
5 Vint Kras
 
29.06.05
06:42
(4) отсутствует код ? ты убивец...
6 Eugene G
 
29.06.05
06:47
(5) А в чем проблема?
7 Морозов Александр
 
29.06.05
06:49
А как это у справочника товары не может быть наименования?
8 Eugene G
 
29.06.05
06:53
Господа, вы не поняли :)
Код с ремаркой "// Поиск элементов справочника. Реальный алгоритм работает иначе, чем приведенный здесь" приведен здесь для пояснения проблемы.
На самом деле он работает с любыми объектами любой базы.
Т.е. речь идет об общем случае: как при наличии двух ссылок определить, что они указывают на один элемент?
зы. Перебирать все реквизиты тоже не вариант, т.к. среди них может быть единственный агрегатного типа...
9 Guk
 
29.06.05
07:01
(0) Со сравнением объектов в ОЛЕ действительно проблемы. Как вариант, можно сравнивать по строковому или по строковому внутреннему представлению объекта...
10 Eugene G
 
29.06.05
07:10
(9) И здесь есть проблема, ведь нужно получить внутреннее представление объекта не из его базы, т.е. код
ЗначениеВСтрокуВнутр(спрТовары.ТекущийЭлемент()) даст представление ОЛЕ объекта, а не самого справочника, и значит результат будет одинаковым для любых ОЛЕ объектов :(
11 Guk
 
29.06.05
07:11
(10) Это не проблема. Попробуй БазаОле.ЗначениеВСтрокуВнутр(спрТовары.ТекущийЭлемент())...
12 Eugene G
 
29.06.05
07:14
(11) О-да, ты знал :))
Спасибо!
13 RM1
 
29.06.05
07:15
Заблуждение: Твой метод сравнения "спрТовары.ТекущийЭлемент()=спрТовары1.ТекущийЭлемент()" в твоей задаче не будет работать.
Пояснение: Таким способом 1С сравнивает объекты по внутреннему идентификатору (но не сверяет все реквизиты объектов). В пределах одной базы этого достаточно, т.к. объекты имеющие одинаковые идентификаторы - однозначно идентичны, а если элементы заводятся в разных базах - идентификаторы разные.
Решение: Однозначно сказать что 2 элемента справочников из разных баз идентичны, только если ты будешь уверен что ВСЕ реквизиты 2-х элементов одинаковы.
14 Eugene G
 
29.06.05
07:17
(13) Речь идет об объектах одной базы, но подключенной по ОЛЕ.
15 RM1
 
29.06.05
07:25
(14) Упс... не проснулся с утра еще :)
16 Sasha
 
29.06.05
07:36
Добавлю к вышесказанному: "Гарантированно не будут работать методы ТекущийЭлемент() и ТекущийДокумент() (ошибки V7 не будет, но и результат работы будет нулевой)" (http://www.sinor.ru/~my1c/knowhow/v7&OLE.html)
17 Eugene G
 
29.06.05
07:37
Ok, всем биг сенкс за помощь :)