Имя: Пароль:
1C
1C 7.7
v7: Вопрос по Поставщику данных
,
0 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
Это происходит в любом случае, хоть один в базе пользователь, хоть несколько.
Из-за чего так происходит?
1 Volodja
 
12.12.20
11:57
Наблюдал на Win 7 Макс, Win 2008 Server
2 Volodja
 
12.12.20
12:03
База DBF
3 Volodja
 
12.12.20
12:05
Вычисляемых полей нет. Стандартно из шапки документа
4 Volodja
 
13.12.20
17:46
Процедура Обновить() Экспорт
    ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка;
    ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока;
    
    СформироватьТекстЗапросаСписка();
    ЗаполнитьПодвал();
    УстановитьПоставщикаДанных();

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

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

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

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

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

и т.д.?

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