Упрощение работы с 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 не будет опубликован. Обязательные поля помечены *