Имя: Пароль:
1C
1С v8
Как выгрузить значение SQL запроса к внешнему источнику?
0 НикДляЗапросов
 
21.11.13
15:45
Т.е. ADODB.Recordset select-oм выбирает поля
я могу objRecordset.Fields("НАИМЕНОВАНИЕ ПОЛЯ").value получить значение, но хотелось бы весь результат запроса выгрузить в ТЗ
1 Maxus43
 
21.11.13
15:50
внешниеисточникиданных + СКД и делай что хочешь, не вариант?
2 НикДляЗапросов
 
21.11.13
16:01
Я не знаю, так проще?
3 НЕА123
 
21.11.13
16:06
For i = 0 to RS.Fields.Count - 1 do
        ТЗ.Колонки.Добавить(RS.Fields(i).Name, Новый ОписаниеТипов("Строка, Число, Дата, NULL",
                                               Новый КвалификаторыЧисла(64, 32, ДопустимыйЗнак.Любой),
                                               Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)));
                                EndDo;

    While  RS.EOF() = 0 Do
        НоваяСтрокаТЗ = ТЗ.Добавить();
        
        For i = 0 to RS.Fields.Count - 1 do
            НоваяСтрокаТЗ[i] = RS.Fields(i).Value;
        EndDo;
        RS.MoveNext();
    EndDo;
4 НикДляЗапросов
 
21.11.13
16:11
(3) Да я понял, но я запарюсь поля описывать
5 НЕА123
 
21.11.13
16:13
(4)
имеется ввиду типа
    //RS.Fields(i).DefinedSize - размер целой части числа, длина строки
, не?
6 НикДляЗапросов
 
21.11.13
16:15
(5) Ща, подумать надо
7 Serginio1
 
21.11.13
16:24
Функция ЗаполнитьИзРекордСета(РекордСет)
    Тз=СоздатьОбъект("ТаблицаЗначений");
    ХБ=РекордСет.Fields.Count-1;
    
    Сз=СоздатьОбъект("СписокЗначений");
    Для сч=0 по ХБ Цикл
        Поле=РекордСет.Fields(сч);
        Name=Поле.Name;    
        Сз.ДобавитьЗначение(Name);
        Тз.НоваяКолонка(Name);
    КонецЦикла;        
    
    Пока РекордСет.EOF = 0 Цикл  
        Тз.НоваяСтрока();
        НомСтр=Тз.НомерСтроки;
        Для сч=0 по ХБ Цикл
            Значение=РекордСет.Fields(сч).Value;
            Тз.УстановитьЗначение(НомСтр,Сч+1,Значение);
        КонецЦикла;  
        РекордСет.MoveNext();
    КонецЦикла;
    РекордСет.close();
    возврат Тз
КонецФункции
8 МихаилМ
 
21.11.13
16:33
(1)
в методе нет нормализации имен колонок для тз.
+ нет типизации колонок
9 Serginio1
 
21.11.13
16:54
10 НикДляЗапросов
 
21.11.13
17:19
Всем спасибо.
Ну получил я в итоге то что нужно, но не так просто как хотел.


Функция ЗаполнитьИзРекордСета(РекордСет)
    Тз= Новый ТаблицаЗначений;
    ХБ=РекордСет.Fields.Count-1;
    
    Сз= Новый СписокЗначений;
    Для сч=0 по ХБ Цикл
        Поле=РекордСет.Fields(сч);
        Name=Поле.Name;
        Если Name = "" Тогда
            name = "Поле"+сч;
        КонецЕсли;
        Сз.Добавить(Name);
        Тз.Колонки.Добавить(Name);
    КонецЦикла;        
    
    Пока РекордСет.EOF = 0 Цикл  
        СтрТЗ = Тз.Добавить();
        НомСтр=Тз.Индекс(стртз);
        Для сч=0 по ХБ Цикл
            Значение=РекордСет.Fields(сч).Value;
            //Тз.УстановитьЗначение(НомСтр,Сч+1,Значение);
            СтрТЗ[Сч] = Значение;
        КонецЦикла;  
        РекордСет.MoveNext();
    КонецЦикла;
    РекордСет.close();
    возврат Тз
КонецФункции
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой