gifts2017

"Частичное" обновление формы списка

Опубликовал Михаил Семенов (Shaman100M) в раздел Программирование - Работа с интерфейсом

Уменьшаем время обновления перегруженной расчетными колонками формы списка, используя "кэш" и анализируя вид обновления: "действие пользователя" и "общее обновление формы"

Конфигурация 1С:7.7,  демонстрирует реализацию
частичного обновления формы списка. Частичное обновление
может быть необходимо, если на форме списка размещено много
дополнительных текстовых расчетных колонок, значение в каждой
из которых рассчитывается для каждой видимой строки в форме и
может занимать довольно продолжительное время. Прилагательное
"частичное" условно, - форма обновляется целиком, однако, полный
расчет производится не для всех значений. Часть  значений берется
из сохраненного "кэша" - объекты "Таблица" + "DBF", часть значений
не отображается вообще, если превышено заданное время обновления
формы.
Текущая запись, на которую переходит пользователь, обновляется
без условий. Полное обновление формы, происходящее, например, при
смене родителя, увеличении размера формы, распознается по
порядку обновления (выполняется перед обновлением текста на форме),
обрабатывается с использованием "кэша" и ограничивается по времени.

Особенности исполнения:
Все расчетные значения в колонках обращаются к одной общей функции
ОбновлениеФормы(<НомерКолонки>), которая делегирует сам расчет в
функцию РасчитатьКолонку(<НомерКолонки>). Эту функцию нужно изменить
под Вашу форму списка (см. также "заремаренный" вариант).

В скачиваемом файле - конфигурация-пример с формой списка справочника,
в которой 10 расчетных колонок с задаваемым временем пересчета одной
 записи и  значением-ограничителем общего времени обновления формы.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Частичное обновление формы
.1253002338 28,08Kb
25.09.09
37
.1253002338 28,08Kb 37 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Рытов (Арчибальд) 15.09.09 12:41
Михаил, пощади! :) Мне отчитываться, я ничего не понял, а чувствуется, что-то содеРждательное есть. Поясни в личку, о чем речь, войди в положение.
2. Михаил Семенов (Shaman100M) 15.09.09 12:43
3. Епрст (Ёпрст) 15.09.09 13:32
4. Епрст (Ёпрст) 15.09.09 13:36
+Не видны значения ...только если мышой тыкнуть..
В общем,решение однозначно в топку.


5. Епрст (Ёпрст) 15.09.09 13:38
В разы быстрее - ТабличноеПоле+ поставщиком прямой запрос.
6. Александр Рытов (Арчибальд) 15.09.09 13:39
(3-5)
А поподробней? Я тебе верю, но не безоговорочно ;)
7. Епрст (Ёпрст) 15.09.09 13:49
(6) Скачай да посмотри сам..
:)
Да еще:

Смотрим на скриншот, на значения "Элемент 6 - 13"..
Или остальных...

Это нормально??????

http://i081.radikal.ru/0909/44/8c1f4e862105.jpg
8. Епрст (Ёпрст) 15.09.09 13:52
А когда юзверь при открытии справочника видит ЭТО
http://i050.radikal.ru/0909/e7/a7358b52a2ae.jpg
(половины значений нет)
он с ума не сойдет ?
При условии, что значения появляются только при клике мыши.. да и то, всегда разные!

:))
9. Александр Рытов (Арчибальд) 15.09.09 13:52
(7)
Уфф...
Все сам, да сам... :(
10. Епрст (Ёпрст) 15.09.09 13:53
+8 и тормозит всё это..не по-детски..

:)
11. Евгений Мартыненков (JohnyDeath) 15.09.09 13:56
(9) посмотри на класс ПоставщикДанных от vandalsvq http://www.1cpp.ru/forum/YaBB.pl?num=1248941896
Там красиво, через ТП, но за универсальность тоже немножко платить.
12. Епрст (Ёпрст) 15.09.09 14:03
(0)
Да... еще.
По-поводу вызова формулы в текстовом реквизите..есть одна фича.
Можешь сам догадаться, скачав это и понажимая на кнопарь "Кто видимый?"
Там - штатная "ловля" только видимых на экране элементов формы списка...
Можешь порастягивать форму и понажимать на эту кнопку.

http://webfile.ru/3921964
13. Александр Рытов (Арчибальд) 15.09.09 14:18
(8) Разные значения - к делу не относится.
(12) Скачал. Кликал, кликал. Ну и что?
Фичу мы как-то уже обсуждали. Какая связь?
Может, оффтоп, тогда в личку объясни бестолковому, пожалуйста :(
14. Епрст (Ёпрст) 15.09.09 14:30
(13) Разные значения к делу не относятся ????????????
Это как ?
У (0) всегда разные значения в вычисляемых колонках, что при клике мыши. что при работе стрелочками.

>>>Какая связь?

Прямая.. Вызов формулы в вычисляемых текстовых колонок зависит от наличия идентификатора в ней.
15. Александр Рытов (Арчибальд) 15.09.09 14:35
(14) Вот последнюю фразу я понял...
А разные значения автор ведь сам устраивает, для иллюстрации (скажем, работы других юзеров)
16. Михаил Семенов (Shaman100M) 15.09.09 15:02
Ёпрст, приветствую. Я очень уважительно отношусь к твоим разработкам, попытаюсь ответить на большинство вопросов.
(3) "Мегатормоз" - Так и задумано было сделать "тормознутую" форму, чтобы на ней потренироваться. Наверно, стоит сделать "прямой", некешированный режим обновления, чтобы сравнить.
(4) "не видны значения..." - это результат работы ограничения времени обновления формы
(7), (14) "разные значения" - так задумано, чтобы видеть какие записи обновляются полным пересчетом, а какие - кешируются (значения не меняются)
17. Михаил Семенов (Shaman100M) 15.09.09 15:09
(12) у меня так и сделано, только значения кидаются не в список, а в ТЗ + DBF (типа, индекса к ТЗ)

(15) именно так и есть.

Вопрос к Ёпрст. Вот, что у меня так и не получилось сделать, - это найти текущий элемент в списке значений при общем обновлении формы. Функция обновления значения вызывается <Кол-во колонок> х <Кол-во видимых элементов> раз, причем, слева-направо, сверху-вниз. Фича - текущий элемент формы списка обновляется последним. Хотелось бы его как-то обновить за первый проход, но определить, что это и есть текущий - не получается. Приходится определять его в обработке ожидания и обновлять форму еще раз через Форма.Обновить(), ловить его в функции обновления и обновлять без использования кеша. Может, есть какой другой способ?
18. Александр Рытов (Арчибальд) 15.09.09 15:13
(17) Вот это как раз по адресу вопросец :)) И я ответ хочу :))
19. Епрст (Ёпрст) 15.09.09 15:16
(17) проще забить :)
Как правило, все вычисляемые колонки имеют идентификатор, чтоб была возможность рулить видимостью колонки..
Лучше всё же прямой запрос.
Там и отборы и сортировка.. и не тормозит :)

20. Михаил Семенов (Shaman100M) 15.09.09 15:28
(19) используя спецсимвол "забой" ? ))) (FF)

Так, а в чем разница между обновлением колонки с идентификатором и без него? По конфе из (12) , - задание идентификатора колонке (в форме справочника) с ф-цией ДобавитьВСписок() ничего, вроде бы не меняет, - выдается тот же список видимых записей.
21. Епрст (Ёпрст) 15.09.09 15:51
(20)
Каюсь... попутал с табличной частью документа..
Там, если есть текстовая колонка в таб. части дока, то:
если писать Форма.Обновить()

Если есть идентификатор у колонки - вычисляться будут ВСЕ строки
если нет - только видимые...
Shaman100M; Арчибальд; +2 Ответить 1
22. Александр Рытов (Арчибальд) 15.09.09 15:56
(21) Ёпрст, как приятно (и полезно) пообщаться :))
23. Михаил Семенов (Shaman100M) 15.09.09 15:56
(0) обновил. Обновленные записи показываются красным (подсмотрел у Ёпрст), возможно отключение кэширования формы.
24. Александр Рытов (Арчибальд) 15.09.09 15:58
(23) У него чего только не подсмотришь :D
25. Михаил Семенов (Shaman100M) 16.09.09 10:07
(18) кстати, про обновление текущего элемента, есть вариант: порядок обновления элементов - "видимый", т.е. его можно программно спрогнозировать, - узнать текущий порядок сортировки, наличие отборов, размещение групп, иерархию, уровень. И текущий элемент (если он не в конце списка) прекрасным образом выпадает из этого порядка, его можно сразу.... Ну, а если порядок не нарушался, вызывать обработку ожидания.
26. Михаил Семенов (Shaman100M) 16.09.09 14:13
(0) обновил. Обновление текущего элемента теперь работает без лишних движений
27. Iom Nuerto (n949eo) 09.11.11 12:09
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа