Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Тормоза при обходе ТЗ (число прочтений - 5516 )
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Тормоза при обходе ТЗ
22. Января 2007 :: 11:21
Печать  
Всем доброго времени суток.

Суть проблемы. На форме списка справочника находится таблица значений, куда помещаются результаты поиска. Для поиска использую прямой запрос. Поиск выполняется быстро, но при обходе строк таблицы результатов наблюдаются тормоза. При заполнении таблицы результатов штатными средствами тормоза отсутствуют. В чем может быть проблема?

Вот кусок кода:
[code]
     БД = СоздатьОбъект("ODBCDatabase");
     БД.Соединение("DRIVER=Microsoft Visual FoxPro Driver;Deleted=No;Null=No;
     логИБ());
     Если БД.ЕстьСоединение() = 0 Тогда
           Сообщить("Не удалось получить соединение через DSN!", "!");
           Сообщить(БД.ПолучитьОписаниеОшибки());
           Возврат 0;
     КонецЕсли;
     
     Выборка = СоздатьОбъект("ODBCRecordset");
     Выборка.УстБД(БД);
     ТекстЗапроса = "
     |SELECT
     |      Спр.ID as [Товар $Справочник.Номенклатура],
     |      Спр.Code as [Код $Число],
     |      Спр.ParentID as [Родитель $Справочник.Номенклатура],
     |   Спр.IsFolder as [Гр]
     |FROM
     |      $Справочник.Номенклатура as Спр
     |WHERE
     |      LOWER(Спр.Descr) LIKE :ФильтрНаименование
     |"
     ;
     
     Если ПоГруппам = 1 Тогда
           ТекстЗапроса = ТекстЗапроса + "
           | AND Спр.IsFolder = 1";
     КонецЕсли;
     
     Выборка.УстановитьТекстовыйПараметр("ФильтрНаименование", "%"+СокрЛП(НРег(ИскомаяСтрока))+"%");
     тзВыб = СоздатьОбъект("ТаблицаЗначений");
     //Выборка.Отладка(1);
     Состояние("Поиск элементов...");
     Выборка.ВыполнитьИнструкцию(ТекстЗапроса, тзВыб);

   СписокНайденныхЗначений.УдалитьСтроки();
     тзВыб.ВыбратьСтроки();
     Пока тзВыб.ПолучитьСтроку() = 1 Цикл
           СписокНайденныхЗначений.НоваяСтрока();
           СписокНайденныхЗначений.Гр = тзВыб.Гр;
           СписокНайденныхЗначений.Элемент = тзВыб.Товар;
           СписокНайденныхЗначений.Код = тзВыб.Код;
           СписокНайденныхЗначений.Родитель = тзВыб.Родитель;
     КонецЦикла;
[/code]

Версия 1С++ 2.0.2.0
  
Наверх
ICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #1 - 22. Января 2007 :: 11:28
Печать  
1. при чем тут 1С++?
2. а ты больше способов не знаешь, как из одной ТЗ перенести все значения в другую ТЗ, кроме как перебрать строки источника и создать точную копию в приемнике?
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #2 - 22. Января 2007 :: 11:37
Печать  
Вопрос конечно не связан с тормозами... но все же

Если есть прямой запрос, значит 1С++ подключено

Тогда возникает вопрос не легче расположить на форме ТП и установить для него поставщиком таблицу результатов

Если интересует могу выложить вечером Класс наследник от ТП который подключает на форму ТП и устанавливает переданную таблицу в качестве поставщика

Таким образом ты получишь весь функционал ТП на форме вместо ТаблицыЗначений

ЗЫ А метод ТЗ.Выгрузить(ТЗВыгрузки); не подойдет
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Тормоза при обходе ТЗ
Ответ #3 - 22. Января 2007 :: 12:41
Печать  
Цитата:
1. при чем тут 1С++?
2. а ты больше способов не знаешь, как из одной ТЗ перенести все значения в другую ТЗ, кроме как перебрать строки источника и создать точную копию в приемнике?


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

Вариант 1.
спр.ВыбратьСтроки();
Пока спр.ПолучитьСтроку() = 1 Цикл
     Если <условие> Тогда
             тзРезультат.НоваяСтрока();
             ..............
     КонецЕсли;
КонецЦикла;

Вариант 2.
Выборка.ВыполнитьИнструкцию(ТекстЗапроса, тзВыб);
тзВыб.ВыбратьСтроки();
Пока тзВыб.ПолучитьСтроку() = 1 Цикл
     тзРезультат.НоваяСтрока();
     ..............
КонецЦикла;

В таблице результатов обычно не более 20-30 строк (больше не имеет смысла Подмигивание), поиск запускается по нажатию кнопки.

А на первый вопрос отвечу вопросом - если не 1С++, то что?  Печаль
  
Наверх
ICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #4 - 22. Января 2007 :: 12:48
Печать  
Thor писал(а) 22. Января 2007 :: 12:41:
А на первый вопрос отвечу вопросом - если не 1С++, то что?  Печаль

что то ты не договариваешь...
или непонятно формулируешь проблему...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Тормоза при обходе ТЗ
Ответ #5 - 22. Января 2007 :: 12:52
Печать  
lustin писал(а) 22. Января 2007 :: 11:37:
Тогда возникает вопрос не легче расположить на форме ТП и установить для него поставщиком таблицу результатов

Спасибо за предложение, но функционал ТП здесь не нужен. Поиск осуществляется по нажатию кнопки пользователем. Сейчас в принципе все нормально отрабатывает, только вот тормоза при просмотре результатов убрать бы.

lustin писал(а) 22. Января 2007 :: 11:37:
Если интересует могу выложить вечером Класс наследник от ТП который подключает на форму ТП и устанавливает переданную таблицу в качестве поставщика

Таким образом ты получишь весь функционал ТП на форме вместо ТаблицыЗначений


Выложи пожалуйста, буду рад ознакомиться, может пригодится для решения задач в будущем. Честно говоря, попробовал я ТП, имхо для DBF неприемлемая скорость.

lustin писал(а) 22. Января 2007 :: 11:37:
ЗЫ А метод ТЗ.Выгрузить(ТЗВыгрузки); не подойдет


Попробую, но сомневаюсь.

  
Наверх
ICQ  
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Тормоза при обходе ТЗ
Ответ #6 - 22. Января 2007 :: 13:06
Печать  
Цитата:
Thor писал(а) 22. Января 2007 :: 12:41:
А на первый вопрос отвечу вопросом - если не 1С++, то что?  Печаль

что то ты не договариваешь...
или непонятно формулируешь проблему...


1С++ - единственная подключенная внешняя компонента. Тормоза наблюдаются переходе между строками таблицы значений, которая содержит результаты выборки.
Таблица значений - реквизит формы списка справочника.
Тормоза наблюдаются только если выборка получена с помощью прямого запроса.

Только что проверил - если расположить таблицу на форме внешнего отчета, то не тормозит.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #7 - 22. Января 2007 :: 13:07
Печать  
Thor писал(а) 22. Января 2007 :: 12:52:
lustin писал(а) 22. Января 2007 :: 11:37:
ЗЫ А метод ТЗ.Выгрузить(ТЗВыгрузки); не подойдет


Попробую, но сомневаюсь.

Это самый быстрый и удобный способ, рекомендую.
Но, помнится, есть неудобство - вроде пропадают различные параметры настройки колонок (видимость, ширина) и пр.
Но это мелочь по сравнению со скоростью загрузки
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #8 - 22. Января 2007 :: 13:10
Печать  
Thor писал(а) 22. Января 2007 :: 13:06:
1С++ - единственная подключенная внешняя компонента. Тормоза наблюдаются переходе между строками таблицы значений, которая содержит результаты выборки.
Таблица значений - реквизит формы списка справочника.
Тормоза наблюдаются только если выборка получена с помощью прямого запроса.

Какая версия 1С++?
Имхо используешь или ВК 1С++ 2.5 и ВК ФормЕкс 2.5 или сильно старая версия 1С++ < 2031, в которой был баг с отрисовкой форм списков справочников.
1) Используй последние версии 1С++
2) Попробуй выключить раскраску в параметрах ВК.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Тормоза при обходе ТЗ
Ответ #9 - 22. Января 2007 :: 13:16
Печать  
artbear писал(а) 22. Января 2007 :: 13:07:
Thor писал(а) 22. Января 2007 :: 12:52:
lustin писал(а) 22. Января 2007 :: 11:37:
ЗЫ А метод ТЗ.Выгрузить(ТЗВыгрузки); не подойдет


Попробую, но сомневаюсь.

Это самый быстрый и удобный способ, рекомендую.
Но, помнится, есть неудобство - вроде пропадают различные параметры настройки колонок (видимость, ширина) и пр.
Но это мелочь по сравнению со скоростью загрузки


Не спорю, но вмоем случае скорость выгрузки не играет никакой роли. Выборка получена и занесена в таблицу. Тормоза начинаются при просмотре результатов.

Забыл добавить в предыдущий свой пост - при скроллинге таблицы значений загрузка процессора 100%.
  
Наверх
ICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #10 - 22. Января 2007 :: 13:25
Печать  
Thor писал(а) 22. Января 2007 :: 13:06:
1С++ - единственная подключенная внешняя компонента. Тормоза наблюдаются переходе между строками таблицы значений, которая содержит результаты выборки.
Таблица значений - реквизит формы списка справочника.
Тормоза наблюдаются только если выборка получена с помощью прямого запроса.

Только что проверил - если расположить таблицу на форме внешнего отчета, то не тормозит.

у меня, да и наверняка у большого кол-ва народа нет никаких проблем, да и как она может быть связана с тем, что ты по ТЗ с тормозами ходишь? Может ты заюзал неверно функционал "формекса"?
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Тормоза при обходе ТЗ
Ответ #11 - 22. Января 2007 :: 13:28
Печать  
artbear писал(а) 22. Января 2007 :: 13:10:
Thor писал(а) 22. Января 2007 :: 13:06:
1С++ - единственная подключенная внешняя компонента. Тормоза наблюдаются переходе между строками таблицы значений, которая содержит результаты выборки.
Таблица значений - реквизит формы списка справочника.
Тормоза наблюдаются только если выборка получена с помощью прямого запроса.

Какая версия 1С++?

Версия 2.0.2.0 (см. первый пост). Старая, но меня пока устраивает.
artbear писал(а) 22. Января 2007 :: 13:10:
Имхо используешь или ВК 1С++ 2.5 и ВК ФормЕкс 2.5 или сильно старая версия 1С++ < 2031, в которой был баг с отрисовкой форм списков справочников.
1) Используй последние версии 1С++
2) Попробуй выключить раскраску в параметрах ВК.

Раскраска отключена.
Жаль, имхо дело в том, что получаем выборку по справочнику из контекста формы списка этого же справочника. Самое интересное, что при скроллинге в многострочной части тормозов нет, а в таблице значений есть.
  
Наверх
ICQ  
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: Тормоза при обходе ТЗ
Ответ #12 - 22. Января 2007 :: 13:31
Печать  
Цитата:
Thor писал(а) 22. Января 2007 :: 13:06:
1С++ - единственная подключенная внешняя компонента. Тормоза наблюдаются переходе между строками таблицы значений, которая содержит результаты выборки.
Таблица значений - реквизит формы списка справочника.
Тормоза наблюдаются только если выборка получена с помощью прямого запроса.

Только что проверил - если расположить таблицу на форме внешнего отчета, то не тормозит.

у меня, да и наверняка у большого кол-ва народа нет никаких проблем, да и как она может быть связана с тем, что ты по ТЗ с тормозами ходишь? Может ты заюзал неверно функционал "формекса"?


FormEx не использую, лежит мертвым грузом внутри 1cpp.dll
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #13 - 22. Января 2007 :: 13:31
Печать  
Еще один метод интерфейсного ускорения: запросом выдергиваются не только элементы справочника, но и их представление (DESCR). Элементы, если необходима последующая обработка таблицы, помещаются в скрытые колонки. Если необходима только визуализация, то элементы вообще не надо выдергивать.В сильно загруженных системах, да еще если таблицы охрененные, - ускорение весьма заметно.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормоза при обходе ТЗ
Ответ #14 - 22. Января 2007 :: 13:46
Печать  
Thor писал(а) 22. Января 2007 :: 13:28:
Раскраска отключена.
Жаль, имхо дело в том, что получаем выборку по справочнику из контекста формы списка этого же справочника. Самое интересное, что при скроллинге в многострочной части тормозов нет, а в таблице значений есть.

слушай у меня была подобная байда...
у тя там нет функции на форме, которая шото с этой ТЗ делает?
вот например я тоже грешил на ВК, а оказался сам виноват...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать