![]() |
|
Выгрузить выборку в ТЗ | ☑ | ||
---|---|---|---|---|
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
|
Есть встроенное, называется "Внешние источники данных".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |