Модификатор пакета запросов: УНИЧТОЖИТЬ

31.07.17

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

Уникальный инструментарий, который (вероятно) никогда вам не понадобится.

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

Наименование Файл Версия Размер
Модификатор пакета запросов: УНИЧТОЖИТЬ
.rar 36,04Kb
1
.rar 0.1 36,04Kb 1 Скачать

ПРЕАМБУЛА

Как-то раз, в одной компании мирового уровня (но без мирового имени), в отделе разработки учетных решений 1С, возникла крайне острая необходимость и потребность в модификации всех существующих запросов конфигурации УПП 1.2 (переписанная вдоль и поперёк так, что аж имеет своё уникальное и гордое имя - «Корпоративная Система Управления»). Суть модификации заключалась в следующем - в пакетах запросов, в явном виде, необходимо уничтожать все временные таблицы. Таблицы должны уничтожаться по мере их использования в пакете. Если временная таблица не используется ни в одном из следующих (по порядку) запросов пакета, то такая временная таблица должна быть удалена после текущего запроса (отдельным запросом «УНИЧТОЖИТ»).

По легенде, это должно обеспечить более эффективную и своевременную очистку неиспользуемых таблиц на сервере СУБД и повлиять на общую эффективность работы системы при большом количестве одновременно «функционирующих» пользователей.

Пример (реальный запрос из БП 2.0.63.4): 

Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Проводки.СчетДт КАК СчетДт,
		|	Проводки.СчетКт КАК СчетКт
		|ПОМЕСТИТЬ ТаблицаСчетовДтКт
		|ИЗ
		|	&Проводки КАК Проводки
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ТаблицаСчетовДтКт.СчетДт КАК Счет
		|ПОМЕСТИТЬ ТаблицаСчетов
		|ИЗ
		|	ТаблицаСчетовДтКт КАК ТаблицаСчетовДтКт
		|
		|ОБЪЕДИНИТЬ
		|
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ТаблицаСчетовДтКт.СчетКт
		|ИЗ
		|	ТаблицаСчетовДтКт КАК ТаблицаСчетовДтКт
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Счет
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	Хозрасчетный.Ссылка
		|ИЗ
		|	ПланСчетов.Хозрасчетный КАК Хозрасчетный
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСчетов КАК ТаблицаСчетов
		|		ПО Хозрасчетный.Ссылка = ТаблицаСчетов.Счет
		|ГДЕ
		|	Хозрасчетный.Валютный"
;

должен быть преобразован в:

Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Проводки.СчетДт КАК СчетДт,
		|	Проводки.СчетКт КАК СчетКт
		|ПОМЕСТИТЬ ТаблицаСчетовДтКт
		|ИЗ
		|	&Проводки КАК Проводки
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ТаблицаСчетовДтКт.СчетДт КАК Счет
		|ПОМЕСТИТЬ ТаблицаСчетов
		|ИЗ
		|	ТаблицаСчетовДтКт КАК ТаблицаСчетовДтКт
		|
		|ОБЪЕДИНИТЬ
		|
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ТаблицаСчетовДтКт.СчетКт
		|ИЗ
		|	ТаблицаСчетовДтКт КАК ТаблицаСчетовДтКт
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Счет
		|;
		//{ добавлено
		|УНИЧТОЖИТЬ ТаблицаСчетовДтКт;
		//} добавлено
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	Хозрасчетный.Ссылка
		|ИЗ
		|	ПланСчетов.Хозрасчетный КАК Хозрасчетный
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСчетов КАК ТаблицаСчетов
		|		ПО Хозрасчетный.Ссылка = ТаблицаСчетов.Счет
		|ГДЕ
		|	Хозрасчетный.Валютный
		//{ добавлено
		|;
		|УНИЧТОЖИТЬ ТаблицаСчетов;
		//} добавлено
		|"
;

Из примера видно, что пакет состоит из трех последовательных запросов. В запросе №1 формируется временная таблица «ТаблицаСчетовДтКт», которая в последствии используется в запросе №2. В запросе №3 временная таблица «ТаблицаСчетовДтКт» уже не используется, поэтому она может быть удалена после запроса №2. В запросе №2, так-же, создаётся временная таблица «ТаблицаСчетов», которая используется в запросе №3. Т.к. запрос №3 - это последний запрос, то после его выполнения удаляются все выжившие оставшиеся временные таблицы.

Выглядит довольно просто, на первый взгляд. И казалось бы, проделывать подобное довольно легко. Но... это лишь поверхностное впечатление. Когда дело доходит до реальных действий, оказывается (внезапно(!)), что в системе очень много пакетов запросов, которые не ограничиваются 2-3-4 временными таблицами. Встречаются даже монструозные пакеты по 40+ временных таблиц. Дополнительно, анализ отягощается повсеместным наличием вложенных запросов. Всё это может свести с ума, если проделывать подобный анализ в ручную, в старом добром Notepad++ по нескольку десятков раз за сеанс (много запросов). Поэтому, было принято правильное решение создать некий инструментарий, который делал бы подобный анализ самостоятельно, но под чутким руководством разработчика.

JAVA JIVE

Для информатиков-экономистов, математиков-экономистов и менеджеров-маркетологов, попавших в сферу IT через постель доскональное освоение мощнейших возможностей конфигуратора 1С, иногда бывает затруднительно решать проблемы, которые выходят за рамки их уютной среды обитания. Поэтому, перед началом реализации поставленной задачи нужно было ознакомиться с документацией по языку Java, что в итоге оказалось очень увлекательным занятием.

После нескольких бессонных ночей за книгами Эккеля, на выходе получилась следующая реализация:

  • Комментарий - строка текста, которой будут окаймлены все созданные запросы на удаление временных таблиц в итоговом пакете запросов;
  • Удалить старые комментарии - признак удаления всех комментариев из исходного пакета запросов перед его обработкой (для пущей надёжности обработки запросов, которые испещрены различными «хитрыми» комментариями). Чем-то похоже на то, как это делает стандартный конструктор запросов 1С, когда вы открываете им запросы с вашими комментариями;
  • Исходный запрос - пакет запросов 1С, в который необходимо добавить запросы на уничтожение временных таблиц;
  • Итоговый запрос - модифицированный пакет запросов, который содержит в «правильных» местах все необходимые дополнительные запросы на уничтожение временных таблиц;
  • Очистить - кнопка очистки полей «Исходный запрос» и «Итоговый запрос»;
  • Сформировать - запуск процесса обработки исходного пакета запросов.

КАК ЭТО ИСПОЛЬЗОВАТЬ

Для того, чтобы модифицировать исходный пакет запросов, необходимо:

  1.  Скопировать пакет запросов «от кавычки до кавычки» (если пакет копируется из какого-либо модуля исходного кода)  
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    		|	Проводки.СчетДт КАК СчетДт,
    		|	Проводки.СчетКт КАК СчетКт
    		|ПОМЕСТИТЬ ТаблицаСчетовДтКт
    
    ...
    
    		|ГДЕ
    		|	Хозрасчетный.Валютный"
    

    или скопировать ВЕСЬ пакет запросов (если пакет копируется из макета схемы компоновки данных)

    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    	ПервоначальныеСведенияНМАБухгалтерскийУчетСрезПоследних.НематериальныйАктив КАК НематериальныйАктив,
    	ПервоначальныеСведенияНМАБухгалтерскийУчетСрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизацииБУ,
    	ПервоначальныеСведенияНМАБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования КАК СрокПолезногоИспользованияБУ
    ПОМЕСТИТЬ ПервоначальныеСведенияНМАБУ
    
    ...
    
    {ГДЕ
    	НематериальныеАктивы.Ссылка КАК СвязанноеПолеСсылка_НМА,
    	ПервоначальныеСведенияНМАБУ.СпособНачисленияАмортизацииБУ КАК СвязанноеПолеСпособНачисленияАмортизацииБУ_НМА,
    	ПервоначальныеСведенияНМАБУ.СрокПолезногоИспользованияБУ КАК СвязанноеПолеСрокПолезногоИспользованияБУ_НМА,
    	ПервоначальныеСведенияНМАНУ.СрокПолезногоИспользованияНУ КАК СвязанноеПолеСрокПолезногоИспользованияНУ_НМА}

  2. Поместить скопированный текст в поле «Исходный запрос»;
  3. Установить необходимый комментарий (в некоторых «мировых» конторах формат комментариев регламентирован);
  4. Нажать кнопку «Сформировать»;
  5. Скопировать полученный запрос из поля «Итоговый запрос» и поместить полученное содержимое «в конфигуратор» (там уже все необхоимое выделено, нужно только нежно нажать сочетание клавиш «Ctrl+V»).

В итоге, связи между временными таблицами и запросами пакета, а также добавление запросов на уничтожение временных таблиц в «правильные» места, берёт на себя данный инструментарий. Нам же остаётся умело орудовать двумя известными сочетаниями клавиш  «Ctrl+С» и «Ctrl+V» на тех запросах, которые мы пожелаем модифицировать.

ДЛЯ ЗАО «1С»

Если вдруг на эту публикацию, набредёт кто-нибудь из великой и ужасной цитадели 1С, тот кто может влиять на функциональность и возможности инструментария для разработчика 1С, то для него у меня есть специальное сообщение:

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

Примерный вид формы конструктора запросов мог бы выглядеть в этом случае как-то так:

На изображении видно, что для последнего запроса из пакета (1) появился признак «Уничтожить все временные таблицы» (2). Признак становится активным, когда установлен переключатель «Уничтожение временной таблицы». Если признак «Уничтожить все временные таблицы» установлен, то при нажатии кнопки «ОК» мы получаем, на выходе, итоговый пакет запросов со всеми дополнительными инструкциями на уничтожение временных таблиц в «правильных» местах, по аналогии с тем, как это реализовано в даннолй публикации.

Прилагаемый архив делится на 2 части:

  1. QueryModifier.jar - сама программа на Java;
  2. src - папка с исходниками.

УНИЧТОЖИТЬ пакет запросов конструктор запросов временные таблицы

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122268    673    389    

715

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7323    22    6    

39

SALE! 20%

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

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

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

10000 8000 руб.

10.11.2023    3567    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177771    1074    0    

849

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

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

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

5000 руб.

07.02.2018    99364    239    97    

296

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

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

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

3000 руб.

27.08.2019    18128    6    8    

40

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

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

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

2040 руб.

27.12.2017    28115    3    10    

15

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

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

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

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. script 128 31.07.17 02:41 Сейчас в теме
Дык, а где самое интересное?
Что с общей производительностью после модификации запросов?
TODD22; DrAku1a; klinval; charushkin; Ta_Da; Armando; корум; pbazeliuk; Bukaska; Hamsik; brr; Serj1C; +12 Ответить
5. 1ce.Architect 5 04.08.17 13:41 Сейчас в теме
(1) Технических замеров не производилось, потому что проект пока находится в состоянии "приостановлен", и в продакшн ничего не устанавливалось. Обязательно дополню публикацию, если появятся какие-то дополнительные данные по этому направлению.
2. DrAku1a 1679 03.08.17 04:45 Сейчас в теме
Загляните ко мне - есть "Отладчик запросов", "Визуальная структура запроса" - работает без ВК и JS, на чистом 1С.
Функции "Добавить удаление неиспользуемых временных таблиц" - нет, но можно реализовать (довольно легко).
Плюс - за саму идею!
3. 1ce.Architect 5 04.08.17 13:35 Сейчас в теме
(2) Спасибо!
Посмотрел ваш "отладчик запросов" - отличная работа! Для такой обработки эта функция придётся очень даже в "тему".
4. TODD22 18 04.08.17 13:40 Сейчас в теме
(3)Вы про результаты не расскажите? Что там с производительностью в итоге?
6. mip128 25.01.23 15:01 Сейчас в теме
А где-то задокумментирована целесообразность уничтожения ВТ? Почему в Жк написано "временные таблицы будут существовать до окончания исполнения всего пакета запроса ". Я думал, они сами сносятся.
Оставьте свое сообщение