Имя: Пароль:
1C
1С v8
запрос через com объект
0 lamme
 
21.01.13
13:46
Есть база1 (УФ)
В ней делаю подключение к базе2 (БП) чтобы получить инфо
Ком = Новый COMObject("V82.COMConnector");
   Попытка
       ОбъектИБ = Ком.Connect("Srvr=""йййй"";Ref=""wwwwww"";Usr=""eeeee"";Pwd=""dddd""");
   Исключение
       ОбъектИБ = Неопределено;
       Сообщить(ОписаниеОшибки());
       Возврат;        
   КонецПопытки;


потом идет запрос

ЗапросТекст =
   "ВЫБРАТЬ
   |    Контрагенты.Ссылка,
   |    Контрагенты.ИНН,
   |    Контрагенты.Наименование
   |ИЗ
   |    Справочник.Контрагенты КАК Контрагенты
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |            КонтактнаяИнформация.ЗначениеПоУмолчанию КАК ЗначениеПоУмолчанию,
   |            КонтактнаяИнформация.Представление КАК Представление,
   |            КонтактнаяИнформация.Объект КАК Объект
   |        ИЗ
   |            РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
   |        ГДЕ
   |            КонтактнаяИнформация.Тип = &Тип
   |            И КонтактнаяИнформация.Вид = &Вид) КАК ВложенныйЗапрос
   |        ПО Контрагенты.Ссылка = ВложенныйЗапрос.Объект
   |ГДЕ
   |    Контрагенты.ЭтоГруппа = &ЭтоГруппа";
   
   
   Запрос = ОбъектИБ.NewObject("Запрос");
   Запрос.Текст = ЗапросТекст;


Вопросы
1 как правильно передать параметры в запрос?

Запрос.УстановитьПараметр("Тип",ОбъектИБ.перечисления.ТипыКонтактнойИнформации.Адрес);
   Запрос.УстановитьПараметр("Вид",ОбъектИБ.справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));
   Запрос.УстановитьПараметр("ЭтоГруппа",Ложь);

так не работает однако
что не так делаю?

2 как результат запроса увидет в таблице ?

РезультатЗапросаКонтр = Запрос.Выполнить().выгрузить();
РезультатЗапросаКонтр.выбратьстроку(); // в отладичке в РезультатЗапросаКонтр- видно что что-то в результате запроса есть.
1 vmv
 
21.01.13
13:47
продолжай рассуждения, авось придет решение
2 lamme
 
21.01.13
13:48
2 - то что оно не покажет на экране через ВыбратьСтроку - это понятно
там объект - Com идет
чего с ним дальше то делать?

)
3 vmv
 
21.01.13
13:49
Запрос.УстановитьПараметр("Тип",ОбъектИБ.перечисления.ТипыКонтактнойИнформации.Адрес);
мне не нравиться эта строка - скажи почему
4 ЧашкаЧая
 
21.01.13
13:50
....
Новый COMObject("V82.COMConnector");
...
РезультатЗапросаКонтр.выбратьстроку()

Разве такое сработает? Разве Ком-коннектор специально не запускает всего клиента чтобы побыстрее было? Попробуй
Сообщить(РезультатЗапросаКонтр.Количество());
5 lamme
 
21.01.13
13:50
(3)
мне она тоже не нравится. без нее работает )
но вот чем не нравится ...
6 lamme
 
21.01.13
13:51
(4) - смотри (2)
я это и сам уже догадался
7 vmv
 
21.01.13
13:51
(5) пока ты не дашь правильный ответ - будешь получать бред в результате, напряги извилины - я жду!)
8 lamme
 
21.01.13
13:53
там или несоответсвие типов идет
или не ?
9 vmv
 
21.01.13
13:54
(8) я не признаюсь - убирай утюг, это нужно понять самому
10 lamme
 
21.01.13
13:55
согласен. пошел читать чего нибудь
11 Maxus43
 
21.01.13
13:57
дак запрос выполняется в другой базе, и параметры соответственно нужны из той базы
12 Reset
 
21.01.13
13:58
Так он "из той базы" и передает. Или я не вижу какой-то косяк?
ОбъектИБ - это com-соединение у него
13 lamme
 
21.01.13
13:58
ну . это параметры из второй базы.
а не из основной.
14 vmv
 
21.01.13
14:00
(11)

ОбъектИБ.перечисления.ТипыКонтактнойИнформации.Адрес

они из той базы по логике, но нужно понить, что сом-объект -это матрешка, т.е. все что из него получают по вложениям это тоже Сомы)
15 Reset
 
21.01.13
14:00
"так не работает однако"
А что не работает?
При выбратьСтроку - ясно,
но РезультатЗапросаКонтр.Количество() должно >0 быть если записи по отбору есть
16 Maxus43
 
21.01.13
14:01
(12) дак там не ссылка на объект другой базы, там ком
17 lamme
 
21.01.13
14:02
(15)
оно работает. не знаю как результат отобразить на экране
или в таблицу значений
или в таблицу
т.е. из com данных получить данные в тз
18 Reset
 
21.01.13
14:02
(16) я про это и написал "ОбъектИБ - это com-соединение у него"
19 lamme
 
21.01.13
14:03
(14)
мысль не понял
20 Reset
 
21.01.13
14:03
(17) Но ты же написал "не работает". Не сбива с толку и не заставляй искать ошибку где ее нет ;)
21 lamme
 
21.01.13
14:04
(20)
так не работает - это к параметрам, передаваемым в запрос - относится
22 Reset
 
21.01.13
14:05
(17) Напиши цикл по перегрузке из COM-ТЗ в обычную.
Но понимай, что ссылку ты не перенесь никак, только наименование и ИНН. Ну, от силы строковой представлние уникального идентификаторы из ссылки.
23 John83
 
21.01.13
14:05
ВнешЗапрос = Соединение.NewObject("Запрос");
   ВнешЗапрос.Текст =
   "ВЫБРАТЬ


       ВнешЗапрос.УстановитьПараметр("Контрагент", Соединение.Справочники.Контрагенты.НайтиПоНаименованию(ДокументСписок.Отбор.Контрагент.Значение.Наименование));
24 Reset
 
21.01.13
14:05
(21) это противоречит (17)
25 Maxus43
 
21.01.13
14:05
(18) дак не сслыку в запрос пихает а ком объект, потому и не сравнивает. в (22) ты ж нормально написал, чтоб автор понял)
26 lamme
 
21.01.13
14:07
(22) а одной какой-то штукой такого сделать нельзя?
т.е. только перебор результата и перегрузка ее в обычную вручную?
27 Reset
 
21.01.13
14:07
Вы меня запутали :)

Я НЕ вижу ошибки в
Запрос.УстановитьПараметр("Тип",ОбъектИБ.перечисления.ТипыКонтактнойИнформации.Адрес);

т.к. Запрос - тоже ком-объект
28 Reset
 
21.01.13
14:08
(26) только перебор
29 vmv
 
21.01.13
14:08
(22) по строковому представлению ссылки уже можно получить и саму ссылку сом-базы, погугли бы мисту на соммы шоли
30 lamme
 
21.01.13
14:09
(27)
я тож не понимаю.
но если это услвоие убрать - то результат выдает 4200 записей
если запрос с этим условием - то выдает 0
31 Reset
 
21.01.13
14:09
(29) НЕ понял. ЧТО я должен гуглить. Мне ВСЕ понятно.
32 lamme
 
21.01.13
14:09
(29)
искал по мисте
33 Reset
 
21.01.13
14:11
(30) Это значит что записи такой нет
34 vmv
 
21.01.13
14:11
(26) можно, но для этого нужно владеть методами COMSafeArray

(31) ты точно уверен, что тебе все понятно, я слышу нотки отчаянья?
35 Reset
 
21.01.13
14:12
(34) Ты слышишь нотки раздражения, скорее
36 vmv
 
21.01.13
14:12
(30) если ты не в илах понять (14), то может пойдешь в певцы?
37 lamme
 
21.01.13
14:12
(34) и (35)
чего то вы там эта ..
можно мне показать - как правильно передать в запрос параметры ?
38 Reset
 
21.01.13
14:13
(37) У тебя они правильно передаются
39 Reset
 
21.01.13
14:14
+(38) Ну кроме разве конкретные значения перепутаны. Но метод - правильный.
40 lamme
 
21.01.13
14:16
(39)
что значит- конкртеные значения перепутаны?
в конфиг - тип = перечисления.ТипыКонтактнойИнформации.Адрес
41 lamme
 
21.01.13
14:18
пардон
тип = перечисления.ТипыКонтактнойИнформации.
42 prog0101
 
21.01.13
14:18
(0)попросил бы лучше в итернетах работающий пример чем тут холивар разводить
43 Reset
 
21.01.13
14:20
(40) "возможно перепутаны" я хотел написать. Код для поиска "вида" к примеру там неверный или еще что-то
44 Reset
 
21.01.13
14:22
Протестируй запрос сначала без COM/
45 lamme
 
21.01.13
14:25
(44)
вот так вот можно без перебора получить данные из comзапроса в тз

РезультатЗапросаКонтр  = Запрос.Выполнить();
   com_ТЗ_Контр = РезультатЗапросаКонтр.Выгрузить(); // COM объект
   стр_ТЗ_Контр = ОбъектИБ.ЗначениеВСтрокуВнутр(com_ТЗ_Контр);// COM объект
   ТЗ_Контр = ЗначениеИзСтрокиВнутр(стр_ТЗ_Контр);
   ТЗ_Контр.выбратьстроку();// тут уже таблица значений
46 Reset
 
21.01.13
14:27
(45) Типа уел? :)
Ок, так можно, если в колонках тз только примитивные типы
47 lamme
 
21.01.13
14:27
46
нет- не уел. при чем тут ..
просто делюсь.
нашел в инете
48 Reset
 
21.01.13
14:28
(47) Ок, спасибо тогда :)
49 vmv
 
21.01.13
14:33
ну чо там с результатом - видишь фигу?
50 lamme
 
21.01.13
14:34
(49)
как это не странно
фига тут в ОбъектИБ.справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008")
потому что в спраочнике ВидыКонтактнойИнформации - код это не уникальное поле. почему то.
51 Reset
 
21.01.13
14:36
Не могу удержаться от "а я что говорил" :D ((43))
52 lamme
 
21.01.13
14:38
спрашивается - какого х**ра оно не уникальное ...
53 Domanoff26
 
21.01.13
14:42
(52) может еще есть одно