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

31.07.11

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

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

15500 руб.

02.09.2020    225626    1224    415    

1071

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

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

14400 руб.

20.08.2024    47933    268    136    

243

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    22018    56    9    

60

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    29183    77    30    

104

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

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

16000 руб.

10.11.2023    20620    84    42    

95

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

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

9500 руб.

17.05.2024    41186    151    57    

190

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

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

6000 руб.

07.02.2018    109480    250    100    

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

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

подробности тут
RustIG; ldma1979; +2 Ответить
7. DrAku1a 1776 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 414 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 столь свойственен платформе, почему бы его не вывести в удобный вид. Моя система не требует конфигуратора и может быть активизирована прямо на проблемном пользователе. Конечно, остается негасимое желание, чтобы это поддерживала сама платформа, это просто ее обязанность...
Для отправки сообщения требуется регистрация/авторизация