Расширение объекта Запрос

13.04.20

Разработка - Запросы

Упрощение / ускорение работы с объектом Запрос в программном коде для программистов.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Расширение объекта Запрос для программиста
.epf 5,07Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

На сон грядущий пришла мысля, что есть некоторые неудобства по обычной работе с запросами.

И вот родилась такая обработка.

Создано на платформе 8.3.13, но думаю будет работать на любой платформе 8.2+.

Просто скачать обработку (пытливые пользователи сами по предоставленному тексту смогут создать обработку)
и включить в конфигурацию, либо использовать через Расширение.

Примеры использования с ней описано в Секции "Использование".

//////////////////////////////////////////////////////////////////////
//
// Обработка расширения объекта Запрос
//
/////////////////////////////////////////////////////////////////////
//
// Использование:
//
// Запрос = Обработки.Запрос.Создать();
//
// Можно так:
//
// Запрос
//	 .Текст("Выбрать 1 КАК Номенклатура Где 2=&Два")
//	 .МенеджерВременныхТаблиц()
//	 .УстановитьПараметры(Новый Структура("Два", 2))
//	 .УстановитьПараметр("Один", 1)
//	 .Пустой();
//	
// Можно и так:
//
// Запрос.Текст = "Выбрать 1 КАК Номенклатура Где 2=&Два";
// Запрос.Параметры.Вставить("Два", 3);
//
// Возврат результатов:
//
// ТаблицаЗначений = Запрос.ВыполнитьИВыгрузить();
// Выборка = Запрос.ВыполнитьИВыбрать();
// МассивРезультатов = Запрос.ВыполнитьПакет();
// Булево = Запрос.Пустой();

#Область ПрограммныйИнтерейс

#Область УстановкаПараметров
	
Функция МенеджерВременныхТаблиц(МенеджерВременныхТаблиц = Неопределено) Экспорт

	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;

	Возврат ЭтотОбъект;
	
КонецФункции

Функция Текст(ТекстЗапроса = Неопределено) Экспорт

	Текст = ТекстЗапроса;
	
	Возврат ЭтотОбъект;
	
КонецФункции

Функция ПолучитьПараметры() Экспорт
	
	Для каждого Параметр Из Запрос.НайтиПараметры() Цикл
	
		Параметры.Вставить(Параметр.Имя, Параметр.ТипЗначения);
	
	КонецЦикла;
	
	Возврат ЭтотОбъект;
	
КонецФункции
	
Функция УстановитьПараметр(Имя, Значение) Экспорт

	Параметры.Вставить(Имя, Значение);
	
	Возврат ЭтотОбъект;

КонецФункции

Функция УстановитьПараметры(ПараметрыЗапроса = Неопределено) Экспорт

	//Значит мы в программе прямо в Структуру "Параметры" добавляли
	Если ПараметрыЗапроса = Неопределено Тогда
	
		ПараметрыЗапроса = Параметры;
	
	КонецЕсли;
	
	Для каждого Параметр Из ПараметрыЗапроса Цикл
			
		Параметры.Вставить(Параметр.Ключ, Параметр.Значение);
	
	КонецЦикла;
	
	Возврат ЭтотОбъект;

КонецФункции

Функция Выполнить() Экспорт

        ПодготовитьЗапрос();
	
	Возврат ЭтотОбъект;

КонецФункции

Функция Очистить() Экспорт

	Конструктор();
	
	Возврат ЭтотОбъект;

КонецФункции

#КонецОбласти

#Область РезультатЗапроса

Функция ВыполнитьИВыбрать(ТипОбхода = Неопределено) Экспорт
	
	ПодготовитьЗапрос();
	
	Возврат ЭтотОбъект.Результат.Выбрать(ТипОбхода);

КонецФункции

Функция ВыполнитьИВыгрузить(ТипОбхода = Неопределено) Экспорт
	
	ПодготовитьЗапрос();
	
	Возврат ЭтотОбъект.Результат.Выгрузить(ТипОбхода);

КонецФункции

Функция ВыполнитьПакет(ТипОбхода = Неопределено) Экспорт
	
	ПакетныйЗапрос = Истина;
	ПодготовитьЗапрос(ПакетныйЗапрос);
	
	Возврат ЭтотОбъект.Результат;

КонецФункции

Функция Пустой() Экспорт
	
	ПодготовитьЗапрос();
	
	Возврат ЭтотОбъект.Результат.Пустой();

КонецФункции
	
#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ПодготовитьЗапрос(Пакетный = Ложь)
	
	Запрос.Текст = Текст;
	
	Для каждого Параметр Из Параметры Цикл
			
		Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
	
	КонецЦикла;
	
	Если Пакетный Тогда
		
		Результат = ЭтотОбъект.Запрос.ВыполнитьПакет();
		
	Иначе
		
		Результат = ЭтотОбъект.Запрос.Выполнить();
	
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область Конструктор
	
Процедура Конструктор()

	Запрос = Новый Запрос;
	Параметры = Новый Структура;
	Результат = Неопределено;
	
КонецПроцедуры

Конструктор();

#КонецОбласти

 

Обработка интересное ООП

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169274    937    403    

905

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    11394    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    6338    XilDen    36    

83

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    9068    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2727    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    10219    implecs_team    6    

48

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3623    andrey_sag    10    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1975 13.04.20 12:33 Сейчас в теме
Не вижу упрощения или удобств, ровно такой же набор методов, только контекстная подсказка работать не будет. Я делаю так:
Результат = ОбщийМодуль.НовыйЗапрос(Текст, МенеджерВременныхТаблиц, ПараметрыСтруктура, ТипВозращаемогоРезультата)
2. serferian 27 13.04.20 16:30 Сейчас в теме
1. Вы работаете в коде аналогично Объекту Запрос, т.е. заменив "Новый Запрос" на "Обработка....Создать()" Ваша программа продолжит работать.
с ОбщимМодулем так не получиться, придется серьезно перерабатывать программу (мда сейчас подумал- что надо бы добавить метод "Выполнить" - добавил в тексте публикации))
2. Упрощение
- за счет добавления новых методов: УстановитьПараметры, ВыполнитьИ.....,
- "Параметры" доступны для записи.
- "Результат" остается доступен всегда.
- не надо писать в каждой строке слово Запрос.
- Ваш код более скомпонован в 1 конструкцию - правда ведь бесит когда от создания до Выполнения несколько сотен строк кода... да еще и параметры могут разнести по куче блоков, да еще и текст сливается из кучи процедур...
- в продолжение к предыдущему - дисциплинирует на подготовку данных(текста и параметров) в отдельных скомпонованных блоках кода! ну и упрощает чтение кода с данным запросом
3. да КонтекстнаяПодсказка - не заморачивался на описание функций "Аля синтаксис" - но подсказка по всем поля и методам доступна.
Оставьте свое сообщение