| 
    
            
         
         | 
    
  | 
Выгрузить выборку в ТЗ | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        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(); // выполняем процедуру Можно как товсе это выгрузить в ТЗ ?  | 
|||
| 
    1
    
        mehfk    
     23.10.17 
            ✎
    07:10 
 | 
||||
| 
    2
    
        vJet    
     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>  | 
|||
| 
    3
    
        vJet    
     23.10.17 
            ✎
    07:32 
 | 
         
        (2) Ой не очистил пример, извиняюсь. Но суть думаю понятна.     
         | 
|||
| 
    4
    
        Fram    
     23.10.17 
            ✎
    07:46 
 | 
         
        (2) это невероятно тормозной способ - перебирать рекордсет построчно.
 
        (0) используй GetRows. получишь массив массивов. вот его уже преобразуй в ТЗ - это быстро, сотни тысяч строк за пару секунд  | 
|||
| 
    5
    
        1dvd    
     23.10.17 
            ✎
    07:48 
 | 
         
        (4) эм... а как перекинуть массив массив без перебора? Точнее даже без цикла в цикле?     
         | 
|||
| 
    6
    
        Fram    
     23.10.17 
            ✎
    07:51 
 | 
         
        (5) никак.. перебор массива происходит в разы быстрее чем рекордсета. под "преобразуй" имел ввиду перебирай     
         | 
|||
| 
    7
    
        antihacker    
     23.10.17 
            ✎
    12:33 
 | 
         
        Здесь нет проблем с производительностью. Просто очень много колонок. Лень создавать ТЗ с колонками.     
         | 
|||
| 
    8
    
        Fram    
     23.10.17 
            ✎
    17:22 
 | 
         
        (7) дык автоматизируй. список колонок программно вытаскивается из рекордсета     
         | 
|||
| 
    9
    
        zenik    
     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(); КонецЦикла; КонецЕсли; Состояние(""); Возврат тз; КонецФункции  | 
|||
| 
    10
    
        Fram    
     23.10.17 
            ✎
    17:29 
 | 
         
        (9) ну, вы ему еще попу подотрите..     
         | 
|||
| 
    11
    
        zenik    
     23.10.17 
            ✎
    17:40 
 | 
         
        (10) Это код вымогатель... Через неделю начнет просить денег. Вот тогда я и разбогатею :D     
         | 
|||
| 
    12
    
        antihacker    
     24.10.17 
            ✎
    06:16 
 | 
         
        Странно почему тут не придумали выгрузку в ТЗ. Ну что же. Значит по записям.     
         | 
|||
| 
    13
    
        mehfk    
     24.10.17 
            ✎
    06:30 
 | 
         
        У тебя зрение плохое что-ли? Ты по ссылке в (1) ходил?     
         | 
|||
| 
    14
    
        antihacker    
     24.10.17 
            ✎
    07:00 
 | 
         
        Ходил. Просто я имел ввиду что то, что  встроенное.     
         | 
|||
| 
    15
    
        mehfk    
     24.10.17 
            ✎
    07:04 
 | 
         
        Есть встроенное, называется "Внешние источники данных".     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |