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

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

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

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

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

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

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

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

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

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

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *