Тормоза на форме при изменении видимости элемента

1. a_a_burlakov 287 25.04.18 10:04 Сейчас в теме
Всем добрый день. Прошу помочь.

Есть АРМ пользователя в виде управляемой формы. Форма имеет в себе несколько динамических списков и около десятка кнопок, то есть достаточно громоздкая.

Для одной из таблиц я сделал изменяемое контекстное меню. То есть при двойном нажатии ЛКМ пользователь видит менюшку, как будто бы нажал ПКМ. В зависимости от данных в строке таблицы меняется видимость строк контекстного меню. Иногда показывается четыре строки, иногда - одна.

На файловой базе всё работает очень быстро, но на серверной при каждом нажатии на таблицу происходят тормоза от 2 до 6 секунд. Работать становится не очень весело. Эти тормоза происходят только тогда, когда меняется видимость элементов контекстного меню. Если программный код не меняет их видимость, то и тормозов нет. Сам код оптимальный, работает очень быстро.

Есть подозрение, что при изменении видимости элемента контекстного меню происходит обновление элементов всей формы.

Но как на это повлиять? Можно ли сделать так, чтобы конкретный элемент просто стал невидимым, и всё?
Встречался ли кто-нибудь с таким поведением управляемых форм? Как решали такой вопрос?

Буду благодарен за помощь/советы/опыт.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vafla 25.04.18 10:23 Сейчас в теме
Какая версия платформы? На старых версиях изменение видимости элементов приводило к неявному вызову сервера
a_a_burlakov; +1 Ответить
3. Vafla 25.04.18 10:27 Сейчас в теме
Попробуйте ещё изменять не видимость, а доступность элементов.
a_a_burlakov; +1 Ответить
4. a_a_burlakov 287 25.04.18 11:14 Сейчас в теме
(3) Платформа 8.3.10.2580.

А с доступностью-то всё да, - работает без тормозов. Но неактивные поля, занимающие место, раздражают глаз.
5. dandykry 10 25.04.18 11:53 Сейчас в теме
(4) Сделайте замер производительности. Скорее всего происходит неявный серверный контекстный вызов при смене видимости. После него все динамические списки обновляют свои данные.
a_a_burlakov; +1 Ответить
6. a_a_burlakov 287 25.04.18 11:59 Сейчас в теме
(5) Спасибо. А замер разве покажет неявный серверный вызов? Замер я делал, но он мне показывал длительность явных операций (кода то есть).
7. dandykry 10 25.04.18 12:47 Сейчас в теме
(6) хм...А значек "Обработано сервером" при смене видимости не видно?
a_a_burlakov; +1 Ответить
8. a_a_burlakov 287 25.04.18 13:01 Сейчас в теме
(7) Неа. Может, мои лыжи не едут, но в упор не вижу ни значка, ни колонки "Обработано сервером".
9. dandykry 10 25.04.18 13:43 Сейчас в теме
10. a_a_burlakov 287 25.04.18 13:59 Сейчас в теме
(9) Ага, я там и искал, но трёх правых колонок у меня на табло нет. Уже погуглил, но не раскурил, когда они появляются, а когда нет.
11. dandykry 10 25.04.18 14:06 Сейчас в теме
(10) Хорошо. Если у ДС есть событие ПриполученииДанныхНаСервере (появилось в одной из 8.3 но не помню какой), ставьте там точку остановки. Смотрите, при смене видимости ДС получает данные или нет.

Другие варианты:
1) Искать корни технологическим журналом
2) Сделать то что задумали через УсловноеОформление формы
3) Сделать Группу Страницы и менять у нее текущую страницу (вкладки скрыть)
a_a_burlakov; +1 Ответить
12. dandykry 10 25.04.18 14:09 Сейчас в теме
(10) Видимость на стороне клиента или сервера изменяется?
a_a_burlakov; +1 Ответить
13. a_a_burlakov 287 25.04.18 14:26 Сейчас в теме
(12) Вот сейчас тестил по вашей наводке событие "ПриполученииДанныхНаСервере", которое действительно используется, и уже был готов кричать аллилуйю, но, к сожалению, даже без этого события всё так же медленно.

Видимость пытался изменять и на сервере, передавая туда форму, и на клиенте, и разницы нет: везде медленно.

По вариантам:
1) С ТЖ опыта не было, но буду раскуривать в крайнем случае;
2) С условным оформлением пробовал: там, к сожалению, нельзя картинки ставить красивые на поле контекстного меню;
3) В контекстном меню страницы, к сожалению, настроить нельзя.
14. dandykry 10 25.04.18 14:39 Сейчас в теме
(13)
Покажите код, которым меняете контекстное меню.
a_a_burlakov; +1 Ответить
15. a_a_burlakov 287 25.04.18 14:49 Сейчас в теме
(14) Код вот, он примитивный. Есть 8 кнопок, я меняю их видимость в зависимости от текущих данных при двойном нажатии на ЛКМ.

Этот же механизм пытался использовать и на сервере, и в событии активизации ячейки.

&НаКлиенте
Процедура ТаблицаРасписанияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ТекущиеДанные = Элементы.ТаблицаРасписания.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	// Для удобства обозначаем переменные, которые будем использовать в условиях видимости
	ЗаписьНаПриемЗаполнена = ЗначениеЗаполнено(ТекущиеДанные.ЗаписьНаПрием);
	ПациентЗаполнен = ЗначениеЗаполнено(ТекущиеДанные.Пациент);
	ЗаполненоПоле = ЗначениеЗаполнено(ТекущиеДанные.СтрокаПациента);
	СтоитБронь = ( ТекущиеДанные.Бронь ); 
	ВходитВГрафик = ТекущиеДанные.ВходитВГрафик;
	СтоитОтметка = ( ТекущиеДанные.ОтметкаВыполнения = Истина ); 	
	
	Элементы.ТаблицаРасписанияКонтекстноеМенюСоздатьЗапись.Видимость = НЕ ЗаписьНаПриемЗаполнена И НЕ СтоитБронь;
	Элементы.ТаблицаРасписанияКонтекстноеМенюПросмотретьПрием.Видимость = ЗаписьНаПриемЗаполнена;
	Элементы.ТаблицаРасписанияКонтекстноеМенюОтменитьПрием.Видимость = ЗаписьНаПриемЗаполнена;
	Элементы.ТаблицаРасписанияКонтекстноеМенюВыбратьПациента.Видимость = ПациентЗаполнен;
	Элементы.ТаблицаРасписанияКонтекстноеМенюБронь.Видимость = НЕ ЗаполненоПоле И НЕ СтоитБронь;
	Элементы.ТаблицаРасписанияКонтекстноеМенюСнятьБронь.Видимость = СтоитБронь;
	Элементы.ТаблицаРасписанияКонтекстноеМенюОтметкаПосещения.Видимость  = ЗаписьНаПриемЗаполнена И НЕ СтоитОтметка;
	Элементы.ТаблицаРасписанияКонтекстноеМенюОтметкаПосещенияУбрать.Видимость = ЗаписьНаПриемЗаполнена И СтоитОтметка;
		
	// программно вызываем контексное меню
	Скрипт = Новый COMОбъект("WScript.Shell");
	Скрипт.SendKeys("+{F10}");
	
КонецПроцедуры
Показать
16. dandykry 10 25.04.18 14:58 Сейчас в теме
(15) Как вариант, можно попробовать сделать реквизиты формы ЗаписьНаПриемЗаполнена и т д. и к нему привязать условное оформление на видимость команд.
Пока нет времени тестовую обработку сделать, чтоб показать как. Чуть позже выложу если ничего не получится у вас
a_a_burlakov; +1 Ответить
17. a_a_burlakov 287 25.04.18 15:09 Сейчас в теме
(16) О, идея интересная, обязательно попробую. Немного потормозил, так как думал в эту сторону, но не видел в условном оформлении поля "Видимость". Отпишусь, но завтра. :)

Огромное спасибо за помощь.
18. dandykry 10 25.04.18 15:26 Сейчас в теме
(17) Не выйдет. Я попробовал. Больше вариантов пока не имею
a_a_burlakov; +1 Ответить
19. a_a_burlakov 287 26.04.18 07:16 Сейчас в теме
(18) Ну да, как оказалось, условное оформление формы, по крайней мере при изменении видимости, влияет только на таблицы.

Пока сделал так: создал четыре кнопки в контекстном меню, видимость которых не изменяется. Изменяется при выборе строки только картинка, заголовок и функционал. Так работает быстрее, хоть и иногда остается в контекстном меню 1-3 пустые строки, влияющие на эстетическое чувство.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот