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

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

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

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

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

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

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

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

См. также

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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