Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Сравнение перечисления в COM-базе

Сравнение перечисления в COM-базе
Я
   Sam1C
 
29.09.17 - 07:58
Всем доброе утро! Как сравнить в одной базе перечисление через COM-соединение, вот так не работает:
 СкладВПриемнике.ВидСклада = мВнешниеСоеденение.Перечисления.ВидыСкладов.Розничный - Возвращает ЛОЖЬ
Выкручиваюсь пока таким образом мВнешниеСоеденение.String(СкладВПриемнике.ВидСклада) = "Розничный"
Какой есть способ сравнить еще кроме как преобразовывать в строку?
 
 
   h-sp
 
1 - 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);
Сообщить("Равно? ->"+(СсылкаНаЗначениеВТекБазе=СсылкаНаПеречислениеТут) );
   Sam1C
 
4 - 29.09.17 - 08:25
(1) Потому что там Значение Перечисления "Розничный" и даст он Истина, если в конфигурации не переименовать это значение Перечисления
   Sam1C
 
5 - 29.09.17 - 08:26
(4) Имею ввиду не Идентификатор значения перечисления, а представление
   Sam1C
 
6 - 29.09.17 - 08:28
(3) Не совсем по теме, сравнение идет в одной и той же базе, а не в разных
   Рэйв
 
7 - 29.09.17 - 08:29
(6)Перечисление берется из COM подключения, находится его соответствие в тек базе и сравнивается .Тебе разве не это нужно?
   Sam1C
 
8 - 29.09.17 - 08:31
(7)  Нет, нужно в базе к которой подключен через COM узнать вид склада. СкладВПриемнике.ВидСклада - Это COMОбъект и мВнешниеСоеденение.Перечисления.ВидыСкладов.Розничный - COMОбъект
   Михаил Козлов
 
9 - 29.09.17 - 08:32
Можно через Индекс (если они совпадают).
Еще пользуюсь:
Функция знПеречисленияПоИдентификатору(источник, значение, приемник) ЭКСПОРТ
    знч = приемник.ПустаяСсылка();
    ПОПЫТКА
        знч = приемник.Получить(источник.Индекс(значение));
    ИСКЛЮЧЕНИЕ
    КОНЕЦПОПЫТКИ;    
    Возврат знч;
КонецФункции

Обращение, примерно такое:
вид.ТипНоменклатуры = знПеречисленияПоИдентификатору(ОФ.глТорговля.Перечисления.ТипыНоменклатуры, видИсточник.ТипНоменклатуры, ОФ.БД.Перечисления.ТипыНоменклатуры);
   Sam1C
 
10 - 29.09.17 - 08:33
(7) С текущей ничего сравнивать ни надо
 
 Рекламное место пустует
   h-sp
 
11 - 29.09.17 - 08:35
(10) как у тебя написано в (0)
СкладВПриемнике.ВидСклада = мВнешниеСоеденение.Перечисления.ВидыСкладов.Розничный

прекрасно работает. Не нужно ничего через задницу придумывать.
   Sam1C
 
12 - 29.09.17 - 08:45
(11) Не работает, сча кину скрин
   Sam1C
 
13 - 29.09.17 - 08:50
https://www.dropbox.com/s/89o77gb75w5lovp/Отладка.jpg?dl=0

1) Проверка ну пустое значение
2)Преобразование к строке, что там именно розничный.
3)Сравнение по теме
4 и 5 сравнение с остальными значениями перечисления ВидыСкладов для полноты теста
6 и 7 типы объектов, что это COM
   Numerus Mikhail
 
14 - 29.09.17 - 09:23
в (3) рабочий пример. Хз что тебе в нем не нравится.
   Cyberhawk
 
15 - 29.09.17 - 09:28
(14) Ему надо во внешней ИБ сравнить реквизит тамошнего склада с тамошним же значением тамошнего перечисления )
   ColonelAp4u
 
16 - 29.09.17 - 09:34
В коме же только строки и числа.
   Sam1C
 
17 - 29.09.17 - 09:38
(14) Ну не по теме там, там сравнение в двух базах источника и Приемника. В теме сравнение в одной и той же базе.
   Numerus Mikhail
 
18 - 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
   Sam1C
 
20 - 29.09.17 - 09:45
(16) Походу сравнивать можно числа, строки, проверка на Булево и Неопределено. Пробовал сравнить ссылки справочников тоже не равно:
мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001")= мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001")
Возвращает ЛОЖЬ. Вывод: в COM нет возможности сравнивать ссылки. Это для  h-sp (11), у него как-то работает
   Sam1C
 
21 - 29.09.17 - 09:46
(18) Хороший вариант, но нужно вносить изменения в конфу
   arsik
 
22 - 29.09.17 - 10:11
(21) Делай через вычислить
   Sam1C
 
23 - 29.09.17 - 10:26
(22) мВнешниеСоеденение.Вычислить("1=1") или мВнешниеСоеденение.Eval("1=1")
 Метод объекта не обнаружен. Не хочет через COM выполнить эту функцию
   DmitrO
 
24 - 29.09.17 - 10:51
(0)для решения задачи можно воспользоваться специальным объектом:
Сравнение = мВнешниеСоеденение.NewObject("СравнениеЗначений");
Если Сравнение.Сравнить(мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001"), мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001"))=0 Тогда
  Сообщить("А равны ведь, епта!");
КонецЕсли;
   Sam1C
 
25 - 29.09.17 - 11:36
(24) Вот это огонёк, работает все отлично! Спасибо!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует