Получение результата запроса из SQL в таблицу значений
// Возвращает результат запроса в таблице значений.
//
// Параметры:
// Connection - COMОбъект("ADODB.Connection"), коннект к бд (необязательный).
// SQLText - текст, текст запроса.
// ДанныеДляПодключения - структура, формируется в СоздатьДанныеДляПодключения() (необязательный).
//
Функция ПолучитьРезультатЗапроса(SQLText, ДанныеДляПодключения = Неопределено, Connection = Неопределено) Экспорт
Если Connection = Неопределено Тогда
Connection = НовоеСоединениеССУБД(ДанныеДляПодключения);
КонецЕсли;
RecordSet = Новый ComObject("ADODB.RecordSet");
RecordSet.CursorLocation = 3;
RecordSet.LockType = 3;
Попытка
RecordSet.Open(SQLText, Connection);
ТЗ = Новый ТаблицаЗначений;
КоличествоПолей = RecordSet.Fields.Count;
Для НомерСтолбца = 0 По КоличествоПолей - 1 Цикл // Создание и добавление колонок во временную таблицу
ИмяСтолбца = RecordSet.Fields.Item(НомерСтолбца).Name;
ТЗ.Колонки.Добавить(RecordSet.Fields.Item(НомерСтолбца).Name, SQLТипВ1СТип(RecordSet.Fields.Item(НомерСтолбца).Type, RecordSet.Fields.Item(НомерСтолбца).DefinedSize));
КонецЦикла;
Пока НЕ RecordSet.EOF Цикл // Заполнение созданной таблицы
НоваяСтрока = ТЗ.Добавить();
Для ПолеСч = 0 По КоличествоПолей - 1 Цикл
Поле = RecordSet.Fields.item(ПолеСч);
НоваяСтрока[Поле.name] = Поле.Value;
КонецЦикла;
RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close();
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Запрос в SQL базу " + ДанныеДляПодключения.ИмяБД + "'"), УровеньЖурналаРегистрации.Ошибка, , , "Ошибка выполнения запроса: " + SQLText + Символы.ПС + ОписаниеОшибки());
ТЗ = Неопределено;
КонецПопытки;
Возврат ТЗ;
КонецФункции
Функция НовоеСоединениеССУБД(ДанныеДляПодключения) Экспорт
Con = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Provider=SQLOLEDB; Data Source=" + ДанныеДляПодключения.АдресСервера + ";Initial Catalog="
+ ДанныеДляПодключения.ИмяБД + ";Persist Security Info=True;User ID=" + ДанныеДляПодключения.Логин + ";Password=" + ДанныеДляПодключения.Пароль;
Попытка
Con.ConnectionTimeOut = 15;
Con.CommandTimeout = 220;
Con.Open(СтрокаПодключения);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Соединение с SQL базой " + ДанныеДляПодключения.ИмяБД + "'"), УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
Con = Неопределено;
КонецПопытки;
Возврат Con;
КонецФункции
Функция SQLТипВ1СТип(Num, size)
ПараметрыСтроки = Новый КвалификаторыСтроки(size);
Если
Num = 20 Тогда
Возврат Новый ОписаниеТипов("Число");
ИначеЕсли
Num = 128 Тогда
Возврат Новый ОписаниеТипов("Булево");
ИначеЕсли
Num = 8 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки);
ИначеЕсли
Num = 136 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки);
ИначеЕсли
Num = 129 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки);
ИначеЕсли
Num = 7 Тогда
Возврат Новый ОписаниеТипов("Дата");
ИначеЕсли
Num = 133 Тогда
Возврат Новый ОписаниеТипов("Дата");
ИначеЕсли
Num = 134 Тогда
Возврат Новый ОписаниеТипов("Дата");
ИначеЕсли
Num = 135 Тогда
Возврат Новый ОписаниеТипов("Дата");
ИначеЕсли
Num = 14 Тогда
Возврат Новый ОписаниеТипов("Число");
ИначеЕсли
Num = 0 Тогда
Возврат Новый ОписаниеТипов("Строка, , , , ПараметрыСтроки"); // adEmpty 0 no value
ИначеЕсли
Num = 3 Тогда
Возврат Новый ОписаниеТипов("Число"); // adInteger 3 4 - byte signed integer
ИначеЕсли
Num = 205 Тогда
Возврат Новый ОписаниеТипов("Строка, , , , ПараметрыСтроки"); // adLongVarBinary 205 Long binary value
ИначеЕсли
Num = 201 Тогда
Возврат Новый ОписаниеТипов("Строка, , , , ПараметрыСтроки"); // adLongVarChar 201 Long string value
ИначеЕсли
Num = 203 Тогда
Возврат Новый ОписаниеТипов("Строка, , , , ПараметрыСтроки"); // adLongVarWChar 203 Long Null - terminates string value
ИначеЕсли
Num = 131 Тогда
Возврат Новый ОписаниеТипов("Число"); // adNumeric 131 Number with fixed precision and scale
ИначеЕсли
Num = 5 Тогда
Возврат Новый ОписаниеТипов("Число");
ИначеЕсли
Num = 4 Тогда
Возврат Новый ОписаниеТипов("Число"); // adSingle 4 Single - precision floating - point value
ИначеЕсли
Num = 2 Тогда
Возврат Новый ОписаниеТипов("Число"); // adSmallInt 2 2 - byte signed integer
ИначеЕсли
Num = 16 Тогда
Возврат Новый ОписаниеТипов("Число"); // adTinyInt 16 1 - byte signed integer
ИначеЕсли
Num = 21 Тогда
Возврат Новый ОписаниеТипов("Число"); // adUnsignedBigInt 21 8 - byte unsigned integer
ИначеЕсли
Num = 19 Тогда
Возврат Новый ОписаниеТипов("Число"); // adUnsignedInt 19 4 - byte unsigned integer
ИначеЕсли
Num = 18 Тогда
Возврат Новый ОписаниеТипов("Число"); // adUnsignedSmallInt 18 2 - byte unsigned integer
ИначеЕсли
Num = 17 Тогда
Возврат Новый ОписаниеТипов("Число"); // adUnsignedTinyInt 17 1 - byte unsigned integer
ИначеЕсли
Num = 132 Тогда
Возврат Новый ОписаниеТипов("Число"); // adUserDefined 132 User - defined variable
ИначеЕсли
Num = 204 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки); // adVarBinary 204 Binary value
ИначеЕсли
Num = 12 Тогда
Возврат Новый ОписаниеТипов("Число"); // adVariant 12 Automation variant
ИначеЕсли
Num = 139 Тогда
Возврат Новый ОписаниеТипов("Число"); // adVarNumeric 139 Variable width exact numeric with signed scale
ИначеЕсли
Num = 202 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки); // adVarWChar 202 Null - terminated Unicode character string
ИначеЕсли
Num = 130 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки); // adWChar 130
ИначеЕсли
Num = 200 Тогда
Возврат Новый ОписаниеТипов("Строка", , , , ПараметрыСтроки);
Иначе
Возврат Новый ОписаниеТипов("Строка");
КонецЕсли;
КонецФункции
// Возвращает структуру с данными для НовоеСоединениеССУБД().
//
// Параметры:
// АдресСервера - текст, адрес сервера.
// ИмяБД - текст, текст имя базы данных.
// Логин - текст, логин.
// Пароль - текст, пароль.
//
Функция СоздатьДанныеДляПодключения(АдресСервера, ИмяБД, Логин, Пароль) Экспорт
ДанныеДляПодключения = Новый Структура("АдресСервера, ИмяБД, Логин, Пароль", АдресСервера, ИмяБД, Логин, Пароль);
Возврат ДанныеДляПодключения;
КонецФункции
{82} Высокая цикломатическая сложность: 96 Орфографическая ошибка в коннект: коннект
Соединение и запрос данных из другой базы 1с
ПрименитьЗапросыНаИспользованиеВнешнихРесурсов (БСП)
ОтправитьЗапросыНаИспользованиеВнешнихРесурсов (БСП)
СообщениеОбработанЗапросРазрешенийИнформационнойБазы (БСП)
Обмен через ВЕБ Сервисы 1 часть