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

31.07.11

Разработка - Инструментарий разработчика

Уже является фактом, что некоторые типовые конфигурации фирмы 1С архитектурно изначально ориентированы на интенсивное использование встроенного варианта SQL в качестве основного средства как получения, так и обработки данных, например, Зарплата и управление персоналом. В то же время, сама платформа предоставляет не очень много средств разработки. Позвольте представить разработку, могущую увеличить эффективность работы в несколько раз.

Скачать файлы

Наименование Файл Версия Размер
Демонстрационная база (dt).
.dt 134,73Kb
142
.dt 134,73Kb 142 Скачать

Конструктор запросов, консоль запросов - замечательные средства. Но они "статические", офф-лайновые. Суть идеи состоит в возможности вызова консоли запросов в режиме исполнения. Неприметные, на первый взгляд, бонусы, состоят в следующем:

  • в отлаживаемом запросе уже выставлены все, порой многочисленные, параметры, причем именно так, как это делает реальный код. Исключаются досадные ошибки установки параметров при офф-лайновой отладке;
  • часто SQL-запрос генерируется динамически. В режиме исполнения обработка предоставляет именно исполняемый запрос, не прибегая к остановке в точке создания текста запроса;
  • в некоторых случаях, например, в транзакции поведения, сами данные в базе существуют только в этой транзакции, например, временно записанные наборы записей регистров расчета. Естественно, ситуация может быть смоделирована в офф-лайне, но это лишние затраты времени;
  • громоздкие пакеты автоматически разлагаются на отдельные запросы, удобно располагаясь в дереве консоли, под каждым генерируются запросы на выборку из временных таблиц и их уничтожение, так что можно быстро найти проблему, просто смотря на получаемые промежуточные данные и играть этими данными.
  • незначительная модификация кода типовых конфигураций позволяет наблюдать работу громоздких запросов непосредственно при обнаружении проблемных ситуаций. Так, я знаю, что в 36 релизе УПП в 2-НДФЛ косо работал запрос по вычетам из-за неправильного отбора по обособленному подразделению (в 37 исправили); я знаю, что расчет НДФЛ до сих пор косит в отношении обособленных подразделений, в частности, может проставлять подразделения "чужой" организации; я знаю, что в 4-ФСС нового образца игнорируется настройка обложения ФСС НС и ПЗ. И множество подобных ситуаций.
  • сохранненный в конфигурации отладочный код не мешает обычной работе пользователя, но позволяет быстро выяснить причины обнаруженной им проблемы.

Реализация идеи состоит в подмене объекта Запрос обработкой ПСГ_ОберткаЗапроса, имеющей сходные свойства и методы (увы, кроме метода Выполнить()). В обычном режиме эта обработка исполняет запрос как обычно, но в определенном режиме выводит запросы в консоль запросов.

К сожалению, для использования такого механизма в типовых конфигурациях в настоящее время приходится модифицировать код в части создания объекта "Запрос" и в местах вызова метода "Выполнить()", подменяя объект "Запрос" обработкой-оберткой. Остается мечтой маленькая платформенная модификация объекта "Обработка" - добавление метода "Выполнить()" (вот беда, именно его нельзя добавить просто так из-за наличия одноименной функции языка) и генерация этим методом события "ПриВыполнении", которые позволили бы избежать модификаций кода в местах вызова исполнения запросов. Впрочем, если уж смотреть глобально, можно изменить поведение самого объекта "Запрос", добавить в него генерацию событий "ПриВыполнении", "ПриУстановкеТекста", "ПриУстановкеПараметра" соответствущими подписками. Или же реализовать возможность отладки запросов в самом этом объекте Запрос.

Альтернативно, вероятно, можно было бы написать com-компоненту, имеющую-таки метод "Выполнить()" и способной генерировать нужные синхронные события.

Состав объектов для работы с запросами описан подсистемой ПСГ_РаботаСЗапросами.

Активация режима отладки производится обработкой "Управление спецрежимами". Фактически, она управляет содержимым строкового параметра сеанса "ПСГ_Параметры". Обертка запроса при выполнении проверяет это параметр на наличие подстроки, сигнализирующей о необходимости отладки (по умолчанию "/debug").
При наличии параметра "/ДиспетчерЗапросов" открывается собственная форма обертки запросов, полезная возможностью выводить занные в таблицы и сводные таблицы.

В демонстрационной базе решается модельная задача: найти периоды постоянства надбавки по штатному расписанию для всех работников.
Для этого включена обработка "Пример использования обертки запроса".

 

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122180    670    389    

714

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7298    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3545    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177760    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99349    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18118    6    8    

40

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28111    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. cleaner_it 220 01.08.11 05:21 Сейчас в теме
(0) Договаривайся с Орефковым тут, чтобы он в Снегопат вставил возможность переопределения объектов "Запрос" твоей оберткой в рантайм-режиме. А в чем именно сложность реализации метода "Выполнить()"?
2. irreal 32 01.08.11 08:57 Сейчас в теме
Спасибо за контакты!
Добавить метод Выполнить к обработке невозможно, т.к. существует функция языка Выполнить(Код1С).
3. German 413 01.08.11 10:20 Сейчас в теме
Суть идеи состоит в возможности вызова консоли запросов в режиме исполнения

А вот тут промашка почти все консоли имеют возможность отладки
В отладчике
ВнешниеОбработки.Создать("C:\Program Files\Enterprise Integrator\EI.epf").Отладка(Запрос)

подробности тут
RustIG; ldma1979; +2 Ответить
7. DrAku1a 1679 02.11.13 03:18 Сейчас в теме
(3отладчике запросов реализован аналогичный вызов из конфигуратора (Функция "Открыть из отладчика") + обертка в режиме предприятия, т.е. у меня отладчик закинут в справочник "Внешние обработки", я его открываю - обработка сохраняется в кэш. Тогда вызываю в форме Файл -> Открыть из отладчика.

Внизу появляется код, который нужно выполнить в Shift-F9 уже в отладчике. Этого вполне хватает.

Для пакетного запроса, разбитого на отдельные куски с несколькими Запрос.Выполнить() - там же "Файл -> Загрузить пакет запросов" (в описании нету, но вроде работает... на практике такой изврат редко встречаю).
4. irreal 32 01.08.11 11:11 Сейчас в теме
German пишет:
почти все консоли имеют возможность отладки
1. Типовые - не имеют, хотя пристраивается легко. О данной разработке не знал, спасибо.
2. Есть такое отличие. ПСГ_ОберткаЗапроса, по сути, таблица запросов, накапливающая их по мере вызова метода _Выполнить(). В случае, когда постороение системы временных таблиц производится несколькими запросами, обработка предоставит все. Отладка() в Вашей разработке придется вызывать несколько раз, попутно матерясь, что уже не помнится, что там было в таблице "ВТБаза". Раньше я пользовался похожим методом, приклеенным к консоли запросов из данной демо-базы:

// Процедура вызывает КонсольЗапросов (ex) в рантайме для передаваемого
// ей объекта Запрос, ПостроительЗапроса, ПостроительОтчета или СхемаКомпоновки
// Используется для отладки и декомпозиции сложных запросов
// В отсутствие ПараметрыСеанса.Отладка безвредна и может оставляться в коде.
// После отладки изменяет переданный текст запроса
Функция   ОтладкаЗапроса(Запрос,Параметр="/debug",Комментарий="",ДеревоЗапросов=неопределено) Экспорт
	#Если Клиент Тогда
		Если Отладить(Запрос,Параметр) Тогда
			Если ТипЗнч(Запрос) = Тип("Запрос") Тогда	
				Форма = Обработки.КонсольЗапросов.ПолучитьФорму("Форма");
				Форма.ЗагрузитьЗапрос(Запрос,Комментарий,ДеревоЗапросов);
			ИначеЕсли ТипЗнч(Запрос) = Тип("ПостроительОтчета") Тогда		
				
				Запрос1 = Запрос.ПолучитьЗапрос();
				ОтладитьЗапрос(Запрос1,Комментарий);
				
			ИначеЕсли ТипЗнч(Запрос) = Тип("МакетКомпоновкиДанных") Тогда	
				Запрос1 = Новый Запрос();
				Для каждого Парам из Запрос.ЗначенияПараметров Цикл
					Запрос1.УстановитьПараметр(Парам.Имя,Парам.Значение);
				КонецЦикла;	
				Для каждого Набор из Запрос.НаборыДанных Цикл
					Если ТипЗнч(Набор) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
						Запрос1.Текст = Набор.Запрос;
						ОтладитьЗапрос(Запрос1,Комментарий+"; "+Набор.Имя);
					ИначеЕсли ТипЗнч(Набор) = Тип("НаборДанныхОбъединениеМакетаКомпоновкиДанных") Тогда
						Для каждого Элемент из Набор.Элементы Цикл
							Запрос1.Текст = Элемент.Запрос;
							ОтладитьЗапрос(Запрос1,Комментарий);
						КонецЦикла;	
					КонецЕсли;	
				КонецЦикла;	
			КонецЕсли;	
			Возврат Истина;
		КонецЕсли;
	#Иначе	
	#КонецЕсли
	Возврат Ложь;
КонецФункции

// используется процедурой ОтладкаЗапроса
Процедура ОтладитьЗапрос(Запрос,Комментарий="") 
	#Если Клиент Тогда
		Если ТипЗнч(Запрос) = Тип("Запрос") Тогда	
			Форма = Обработки.КонсольЗапросов.ПолучитьФорму("Форма");
			Форма.ЗагрузитьЗапрос(Запрос,Комментарий);
		ИначеЕсли ТипЗнч(Запрос) = Тип("ПостроительОтчета") Тогда		
			Запрос1 = Новый Запрос(Запрос.Текст);
			Для каждого Парам из Запрос.Параметры Цикл
				Запрос1.УстановитьПараметр(Парам.Ключ,Парам.Значение);
			КонецЦикла;	
			ОтладитьЗапрос(Запрос1,Комментарий);
		КонецЕсли;	
	#КонецЕсли
КонецПроцедуры	
Показать
5. German 413 01.08.11 11:32 Сейчас в теме
irreal пишет:
попутно матерясь, что уже не помнится, что там было в таблице "ВТБаза"


В Ei МенеджерВременныхТаблиц тоже передается из отлаживаемого запроса
поэтому всегда можно сделать
ВЫБРАТЬ * ИЗ ВТБаза
6. irreal 32 01.08.11 11:36 Сейчас в теме
German пишет:
В Ei МенеджерВременныхТаблиц тоже передается из отлаживаемого запроса
ясно, да это решает проблему. ну только запроса на созданеи ВТБаза уже не видно..., ну это мелочи.
8. irreal 32 04.11.13 21:35 Сейчас в теме
Вообще говоря, мне хотелось, что бы отладка запросов была доступна без конфигуратора и поиска места точки останова. Ведь язык SQL столь свойственен платформе, почему бы его не вывести в удобный вид. Моя система не требует конфигуратора и может быть активизирована прямо на проблемном пользователе. Конечно, остается негасимое желание, чтобы это поддерживала сама платформа, это просто ее обязанность...
Оставьте свое сообщение