Функция ЗапросSQL (SQLServer,Login,Password,ЗапросSQL) СтрокаСоединения = ("Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer + (";UID=") + Login + ("; PWD=") + Password + (";"); СоединениеSQL = Новый ComObject("ADODB.Connection"); СоединениеSQL.ConnectionString=СтрокаСоединения; Попытка СоединениеSQL.Open(); Состояние ("Подключение к серверу SQL..."); Исключение Сообщить(ОписаниеОшибки()); Возврат Ложь; КонецПопытки; Состояние ("Выполнение запроса SQL..."); ЗаписиSQL = Новый ComObject("ADODB.RecordSet"); ЗаписиSQL.ActiveConnection = СоединениеSQL; ЗаписиSQL = СоединениеSQL.Execute (ЗапросSQL); Таблица = Новый ТаблицаЗначений; Состояние ("Заполнение временной таблицы..."); Для НомерСтолбца = 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(); СоединениеSQL.Close(); Возврат Таблица; // Возврат таблицы значений запроса SQL КонецФункции
Процедура ЗаполнитьНажатие(Элемент) запрос = СоставитьЗапрос(); //Функция СоставитьЗапрос() возвращает строку запроса ТаблицаВывода = Новый ТаблицаЗначений; ТаблицаВывода.Очистить(); ТаблицаВывода = ЗапросКСкуль(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(); Возврат Таблица; КонецФункции
Функция Запрос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 КонецФункции