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


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Тормозит ПоставщикДанных.Журнал
21. Ноября 2019 :: 07:54
Печать  
База ДБФ.
Собственно хочется использовать в качестве журнала ПоставщикДанных.Журнал.
Но журнал жутко тормозит при прокрутке вверх, скролом или кнопкой клавиатуры.
Если я просто создам ТП и заполню его таким же количеством документов, то все летает отлично, а вот ПоставщикДанных.Журнал тормозит.
Пробовал отключать автообновление - не помогло. В монопольном режиме работает быстро.

Подскажите куда копать ?

Возможно каким-то образом можно самому обновлять данные в ТП, не могу понять как работает автообновление в ПоставщикДанных.Журнал.
Если я создам свое ТП на форме, в модуле напишу ПрямойЗапрос, то как его скармливать каждые n секунд ?

Спасибо.
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #1 - 21. Ноября 2019 :: 09:03
Печать  
На счет быстродействия я заметил, что тормозит, когда выбран большой период. Если взять, например, месяц - тормоза не ощущаются.

класс ПоставщикДанных работает с DBF базой через 1sqlite.dll и её объект поставщика SQLiteDataProvider для табличного поля . Так что копай в эту сторону.

Код
Выбрать все
	БазаДанных = СоздатьОбъект("SQLiteBase");
	БазаДанных.Открыть(":memory:");
	ПоставщикДанных = СоздатьОбъект("SQLiteDataProvider");
	ПоставщикДанных.УстановитьБД(БазаДанных);
 

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
BotMan
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Re: Тормозит ПоставщикДанных.Журнал
Ответ #2 - 21. Ноября 2019 :: 09:11
Печать  
Я тоже заметил что если большой период то тормозит. Но месяц это маловато. У меня стоит 1 год.

Странно, что просто ТП  не тормозит даже если в него вывалить весь Общий журнал документов.
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #3 - 21. Ноября 2019 :: 09:20
Печать  
Попробуй включить отладку

Код
Выбрать все
ПоставщикДанных.Данные.РежимОтладки = 3; 



Посмотри запрос, который выполняется поставщиком.

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
BotMan
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Re: Тормозит ПоставщикДанных.Журнал
Ответ #4 - 21. Ноября 2019 :: 09:30
Печать  
select
     1 as [КлючПорядка]
     ,1 as [ТекущаяСтрока]
     ,sum(case ТекущийОбъект.iddocdef
           when ' 44I' then ДокАктВРпост.СуммаБезНДС20
           when ' 1NM' then ДокСчетФактураПоставщика.СуммаБезНДС20
           when ' CKU' then ДокАктВРпост_ТабЧасть.СуммаБезНДС20
     end) as [Сумма20]
     ,sum(case ТекущийОбъект.iddocdef
           when ' 44I' then ДокАктВРпост.НДС20
           when ' 1NM' then ДокСчетФактураПоставщика.НДС20
           when ' CKU' then ДокАктВРпост_ТабЧасть.НДС20
     end) as [НДС20]
     ,sum(case ТекущийОбъект.iddocdef
           when ' 44I' then ДокАктВРпост.Всего
           when ' 1NM' then ДокСчетФактураПоставщика.Всего
           when ' CKU' then ДокАктВРпост_ТабЧасть.Всего
     end) as [СуммаВсего]
from [Журнал] as ТекущийОбъект
     left join [Документ.СчетФактураПоставщика] as ДокСчетФактураПоставщика
           on ТекущийОбъект.iddoc = ДокСчетФактураПоставщика.iddoc
     left join [Документ.АктВРпост_ТабЧасть] as ДокАктВРпост_ТабЧасть
           on ТекущийОбъект.iddoc = ДокАктВРпост_ТабЧасть.iddoc
     left join [Документ.АктВРпост] as ДокАктВРпост
           on ТекущийОбъект.iddoc = ДокАктВРпост.iddoc

where
     (((ТекущийОбъект.date between '20190101'
     and '20191231Я')))
and (ТекущийОбъект.iddocdef in (' 1NM',' CKU',' 44I'))
szName 1SJOURN
Подбор индекса для таблицы 1SJOURN :
     Ограничения: IDDOCDEF=; DATE>=; DATE<=;
     Выбран  уникальный  индекс DOCTYPE: IDDOCDEF+DTOS(DATE)+TIME+IDDOC
     Стоимость: 20
szName DH2146
Подбор индекса для таблицы DH2146 :
     Ограничения: IDDOC=;
     Выбран  уникальный  индекс ID: IDDOC
     Стоимость: 2
szName DH16302
Подбор индекса для таблицы DH16302 :
     Ограничения: IDDOC=;
     Выбран  уникальный  индекс ID: IDDOC
     Стоимость: 6
szName DH5346
Подбор индекса для таблицы DH5346 :
     Ограничения: IDDOC=;
     Выбран  уникальный  индекс ID: IDDOC
     Стоимость: 14
Время подготовки запроса: 6 мс, время выполнения запроса: 222 мс.
Поставщие данных SQLite: Формирование запроса 'последние записи'
select
journ.idx_DATE_TIME_IDDOC as [КлючПорядка],
journ.iddoc as [ТекущийДокумент $Документ],
journ.iddocdef as [ТекущийДокумент_вид],
case when journ.ismark = '*' then 7 else
           case when journ.closed&1 = 1 then 8 else 6 end
     end as [Пиктограмма],
ltrim(journ.docno) as [НомерДокумента],
journ.date as [ДатаДокумента $Дата],
journ.iddocdef AS [ВидДокумента $ВидДокументаПредставление],
journ.closed&1 AS [Проведен],
case when journ.ismark = '*' then 1 else 0 end as [ПометкаУдаления],
case journ.iddocdef
           when ' 44I' then ДокАктВРпост.Поставщик
           when ' 1NM' then ДокСчетФактураПоставщика.Поставщик
           when ' CKU' then ДокАктВРпост_ТабЧасть.Поставщик
     end as [Поставщик :Справочник.Контрагенты],
case journ.iddocdef
           when ' 44I' then ДокАктВРпост.Всего
           when ' 1NM' then ДокСчетФактураПоставщика.Всего
           when ' CKU' then ДокАктВРпост_ТабЧасть.Всего
     end as [СуммаВсего :Число.15.2],
case journ.iddocdef
           when ' 44I' then ДокАктВРпост.СуммаБезНДС20
           when ' 1NM' then ДокСчетФактураПоставщика.СуммаБезНДС20
           when ' CKU' then ДокАктВРпост_ТабЧасть.СуммаБезНДС20
     end as [Сумма20 :Число.15.2],
case journ.iddocdef
           when ' 44I' then ДокАктВРпост.НДС20
           when ' 1NM' then ДокСчетФактураПоставщика.НДС20
           when ' CKU' then ДокАктВРпост_ТабЧасть.НДС20
     end as [НДС20 :Число.15.2]
from
[Журнал] as journ
     left join [Документ.СчетФактураПоставщика] as ДокСчетФактураПоставщика
           on journ.iddoc = ДокСчетФактураПоставщика.iddoc
     left join [Документ.АктВРпост_ТабЧасть] as ДокАктВРпост_ТабЧасть
           on journ.iddoc = ДокАктВРпост_ТабЧасть.iddoc
     left join [Документ.АктВРпост] as ДокАктВРпост
           on journ.iddoc = ДокАктВРпост.iddoc
  where
((((journ.date between '20190101'
     and '20191231Я')))
and (journ.iddocdef in (' 1NM',' CKU',' 44I')))
order by
journ.idx_DATE_TIME_IDDOC  desc
limit @sqlite_data_provider_rowcount
szName 1SJOURN
Подбор индекса для таблицы 1SJOURN :
     Ограничения: IDDOCDEF=; DATE>=; DATE<=;
     Упорядочить: ACDATETIM[dx_DATE_TIME_IDDOC] desc,
     Выбран  уникальный  индекс DOCTYPE: IDDOCDEF+DTOS(DATE)+TIME+IDDOC
     Попадает в сортировку
     Стоимость: 20
szName DH2146
Подбор индекса для таблицы DH2146 :
     Ограничения: IDDOC=;
     Выбран  уникальный  индекс ID: IDDOC
     Стоимость: 2
szName DH16302
Подбор индекса для таблицы DH16302 :
     Ограничения: IDDOC=;
     Выбран  уникальный  индекс ID: IDDOC
     Стоимость: 6
szName DH5346
Подбор индекса для таблицы DH5346 :
     Ограничения: IDDOC=;
     Выбран  уникальный  индекс ID: IDDOC
     Стоимость: 14


вывалил очень много, но вроде цифры не страшные.
Мне кажется тормозит именно само ТП при отрисовке.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #5 - 21. Ноября 2019 :: 11:10
Печать  
И правильно делает, что тормозит!
Никаких sum и любых других групповых операций в тп быть не должно.
В этом случае запрос выполняется во всем строкам, без исключения.
  
Наверх
www  
IP записан
 
BotMan
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Re: Тормозит ПоставщикДанных.Журнал
Ответ #6 - 21. Ноября 2019 :: 11:37
Печать  
Djelf писал(а) 21. Ноября 2019 :: 11:10:
И правильно делает, что тормозит!
Никаких sum и любых других групповых операций в тп быть не должно.
В этом случае запрос выполняется во всем строкам, без исключения.


И вправду, убрал документы из журнала в которых берется сумма из Итога колонки и тормоза пропали...
Тогда как поступить, итоги  "ПриЗаписи" документа помещать в отдельный реквизит ( как это в 1с 8.3 делают) ?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #7 - 21. Ноября 2019 :: 11:53
Печать  
BotMan писал(а) 21. Ноября 2019 :: 11:37:
Тогда как поступить, итоги  "ПриЗаписи" документа помещать в отдельный реквизит ( как это в 1с 8.3 делают) ?

Либо так, либо вычислять отдельным запросом в ПриВыводеСтроки или в ПриФорматированииСтроки.
  
Наверх
www  
IP записан
 
BotMan
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Re: Тормозит ПоставщикДанных.Журнал
Ответ #8 - 21. Ноября 2019 :: 11:59
Печать  
Djelf писал(а) 21. Ноября 2019 :: 11:53:
BotMan писал(а) 21. Ноября 2019 :: 11:37:
Тогда как поступить, итоги  "ПриЗаписи" документа помещать в отдельный реквизит ( как это в 1с 8.3 делают) ?

Либо так, либо вычислять отдельным запросом в ПриВыводеСтроки или в ПриФорматированииСтроки.


Тогда они не попадут в подвал, так ? нужно самому пересчитывать подвал?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #9 - 21. Ноября 2019 :: 12:15
Печать  
Подвал лучше вообще не делать, во всяком случае на большой выборке.
Для подвала нужно пересчитывать все строки, а это не быстро.
И для подвала отдельный поставщик же, а не тот же самый.
  
Наверх
www  
IP записан
 
BotMan
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Re: Тормозит ПоставщикДанных.Журнал
Ответ #10 - 21. Ноября 2019 :: 12:31
Печать  
Djelf писал(а) 21. Ноября 2019 :: 12:15:
Подвал лучше вообще не делать, во всяком случае на большой выборке.
Для подвала нужно пересчитывать все строки, а это не быстро.
И для подвала отдельный поставщик же, а не тот же самый.


В общем тормоза пропадают, если я оставляю в журнале только один вид документа.
Удалил вообще все графы журнала с суммами, но оставил два вида документов - и все равно тормозит....
  
Наверх
 
IP записан
 
BotMan
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 28. Июля 2017
Re: Тормозит ПоставщикДанных.Журнал
Ответ #11 - 21. Ноября 2019 :: 12:40
Печать  
BotMan писал(а) 21. Ноября 2019 :: 12:31:
Djelf писал(а) 21. Ноября 2019 :: 12:15:
Подвал лучше вообще не делать, во всяком случае на большой выборке.
Для подвала нужно пересчитывать все строки, а это не быстро.
И для подвала отдельный поставщик же, а не тот же самый.


В общем тормоза пропадают, если я оставляю в журнале только один вид документа.
Удалил вообще все графы журнала с суммами, но оставил два вида документов - и все равно тормозит....



Удалил последнюю  графу из журала( Реквизит "Поставщик") - тормоза пропали...
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Тормозит ПоставщикДанных.Журнал
Ответ #12 - 21. Ноября 2019 :: 13:09
Печать  
BotMan писал(а) 21. Ноября 2019 :: 11:37:
Тогда как поступить, итоги  "ПриЗаписи" документа помещать в отдельный реквизит ( как это в 1с 8.3 делают) ?


А разве итоги по колонки не записываются автоматом в шапку? Всегда считал что если у колонки стоит Итог то сумма сама записывается в таблицу шапки.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #13 - 21. Ноября 2019 :: 13:21
Печать  
Нет, посмотри что за тип данных у Шапки и Подвала http://www.1cpp.ru/docum/icpp/html/TableField.html#header
  
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тормозит ПоставщикДанных.Журнал
Ответ #14 - 21. Ноября 2019 :: 13:27
Печать  
Sserj писал(а) 21. Ноября 2019 :: 13:09:
BotMan писал(а) 21. Ноября 2019 :: 11:37:
Тогда как поступить, итоги  "ПриЗаписи" документа помещать в отдельный реквизит ( как это в 1с 8.3 делают) ?


А разве итоги по колонки не записываются автоматом в шапку? Всегда считал что если у колонки стоит Итог то сумма сама записывается в таблицу шапки.


Не знаю как в DBF, но в SQL точно записывается.
  

FormEx developer
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать