Анализ сложных запросов с временными таблицами-2. Не такой мудреный.

25.09.11

Разработка - Запросы

Навеяно публикацией "Анализ сложных запросов с временными таблицами".

Скачать файл

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

Наименование По подписке [?] Купить один файл
Консоль отчетов 8.1
.erf 53,05Kb
23
23 Скачать (1 SM) Купить за 1 850 руб.

Долго пользовался предложенным методом //infostart.ru/public/90130/ . Как-то не догадывался опубликовать Smile. Потом увидел запросник, идея понравилась, но не совсем понравился способ просмотра временных таблиц. Да и используется там консоль запросов, а я пользуюсь консолью отчетов. Я понимаю, что способов просмотра временных таблиц реализовано великое множество, но все же осмелюсь предложить велосипед свою доработку стандартной консоли отчетов для просмотра временных таблиц.

Код для вывода временных таблиц приведен ниже:

 

// формирует список временных таблиц из текста запроса
//
// Параметры
//
// Возвращаемое значение:
//   <Массив>   - массив наименований временных таблиц
//
Функция ПолучитьМассивНаименованийВременныхТаблиц() Экспорт

    МассивНаименований = Новый Массив;
    ТекстЗапроса = ПостроительОтчетов.Текст;// преобразуем к стандартному тексту запроса с форматированием
    Конструктор = Новый КонструкторЗапроса(ТекстЗапроса);
    ТекстЗапроса = Конструктор.Текст;

    Шаблон = "Поместить\s+[A-z0-9_А-я]+"; //Поместить + любое количество пробелов (TAB, CR,LF FF)+ следующее слово
    RegExp = Новый COMОбъект("VBScript.RegExp"); // создаем объект для работы  с регулярными выражениями
    RegExp.MultiLine = Истина;    // истина — текст многострочный, ложь — одна строка
    RegExp.Global = Истина;     // истина — поиск по всей строке, ложь — до первого совпадения
    RegExp.IgnoreCase = Истина; // истина — игнорировать регистр строки при поиске
    RegExp.Pattern = Шаблон;
    Если НЕ RegExp.Test(ТекстЗапроса) Тогда Возврат МассивНаименований КонецЕсли;
    МассивСтрок = RegExp.Execute(ТекстЗапроса);
    Для каждого Элемент  Из МассивСтрок Цикл
        МассивНаименований.Добавить(СокрЛП(СтрЗаменить(Элемент.Value, "ПОМЕСТИТЬ", "")));
    КонецЦикла;

    Возврат МассивНаименований;

КонецФункции // ПолучитьСписокВременныхТаблиц()

// формирование структуры временных таблицы
//
// Параметры
//
// Возвращаемое значение:
//   <Структура>   - структура, содержащая временные таблицы
//
Функция ПолучитьВременныеТаблицы() Экспорт

    СтруктураВременныхТаблиц = Новый Структура;
    МассивНаименований = ПолучитьМассивНаименованийВременныхТаблиц();
    Запрос = ПостроительОтчетов.ПолучитьЗапрос();
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.ВыполнитьПакет();
    ВременныйЗапрос = Новый Запрос();
    ВременныйЗапрос.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
    Для каждого Элемент Из МассивНаименований Цикл
        ВременныйЗапрос.Текст = "Выбрать * ИЗ " + Элемент;
        ТаблицаЗапроса = ВременныйЗапрос.Выполнить().Выгрузить();
        СтруктураВременныхТаблиц.Вставить(Элемент, ТаблицаЗапроса);
    КонецЦикла;
    Возврат СтруктураВременныхТаблиц;

КонецФункции // ПолучитьВременныеТаблицы()

// формирование элементов формы для вывода таблицы
//
// Параметры
//
Процедура СоздатьСтраницуДляВыводаВременнойТаблицы(ЭлементСтруктуры)

    Наименование = ЭлементСтруктуры.Ключ;
    ТаблицаЗапроса = ЭлементСтруктуры.Значение;
    Страница = ЭлементыФормы.ПанельВременныхТаблиц.Страницы.Добавить();
    Страница.Имя = Наименование;
    Страница.Заголовок = Наименование;
    ЭлементыФормы.ПанельВременныхТаблиц.ТекущаяСтраница = Страница;
    ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), Наименование, ,ЭлементыФормы.ПанельВременныхТаблиц);
    ТабличноеПоле.Верх = 0;
    ТабличноеПоле.Лево = 0;
    ТабличноеПоле.Ширина = ЭлементыФормы.ПанельВременныхТаблиц.Ширина - 2;
    ТабличноеПоле.Высота = ЭлементыФормы.ПанельВременныхТаблиц.Высота - 20;
    ТабличноеПоле.ТолькоПросмотр = Истина;

    ТабличноеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Низ,
            ЭлементыФормы.ПанельВременныхТаблиц, ГраницаЭлементаУправления.Низ);
    ТабличноеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Право,
            ЭлементыФормы.ПанельВременныхТаблиц, ГраницаЭлементаУправления.Право);

    ТабличноеПоле.Значение = ТаблицаЗапроса;
    ТабличноеПоле.СоздатьКолонки();

КонецПроцедуры // СоздатьСтраницуДляВыводаВременнойТаблицы()

// обработчик нажатия кнопки "Временные таблицы"
//
Процедура КоманднаяПанельФормыВременныеТаблицы(Кнопка)

    ЭлементыФормы.ПанельВременныхТаблиц.Страницы.Очистить();
    СтруктураВременныхТаблиц = ПолучитьВременныеТаблицы();
    Для каждого Значение Из СтруктураВременныхТаблиц Цикл
        СоздатьСтраницуДляВыводаВременнойТаблицы(Значение);
    КонецЦикла;
    ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница = ЭлементыФормы.ПанельРезультатов.Страницы.ВременныеТаблицы;
    ЭлементыФормы.ПанельВременныхТаблиц.Страницы.Удалить(0);// первая страница не нужна.

КонецПроцедуры

 

И не забыть добавить на форму страницу ПанельВременныхТаблиц, кнопку и повесить на нее обработчик.

Изменение от 25.09.2011
Добавлен файл с измененной обработкой "Консоль отчетов" для 8.1 с диска ИТС. В консоль добавлен функционал вывода временных таблиц для СКД.
Существующие ограничения: показ временных таблиц возможен только для первого набора данных типа "Запрос".

См. также

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

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

12000 руб.

02.09.2020    169303    937    403    

905

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    11395    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    6339    XilDen    36    

83

Запросы Программист Запросы Бесплатно (free)

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

16.08.2024    9071    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

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

08.07.2024    2727    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    10220    implecs_team    6    

48

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3625    andrey_sag    10    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. ediks 337 21.09.11 15:54 Сейчас в теме
Навеяно публикацией "Анализ сложных запросов с временными таблицами".

Перейти к публикации

1. powerpc 225 21.09.11 15:54 Сейчас в теме
Вставил в стандартную Консоль Отчетов с диска ИТС. При записи в Конфигураторе ругается:


{Форма.Форма.Форма(1395,17)}: Переменная не определена (ПостроительОтчетов)
ТекстЗапроса = <<?>>ПостроительОтчетов.Текст; (Проверка: Толстый клиент (обычное приложение))
{Форма.Форма.Форма(1427,11)}: Переменная не определена (ПостроительОтчетов)
Запрос = <<?>>ПостроительОтчетов.ПолучитьЗапрос(); (Проверка: Толстый клиент (обычное приложение))

Подскажите в чем дело ?
2. ediks 337 22.09.11 08:10 Сейчас в теме
Сейчас посмотрел - действительно на ИТС сейчас другая обработка "Консоль отчетов". У меня скорее всего используется обработка, которая была еще в 8.0. Собственно, это показано на картинке.
3. powerpc 225 22.09.11 09:45 Сейчас в теме
А можно как-то адаптировать под 8.2 ? Очень нужно, так как удобная вещь
4. powerpc 225 26.09.11 09:45 Сейчас в теме
После обновления под 8.1 скачал. Сконвертировал под 8.2. Так классно работает, слов нет. Молодец. Классно сделал. Жаль нельзя еще плюсиков поставить. Спасибо тебе большое, ediks.
5. DrAku1a 1748 17.05.12 05:45 Сейчас в теме
Все это уже давно сделал и автор Запросника, и я в своей обработке "Выполнение и отладка запроса" (на вкладке "Результат" есть кнопка "Временные таблицы").
Способ использован именно такой как в Вашей публикации, за исключением того, что я не пользовался RegExp, т.к. не силен в регулярных выражениях (но чувствую необходимость исправить этот недочет).
6. ediks 337 17.05.12 07:40 Сейчас в теме
(5) Больше консолей хороших и разных!!! :).
Ну, а если по существу, то я вообще не собирался выкладывать никакие консоли. Эта публикация была задумывалась как статья к статье. Просто человек хороший попросил переделать родную консоль с ИТС. Собственно, это видно из комментариев.
Оставьте свое сообщение