|
Сравнение перечисления в COM-базе | ☑ | ||
---|---|---|---|---|
0
Sam1C
29.09.17
✎
07:58
|
Всем доброе утро! Как сравнить в одной базе перечисление через COM-соединение, вот так не работает:
СкладВПриемнике.ВидСклада = мВнешниеСоеденение.Перечисления.ВидыСкладов.Розничный - Возвращает ЛОЖЬ Выкручиваюсь пока таким образом мВнешниеСоеденение.String(СкладВПриемнике.ВидСклада) = "Розничный" Какой есть способ сравнить еще кроме как преобразовывать в строку? |
|||
1
h-sp
29.09.17
✎
08:04
|
(0) ну если там ложь, почему вы думаете, что преобразовав в строку вдруг получите истина?
|
|||
2
Мимохожий Однако
29.09.17
✎
08:05
|
В любом случае надо преобразовывать в те типы, которые можно передать через COM. Можешь преобразовывать и числа, если договоришься какому перечислению соответствует определенное число.
|
|||
3
Рэйв
29.09.17
✎
08:16
|
(0)в качестве примера
//----------- СсылкаНаПеречислениеCOM=Соединение.Перечисления.ВидыАкций.Ретробонус; СсылкаНаПеречислениеТут=Перечисления.ВидыАкций.Ретробонус; ИмяЗначенияПеречисленияCOM= Соединение.XMLString(СсылкаНаПеречислениеCOM); ПредставлениеПеречисленияCOM= Соединение.String(СсылкаНаПеречислениеCOM); ИмяПеречисленияCOM= СсылкаНаПеречислениеCOM.Метаданные().Имя; СсылкаНаЗначениеВТекБазе = XMLЗначение(Тип("ПеречислениеСсылка."+ИмяПеречисленияCOM), ИмяЗначенияПеречисленияCOM); Сообщить("Равно? ->"+(СсылкаНаЗначениеВТекБазе=СсылкаНаПеречислениеТут) ); |
|||
4
Sam1C
29.09.17
✎
08:25
|
(1) Потому что там Значение Перечисления "Розничный" и даст он Истина, если в конфигурации не переименовать это значение Перечисления
|
|||
5
Sam1C
29.09.17
✎
08:26
|
(4) Имею ввиду не Идентификатор значения перечисления, а представление
|
|||
6
Sam1C
29.09.17
✎
08:28
|
(3) Не совсем по теме, сравнение идет в одной и той же базе, а не в разных
|
|||
7
Рэйв
29.09.17
✎
08:29
|
(6)Перечисление берется из COM подключения, находится его соответствие в тек базе и сравнивается .Тебе разве не это нужно?
|
|||
8
Sam1C
29.09.17
✎
08:31
|
(7) Нет, нужно в базе к которой подключен через COM узнать вид склада. СкладВПриемнике.ВидСклада - Это COMОбъект и мВнешниеСоеденение.Перечисления.ВидыСкладов.Розничный - COMОбъект
|
|||
9
Михаил Козлов
29.09.17
✎
08:32
|
Можно через Индекс (если они совпадают).
Еще пользуюсь: Функция знПеречисленияПоИдентификатору(источник, значение, приемник) ЭКСПОРТ знч = приемник.ПустаяСсылка(); ПОПЫТКА знч = приемник.Получить(источник.Индекс(значение)); ИСКЛЮЧЕНИЕ КОНЕЦПОПЫТКИ; Возврат знч; КонецФункции Обращение, примерно такое: вид.ТипНоменклатуры = знПеречисленияПоИдентификатору(ОФ.глТорговля.Перечисления.ТипыНоменклатуры, видИсточник.ТипНоменклатуры, ОФ.БД.Перечисления.ТипыНоменклатуры); |
|||
10
Sam1C
29.09.17
✎
08:33
|
(7) С текущей ничего сравнивать ни надо
|
|||
11
h-sp
29.09.17
✎
08:35
|
(10) как у тебя написано в (0)
СкладВПриемнике.ВидСклада = мВнешниеСоеденение.Перечисления.ВидыСкладов.Розничный прекрасно работает. Не нужно ничего через задницу придумывать. |
|||
12
Sam1C
29.09.17
✎
08:45
|
(11) Не работает, сча кину скрин
|
|||
13
Sam1C
29.09.17
✎
08:50
|
https://www.dropbox.com/s/89o77gb75w5lovp/Отладка.jpg?dl=0
1) Проверка ну пустое значение 2)Преобразование к строке, что там именно розничный. 3)Сравнение по теме 4 и 5 сравнение с остальными значениями перечисления ВидыСкладов для полноты теста 6 и 7 типы объектов, что это COM |
|||
14
Numerus Mikhail
29.09.17
✎
09:23
|
в (3) рабочий пример. Хз что тебе в нем не нравится.
|
|||
15
Cyberhawk
29.09.17
✎
09:28
|
(14) Ему надо во внешней ИБ сравнить реквизит тамошнего склада с тамошним же значением тамошнего перечисления )
|
|||
16
ColonelAp4u
29.09.17
✎
09:34
|
В коме же только строки и числа.
|
|||
17
Sam1C
29.09.17
✎
09:38
|
(14) Ну не по теме там, там сравнение в двух базах источника и Приемника. В теме сравнение в одной и той же базе.
|
|||
18
Numerus Mikhail
29.09.17
✎
09:40
|
(15) А, понял.
(17) Для себя я делал так: В нужной базе создал процедуру что-то типа такой: Функция СравнитьСсылки(Ссылка1, Ссылка2) Экспорт Возврат (Ссылка1 = Ссылка2); КонецФункции |
|||
19
Лефмихалыч
29.09.17
✎
09:40
|
Хорошая статья про то, как готовить COM
http://wiki.mista.ru/doku.php?id=1c:v8:obmen_i_integracija:oxota_na_comov |
|||
20
Sam1C
29.09.17
✎
09:45
|
(16) Походу сравнивать можно числа, строки, проверка на Булево и Неопределено. Пробовал сравнить ссылки справочников тоже не равно:
мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001")= мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001") Возвращает ЛОЖЬ. Вывод: в COM нет возможности сравнивать ссылки. Это для h-sp (11), у него как-то работает |
|||
21
Sam1C
29.09.17
✎
09:46
|
(18) Хороший вариант, но нужно вносить изменения в конфу
|
|||
22
arsik
гуру
29.09.17
✎
10:11
|
(21) Делай через вычислить
|
|||
23
Sam1C
29.09.17
✎
10:26
|
(22) мВнешниеСоеденение.Вычислить("1=1") или мВнешниеСоеденение.Eval("1=1")
Метод объекта не обнаружен. Не хочет через COM выполнить эту функцию |
|||
24
DmitrO
29.09.17
✎
10:51
|
(0)для решения задачи можно воспользоваться специальным объектом:
Сравнение = мВнешниеСоеденение.NewObject("СравнениеЗначений"); Если Сравнение.Сравнить(мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001"), мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001"))=0 Тогда Сообщить("А равны ведь, епта!"); КонецЕсли; |
|||
25
Sam1C
29.09.17
✎
11:36
|
(24) Вот это огонёк, работает все отлично! Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |