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

13.09.24

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Модификатор пакета запросов: УНИЧТОЖИТЬ
.rar 36,04Kb ver:0.1
1
1 Скачать (1 SM) Купить за 1 850 руб.

 

ПРЕАМБУЛА

Как-то раз, в одной компании мирового уровня (но без мирового имени), в отделе разработки учетных решений 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 - папка с исходниками.

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

См. также

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

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

12000 руб.

02.09.2020    170049    940    403    

906

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

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

8400 руб.

20.08.2024    13106    100    46    

104

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

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

9360 руб.

17.05.2024    26758    90    48    

134

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

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

22200 руб.

06.10.2023    16948    41    15    

75

SALE! %

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

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

4800 3840 руб.

14.01.2013    190728    1151    0    

918

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

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

15000 руб.

10.11.2023    11461    40    27    

66

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

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

3600 руб.

27.12.2024    935    2    0    

5

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

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

5000 руб.

07.02.2018    104001    244    100    

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