Анализ сложных запросов с временными таблицами-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С.

15500 руб.

02.09.2020    194755    1073    405    

999

Инструментарий разработчика Запросы Программист 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    3109    70    zup_dev    14    

56

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

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    2743    9    XilDen    12    

23

Обновление 1С Запросы Программист 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    2645    22    XilDen    26    

36

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    6746    artemusII    11    

24

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

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

18.10.2024    14675    sergey279    18    

68

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

11.10.2024    9356    XilDen    38    

101

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

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3835    PROSTO-1C    0    

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

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

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


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

Подскажите в чем дело ?
2. ediks 338 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 1764 17.05.12 05:45 Сейчас в теме
Все это уже давно сделал и автор Запросника, и я в своей обработке "Выполнение и отладка запроса" (на вкладке "Результат" есть кнопка "Временные таблицы").
Способ использован именно такой как в Вашей публикации, за исключением того, что я не пользовался RegExp, т.к. не силен в регулярных выражениях (но чувствую необходимость исправить этот недочет).
6. ediks 338 17.05.12 07:40 Сейчас в теме
(5) Больше консолей хороших и разных!!! :).
Ну, а если по существу, то я вообще не собирался выкладывать никакие консоли. Эта публикация была задумывалась как статья к статье. Просто человек хороший попросил переделать родную консоль с ИТС. Собственно, это видно из комментариев.
Оставьте свое сообщение