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

31.07.11

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Демонстрационная база (dt).
.dt 134,73Kb
142
142 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

 

См. также

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

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

12000 руб.

02.09.2020    170913    956    403    

913

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13680    105    46    

107

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27064    93    48    

136

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

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

22200 руб.

06.10.2023    17131    42    15    

75

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

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

15000 руб.

10.11.2023    11761    43    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    190976    1152    0    

919

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1041    2    0    

5

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

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

5000 руб.

07.02.2018    104054    244    100    

307
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cleaner_it 209 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 1748 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 столь свойственен платформе, почему бы его не вывести в удобный вид. Моя система не требует конфигуратора и может быть активизирована прямо на проблемном пользователе. Конечно, остается негасимое желание, чтобы это поддерживала сама платформа, это просто ее обязанность...
Оставьте свое сообщение