Имя: Пароль:
1C
1С v8
Запрос SQL
, ,
0 Yorik
 
25.06.13
14:32
Здравствуйте, у меня стоит 1с82 выполняется запрос к SQL , подскажите пожалуйста как мне сдалать выгрузку выполненного запроса в таблицу в 1С?  Спасибо
1 shuhard
 
25.06.13
14:33
(0) формат выгрузки должен угадать форум ?
2 ДенисЧ
 
25.06.13
14:33
А как выполняешь?
Обходи результат запроса, грузи в ТЗ. Потом делай с этой ТХ шо хошь
3 mikecool
 
25.06.13
14:33
бедный Ёрик!
результатзапроса.выгрузить()
4 ДенисЧ
 
25.06.13
14:34
(3) Даааа? Покажи мне у ADODB.Recordset метод Выгрузить()...
5 rs_trade
 
25.06.13
14:35
(4) Да у него штатный запрос. Какой нафиг адодб.
6 ДенисЧ
 
25.06.13
14:36
(5) А что, штатный может выполнять "запрос к SQL"?
Ну, если не ВИД, разумеется
7 Yorik
 
25.06.13
14:37
Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Open(стрПодключения);
   RS = Новый COMОбъект("ADODB.Recordset");
   // Запрос к базе на языке SQL запросов.
   //RS.Open("Select * from _Reference35", Connection);
   RS.Open("Select * from "+ПолеСтр1, Connection);
   //RS.Fill(ТаблЗн123);
   Пока RS.EOF() = 0 Цикл
       //// Можно обращаться и обрабатывать значения полей выборки.
       //// ИД  = RS.Fields(ПолеСтр2).Value;
       Дат    =RS.Fields("dateout").Value;
       Если   дат>=НачалоДня(Дата1) и    дат<=КонецДня(Дата2)  Тогда
           нс=тб.Добавить();
           нс.дата            =дат;
           нс.тикет        =""+RS.Fields("postid").Value+"-"+Формат(RS.Fields("tid").Value,"ЧГ=0");
           нс.Контракт        =RS.Fields("Contr_no").Value;
           нс.Тип            =RS.Fields("ScrapType").Value;
           нс.материал        =RS.Fields("Material").Value;
           нс.Инспектор    =RS.Fields("Inspector").Value;
           нс.машина        =RS.Fields("LicenseN").Value;
           нс.кол1            =RS.Fields("FWeight").Value;
           нс.кол2            =RS.Fields("Loss").Value;
           нс.Стр1            =RS.Fields("vendor").Value;
       КонецЕсли;
       RS.MoveNext();
   КонецЦикла;
   RS.Close();
   Connection.Close();


Я хочу одним разом выгрузить выборку и закрыть соединение
8 ДенисЧ
 
25.06.13
14:38
(7) Переходи на 77, там это реализовано :-)
Или, вспомнил, есть такая GameWithFire - там вроде есть такое.
9 Yorik
 
25.06.13
14:40
...по твоему мне и ЗуП переписать на с 82 на77
10 rs_trade
 
25.06.13
14:41
(7) Функция перегрузки рекордсета в тз пишется 15 минут
11 Yorik
 
25.06.13
14:41
(1) формат не важен
12 Maxus43
 
25.06.13
14:42
(9) прямые запросы в 1с8 нарушают лицензионное соглашение
13 shuhard
 
25.06.13
14:42
(11) заполни ТЧ, выгрузи в mxl
14 ДенисЧ
 
25.06.13
14:46
(12) Где сказано, что запросы SQL, выполненные к сторонней базе, нарушают лицензию?
15 Maxus43
 
25.06.13
14:48
(14) //RS.Open("Select * from _Reference35", Connection);
сторонняя, ага...)
16 Maxus43
 
25.06.13
14:49
хотя дальше поля не 1совские, ввёл в заблуждение значит, заметает следы
17 rs_trade
 
25.06.13
14:49
(12) 1C нарушает собственное лицензионное соглашение
18 Yorik
 
25.06.13
14:50
(12) да гонит он
Ведь есть же функции Open() или Execute() неуж то нету процедуры выгрузки в таблицу значений??
19 Sorm
 
25.06.13
14:52
(18) ADO должен знать про таблицу значений 1С?
20 rs_trade
 
25.06.13
14:52
(18) Создатели драйвера АДОДБ должны были позаботиться создании метода для перегрузки данных в структуру данных 1с-ки?
21 Sorm
 
25.06.13
14:54
(20) Ну а в принципе:):)... пора бы уж..
22 Serginio1
 
25.06.13
14:55
Создай на основании описания полей ТЗ. Вот семерочный вариант
Функция ЗаполнитьТзИзКоманды(Command)
   РекордСет=Command.Execute();
   Тз=СоздатьОбъект("ТаблицаЗначений");
   ХБ=РекордСет.Fields.Count-1;
   
   Сз=СоздатьОбъект("СписокЗначений");
   Для сч=0 по ХБ Цикл
       Поле=РекордСет.Fields(сч);
       Name=Поле.Name;  
       Сообщить(Name);
       Сз.ДобавитьЗначение(Name);
       Тз.НоваяКолонка(Name);
   КонецЦикла;        
   
   Пока РекордСет.EOF = 0 Цикл  
       Тз.НоваяСтрока();
       НомСтр=Тз.НомерСтроки;
       Для сч=0 по ХБ Цикл
           Попытка
            Значение=РекордСет.Fields(сч).Value;
            Тз.УстановитьЗначение(НомСтр,Сч+1,Значение);
Исключение
   Сообщить(ОписаниеОшибки()+" номер колонки "+ сч);
           КонецПопытки;
           
       КонецЦикла;  
       РекордСет.MoveNext();
   КонецЦикла;
   РекордСет.close();
   возврат Тз
КонецФункции
23 Yorik
 
25.06.13
14:58
Я хочу сделать что то вроде

Функция ЗаполнитьТзИзКоманды(Command)
   РекордСет=Command.Execute();
   Тз=СоздатьОбъект("ТаблицаЗначений");
   ХБ=РекордСет.Fields.Count-1;
   
//
   ТаблЗап = РекордСет.Выгрузить();
//

   РекордСет.close();
   возврат Тз
КонецФункции


ВСЕ
24 ДенисЧ
 
25.06.13
14:59
(23) Без проблем. Пиши письмо в Микрософт, чтобы они в следующей версии ADO вставили поддержку 1с...
25 Yorik
 
25.06.13
15:01
(24)...номер Билла Гейтса есть?
26 Yorik
 
25.06.13
15:03
Синтаксис помощник для SQL запросов где нибудь можно достать?
27 rs_trade
 
25.06.13
15:05
(26) В SSIS же есть. Есть еще сторонний неплохой SQL assistant называется.
28 Serginio1
 
25.06.13
15:05
(23) Тебе в 7 ку нужно. Там на 1С++
Функция ВыполнитьЗапрос(ConnectionString,ТексЗапроса) Экспорт    

    Попытка
       рс = СоздатьОбъект("ODBCRecordset");
   Исключение
       загрузитьвнешнююкомпоненту("1cpp.dll");
       рс = СоздатьОбъект("ODBCRecordset");
   КонецПопытки;
      Соединение=СоздатьОбъект("ODBCDatabase");
       Если Соединение.Соединение(ConnectionString)=1 Тогда
          рс.УстБД(Соединение);
       Иначе
      База=Сред(Соединение.ConnectionString,Найти(Соединение.ConnectionString,"DATABASE"));
      Сообщить("Не удалось установить соединение:"+База);
      Возврат 0;
      КонецЕсли;

     
   
тз=рс.ВыполнитьИнструкцию(ТексЗапроса);
Возврат тз;
КонецФункции
29 Serginio1
 
25.06.13
15:10
(0) А чего не хочешь использовать Внешние источники данных
30 shuhard
 
25.06.13
15:12
(18)[неуж то нету процедуры выгрузки в таблицу значений??]
доктора в топик, срочно
31 ДенисЧ
 
25.06.13
15:14
(28) в 8ке тоже можно так


ПодключитьВнешнююКомпоненту("GameWithFire.ADOUtils");
ADOUtils = Новый("AddIn.ADOUtils");
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open("Provider=sqloledb;Server=MyServer;Database=MyDatabase;Trusted_Connection=yes;");
Recordset = Connection.Execute("select * from MyTable (nolock)");
ТЗ = ADOUtils.ADORecordsetToValueTable(Recordset);
ТЗ.ВыбратьСтроку();
32 Yorik
 
25.06.13
15:16
(31) а где ее взять внешнюю компоненту? Просвятите люди добрые
33 ДенисЧ
 
25.06.13
15:17
(32) google://GameWithFire
первая ссылка
34 sda553
 
25.06.13
15:18
Мне пришло в голову самое изящное решение


Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Open(стрПодключения);
   RS = Новый COMОбъект("ADODB.Recordset");

   RS.Open("Select * from "+ПолеСтр1+" for xml auto, Connection);


   Пока RS.EOF() = 0 Цикл
       Данные    =RS.Fields(0).Value;
       RS.MoveNext();
   КонецЦикла;
   RS.Close();
   Connection.Close();
//Вся таблица одним махом выгружена в переменную Данные
35 Serginio1
 
25.06.13
15:21
(31) Согласен. В 7 ке проблема с Numeric поэтому проще использовать 1С++. Я её повсеместно использую. Для 0 вполне пойдет и вариант в 22. Под 8 ку его переписать не проблема.
36 Yorik
 
25.06.13
15:30
Алелуя, получилось спасибо. С подключением внешней компоненты))
37 Yorik
 
25.06.13
15:37
(31) Кстати а метод

ТЗ = ADOUtils.ADORecordsetToValueTable(Recordset);

случайно не переборкой данных выполнен?


Пока RS.EOF() = 0 Цикл
       RS.MoveNext();
КонецЦикла;

????
38 ДенисЧ
 
25.06.13
15:38
(37) А как иначе? АДО по-другому не умеет
39 Yorik
 
25.06.13
15:41
...блин, ладно))
40 Yorik
 
27.06.13
10:06
Здравствуйте еще раз!!!
У меня вопрос следующего характера, можно ли использовать имя сервера через IP адрес в параметре имя сервера??

ИмяСервера        =        "10.1.1.20";    
ИмяПользователя    =        "ert";
Пароль            =        "123456";
ИмяБазы            =        "Base";


такого рода код...
41 ДенисЧ
 
27.06.13
10:08
(40) я не против.
Или тебе нужна официальная справка?
42 Yorik
 
27.06.13
10:11
фак, по ходу сам сервак чисто физически не видит
43 Yorik
 
27.06.13
10:13
...т е если я передам параметр строкой , этого будет достаточно?
2 + 2 = 3.9999999999999999999999999999999...