Вход | Регистрация

1С:Предприятие ::

Метки: 

Выгрузить выборку в ТЗ

Я
   antihacker
 
23.10.17 - 07:05
Всем привет !

Вот так получаю данные из внешнего источника

        //Подключаемся к SQL

Connection = Новый COMОбъект("ADODB.Connection");

СтрокаПодключения = "Provider=SQLOLEDB.1; Password='Protect1';Persist Security Info=True;User ID='fortrexport';Initial Catalog='Documentation_TR_2012'; Data Source='skyzmo053vapp2';";

Connection.Open(СтрокаПодключения);  

Результат = Новый COMОбъект("ADODB.Command");

//Результат = СистемныйМодуль.ПодключитьВнешнийИсточник("Protect@1","sa","SKD","skyzmo039vapp1");

попытка
Результат.ActiveConnection = Connection ;// работаем через это соединение

исключение
сообщить("не подключен");
конецпопытки;

Результат.CommandTimeOut = "1500";// таков тайм-аут


Результат.CommandType = "adCmdText";// исполняем в точности процедуру


Результат.CommandText ="SELECT dbo.dogovor.* FROM  dbo.dogovor";    

Выборка = Результат.Execute();// выполняем процедуру



Можно как товсе это выгрузить в ТЗ ?
 
  Рекламное место пустует
   mehfk
 
1 - 23.10.17 - 07:10
   vJet
 
2 - 23.10.17 - 07:16
Вот мой старинный код, помещает результат запроса в тз
<code>
комманд = Новый COMОбъект("ADODB.Command");
        комманд.ActiveConnection = соединениеСбазой;
        комманд.CommandText = текстЗапроса;
        комманд.CommandType = 1;
        Для Каждого параметр из Параметры Цикл
            ПараметрЗапроса = комманд.CreateParameter(параметр.Ключ,135,1,,параметр.Значение);
            комманд.Parameters.Append(ПараметрЗапроса);    
        КонецЦикла;
        Попытка
            наборЗаписей = комманд.Execute();
        Исключение
            Сообщить(ОписаниеОшибки(),СтатусСообщения.Внимание);
            Сообщить(ИнформацияОбОшибке(),СтатусСообщения.Информация);
            комманд = Неопределено;
            наборЗаписей = Неопределено;
            Возврат Неопределено;
КонецПопытки; 
    Пока наборЗаписей.EOF()=0 Цикл
        новаяСтрока = табТоваров.Добавить();
        новаяСтрока.Код = наборЗаписей.Fields("Code").value;
        новаяСтрока.Наименование = наборЗаписей.Fields("Name").value;
        новаяСтрока.Группа = наборЗаписей.Fields("gName").value;
        новаяСтрока.ШтрихКод = наборЗаписей.Fields("Barcode").value;
        новаяСтрока.Цена = наборЗаписей.Fields("price").value;
//        элементНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту("кодUniverse",новаяСтрока.Код);

        //Если не элементНоменклатура.Пустая() Тогда

        //    новаяСтрока.Номенклатура = элементНоменклатура;

        //    новаяСтрока.ГруппаНоменклатуры = элементНоменклатура.Родитель;

        //    новаяСтрока.ВидНоменклатуры = элементНоменклатура.ОбщепитВидНоменклатуры;

        //    новаяСтрока.НоменклатурнаяГруппа = элементНоменклатура.НоменклатурнаяГруппа;

        //КонецЕсли;

        наборЗаписей.MoveNext();
    КонецЦикла;
    наборЗаписей.Close();</code>
   vJet
 
3 - 23.10.17 - 07:32
(2) Ой не очистил пример, извиняюсь. Но суть думаю понятна.
   Fram
 
4 - 23.10.17 - 07:46
(2) это невероятно тормозной способ - перебирать рекордсет построчно.
(0) используй GetRows. получишь массив массивов. вот его уже преобразуй в ТЗ - это быстро, сотни тысяч строк за пару секунд
   1dvd
 
5 - 23.10.17 - 07:48
(4) эм... а как перекинуть массив массив без перебора? Точнее даже без цикла в цикле?
   Fram
 
6 - 23.10.17 - 07:51
(5) никак.. перебор массива происходит в разы быстрее чем рекордсета. под "преобразуй" имел ввиду перебирай
   antihacker
 
7 - 23.10.17 - 12:33
Здесь нет проблем с производительностью. Просто очень много колонок. Лень создавать ТЗ с колонками.
   Fram
 
8 - 23.10.17 - 17:22
(7) дык автоматизируй. список колонок программно вытаскивается из рекордсета
   zenik
 
9 - 23.10.17 - 17:27
Функция RS2ТЗ(ADORecordset) Экспорт
    тз = Новый ТаблицаЗначений;
    Если ADORecordset.Fields.Count > 0 Тогда
        Для к = 0 По ADORecordset.Fields.Count - 1 Цикл
            ИмяКолонки = ADORecordset.Fields.Item(к).Name;
            //Сообщить(""+ИмяКолонки+" = "+ADORecordset.Fields.Item(к).Type);

            Если 
                ADORecordset.Fields.Item(к).Type = 3 
                или ADORecordset.Fields.Item(к).Type = 5
                или ADORecordset.Fields.Item(к).Type = 131
            Тогда
                тз.Колонки.Добавить(ИмяКолонки,Новый ОписаниеТипов("Число"));
            Иначе
                тз.Колонки.Добавить(ИмяКолонки);
            КонецЕсли;
        КонецЦикла;
        с = 0;
        Пока ADORecordset.EOF = 0 Цикл
            СтрокаТаблицы = тз.Добавить(); с = с + 1;
            Состояние("Подготовка таблицы значений... "+с);
            Для к = 0 По ADORecordset.Fields.Count - 1 Цикл
                Попытка
                    Значение = ADORecordset.Fields(к).Value;
                Исключение
                    Сообщить(ОписаниеОшибки()+"; Колонка: "+ADORecordset.Fields.Item(к).Name);
                    Значение = "";
                КонецПопытки;
                СтрокаТаблицы[к] = Значение;
            КонецЦикла;
            ADORecordset.MoveNext();
        КонецЦикла;
    КонецЕсли;
    Состояние("");
    Возврат тз;
КонецФункции
   Fram
 
10 - 23.10.17 - 17:29
(9) ну, вы ему еще попу подотрите..
 
  Рекламное место пустует
   zenik
 
11 - 23.10.17 - 17:40
(10) Это код вымогатель... Через неделю начнет просить денег. Вот тогда я и разбогатею :D
   antihacker
 
12 - 24.10.17 - 06:16
Странно почему тут не придумали выгрузку в ТЗ. Ну что же. Значит по записям.
   mehfk
 
13 - 24.10.17 - 06:30
У тебя зрение плохое что-ли? Ты по ссылке в (1) ходил?
   antihacker
 
14 - 24.10.17 - 07:00
Ходил. Просто я имел ввиду что то, что  встроенное.
   mehfk
 
15 - 24.10.17 - 07:04
Есть встроенное, называется "Внешние источники данных".


Список тем форума
Рекламное место пустует   Рекламное место пустует
Основная теорема систематики: Новые системы плодят новые проблемы.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует