v8.x: Заполнение табличного поля данными таблицы значений, полученной из SQL - Запроса - 1С-ИнтеГрация

v8.x: Заполнение табличного поля данными таблицы значений, полученной из SQL - Запроса



 

Код 1C v 8.х

 Процедура ЗаполнитьНажатие(Элемент)

запрос = СоставитьЗапрос(); //Функция СоставитьЗапрос() возвращает строку запроса

ТаблицаВывода = Новый ТаблицаЗначений;

ТаблицаВывода.Очистить();

ТаблицаВывода = ЗапросКСкуль(CRM_MSSQL_Сервер,CRM_MSSQL_БазаДанных,CRM_MSSQL_Логин,CRM_MSSQL_Пароль,Запрос);

 

ТабличноеПоле.Очистить();

ЭлементыФормы.ТабличноеПоле.Значение=ТаблицаВывода;

ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();

 

КонецПроцедуры

 

Функция ЗапросКСкуль(SQLServer,DSN,Login,Password,txtSQL)

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

НаборЗаписей = Новый ComObject("ADODB.RecordSet");

Команда = Новый COMОбъект("ADODB.Command");

 

Соединение.ConnectionString = ("Provider=SQLOLEDB; Data Source = ") + SQLServer +

    (";Initial Catalog=") + DSN + (";UID=") + Login + ("; PWD=") + Password + (";");

Соединение.ConnectionTimeOut = 15;

//Попытка

 Соединение.Open();

// Сообщить("Connect");

//Исключение

// Сообщить("No connect");

//КонецПопытки;

 

Команда.ActiveConnection = Соединение;

Команда.CommandText = txtSQL;

//Попытка

 НаборЗаписей = Команда.Execute ();

// Сообщить("Add record");

//Исключение

// Сообщить("No I_nsert");

//КонецПопытки;

 

Таблица = Новый ТаблицаЗначений;

//Состояние ("Заполнение временной таблицы...");

 

Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл   //Создание и добавление колонок во временную таблицу

 ИмяСтолбца =НаборЗаписей.Fields.Item(НомерСтолбца).Name;

 Таблица.Колонки.Добавить(ИмяСтолбца);

 //Сообщить(ИмяСтолбца);            // Тестовая строка

КонецЦикла;

 

Пока НЕ НаборЗаписей.EOF Цикл        // Заполнение созданной таблицы

 НоваяСтрока =  Таблица.Добавить();

 Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл

  НоваяСтрока.Установить(НомерСтолбца,НаборЗаписей.Fields(НомерСтолбца).Value);

  //Сообщить ("Test " + ЗаписиSQL.Fields(НомерСтолбца).Value +  ЗаписиSQL.Fields(НомерСтолбца).Name);

 КонецЦикла;

 НаборЗаписей.MoveNext();

КонецЦикла;

 

//Состояние ("Закрываем соединение с SQL...");

Соединение.Close();

Возврат Таблица;

КонецФункции  

 



Код 1C v 8.х

 Функция ЗапросSQL (SQLServer,Login,Password,ТекстSQL)   //Функция выборки данных из SQL сервера и передача во временную таблицу 1С

 

СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer +

    (";UID=") + Login + ("; PWD=") + Password + (";");

             

   Подключение = Новый ComObject("ADODB.Connection");

Подключение.ConnectionString=СтрокаСоединения;

 Попытка

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

  Состояние ("Подключение к серверу SQL...");

 Исключение

  Сообщить(ОписаниеОшибки());

  Возврат Ложь;

 КонецПопытки;

 

СоединениеSQL = Новый COMObject("ADODB.Command");

СоединениеSQL.ActiveConnection = Подключение;

СоединениеSQL.NamedParameters = True;

СоединениеSQL.CommandText = ТекстSQL;

СоединениеSQL.CommandType = 1;

//СоединениеSQL.Prepared = Истина;

 

Param1 = СоединениеSQL.CreateParameter("n",3,1,1,1);

СоединениеSQL.Parameters.Append(Param1);

 

Param2 = СоединениеSQL.CreateParameter("ДатаПриходаС",200,1,8,Формат(НачалоПериода,"ДФ=ггггММдд"));//Формат(НачалоПериода,"ДФ=ггггММдд"));

СоединениеSQL.Parameters.Append(Param2);

 

Param3 = СоединениеSQL.CreateParameter("ДатаПриходаПо",200,1,8,Формат(КонецПериода,"ДФ=ггггММдд"));

СоединениеSQL.Parameters.Append(Param3);

  

СоединениеSQL.Parameters.Refresh();

 

Состояние ("Выполнение запроса SQL...");

ЗаписиSQL = Новый ComObject("ADODB.RecordSet");

 

ЗаписиSQL = СоединениеSQL.Execute();

 

 

Таблица = Новый ТаблицаЗначений;

Состояние ("Заполнение временной таблицы...");

Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу

 ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name;

 Таблица.Колонки.Добавить(ИмяСтолбца);

 Сообщить(ИмяСтолбца);

КонецЦикла;

 

 

Пока ЗаписиSQL.EOF = 0 Цикл // Заполнение созданной таблицы

 

 НоваяСтрока =  Таблица.Добавить();

 Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл

  НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);

  Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Value + ИмяСтолбца);

 КонецЦикла;

      

 ЗаписиSQL.MoveNext();

 

КонецЦикла;

 

Состояние ("Закрываем соединение с SQL...");

   ЗаписиSQL.Close();

Подключение.Close();

 

Возврат Таблица;   // Возврат таблицы значений запроса SQL

 

КонецФункции  

 

 



Назад в раздел