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

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С.

15500 руб.

02.09.2020    187300    1044    403    

977

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

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

8400 руб.

20.08.2024    26339    171    88    

166

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

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

22200 руб.

06.10.2023    20977    55    19    

86

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

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

15000 руб.

10.11.2023    14083    60    33    

79

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

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

9360 руб.

17.05.2024    31157    107    48    

149

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

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19327    8    32    

43

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

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

5000 руб.

07.02.2018    105202    247    100    

312
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 1759 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 Сейчас в теме
А где-то задокумментирована целесообразность уничтожения ВТ? Почему в Жк написано "временные таблицы будут существовать до окончания исполнения всего пакета запроса ". Я думал, они сами сносятся.
Оставьте свое сообщение