Имя: Пароль:
1C
1С v8
Создание документа из запроса SQL
0 Shaggart
 
18.08.15
19:25
Вечер добрый, есть такой кусок кода, после запроса хочу создавать документы по каждой строке в экселевском файле, который читаю, но что то не могу сообразить что дальше делать с recordsetom

    RecordSet = Новый COMОбъект("ADODB.RecordSet");        
    Command.ActiveConnection = Connection;
    Command.CommandText = "SELECT
        |list.F5,
        |list.F6,
        |list.F8,
        |list.F9,
        |list.F10,
        |list.F11,
        |list.F12
        |FROM ["+ИмяТаблицы+"] as list
        |Where list.F6<>NULL
        |";
        
    Command.CommandType = 1;
    RecordSet = Command.Execute();
    
    Если RecordSet.EOF()<>0 Тогда
        Сообщить("В файле нет записей");
        Возврат;
    КонецЕсли;
    RecordSet.MoveNext();
    Пока RecordSet.EOF() = 0 Цикл


может кто подскажет как дальше должно быть?
1 mehfk
 
18.08.15
19:28
в цикле
читаешь Filelds("моеполе1").Value
RecordSet.MoveNext();
2 ДенисЧ
 
18.08.15
19:33
А может, если возникает такой вопрос - это пока не твоё?
3 Shaggart
 
19.08.15
01:27
Буду благодарен, если чуть больше помощи, и чуть меньше подколов, понятное дело, тут все знатоки, но хотелось бы понять как делать дальше. Спасибо.
4 1Сергей
 
19.08.15
05:55
Поля.УдалитьВсе();


Пока RecordSet.EOF()<>0 Цикл
    Для Идн = 0 по RecordSet.Fields.Count - 1 Цикл
        Попытка
            ИмяПоля = RecordSet.Fields(Идн).Name;
            ЗначениеПоля = RecordSet.Fields(Идн).Value;
        Исключение
            Сообщить("Ошибка получения данных из запроса [" + ИмяПоля + "] - [" + ЗначениеПоля + "]");
        КонецПопытки;
        
        
        
    КонецЦикла;
КонецЦикла;
5 1Сергей
 
19.08.15
05:56
*первую строку не надо
6 Учитель
 
19.08.15
05:58
(3) На ДенисаЧ не обращай внимание-это известный клоун выступает с гастролями на многих форумах)))
7 Repey
 
19.08.15
07:39
На вот:
Функция ПолучитьТЗИзВнешДанныхПоЗапросу(СтрокаСоединения, ТекстЗапроса, ИменаПолей = Ложь)
    //Если (ЗначениеЗаполнено(СтрокаСоединения) и ЗначениеЗаполнено(ТекстЗапроса)) тогда
    Если ЗначениеЗаполнено(СтрокаСоединения) Тогда
        КомСоед = ПодключитьсяКИсточникуданных(СтрокаСоединения);
        КомСоед = рПодключение;
    АдоКомманд = Новый COMОбъект("ADODB.Command");  
    АдоКомманд.ActiveConnection = КомСоед;
    
    АдоКомманд.CommandText = ТекстЗапроса;
    
    РекСет = Новый COMОбъект("ADODB.Recordset");
    
    РекСет = АдоКомманд.Execute();
    КоличСтолбцов = РекСет.fields.count;
    ТабЗн = новый ТаблицаЗначений;
    Сч = 0;

    Пока Сч < КоличСтолбцов цикл
        
        КодТипаКолонки = РекСет.fields(Сч).type;
        Если ИменаПолей тогда
            Попытка ИмяКолонки = РекСет.fields(Сч).name;
            Исключение ИмяКолонки = "Поле"+формат(Сч+1,"ЧЦ=3; ЧВН=; ЧГ=0");
            КонецПопытки;
        Иначе
            ИмяКолонки = "Поле"+формат(Сч+1,"ЧЦ=3; ЧВН=; ЧГ=0");
        КонецЕсли;
        
        ИмяКолонкиПоле = "Поле"+формат(Сч+1,"ЧЦ=3; ЧВН=; ЧГ=0");
        
        Попытка
            ТабЗн.Колонки.Добавить(ИмяКолонки, );
        Исключение
            ТабЗн.Колонки.Добавить(ИмяКолонкиПоле, );
        КонецПопытки;
        
        Сч = Сч+1;
    КонецЦикла;

    СчСтр = 0;
    Пока не(РекСет.EOF) цикл
     НовСтр = ТабЗн.Добавить();
     //Заполнение полей в строке
    
     Сч = 0;
     Пока Сч < КоличСтолбцов цикл
         НовСтр[Сч] = РекСет.fields(Сч).value;
         Сч = Сч + 1;
     КонецЦикла;
     Сч = Сч +1;
     РекСет.MoveNext();
    КонецЦикла;
    ЧтоВернуть = ТабЗн;
    иначе
        ЧтоВернуть = Неопределено;
    КонецЕсли;
    КомСоед = 0;
    Возврат ЧтоВернуть;
КонецФункции

Возвращает готовую ТЗ из строки соединения и запроса. Только надо сюда процесс подключения вписать.
Основная теорема систематики: Новые системы плодят новые проблемы.