Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Вопрос по Поставщику данных

v7: Вопрос по Поставщику данных
Я
   Volodja
 
12.12.20 - 11:53
Пользуюсь поставщиком
    ПоставщикДанных = СоздатьОбъект("ПоставщикДанных");
    ПоставщикДанных.КонтейнерТабличногоПоля = "ДокументСписок";
    ПоставщикДанных.КонтейнерКоманднойПанели = "ИДКоманднаяПанель";
    ПоставщикДанных.ТипЗначений = "Документ.Документ1";

    Данные = ПоставщикДанных.Данные;
        Данные.АвтоОбновление = 0;   // автообновление отключено, период тоже не задан
    //Данные.ПериодАвтоОбновления = 10;

В режиме отладки показывает хорошую стоимость
Подбор индекса для таблицы 1SJOURN :
    Ограничения: IDDOCDEF=; DATE>=; DATE<=;
    Упорядочить: ACDATETIM[dx_DATE_TIME_IDDOC],
    Выбран индекс DOCTYPE: IDDOCDEF+DTOS(DATE)+TIME+IDDOC
    Попадает в сортировку
    Стоимость: 18
Подбор индекса для таблицы DH46 :
    Ограничения: IDDOC=;
    Выбран уникальный индекс ID: IDDOC
    Стоимость: 9
Периодически, когда двигаюсь по списку документов, возникают подвисания до 10-20 сек
В это время по диспетчеру задач происходит загрузка ЦП. Зашкаливает до 100
Это происходит в любом случае, хоть один в базе пользователь, хоть несколько.
Из-за чего так происходит?
   Volodja
 
1 - 12.12.20 - 11:57
Наблюдал на Win 7 Макс, Win 2008 Server
   Volodja
 
2 - 12.12.20 - 12:03
База DBF
   Volodja
 
3 - 12.12.20 - 12:05
Вычисляемых полей нет. Стандартно из шапки документа
   Volodja
 
4 - 13.12.20 - 17:46
Процедура Обновить() Экспорт
    ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка;
    ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока;
    
    СформироватьТекстЗапросаСписка();
    ЗаполнитьПодвал();
    УстановитьПоставщикаДанных();

    АктивизацияКнопокОтбора();
    
    Если ЭтоSQL = 1 Тогда
        ОбновитьСтрокиТабличногоПоля();
    ИначеЕсли ЭтоSQL = 0 Тогда
        Если ТипЗначенияСтр(ТабличноеПоле.Шапка) = "ФиксированныеСтроки" Тогда
            ТабличноеПоле.Шапка.ОбновитьСтроки();
        КонецЕсли;
        Если ТипЗначенияСтр(ТабличноеПоле.Подвал) = "ФиксированныеСтроки" Тогда
            ТабличноеПоле.Подвал.ОбновитьСтроки();
        КонецЕсли;
    КонецЕсли;
    
    Если ПустоеЗначение(ТекущаяСтрока) = 0 Тогда
    //    ТабличноеПоле.ТекущаяСтрока = ТекущаяСтрока;

    КонецЕсли;
    ТабличноеПоле.ТекущаяКолонка = ТекущаяКолонка;
    ТабличноеПоле.Активизировать();
КонецПроцедуры    // Обновить


Замер производительности, показывает что задержки происходят на строке 
        ТабличноеПоле.ТекущаяСтрока = ТекущаяСтрока;
до 10 и более секунд
   Volodja
 
5 - 13.12.20 - 17:47
Это из класса ПоставщикДанных.Журнал
   Mikeware
 
6 - 13.12.20 - 19:13
База ведь файловая, судя по индексам? может, дело в драйвере?
на сиквельной копии есть возможность попробовать?
   Volodja
 
7 - 14.12.20 - 17:18
(6) Да. Я в (2) писал.
На sql проверить не могу. В планах руководства переводить ее на sql нет.
   Volodja
 
8 - 14.12.20 - 17:19
А драйвер это sqlite.
   Дык ё
 
9 - 14.12.20 - 20:10
доступ локально или по сети? если по сети - меняй sqlite на vfpoledb
   Ёпрст
 
10 - 14.12.20 - 20:19
(9) дык ему поставщик данных для табличного поля нужен..тут только скульлайт сгодится
   Volodja
 
11 - 15.12.20 - 10:03
(9) Кажется sqlite вообще не причем.
Как писал в (4), все тормоза на этой строке:

Замер производительности, показывает что задержки происходят на строке 
        ТабличноеПоле.ТекущаяСтрока = ТекущаяСтрока;
до 10 и более секунд.
Работает тут sqlite или нет, в замере этого не видно.
   Salimbek
 
12 - 15.12.20 - 10:40
(0) А что такое "Периодически, когда двигаюсь по списку документов" ?

Это вы по списку Видов документов двигаетесь, а в Табличном поле у вас отображаются документы данного вида?
Или вы весь список документов выводите и по нему передвигаетесь?
   Volodja
 
13 - 15.12.20 - 20:04
(12) Табличном поле у меня отображает документы заданного вида
ПоставщикДанных.ТипЗначений = "Документ.КакойТоДокумент";
   Salimbek
 
14 - 17.12.20 - 20:25
(13) И вы вот в этом поставщике, который отобразил вам список "Документ.КакойТоДокумент" теперь двигаетесь по этим КакимТо документам? Тогда зачем каждый раз делаете это из (4)

    ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка;
    ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока;
    
    СформироватьТекстЗапросаСписка();
    ЗаполнитьПодвал();
    УстановитьПоставщикаДанных(); 

и т.д.?

Не надо этого. Один раз установили поставщика и пусть дальше он сам всем управляет. А то самое "Автообновление" - оно для другого. Оно нужно, чтобы когда у вас какая-то страница открыта и другой пользователь создал новый документ, который должен отобразиться на этой вашей странице, то вы его не увидите, пока не произойдет переобновление списка. Вот если Автообновление включено, то Табличное поле самое периодически перечитывает запрос из базы и выводит его на экран. Если же оно выключено, то этого перечитывания не происходит и надо обновлять список вручную через ТабличноеПоле.ОбновитьСтроки()

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.