Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проследить на каком этапе запрос в текущий момент
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
SanSay
Возможно ли как-нибудь отследить на каком этапе выполнения в текущий момент выполнение запроса?

например в цикле можно так:
Для НомерСтроки = 0 По ТЗАЦК.Количество() - 1 Цикл
        Состояние("Чтобы прервать обработку данных нажмите Ctrl+Break");
        Прогресс.Значение = Прогресс.Значение + 1;
        ОбработкаПрерыванияПользователя();
...


чтонибудь подобное можно сделать с запросом:
Запрос.Текст = "    
        |ВЫБРАТЬ
        |    *
        |ИЗ
        |    ВременнаяТаблица как ВременнаяТаблица
        |ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
        |    ВременнаяТаблица3 как ВременнаяТаблица3
        |ПО
        |    ВЫРАЗИТЬ(ВременнаяТаблица.Данные КАК Строка(1000)) = ВЫРАЗИТЬ(ВременнаяТаблица3.Код КАК Строка(1000))";
        Результат = Запрос.Выполнить().Выбрать();
pablo
Прервать выполнение 1 подзапроса - никак. Если в запросе много подзапросов, тогда можно их выполнять по очереди через МВТ и между выполнением подзапросов - прерывать.

Ваш запрос тормозит из-за сравнения строк. Нужно от него как-то избавляться.
Fynjy
Цитата(pablo @ 19.12.13, 13:10) необходимо зарегистрироваться для просмотра ссылки
Прервать выполнение 1 подзапроса - никак. Если в запросе много подзапросов, тогда можно их выполнять по очереди через МВТ и между выполнением подзапросов - прерывать.

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

Строки это примитивный тип - скорость выше чем у сравнения ссылочных данных. А вот приведение в запросе таки да это тормоз.
SanSay
Цитата(pablo @ 19.12.13, 15:10) необходимо зарегистрироваться для просмотра ссылки
Ваш запрос тормозит из-за сравнения строк. Нужно от него как-то избавляться.

эт как например?... суть запроса именно в том, чтобы к данным из "ВременнаяТаблица" добавить столбцы из "ВременнаяТаблица2"
т.е. в "ВременнаяТаблица" всего 100 позиций, а "ВременнаяТаблица2" 2000 позиций и нужно объединить только пересекающиеся 100 позиций.


кстати, я чет в шоке... я думал, что запросы работают быстрее, а тут:
обрабатывал 2 таблицы в первой 1000 позиций, во второй 4300

если запросом который выше указан, то 16 секунд, а если вот этим циклом:
Прогресс.МаксимальноеЗначение = ТЗДанныеДляПоиска.Количество();
        Для НомерСтроки = 0 По ТЗДанныеДляПоиска.Количество() - 1 Цикл
            Прогресс.Значение = Прогресс.Значение + 1;
            ОбработкаПрерыванияПользователя();
            ТекущаяСтрока = ТЗДанныеДляПоиска[НомерСтроки];
            Для НомерСтроки2 = 0 По ТЗПрайс.Количество() - 1 Цикл
                ТекущаяСтрока2 = ТЗПрайс[НомерСтроки2];
                Если ТекущаяСтрока.Данные = ТекущаяСтрока2.Код Тогда
                    НоваяСтрока = ТЗДанныеДляПоискаИтого.Добавить();
                    НоваяСтрока.Данные = ТекущаяСтрока.Данные;
                    НоваяСтрока.Код = ТекущаяСтрока2.Код;
                    НоваяСтрока.Наименование = ТекущаяСтрока2.Наименование;
                    НоваяСтрока.БазоваяЦена = ТекущаяСтрока2.БазоваяЦена;
                    НоваяСтрока.ЦенаПродажи = ТекущаяСтрока2.ЦенаПродажи;
                    НоваяСтрока.Остаток = ТекущаяСтрока2.Остаток;
                    НоваяСтрока.Категория = ТекущаяСтрока2.Категория;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;


то........ 8!!!
жесть, ну и нафига тогда в моем случае запрос... может проще циклом тогда?
Ardi
для ускорения сравнения добавьте индекс в запросе.
галлчка индекс доступна в пакетах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.