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

25.09.11

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

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

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

Наименование Файл Версия Размер
Консоль отчетов 8.1
.erf 53,05Kb
23
.erf 53,05Kb 23 Скачать

Долго пользовался предложенным методом //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 с диска ИТС. В консоль добавлен функционал вывода временных таблиц для СКД.
Существующие ограничения: показ временных таблиц возможен только для первого набора данных типа "Запрос".

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122249    673    389    

715

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5751    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2006    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6296    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

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

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1746    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5392    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16195    skovpin_sa    14    

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

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

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


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

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