|
Как различить события ПриАктивизацииСтроки в списке? | ☑ | ||
---|---|---|---|---|
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
|
||||
7
DJ Anthon
07.07.21
✎
12:38
|
(6) я думал, что серверные вызовы - это вызовы процедур с пометкой &НаСервере. Знать бы что искать...
|
|||
8
Вафель
07.07.21
✎
13:04
|
(5) конечно серверный.
текущая строка - ссылка. заголовок - строка. У тебя неявное представление ссылки получается |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |