|
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, всем биг сенкс за помощь :)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |