|
Как различить события ПриАктивизацииСтроки в списке? |
☑ |
0
DJ Anthon
07.07.21
✎
03:41
|
Оно вызывается и при тыканьи мышкой, и при установке ТекущаяСтрока. Мне надо, чтобы при установке ТекущаяСтрока оно не вызывалось.
Дело в том, что на форме много списков и они вызывают друг у друга установку текущих строк, поэтому простыми заглушками не отделаешься.
Есть какой-нибудь способ отличить интерактивную смену строки от программной?
|
|
1
Chameleon1980
07.07.21
✎
06:18
|
перед программной активацией устанавливай свой флаг (реквизит формы)
в процедуре активации проверяй и снимай
|
|
2
Ненавижу 1С
гуру
07.07.21
✎
07:30
|
+(1) совсем уже думать не хотят
|
|
3
Ёпрст
гуру
07.07.21
✎
10:24
|
(0) самый православный способ ухода от зацикливания такой:
&НаКлиенте
Процедура ХреньПриАктивизацииСтроки(Элемент)
Если ТекущийЭлемент = Элемент Тогда //идея ясна ? обрабатываем, только если мышой тыркнули в активный элемент, всякие программные активизации идут лесом
ПодключитьОбработчикОжидания("Подключаемый_ХреньПриАктивизацииСтроки", 0.1, Истина);
Конецесли;
КонецПроцедуры
|
|
4
acht
07.07.21
✎
10:49
|
(0) Нефиг использовать контекстные серверные вызовы там, где их прямо запрешено использовать.
|
|
5
DJ Anthon
07.07.21
✎
11:08
|
(3) я так и делал
(4) да, я в курсе, но у меня все серверные вызовы были вынесены, как в (3)
Но вот что удалось выяснить.
Элементы.ИнформационнаяПанельНаименованиеТовара.Заголовок = Элементы.СписокСтандартныйПоискНоменклатура.ТекущаяСтрока;
Как оказалось, этот код - тоже серверный вызов.
То есть я меняю заголовок кнопки/поля на форме, не обращаясь к реквизитам ссылки, а даже просто ссылка, как она есть - тоже серверный вызов.
Именно он мне пудрил мозги, а найти было его сложно.
Я его перенес в серверную часть и всё заработало.
Правда, флаги всё равно пришлось сделать через структуру.
Основная методика получилась такой:
реквизит формы Стопы типа Произвольный
при открытии присваиваем ему тип Структура.
на форме
&НаКлиенте
Процедура А_СписокСтандартныйПоискНоменклатураПриАктивизацииСтрокиПосле(Элемент)
Если Стопы.Свойство("СписокСтандартныйПоискНоменклатура") Тогда
Стопы.Удалить("СписокСтандартныйПоискНоменклатура");
Возврат;
КонецЕсли;
....
КонецПроцедуры
Как использовать:
...
Стопы.Вставить("СписокСтандартныйПоискНоменклатура", Истина);
Элементы.СписокСтандартныйПоискНоменклатура.ТекущаяСтрока = ТекущиеДанные.Номенклатура;
Стопы.Удалить("СписокСтандартныйПоискНоменклатура");//иногда надо, иногда нет
...
Это в упрощенном виде.
Проблема была в том, что я не мог найти, от чего запускались все события активации, хотя серверных вызовов не видно. Опытным путем перебрать тысячу строк кода тоже не хотелось, но все равно пришлось это сделать и вроде всё решилось. Просто я копировал стандартный функционал из трех типовых в одну, а там у них черт ногу сломит.
|
|
6
acht
07.07.21
✎
11:24
|
(5) > Опытным путем перебрать тысячу строк кода
https://ibb.co/ZmdPZhn
Ваш К.О.
|
|
7
DJ Anthon
07.07.21
✎
12:38
|
(6) я думал, что серверные вызовы - это вызовы процедур с пометкой &НаСервере. Знать бы что искать...
|
|
8
Вафель
07.07.21
✎
13:04
|
(5) конечно серверный. текущая строка - ссылка. заголовок - строка. У тебя неявное представление ссылки получается
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший