| 
    
        
     
     | 
    
  | 
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) Вай, спасибо! Получилось!     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |