Имя: Пароль:
1C
1С v8
v8: Как перебрать результат запроса, выполненный в другой базе, подключенной по COM?
0 Vladal
 
30.03.12
15:50
Подключил базу с помощью COM-соединения, пишу запрос:

   Запрос = РДС.NewObject("Запрос");
   Запрос.Текст =
   "ВЫБРАТЬ
   |    АвтомобилиМеханизмы.Ссылка,
   |    АвтомобилиМеханизмы.Код,
   |    АвтомобилиМеханизмы.Наименование,
   |    АвтомобилиМеханизмы.ГосударстванныйНомер,
   |ИЗ
   |    Справочник.АвтомобилиМеханизмы КАК АвтомобилиМеханизмы";
   
   РезультатЗапроса = Запрос.Выполнить().Выгрузить();
   

Теперь этот РезультатЗапроса никак не читается - ни выборкой, ни выгрузить в таблицу значений. Отладчик пишет COMобъет, но при раскрытии поля справочника, как есть.

По форуму искал, нашел, что выборка такая же, как и при обычном запросе - но не работает.
1 Vladal
 
30.03.12
15:50
*Правильно тема так: Как перебрать результат запроса ;)
2 Eugene_life
 
30.03.12
15:53
(1) Неправда.. не читается только ссылка, вот Код, Наименование и прочее - должно читаться
3 Vladal
 
30.03.12
15:54
(2) Ссылку убрал, но как перебрать или выгрузить в ТЗ?

{Форма.Форма.Форма(44)}: Метод объекта не обнаружен (Выгрузить)
   РезультатЗапроса.Выбрать().Выгрузить();
4 Широкий
 
30.03.12
15:55
Примитивные типы должны читаться :)
5 КМ155
 
30.03.12
15:56
(3) ЧЯДНТ ?
// получим ТЧ документа прием на работу в организацию    
   ЗапросHR = connection.NewObject("Запрос");                      
   ЗапросHR.Текст="ВЫБРАТЬ
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт.Код КАК ДтКод,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1.Наименование КАК СубконтоДт1Наименование_строкой,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКт.Код КАК КтКод,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДтНУ.Код КАК ДтНУКод,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДтНУ1.Наименование КАК СубконтоДтНУ1Наименование_строкой,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКтНУ.Код КАК КтНУКод,
   |    СУММА(ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Сумма) КАК Сумма
   |ИЗ
   |    Документ.ОтражениеЗарплатыВРеглУчете.ОтражениеВУчете КАК ОтражениеЗарплатыВРеглУчетеОтражениеВУчете
   |ГДЕ
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
   |    И ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка.Проведен = ИСТИНА
   |
   |СГРУППИРОВАТЬ ПО
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКт.Код,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт.Код,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДтНУ.Код,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКтНУ.Код,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДтНУ1.Наименование,
   |    ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1.Наименование";
   //определим интервал дат
   ОтражениеВУчете.Очистить();
   ДатаСлева=НачалоМесяца(ЭтотОбъект.ПериодРегистрации);
   ДатаСправа=КонецМесяца(ЭтотОбъект.ПериодРегистрации);
   ЗапросHR.УстановитьПараметр("ДатаНач",ДатаСлева);
   ЗапросHR.УстановитьПараметр("ДатаКон",ДатаСправа);
   ТЗ = ЗапросHR.Выполнить().Выгрузить();
   // в зависимости от типа счета будем устанавливать разные субконто - подменные
   Для Каждого СтрокаТЗ из ТЗ Цикл
6 m-serg74
 
30.03.12
15:56
(3) что за бред "РезультатЗапроса.Выбрать().Выгрузить()"? оперделись уже Выбрать() или Выгрузить()
7 Vladal
 
30.03.12
16:02
(5) Х.з. чтднт.

(6) Сначала было .Выполнить().Выгрузить(); потом стал играться пошагово

(5) СтрокаТЗ - тоже ком-объект. Т.е. дальше его ручками по каждой колонке, т.е. реквизиту?
8 Vladal
 
30.03.12
16:06
(5) Спасибо. Я протупил изначально - изначально у меня все данные и были. только я хотел выгрузить этот ком-объект в свою ТЗ и работать как привык. А надо теперь ручками каждую колонку выгрузить.
9 Vladal
 
30.03.12
16:07
Вот я сначала хотел так:

   ЭлементыФормы.ТабличноеПоле1.Значение=Запрос.Выполнить().Выгрузить();
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
10 MSII
 
30.03.12
16:08
(8) ЗаполнитьЗначенияСвойств юзай
11 m-serg74
 
30.03.12
16:09
(8) а чем плохо
Для Каждого СтрокаСОМ_ТЗ Из РезультатЗапроса Цикл
   СтрокаТвоейТЗ = ТвояТЗ.Добавить();
   ЗаполнитьЗначенияСвойств(СтрокаТвоейТЗ, СтрокаСОМ_ТЗ);
КонецЦикла;
12 aka AMIGO
 
30.03.12
16:12
а не должно-ли создать ТЗ тоже "по ту сторону", где и запрос?
13 Vladal
 
30.03.12
16:23
(12) Но та потусторонняя ТЗ тоже будет Com-объектом.
14 Vladal
 
30.03.12
16:25
(11) Но прежде на до организовать структуру моей ТЗ, идентичной получаемой, т.е. МояТЗ.ДобавитьКолонку(... Верно?
15 Kashemir
 
30.03.12
16:28
(0) Что-то не въезжаю, тебе результаты из внешнего соединения надо достать или в нем же использовать ?
16 Kashemir
 
30.03.12
16:31
Если достать по примерно так

ХранилищеВнешнее = РДС.NewObject("ХранилищеЗначения", ТЗТам, РДС.NewObject("СжатиеДанных",9));
ЗаписьXML = РДС.NewObject("ЗаписьXML");
ЗаписьXML.УстановитьСтроку();
РДС.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ХранилищеВнешнее);
ХранилищеВСтроке = ЗаписьXML.Закрыть();

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ХранилищеВСтроке );
ТЗТут = СериализаторXDTO.ПрочитатьXML(ЧтениеXML).Получить();
17 m-serg74
 
30.03.12
16:36
(14) все верно
18 Vladal
 
30.03.12
16:46
(16) Вай, спасибо! Получилось!