Имя: Пароль:
1C
1С v8
ComConnection. Запрос к другой базе. Передаю ссылку в параметр запроса. Не работает...
0 realevgenius
 
24.08.17
07:21
Всем - привет!

Вдруг кто-то плотно работает с СОМ.

Получаю вот так ссылку на элемент справочника в др базе, описано где-то на Мисте.

Base1C - др. база к которой подключаюсь
GIUD  - строка идентификатор

МД=Base1C.XMLTypeOf(Base1C.Справочники["Номенклатура"].ПустаяСсылка());                       тСсылка=Base1C.XMLValue(Base1C.FromXMLType(МД),GIUD);

здесь получаю СОМ объект с кодом, наименованием и прочим, ссылка на элемент спр-ка в др. базе

Запрос = Base1C.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
     |    Номенклатура.Ссылка
     |ИЗ
     |    Справочник.Номенклатура КАК Номенклатура
     |ГДЕ
     |    Номенклатура.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("ССылка",тСсылка);
Рез = Запрос.Выполнить();

И Рез - получается пустой... Если в др. базе по строке получаю ссылку - все ок, выполняю  запрос в др. базе - тоже нормально.

Спасибо!
1 Рэйв
 
24.08.17
07:36
НомТам=Base1C.Справочники.Номенклатура.ПолучитьСсылку(Base1C.NewObject("УникальныйИдентификатор",GIUD))
2 Рэйв
 
24.08.17
07:37
если GIUD  валидный то найдет ссылку в подключенной по COM базе. Если нет - получит битую ссылку с указанным гуидом.
3 realevgenius
 
24.08.17
08:02
(1) Так пробовал - одинаково... Да, ссылку находит, кривой гуид даешь, не находит... это норм
4 realevgenius
 
24.08.17
08:04
В запрос передаешь вродеб нормальную ссылку, запрос пустой... Или что-то не так со ссылкой или так не работает, в принципе...
5 Рэйв
 
24.08.17
08:05
(4)Если запрос не находит - значит чтото не та с параметром
6 realevgenius
 
24.08.17
08:16
В др. базе в модуле внешнего соединения сделал запрос, передаю туда ссылку, все отрабатывает...
7 1dvd
 
24.08.17
08:19
(6) Пустой запрос, в смысле 0 строк?
8 Wirtuozzz
 
24.08.17
08:20
(0) тебе надо получать GUID, по полученному GUID искать ссылку в базе.
9 realevgenius
 
24.08.17
08:24
(7) Всмысле Запрос.Выполнить.Пустой() = Истина
(8) Получил - НомТам=Base1C.Справочники.Номенклатура.ПолучитьСсылку(Base1C.NewObject("УникальныйИдентификатор",GIUD))
Судя по (6) ссылка корректная
10 1dvd
 
24.08.17
08:27
Не туда коннектишься скорее всего
11 Convert
 
24.08.17
08:32
(0) Подтверждаю, у мну тоже не работает отбор по ссылке. Не зависимо от того, как ты эту ссылку получаешь.
12 realevgenius
 
24.08.17
08:34
(10) Туда, и ссылка корректная, подтверждается  сообщением (6)
13 Галахад
 
гуру
24.08.17
08:40
А так:
Запрос.УстановитьПараметр("ССылка",тСсылка.Ref);
14 Convert
 
24.08.17
08:40
(0) попробуй

Запрос = Base1C.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
     |    Номенклатура.Ссылка
     |ИЗ
     |    Справочник.Номенклатура КАК Номенклатура
     |ГДЕ
     |    Номенклатура.Ссылка В &Ссылка";

СписокСсылок= Base1C.NewObject("СписокЗначений");

СписокСсылок.Добавить(тСсылка);

Запрос.УстановитьПараметр("ССылка",СписокСсылок);
Рез = Запрос.Выполнить();
15 realevgenius
 
24.08.17
08:59
УПД...

РЕбята, я вас обманул...
С примитивным запросом работает...
У меня запрос намного сложнее и что-то с ним, видимо, щас непоследственно свой запрос буду мучать...

Здесь, при передаче в качестве параметра массива ссылок
     |    Номенклатура.Ссылка
     |ИЗ
     |    Справочник.Номенклатура КАК Номенклатура
     |ГДЕ
     |    Номенклатура.Ссылка В &Ссылка"

Если передать, сюда массив - возвращает только первый элемент. Даже если количество элементов в массиве 843 как у меня...
16 realevgenius
 
24.08.17
09:02
УПД еще раз...

Если засунуть мой запрос в функцию, в модуль внешнего соединения, передать ему полученную в (0) или (1)  ссылку -
то он работает, возвращает что положено.

Тоесть как получается: примитивный запросик типа (15) работает непосредственно при описании через newobject("Запрос"), а что посложнее только в др. базе в модуле внешнего соединения? ТАк может быть?
17 Галахад
 
гуру
24.08.17
09:10
Код покажи, а то верить... :-)
18 Рэйв
 
24.08.17
09:12
(16)Чудак человек:-)  Зачем тебе отправлять ссылку в запрос чтобы получить эту же ссылку,если ту уже и так имеешь?:-)
19 Convert
 
24.08.17
09:21
(15) Скорее всего что-то в запросе у тебя. Тольк опервый элемент он не может отбирать. Смотри другие условия.
Скобки еще поставь тут
|ГДЕ
     |    Номенклатура.Ссылка В &Ссылка";

|ГДЕ
     |    Номенклатура.Ссылка В (&Ссылка)";
20 realevgenius
 
24.08.17
09:45
(18) Это просто пример... Что проверить передается ли между базами, отрабатывает ли запрос...
21 h-sp
 
24.08.17
09:47
(18) вроде в типовой так делают, чтобы определить, реальная ссылка или битая?
22 Рэйв
 
24.08.17
10:29
(21)Попробуй получить объект и узнаешь.У битой вернет Неопределено
23 realevgenius
 
24.08.17
12:24
Все работает, разобрался...
Трудности с отладкой... Сам накосячил

Резюмирую:

Получении ссылки работает что так (0), что так (0)
В запрос можно передать что ссылку, что массив ссылок, все работает...

Всем - спасибо! Извиняюсь за невнимательность...
24 realevgenius
 
24.08.17
12:24
Резюмирую:

Получении ссылки работает что так (0), что так (1)
В запрос можно передать что ссылку, что массив ссылок, все работает...
25 1dvd
 
24.08.17
15:29
походу, я был прав в (10)
26 realevgenius
 
24.08.17
15:46
(25) Коннектился туда, передавал массив ссылок... А массив ссылок состоял из одной и тойже ссылки. Я долбился с запросами и не понимал, почему получает только 1 элемент, Тогда как в массиве же много ссылок... Ссылок-то много, но все одинаковые были ))))
27 Tateossian
 
24.08.17
15:52
Я через отладчик и методом тыка находил написание методов/классов на латинице ибо при работе с COM на кириллице не понимает. Например, вот так создается УИД:

uuid = connection.NewObject("UUID", "0b6d9e8f-f2e1-11e1-be19-0050568699bc")


А вот так ссылка на ПВС:
Property = connection.ChartsOfCharacteristicTypes.СвойстваОбъектов.getRef(uuid);

Вот так подставляется параметр:

query.setParameter("Prop", Property);

А вот так создается массив:
arr = connection.NewObject("Array");
28 Tateossian
 
24.08.17
15:54
(27) А вопрос должен быть такой: есть СП на англицком? В английской версии? Даже на ИТС нет ничего.
29 Gammi
 
24.08.17
16:03
В настройках СП поставь галку Использовать оба языка
30 Tateossian
 
24.08.17
16:09
(29) Оу, вот я ландух)) Спасибо, мил человек))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший