Упрощение работы с SQL запросами и встроенная консоль




Просто надоело писать много букв (постоянно описывать коннекторы и объекты).
Была создана обработка для минимизации кода и помогает Ctrl+пробел.

Платформа минимум 8.3.6.1977 будет работать на платформах 8.2 если заменить функцию СтрРазделить на свою.

Обработка тестировалась на платформе 8.3.10.2580. 

Конфигурация не имеет значения.

 

Примеры использования обработки:

1. Инициализировали данные подключения и написали запрос.

ЗапросSQL = Обработки.ЗапросSQL.Создать();
ЗапросSQL.Сервер = "server";
ЗапросSQL.База = "base";
ЗапросSQL.Пользователь = "user";
ЗапросSQL.Пароль = "PSW";
ЗапросSQL.Текст =
"SELECT
|Контры.INN ИНН,
|COUNT(DISTINCT Контры.Firma) Организация,
|MAX(Контры.Date) Дата
| FROM IS_Customers_MeetCredit2 Контры
|GROUP BY Контры.INN";

2. А затем выполняем запрос и обрабатываем результаты.  

2.0  Реквизит обработки "Выполнено" является индикатором выполнения запроса. 

2.1 Результат в выборку — функция Выбрать() которая возвращает выборку по полям запроса.


ВыборкаSQL = ЗапросSQL.Выбрать(); //элемент выборки ВыборкаSQL
Пока ЗапросSQL.СледующийИзВыборки() Цикл
Сообщить("Результат: " + ВыборкаSQL.Дата + ВыборкаSQL.ИНН + " - " + ВыборкаSQL.Организация);
КонецЦикла;

//Функци выборки ВыборкаSQL = ЗапросSQL.Выбрать(); элемент выборки ВыборкаSQL
//ЗапросSQL.СледующийИзВыборки();
//ЗапросSQL.ВНачалоВыборки();
//ЗапросSQL.ВКонецВыборки();
//ЗапросSQL.ПреведущийИзВыборки();
//ЗапросSQL.УстановитьНаПазициюВВыборки(3);

2.2 Результат в таблицу — функция Выгрузить(ТаблицаКоторуюЗаполнитьРезультатом = Неопределено) которая возвращает таблицу значений .

Если в параметр "ТаблицаКоторуюЗаполнитьРезультатом" передать таблицу значений, то она заполниться в соответствии, колонка т.з. — поле запроса.


Таблица = ЗапросSQL.Выгрузить();
Если ЗапросSQL.Выполнено Тогда  // Или Таблица <> Неопределено
Таблица.ВыбратьСтроку();
КонецЕсли;

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("ИНН");
ЗапросSQL.Выгрузить(Таблица);
Таблица.ВыбратьСтроку();

2.3 Результат в запрос (самая полезная имхо) — функция ЗапросSQL.ВыгрузитьВЗапрос(ИмяВременнойТаблици,Запрос1с = Неопределено) которая возвращает запрос 1с и временную таблицу в нем.

Если передать в параметр  "Запрос1с" передать запрос 1с то временная таблица добавиться в этот запрос.

Запрос1С = ЗапросSQL.ВыгрузитьВЗапрос("ИмяВременнойТаблици");
//Подключаем другую базу
ЗапросSQL.Сервер = "server2";
ЗапросSQL.База = "est1s";
ЗапросSQL.Пользователь = "est1s";
ЗапросSQL.Пароль = "est1s";
ЗапросSQL.Текст =
"SELECT
| sdate.stend,
| sdate.state
|FROM sdate AS sdate";
ЗапросSQL.ВыгрузитьВЗапрос("ИмяВременнойТаблици2",Запрос1С);
Запрос1С.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка,
| ИмяВременнойТаблици2.stend
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|  ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИмяВременнойТаблици КАК ИмяВременнойТаблици
|  ПО (ИмяВременнойТаблици.ИНН = Контрагенты.ИНН)
|  ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИмяВременнойТаблици2 КАК ИмяВременнойТаблици2
|  ПО (ИмяВременнойТаблици2.stend = ИмяВременнойТаблици.Организация)";
Выборка = Запрос1С.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Результат: " + Выборка.Ссылка + " : " + Выборка.stend);
КонецЦикла;

2.3 Классика жанра — функция Получить() 

Результат = ЗапросSQL.Получить();
Пока Не Результат.EOF Цикл
Сообщить("Результат: " + Результат.Fields.Item("ИНН").Value);
Результат.MoveNext();
КонецЦикла;

3. И еще дополнительно можно:

//---------------------------- Файлы -------------------------------------------
ЗапросSQL.Текст = "INSERT INTO sdate (stend,state) VALUES (1,?)" ;
ЗапросSQL.УстновитьФайлКакПараметр("D:ender_iz_futuramy_1600x1200_4997.jpg");
ЗапросSQL.Получить();

Если ЗапросSQL.Выполнено Тогда
ЗапросSQL.Текст = "SELECT TOP 1 state FROM sdate";
ЗапросSQL.ВыгрузитьВФайл("state","D:	est.jpg");
КонецЕсли;

//---------------------------- ActiveDirectory -------------------------------------------
ЗапросSQL.НастройкаКакActiveDirectoryProvider();
ЗапросSQL.Текст =  "SELECT Name,ADSPath,SAMAccountName  FROM 'LDAP://DC=domen,DC=ru' WHERE Name='*/*'";
ВыборкаSQL = ЗапросSQL.Выбрать();
Пока ЗапросSQL.СледующийИзВыборки() Цикл
Сообщить("Результат: " + ВыборкаSQL.Name + ВыборкаSQL.ADSPath + " - " + ВыборкаSQL.SAMAccountName);
КонецЦикла;

//---------------------------- Всякое - Работают только с Выгрузить(); Пост обработка таблицы. -------------------------------------------

ЗапросSQL.ФункцияЗамены.Вставить("ИНН","СтрЗаменить(&values&,""0"",""*"")");
ЗапросSQL.ФункцияЗамены.Вставить("Организация","&values& * -1");
ЗапросSQL.Выгрузить().ВыбратьСтроку();
ЗапросSQL.Квалификаторы.Вставить("ИНН",Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(2,ДопустимаяДлина.Фиксированная)));
ЗапросSQL.Выгрузить().ВыбратьСтроку();
ЗапросSQL.ПредставлениеКолонки.Вставить("ИНН","Это ИНН");
ЗапросSQL.Выгрузить().ВыбратьСтроку();

 

6 Comments

  1. user700035_6550355

    В обычном приложении не работает?

    {ВнешняяОбработка.ЗапросSQL.МодульОбъекта(430,12)}: Процедура или функция с указанным именем не определена (СтрРазделить)

    Данные = <<?>>СтрРазделить(СтрокаТЗ.Метаданные,».»);

    Reply ↓
  2. SanyMaga

    минимум 8.3.6.1977 будет работать на платформах 8.2 если заменить функцию СтрРазделить на свою.

    Reply ↓
  3. SanyMaga

    Сори не учел. Минимум 8.3.6.1977(обычный и уф) будет работать на платформах 8.2 если заменить функцию СтрРазделить на свою.

    Например здесь https://helpf.pro/faq/view/1815.html

    Reply ↓
  4. SanyMaga

    Сори. Минимум 8.3.6.1977. Нужно заменить функцию СтрРазделить на свою.

    Reply ↓
  5. kuzyara

    обработка работает минимум на 8.3.6.1977, на платформах 8.2 нужно заменить функцию СтрРазделить на свою.

    Reply ↓
  6. kuzyara

    (1) замени СтрРазделить на свою, т.к. есть только с 8.3.6.1977

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *