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

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    171362    959    403    

923

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

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

8400 руб.

20.08.2024    13882    107    46    

107

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

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

22200 руб.

06.10.2023    17183    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

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

9360 руб.

17.05.2024    27152    94    48    

137

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

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

15000 руб.

10.11.2023    11839    44    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191063    1152    0    

919

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

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

3600 руб.

27.12.2024    1080    2    0    

5

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

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

5000 руб.

07.02.2018    104088    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 столь свойственен платформе, почему бы его не вывести в удобный вид. Моя система не требует конфигуратора и может быть активизирована прямо на проблемном пользователе. Конечно, остается негасимое желание, чтобы это поддерживала сама платформа, это просто ее обязанность...
Оставьте свое сообщение