|
Быстро листаю список - как отработать ПриПолученииДанных по таймеру? | ☑ | ||
---|---|---|---|---|
0
mikecool
17.07.13
✎
12:20
|
Преамбула - в список выводятся несколько рассчетных колонок в ПриПолученииДанных
если быстро листать список это дело подтормаживает(написано все красиво, тут затыков нет) да и считаю неоптимальным рассчет данных, которые не нужны. Думаю - прицепить обработку ожидания на событие ПриВыводеДанных с интервалом в секунду, но - не пойму пока как сбрасывать счетчик обработки ожидания в привыводеданных, но как потом вернуться в привыводеданных? есть какие мысли на эту тему? |
|||
98
Fragster
гуру
17.07.13
✎
15:25
|
(94) у меня отрабатывает все четко (1 раз) (у меня там были еще Сообщить() добавлены - следил по ним)
|
|||
99
H A D G E H O G s
17.07.13
✎
15:25
|
(94) 2 раза у меня.
|
|||
100
Fragster
гуру
17.07.13
✎
15:26
|
(99) 2 раза - это скаченная, или именно с кодом (91)? в той, которую я выкладываю сначала идет ОбновитьСтроки, потом ПоТаймеру = Истина; из-за этого два раза вызывалось.
|
|||
101
RomaH
naïve
17.07.13
✎
15:27
|
v8: v8: Событие ПриПолученииДанных отрабатывает дважды
agarych (0) посмотри на ИТС там все написано. Первый раз отрабатывает, для строк выше текущей строки, второй раз для текущей строки + все что ниже. Кстати два раза он у тебя будет вызываться если ты кнопки page up, page down используешь. И один раз если колесиком мышки крутить. |
|||
102
H A D G E H O G s
17.07.13
✎
15:28
|
(100) (91)
|
|||
103
H A D G E H O G s
17.07.13
✎
15:28
|
(101) Все понятно.
Как ты ТРИ раза добился? |
|||
104
RomaH
naïve
17.07.13
✎
15:29
|
(60) тестировалось на ЗУП - там не оформленные строки занимают 2 строки, а оформленные - 1
поэтому, похоже, отрабатывает целых три рааз |
|||
105
RomaH
naïve
17.07.13
✎
15:30
|
т.е. обработало одну порцию - верхнюю - оформило - вывело
на экране стало показывать больше строк чем было изначально потом - обрабатывает вторую часть - изначальну на экране помещается еще больше строк потом - обрабатывает все оставшиеся строки |
|||
106
RomaH
naïve
17.07.13
✎
15:32
|
по сути алгоритм из (60) вроде должен работать хоть на одном хоть на трех проходах
|
|||
107
Fragster
гуру
17.07.13
✎
15:33
|
понял, счас посмотрю, что можно сделать...
|
|||
108
Fragster
гуру
17.07.13
✎
15:35
|
апдейт, который пашет правильно, вроде:
Процедура ВключитьТаймер() ПоТаймеру = Истина; ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки(); КонецПроцедуры Процедура ВыключитьТаймер() ПоТаймеру = Ложь; КонецПроцедуры Процедура ТабличноеПоле1ПриПолученииДанных(Элемент, ОформленияСтрок) Если ПоТаймеру Тогда Для каждого Оформление Из ОформленияСтрок Цикл Оформление.Ячейки.ДолгоСчитается.УстановитьТекст(ТекущаяДата()); КонецЦикла; ПодключитьОбработчикОжидания("ВыключитьТаймер", 0.1, Истина); Иначе ОтключитьОбработчикОжидания("ВключитьТаймер"); ПодключитьОбработчикОжидания("ВключитьТаймер", 0.1, Истина); КонецЕсли; КонецПроцедуры |
|||
109
Fragster
гуру
17.07.13
✎
15:38
|
лучше у включения таймаут 0.5, иначе если успеть после первого оформления - то он при мотании будет оставшиеся строки все равно доотрисовывать
|
|||
110
mikecool
17.07.13
✎
15:42
|
(108) в этом случае только раз срабатывает ПриПолученииДанных?
|
|||
111
RomaH
naïve
17.07.13
✎
15:43
|
(110) см (101)
|
|||
112
mikecool
17.07.13
✎
15:44
|
(111) это я посмотрел, получается что в этой процедуре ОформленияСтрок - весь выводимый набор, но срабатывает дважды для "верха" и "низа"?
|
|||
113
mikecool
17.07.13
✎
15:44
|
+112 нафига тогда в ОформленияСтрок пихать весь набор?
|
|||
114
RomaH
naïve
17.07.13
✎
15:45
|
(110) не все-ли равно ОформленияСтрок всегда разные
|
|||
115
RomaH
naïve
17.07.13
✎
15:46
|
(113) точно разный?
|
|||
116
H A D G E H O G s
17.07.13
✎
15:46
|
(108) Вроде работает :-)
|
|||
117
mikecool
17.07.13
✎
15:47
|
(114) так если всегда разный, то какая разница - какой проход? если надо обработать все
|
|||
118
mikecool
17.07.13
✎
15:47
|
так что - годная тема получилась? можно было на конкурс с ипадом отправлять? )))
|
|||
119
RomaH
naïve
17.07.13
✎
15:50
|
(117) я тебя не понял
есть обновление данных списка есть три прохода оформление строк на всех трех проходах содержат разные коллекции сумма коллекций в итоге дает все строки котрые показываются на экране |
|||
120
mikecool
17.07.13
✎
15:52
|
(119) зачем отслеживать номер прохода, если каждый проход содержит другую коллекцию строк, которые надо обработать?
|
|||
121
RomaH
naïve
17.07.13
✎
15:54
|
(120) ... что бы не обрабатывать 4 проход вызваный прокручиванием спсика
|
|||
122
mikecool
17.07.13
✎
15:56
|
все равно не понимаю )))
есть событие, которое вызывается три раза 1) для текущей строки 2) для строк выше 3) для строк ниже порядок щас не суть, каждый вызов содержит 1) одну строку 2) строки выше 3) строки ниже каждую эту коллекцию надо обработать, а у тебя получается первые две пропускается и обрабатывается только третья? |
|||
123
RomaH
naïve
17.07.13
✎
15:56
|
объясняю логику
надо обновить данные только после 3 секунд после остановки прокручивания т.е. надо выподнять обновление не сразу, а только после 3 секунд после обновления для этого при обновлении ... читайте код |
|||
124
RomaH
naïve
17.07.13
✎
15:57
|
(122) у меня первые три обрабатываются - а последующие нет
|
|||
125
mikecool
17.07.13
✎
15:58
|
(124) а, епа мать )))
|
|||
126
RomaH
naïve
17.07.13
✎
15:58
|
2) строки выше
3) строки ниже 3) строки которые получились после уменьшения высоты строк из впервых двух коллекций |
|||
127
RomaH
naïve
17.07.13
✎
15:59
|
(122) у меня первые три обрабатываются - а потом сбрасывается флаг, что это вызов надо обрабатывать
|
|||
128
Fragster
гуру
17.07.13
✎
16:06
|
Для того, чтобы случайно не попасть в период, когда таймер включен, но мы крутим форму - выключение флага перенес в обновление отображения, вроде работает:
Процедура ВключитьТаймер() Таймер = Истина; ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки(); КонецПроцедуры Процедура ТабличноеПоле1ПриПолученииДанных(Элемент, ОформленияСтрок) Сообщить("При получении " + Таймер); Если Таймер Тогда Для каждого Оформление Из ОформленияСтрок Цикл Оформление.Ячейки.ДолгоСчитается.УстановитьТекст(ТекущаяДата()); КонецЦикла; Иначе ОтключитьОбработчикОжидания("ВключитьТаймер"); ПодключитьОбработчикОжидания("ВключитьТаймер", 0.5, Истина); КонецЕсли; КонецПроцедуры Процедура ОбновлениеОтображения() Сообщить("Обновление " + Таймер); Таймер = Ложь; КонецПроцедуры |
|||
129
mikecool
17.07.13
✎
16:07
|
да вроде и так норм отрабатывает
|
|||
130
Fragster
гуру
17.07.13
✎
16:07
|
(129) ну, залипнуть может - попробуй таймаут на выключение таймера поставить 5 секунд :)
|
|||
131
H A D G E H O G s
17.07.13
✎
16:09
|
(130) Он не залипнет. Он будет отрабатывать как будто никаких приблуд нет.
|
|||
132
H A D G E H O G s
17.07.13
✎
16:10
|
(130) Ну отработает несколько ПриПолученииДанных(), потом отлипнет.
Для 0.1 секунды вообще вряд ли так случиццо. |
|||
133
mikecool
17.07.13
✎
16:15
|
Для 0.1 таймер срабатывает по ощущениям как через секунду (
|
|||
134
H A D G E H O G s
17.07.13
✎
16:15
|
Но вообще идея здравая, лучше перебдеть :-)
|
|||
135
H A D G E H O G s
17.07.13
✎
16:16
|
(133)
Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий. |
|||
136
mikecool
17.07.13
✎
16:16
|
не, щас поставил 0,1 - не успеваю нажать на клавишу - срабатывает ))) надо 0.2
|
|||
137
H A D G E H O G s
17.07.13
✎
16:17
|
(136) Тоесть?
|
|||
138
H A D G E H O G s
17.07.13
✎
16:17
|
p.s. Вот мы фигней занимаемся...
|
|||
139
mikecool
17.07.13
✎
16:18
|
(138) почему фигней? я не знаю как у кого, но мне например не приятно, когда я листаю список, а он у меня покадрово с интервалом в 2 секунды прорисовывается ( юзерам думаю тоже не прикольно
|
|||
140
Ёпрст
17.07.13
✎
16:33
|
(139) И сколько у тебя расчетных колонок ?
|
|||
141
mikecool
17.07.13
✎
16:38
|
(140) пока две, щас планируют еще штуки три
|
|||
142
mikecool
17.07.13
✎
16:39
|
щас по мелочи переделываю вывод списка, умудрились получать валюту бух и упр в цикле по каждому оформлению ((( в шоке
|
|||
143
Aprobator
17.07.13
✎
16:41
|
(142) если в Корпе нет, то пример можно посмотреть на конфе КА или УПП.
|
|||
144
mikecool
17.07.13
✎
16:42
|
(143) да хватит с меня копрокода
|
|||
145
Aprobator
17.07.13
✎
16:43
|
грубо суть в следующем, с оформлениястрок снимается информация по полю источнику. Затем выполняется проверка наличия данных в кэше. Если данных нет - выполняется их получение с последующей записью в кэш.
|
|||
146
mikecool
17.07.13
✎
16:45
|
(145) да как бы уже разобрались )))
|
|||
147
H A D G E H O G s
17.07.13
✎
16:46
|
(145) Я тя помню еще с тех времен, когда бы запрос к ТабличномуПолю делал :-)
|
|||
148
H A D G E H O G s
17.07.13
✎
16:46
|
бы->ты
|
|||
149
Aprobator
17.07.13
✎
16:47
|
(147) попрошу без наездов) Все мы были когда то молодыми и глупыми )
|
|||
150
Ёпрст
17.07.13
✎
16:48
|
(141) тогда точно фигнёй.. всё и так листается на раз, переделай тока на соответствия.
|
|||
151
Fragster
гуру
17.07.13
✎
16:48
|
(145) да. только вот у тебя 10к номенклатуры и колонка с остатками. ты мотаешь список пэйдждайном. как тебе кэш поможет?
|
|||
152
mikecool
17.07.13
✎
16:49
|
(150) нихрена не на раз, залипание на вывод почти в секунду
но щас разгребу всю процедуру, возможно половину перенесу в запрос |
|||
153
Ёпрст
17.07.13
✎
16:49
|
не думаю, что кого-то порадует, видеть нужные данные с задержкой, только после остановки.
|
|||
154
Ёпрст
17.07.13
✎
16:50
|
ну кидай свой код в приполучении
|
|||
155
mikecool
17.07.13
✎
16:51
|
(153) я не думаю, что их радует ждать после каждого нажатия )
как нибудь договоримся о компромиссе )) (154) еще в процессе, кидать стыдно - он не мой ) |
|||
156
Fragster
гуру
17.07.13
✎
16:51
|
(153) допустим у тебя идет набор по строке. зачем тебе задержка на показ ненужных данных? а если данные получаются 2 секунды, то задержку в +0.2 ты не заметишь
|
|||
157
H A D G E H O G s
17.07.13
✎
16:51
|
(153) А мы опционально....
|
|||
158
H A D G E H O G s
17.07.13
✎
16:52
|
ПВХ
НастройкиПользователей хватит на всех. Даром. И никто не уйдет обиженным. |
|||
159
Fragster
гуру
17.07.13
✎
16:52
|
в идеале - чтобы вообще не тормозило - надо еще на фоновые переделать
|
|||
160
Aprobator
17.07.13
✎
16:52
|
(151) хм - я просто других вариантов не представляю. Либо каждый раз базу дергать, либо данные где то хранить.
|
|||
161
Fragster
гуру
17.07.13
✎
16:53
|
(160) вот в (0) вариант - дергать данные только когда мы остановили прокрутку списка...
|
|||
162
mikecool
17.07.13
✎
16:53
|
(160) лучше дергать по таймауту нужные, потому как акуальность их меняется довольно часто
|
|||
163
Ёпрст
17.07.13
✎
16:54
|
10к влёт кешируются в соответствиях, проверено.
У меня нет вообще обращения к базе при получении данных, тормозов, тоже нет.. |
|||
164
mikecool
17.07.13
✎
16:55
|
(163) а на создание соответствия времени сколько уходит?
|
|||
165
Aprobator
17.07.13
✎
16:56
|
(161) одно другому не мешает.
|
|||
166
Ёпрст
17.07.13
✎
16:59
|
(164)задержка при открытии формы подбора..1-2 секунды..
|
|||
167
Ёпрст
17.07.13
✎
16:59
|
не так и много
|
|||
168
Ёпрст
17.07.13
✎
16:59
|
могу видево слепить
|
|||
169
Aprobator
17.07.13
✎
17:00
|
+(165) идея конечно интересная сама по себе.
|
|||
170
H A D G E H O G s
17.07.13
✎
17:01
|
(169) Она великолепна.
Как поддерживать кэш в актуальном состоянии? |
|||
171
Aprobator
17.07.13
✎
17:03
|
(170) нужен механизм, контролирующий изменения данных с момента последнего залива их в кэш.
|
|||
172
Aprobator
17.07.13
✎
17:05
|
хотя в случае остатков - кэш то может быть и нефига не оптимальным решением.
|
|||
173
Ёпрст
17.07.13
✎
17:05
|
(170) да никак не поддерживается, это форма подбора номенклатуры с останками и кнопкой обновить.
Я забил на "актуальность" останков в "прямом эфире" |
|||
174
H A D G E H O G s
17.07.13
✎
17:06
|
(173) Ну вот и все дела.
|
|||
175
H A D G E H O G s
17.07.13
✎
17:07
|
Когда идет выписка реализаций - остатки будут скакать каждую минуту, нафиг этот ваш кэш.
|
|||
176
Aprobator
17.07.13
✎
17:07
|
(175) согласен - тут не поспоришь.
|
|||
177
Ёпрст
17.07.13
✎
17:08
|
(174) на самом деле, при любой продаже получать всегда "актуальные" останки не реально, да и не верно это.
Ну прилетел тебе якобы "реальный остаток" в документ - и далеко не факт, что в момент проведения он еще будет на останках. |
|||
178
fisher
17.07.13
✎
17:12
|
<робко> ... а может, сделать этот список на УФ?
|
|||
179
Aprobator
17.07.13
✎
17:13
|
+(176) хотя если присобачить какое нить оповещение кэша об изменении остатков - хз. Вот только как это реализовать? И где хранить кэш в таком случае?
|
|||
180
H A D G E H O G s
17.07.13
✎
17:13
|
Попробуйте с данным механизмом ВывестиСписок
|
|||
181
H A D G E H O G s
17.07.13
✎
17:14
|
Правой кнопкой - Вывести список.
И выберите расчетные колонки. Бяда. |
|||
182
Fragster
гуру
17.07.13
✎
17:15
|
(180) ты о отрисовке с задержкой?
|
|||
183
H A D G E H O G s
17.07.13
✎
17:15
|
(182) Да
|
|||
184
Ёпрст
17.07.13
✎
17:19
|
врят ли кто будет печатать это..
|
|||
185
H A D G E H O G s
17.07.13
✎
17:23
|
Как бы отследить источник вызова ПриПолученииДанных
|
|||
186
Fragster
гуру
17.07.13
✎
17:27
|
(185) или как вызвать команду "Вывесит список" программно?
|
|||
187
Леха Дум
17.07.13
✎
17:40
|
А вы УФ с динамическим списком не пробовали использовать?
|
|||
188
mikecool
17.07.13
✎
17:42
|
(187) уже спрашивали про это
|
|||
189
mikecool
17.07.13
✎
17:42
|
(184) у меня как раз любители печатать (
|
|||
190
Ёпрст
17.07.13
✎
17:43
|
забил бы давно болт на это, всё в кеш и привет.
|
|||
191
Ёпрст
17.07.13
✎
17:45
|
и обновление кеша по кнопке.
|
|||
192
Леха Дум
17.07.13
✎
17:46
|
(188) и где же ответ на этот вопрос?
|
|||
193
mikecool
17.07.13
✎
17:53
|
(192) см (181)
|
|||
194
mikecool
17.07.13
✎
17:53
|
+193 мои пользователи привыкли к отбору, а не к поиску (
и пока я их не буду переучивать, ибо и так туповаты, да скоро новая конфига будет внедряться |
|||
195
Леха Дум
17.07.13
✎
18:03
|
(194) у нас тоже привыкшие были, переводил все формы списков на УФ постепенно, когда раскушали - сказали срочно давай еще это, это и это! Не увидел никаких проблем с печатью списка.
|
|||
196
Полотенчик
17.07.13
✎
18:16
|
А зачем считать ПриПолученииДанных? Почему нельзя сразу в таблицу поместить уже посчитанное?
|
|||
197
Ёпрст
18.07.13
✎
10:33
|
(194) ну чего, слепил ?
Можешь видево снять, как сейчас форма "ездиет" ?.. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |