|
Быстро листаю список - как отработать ПриПолученииДанных по таймеру? | ☑ | ||
---|---|---|---|---|
0
mikecool
17.07.13
✎
12:20
|
Преамбула - в список выводятся несколько рассчетных колонок в ПриПолученииДанных
если быстро листать список это дело подтормаживает(написано все красиво, тут затыков нет) да и считаю неоптимальным рассчет данных, которые не нужны. Думаю - прицепить обработку ожидания на событие ПриВыводеДанных с интервалом в секунду, но - не пойму пока как сбрасывать счетчик обработки ожидания в привыводеданных, но как потом вернуться в привыводеданных? есть какие мысли на эту тему? |
|||
1
Cube
17.07.13
✎
12:23
|
Сделай переключатель над списком "Выводить доп. информацию / не выводить доп. информацию"...
|
|||
2
mikecool
17.07.13
✎
12:23
|
(1) переключатели есть, но тема актуальна
|
|||
3
mikecool
17.07.13
✎
12:26
|
вызвать ПриПолученииДанных в обработчике ожидания, но тогда надо еще какой то флаг держать в руке, дабы по нему не вернуться в обработку ожидания?
|
|||
4
Ёпрст
17.07.13
✎
12:27
|
1. кешируй расчетные данные
2. используй соответствия, заместо поиска в тз. 3. усё будет летать на этом неповоротливом снеговике. |
|||
5
mikecool
17.07.13
✎
12:28
|
(4) соответствие разве быстрее поиска в тз?
|
|||
6
Ёпрст
17.07.13
✎
12:28
|
короче, кешируй расчетные данные в Соответствие для каждой расчетной колонки своё соответствие.
|
|||
7
H A D G E H O G s
17.07.13
✎
12:28
|
Таймер секундный.
Сбрасывается ПриВыводеСтроки Когда таймер достиг 3 секунд - он выставляет флаг, обновляет список и отключается. Список обновляется, |
|||
8
mikecool
17.07.13
✎
12:28
|
+5 про кеш не забываю
|
|||
9
Ёпрст
17.07.13
✎
12:28
|
(5) раз в 10 наверное быстрее
|
|||
10
H A D G E H O G s
17.07.13
✎
12:28
|
(5) Нет.
Епрст глупит. |
|||
11
H A D G E H O G s
17.07.13
✎
12:29
|
Они монопенисуальны с индексироанной таблицей.
|
|||
12
Ёпрст
17.07.13
✎
12:29
|
(10) ну и оставайся в неведении
|
|||
13
mikecool
17.07.13
✎
12:31
|
(7) вот, про привыводестроки пока не думал, спасибо за на водку )
|
|||
14
H A D G E H O G s
17.07.13
✎
12:32
|
Таймер секундный.
Сбрасывается ПриВыводеСтроки Когда таймер достиг 3 секунд - он выставляет флаг, обновляет список и отключается. Список обновляется. Следующий ПриВыводеСтроки снова включает таймер. Проблема только в вызове обновлении списка программно, я не помню, вызовется ли при этом ПриПолученииДанных |
|||
15
H A D G E H O G s
17.07.13
✎
12:32
|
Кстати, годный механизм, надо попробовать
|
|||
16
mikecool
17.07.13
✎
12:32
|
(14) "вызовется ли при этом ПриПолученииДанных" вызовется, верняк
|
|||
17
H A D G E H O G s
17.07.13
✎
12:33
|
Майккул, ты иногда способен удивить концептуальными идеями.
|
|||
18
Fragster
гуру
17.07.13
✎
12:33
|
ПриПолученииДанных обработку ожидания на 0,5 секунды, однократную. сначала отменить, потом поставить. тогда если мотать быстрее, чем раз в 0.5 секунды - колонки рассчитываться не будут.
|
|||
19
mikecool
17.07.13
✎
12:33
|
(17) эти идеи я почерпнул еще году этак в 2002 когда работал в крупном проекте на дельфи )) с тех пор привношу их в 1с
|
|||
20
Fragster
гуру
17.07.13
✎
12:34
|
(16) сфига при изменении оформления вызываться получению данных?
|
|||
21
mikecool
17.07.13
✎
12:35
|
(20) какого оформления? "в вызове обновлении списка программно," - вот тут вызывается
|
|||
22
H A D G E H O G s
17.07.13
✎
12:35
|
(18) (20) Ты написал 2 поста и я тебя не понял, что озадачивает и пугает.
|
|||
23
H A D G E H O G s
17.07.13
✎
12:49
|
(18) Можно поподробнее?
|
|||
24
mikecool
17.07.13
✎
12:51
|
(23) я тоже что то не сложил в уме
|
|||
25
Fragster
гуру
17.07.13
✎
12:57
|
||||
26
Ёпрст
17.07.13
✎
12:58
|
Через соответствие будет всё равно быстрее ,чем через индексированную тз минимум, в 2 раза.
Всё время на поиск в тз будет тратится на добавление в структуру параметров для отбора по тз + получение данных с массива. |
|||
27
Fragster
гуру
17.07.13
✎
12:59
|
(26) вопрос не в том, как ускорить расчет, а в том, как не считать, когда не надо (когда быстро мотаем список или еще что)
|
|||
28
H A D G E H O G s
17.07.13
✎
13:00
|
(26)
Всё время на поиск в тз будет тратится на добавление в структуру параметров для отбора по тз + получение данных с массива. Мизер. |
|||
29
H A D G E H O G s
17.07.13
✎
13:01
|
(27)
Ждем = ТекущаяДата() + 2; Пока ТекущаяДата() < Ждем Цикл // ждем КонецЦикла; Это бы на еще один обработчик ожидания заменить, но боюсь, если ОформленияСтрок уйдут из области видимости процедуры ПриПолученииДанных() - они разрушатся. |
|||
30
H A D G E H O G s
17.07.13
✎
13:01
|
Надо пробовать, че...
|
|||
31
H A D G E H O G s
17.07.13
✎
13:02
|
(27) У тебя есть внеплатформенный sleep() ?
|
|||
32
Fragster
гуру
17.07.13
✎
13:03
|
(29) это эмуляция долгого расчета. по хорошему - фоновое задание надо запускать и при завершении - обновлять колонки.
а прокидывание оформлений в обработчик ожидания - оно почему-то в дамп валит, влом разбираться |
|||
33
Fragster
гуру
17.07.13
✎
13:04
|
(31)
Процедура Пауза() Экспорт Инфо = Новый СистемнаяИнформация(); Если Инфо.ТипПлатформы = ТипПлатформы.Windows_x86 ИЛИ Инфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда ЗапуститьПриложение("ping -n 2 127.0.0.1", , Истина); // windows Иначе ЗапуститьПриложение("ping -c 2 127.0.0.1", , Истина); // linux КонецЕсли; КонецПроцедуры |
|||
34
H A D G E H O G s
17.07.13
✎
13:04
|
(32) Область видимости - как и предсказано.
Скорее всего чето рекурсивное запускается и с переполнением стэка умирает. |
|||
35
Fragster
гуру
17.07.13
✎
13:04
|
(33)+ только на сервере
|
|||
36
H A D G E H O G s
17.07.13
✎
13:04
|
(33) Брррр.
|
|||
37
Fragster
гуру
17.07.13
✎
13:05
|
(36) в многопоточном тесте и не такого насмотришься :)
|
|||
38
Ёпрст
17.07.13
✎
13:05
|
Какой-то мегатормоз, а не поделка.. вообще ничего не листается
|
|||
39
H A D G E H O G s
17.07.13
✎
13:06
|
(38) Это ожидалось.
|
|||
40
Fragster
гуру
17.07.13
✎
13:06
|
(38) листается. просто если остановиться, то оно на 1-2 секунды замерзает. типа считает что выводить. по хорошему - (32)
|
|||
41
Ёпрст
17.07.13
✎
13:07
|
(40) да никак не листается
:( |
|||
42
H A D G E H O G s
17.07.13
✎
13:08
|
(41) off course!
|
|||
43
Fragster
гуру
17.07.13
✎
13:09
|
кстати, там ошибка небольшая. надо так:
Процедура ЗаполнениеКолонок() Сообщить("Заполнение"); ПоТаймеру = Истина; ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки(); КонецПроцедуры |
|||
44
Fragster
гуру
17.07.13
✎
13:10
|
почему-то обновление не дожидается опустошения стека вызовов (или еще что-то мистическое) и "долгий расчет" 2 раза происходит
|
|||
45
Ёпрст
17.07.13
✎
13:12
|
выкинул пустой цикл, теперь листается, но, в верхних двух строчках нет данных, при остановке, данные каждый раз пересчитываются, что не есть гуд.
|
|||
46
Fragster
гуру
17.07.13
✎
13:13
|
(45) чета фигня какая-то. у меня все так, как я ожидаю. пока мотаешь - колонка не заполняется, останавливаешься - заполняется.
|
|||
47
Ёпрст
17.07.13
✎
13:13
|
есжели форму растянуть - тоже болт (нет расчетных данных)
|
|||
48
Ёпрст
17.07.13
✎
13:13
|
(46) она заполняется не вся
|
|||
49
Fragster
гуру
17.07.13
✎
13:14
|
(47) растянуть - через пол секунды (+ время цикла) данные появляются
|
|||
50
Ёпрст
17.07.13
✎
13:14
|
по крайней мере у меня( мотаешь вниз - верхние строчки пустые, вверх - нижние), растягиваешь форму - тоже пусто.
При остановке данные постоянно обновляются (не все) в цикле ожидания. |
|||
51
RomaH
naïve
17.07.13
✎
13:15
|
обновить форму - вроде должно вызвать и получение данных?
тогда в получении данных писать время в реквизит формы сравнивать текущее время с этой переменной - если меньше 1 секунды (лучше 0.5) - возврат и вызов обработчитка ожидания на 1 сек иначе - выполнение в обработчике - если время переменной отличается от текущего на 1 сек - обновить форму иначе - возврат |
|||
52
Ёпрст
17.07.13
✎
13:15
|
(49) неа.. уже пару минут висит, пока тут сообщение постю - могу скриншот кинуть, как это выглядит
|
|||
53
Fragster
гуру
17.07.13
✎
13:18
|
(52) может 1ску штырит? попробуй обработку с 0 сделать.
|
|||
54
Fragster
гуру
17.07.13
✎
13:19
|
(53)+ учитывая (43)
|
|||
55
kosts
17.07.13
✎
13:22
|
В при активизации строки подключать обработчик ожидания.
В обработчике ожидания включать флаг и обновлять форму. В приполученииданных смотреть флаг и выводить нужные данные. Вроде должно взелеть. |
|||
56
kosts
17.07.13
✎
13:24
|
(55) Не тоже не вариант - при растягивании формы - не сработает снова.
|
|||
57
kosts
17.07.13
✎
13:27
|
В приполученииданных сбрасывать флаг и подключать обработчик ожидания.
В обработчике ожидания включать флаг и обновлять форму. В приполученииданных смотреть флаг и выводить нужные данные. Так лучше. |
|||
58
Ёпрст
17.07.13
✎
13:28
|
http://rusfolder.com/37267954
вот видево |
|||
59
Ёпрст
17.07.13
✎
13:28
|
что в (43) учел
|
|||
60
RomaH
naïve
17.07.13
✎
13:50
|
Процедура ОбновитьСписок()
Если ТекущаяДата() - ВремяОбновленияДанных < 2 Тогда Возврат; КонецЕсли; ЭтоПервыйПроход = Истина; ЭтоВторойПроход = Ложь; ВызванИзОбработчика = Истина; ЭлементыФормы.СправочникСписок.ОбновитьСтроки(); КонецПроцедуры //Процедура - обработчик события "ПриПолученииДанных" табличного поля СправочникСписок // Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок) Если ВремяОбновленияДанных = '00010101' Тогда ВремяОбновленияДанных = ТекущаяДата(); КонецЕсли; Если Не ВызванИзОбработчика Тогда ВремяОбновленияДанных = ТекущаяДата(); ПодключитьОбработчикОжидания("ОбновитьСписок",3,Истина); Возврат; КонецЕсли; Если Не ЭтоПервыйПроход И Не ЭтоВторойПроход Тогда ВызванИзОбработчика = Ложь; КонецЕсли; Если ЭтоПервыйПроход Тогда ЭтоВторойПроход = Истина; Иначе ЭтоВторойПроход = Ложь; КонецЕсли; ЭтоПервыйПроход = Ложь; ВремяОбновленияДанных = ТекущаяДата(); концепт - рабочий - только время желательно до долей секунды учитывать переменные все в реквизитах формы |
|||
61
Fragster
гуру
17.07.13
✎
13:50
|
(60) что-то буков много
|
|||
62
RomaH
naïve
17.07.13
✎
13:51
|
заковырка в том что обработчик получения данных срабатывает три раза подряд при обновлении спсика
|
|||
63
Fragster
гуру
17.07.13
✎
13:51
|
(58) а ты сам обработку делал? а то у меня колонок в ТЧ больше... и работает все...
|
|||
64
RomaH
naïve
17.07.13
✎
13:51
|
(61) говорюже - концепт - собрано на коленке
|
|||
65
Fragster
гуру
17.07.13
✎
13:52
|
(62) ты в (25)+(43) смотрел? кнопок намного меньше...
|
|||
66
Fragster
гуру
17.07.13
✎
13:53
|
не кнопок а буков
|
|||
67
kosts
17.07.13
✎
13:53
|
(60)
Сильно |
|||
68
Ёпрст
17.07.13
✎
13:55
|
(65) видево поглядел эффекта ?
у тебя так же, или не ? |
|||
69
Fragster
гуру
17.07.13
✎
13:56
|
(68) не, у меня все четко
|
|||
70
Ёпрст
17.07.13
✎
13:57
|
а релиз какой у тя ?
|
|||
71
Aprobator
17.07.13
✎
13:58
|
(0) пля, открываем любую типовую конфу. Справочник Сотрудники - форма списка. Событие соответствующего табличного поля ПриПолученииДанных и смотрим как там организован этот процесс. Нет - надо лисапед изобретать.
|
|||
72
Fragster
гуру
17.07.13
✎
13:58
|
в смысле поглядел - какая-то фигня. у меня все четко. и почему-то у тебя колонки одной в списке нету. попробуй целиком обработину сделать руками, возможно из-за того, что я в совместимости ее делал, а еще и по метаданным различия может быть есть, оно глючит.
Почему в ПриПолученииДанных не все строки попадают? у меня 8.2.16 в совместимости 8.1 |
|||
73
Aprobator
17.07.13
✎
13:59
|
+(71) кстати там для кеширования данных сотрудника используется таблица значений с индексом по полю сотрудник.
|
|||
74
Ёпрст
17.07.13
✎
14:03
|
странну, у меня тоже 8.2.16 с совместимостью 8.2.13
|
|||
75
Fragster
гуру
17.07.13
✎
14:08
|
(74) у тебя прямо сразу колонок было столько, сколько на видео?
|
|||
76
Ёпрст
17.07.13
✎
14:13
|
да. я выкинул наименование с формы.
|
|||
77
Ёпрст
17.07.13
✎
14:14
|
задержку поставил в обработке ожидания 0.1
|
|||
78
Ёпрст
17.07.13
✎
14:14
|
ну и сообщить все заккоментил
|
|||
79
Fragster
гуру
17.07.13
✎
14:21
|
(78) ну ХЗ, я ж говорю - попробуй с нуля другую обработку сделай с таким же (условно) кодом
|
|||
80
mikecool
17.07.13
✎
14:34
|
(71) сам ты пля )))) для меня типовые не авторитет, я ищу только лучшее, но за ссылку спасибо - посмотрю
|
|||
81
mikecool
17.07.13
✎
14:40
|
+80 открыл зуп корп, приполученииданных - и где там заявленное в сабже???
|
|||
82
H A D G E H O G s
17.07.13
✎
14:56
|
(81) Он скорее всего про
мКешПриПолученииДанных |
|||
83
H A D G E H O G s
17.07.13
✎
14:56
|
Только что делать с устареванием данных?
|
|||
84
mikecool
17.07.13
✎
14:58
|
(83)
варианта 2 - обновлять по кнопке, либо по таймеру раз в минуту |
|||
85
H A D G E H O G s
17.07.13
✎
14:59
|
Это не вариант
|
|||
86
mikecool
17.07.13
✎
15:00
|
(31) был же ужо, даже я свои дописки в кз дописывал
вот найти чтолибо в кз трудно (( |
|||
87
mikecool
17.07.13
✎
15:00
|
(85) было бы оповещение меж сеансов - вопросов бы не было
|
|||
88
H A D G E H O G s
17.07.13
✎
15:01
|
(86) Все что вы дописывали в КЗ - хрень.
|
|||
89
H A D G E H O G s
17.07.13
✎
15:02
|
Мне концепт RomaH понравился, счаст заделаю себе.
|
|||
90
mikecool
17.07.13
✎
15:04
|
что то насчет трех срабатываний - хз, два было, помню, но три - ни разу
|
|||
91
Fragster
гуру
17.07.13
✎
15:06
|
(89) чем он лучше варианта:
Процедура ЗаполнениеКолонок() ПоТаймеру = Истина; ЭлементыФормы.ТабличноеПоле1.ОбновитьСтроки(); КонецПроцедуры Процедура ТабличноеПоле1ПриПолученииДанных(Элемент, ОформленияСтрок) Если ПоТаймеру Тогда ПоТаймеру = Ложь; // оформить строки Для каждого Оформление Из ОформленияСтрок Цикл Оформление.Ячейки.ДолгоСчитается.УстановитьТекст(ТекущаяДата()); КонецЦикла; Иначе ОтключитьОбработчикОжидания("ЗаполнениеКолонок"); ПодключитьОбработчикОжидания("ЗаполнениеКолонок", 0.5, Истина); КонецЕсли; КонецПроцедуры |
|||
92
Fragster
гуру
17.07.13
✎
15:07
|
зачем плодить "проходы"?
|
|||
93
Ёпрст
17.07.13
✎
15:11
|
Пересоздал поделку с "0", эффект остался..
ща в 8.1 попробую. |
|||
94
RomaH
naïve
17.07.13
✎
15:16
|
(91) он работает? ОбновитьСтроки - вызывает получение данных вроде как минимум два раза - я делал на сотрудниках в ЗУП - там получалось 3 раза
|
|||
95
H A D G E H O G s
17.07.13
✎
15:17
|
ОтключитьОбработчикОжидания("ЗаполнениеКолонок");
надо добавить после Если ПоТаймеру Тогда ПоТаймеру = Ложь; |
|||
96
H A D G E H O G s
17.07.13
✎
15:19
|
Странно, 3 параметр (Однократно) не отрабатывается.
8.2.17.159 |
|||
97
H A D G E H O G s
17.07.13
✎
15:22
|
(94) Все, понял. RomaH дело говорит :-)
|
|||
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) ну чего, слепил ?
Можешь видево снять, как сейчас форма "ездиет" ?.. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |