В предыдущей статье https://life1c.ru/post/2051 мы научились подключаться к сторонней БД PostgreSQL с помощью строки подключения. В этой статье разберёмся как осуществлять к этой БД свои SQL-запросы.
COM-объект ADODB.Command
В 1С Предприятие для целей выполнения различных команд, а также SQL-запросов лучше всего использовать COM-объект ADODB.Command.
1 | ЗапросАДО = Новый COMОбъект("ADODB.Command"); |
С помощью этого объекта выполняются SQL-запросы. А с помощью COM-объекта ADODB.Recordset возвращается результат выполнения команды.
1 | RS = Новый COMОбъект("ADODB.Recordset"); |
У объекта ADODB.Command есть несколько полей. Наиболее важные из них два:
- ActiveConnection – Активное соединение с БД
- CommandText – Текст команды или SQL-запроса.
Для выполнения команд можно воспользоваться следующей универсальной функцией 1С:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Функция ВыполнитьКоманду(Соединение, ТекстЗапроса, RS = Неопределено) Экспорт ЗапросАДО = Новый COMОбъект("ADODB.Command"); RS = Новый COMОбъект("ADODB.Recordset"); ЗапросАДО.ActiveConnection = Соединение; ЗапросАДО.CommandText = ТекстЗапроса; Попытка Успех = Истина; RS = ЗапросАДО.Execute(); Исключение //нет записей в рекордсете Успех = Ложь; Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное); КонецПопытки; ЗапросАДО = Неопределено; Возврат Успех; КонецФункции; |
Подключение к БД, выполнение SQL запроса и обход результата делаются следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | RS = Неопределено; ОбъектФормы = РеквизитФормыВЗначение("Объект"); Соединение = ОбъектФормы.ОткрытьПодключение(ОбъектФормы.СтрокаСоединения, 30); Если Соединение <> Неопределено Тогда Сообщить("Соединение с БД установлено успешно!"); Результат = ОбъектФормы.ВыполнитьКоманду(Соединение, ОбъектФормы.ЗапросSQL, RS); Сообщить("Запрос выполнен успешно: " + Результат); RS.MoveFirst(); ИндексЗаписи = 1; Пока RS.EOF = 0 Цикл Для НомерСтолбца = 0 По RS.Fields.Count-1 Цикл ИмяСтолбца = RS.Fields.Item(НомерСтолбца).Name; Сообщить(Строка(ИндексЗаписи) + ": " + ИмяСтолбца + "=" + RS.Fields(ИмяСтолбца).Value); КонецЦикла; RS.MoveNext(); ИндексЗаписи = ИндексЗаписи + 1; КонецЦикла; ОбъектФормы.ЗакрытьПодключение(Соединение); КонецЕсли; |
Работать с SQL-сервером напрямую целесообразно в следующих случаях:
- Для более быстрого добавления новых записей в SQL-таблицу ИБ 1С (конструкции UPDATE и INSERT)
- Для операций чтения/записи при обмене со сторонней системой (не 1С Предприятие)
- Для выполнения команд СУБД прямо из 1С, которые невозможно выполнить другими способами.
Обработка 1С «Выполнение SQL запроса»
Для наглядных операций с SQL-запросами была создана обработка «Выполнение SQL-запроса». Её можно скачать по ссылке ниже.
Для исполнения запроса или команды:
- Корректируем строку подключения. Про строку подключения было написано здесь https://life1c.ru/post/2051.
- Пишем свой SQL-запрос.
- Нажимаем кнопку «Выполнить».
Занимательная статья, интересно есть ли возможность использовать для запроса напрямую к базе данных инструменты разработчика. Возможно если выполнялся бы select-запрос а его результаты были бы размещены в таблицу значений, то можно было бы использовать консоль запросов из этих инструментов разработчика и работа напрямую с базой данных стала бы по настоящему интересной и удобной
Инструменты разработчика нацелены на работу с информационной базой 1С, поэтому там нет такой возможности. Но думаю, кто-нибудь уже выкладывал нечто подобное в виде отдельной обработки.