Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Анализ сложных запросов с временными таблицами          
Vofka Подменю пользователя
сообщение 21.09.11, 18:26
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

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

Здесь формируем структуру временных таблиц

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

    МассивНаименований = Новый Массив;
    ТекстЗапроса = ПостроительОтчетов.Текст;
    // преобразуем к стандартному тексту запроса с форматированием
    Конструктор = Новый КонструкторЗапроса(ТекстЗапроса);
    ТекстЗапроса = Конструктор.Текст;
    
    Шаблон = "Поместить\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]);
    
КонецПроцедуры


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





[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: MATEVI,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 3:48
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!