Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как различить события ПриАктивизацииСтроки в списке?

Как различить события ПриАктивизацииСтроки в списке?
Я
   DJ Anthon
 
07.07.21 - 03:41
Оно вызывается и при тыканьи мышкой, и при установке ТекущаяСтрока. Мне надо, чтобы при установке ТекущаяСтрока оно не вызывалось.
Дело в том, что на форме много списков и они вызывают друг у друга установку текущих строк, поэтому простыми заглушками не отделаешься.
Есть какой-нибудь способ отличить интерактивную смену строки от программной?
   Chameleon1980
 
1 - 07.07.21 - 06:18
перед программной активацией устанавливай свой флаг (реквизит формы)
в процедуре активации проверяй и снимай
   Ненавижу 1С
 
2 - 07.07.21 - 07:30
+(1) совсем уже думать не хотят
   Ёпрст
 
3 - 07.07.21 - 10:24
(0) самый православный способ ухода от зацикливания такой:


&НаКлиенте
Процедура ХреньПриАктивизацииСтроки(Элемент)
    Если ТекущийЭлемент = Элемент Тогда  //идея  ясна ? обрабатываем, только если мышой тыркнули в активный элемент, всякие программные активизации идут лесом

        ПодключитьОбработчикОжидания("Подключаемый_ХреньПриАктивизацииСтроки", 0.1, Истина);
    Конецесли;
КонецПроцедуры
   acht
 
4 - 07.07.21 - 10:49
(0) Нефиг использовать контекстные серверные вызовы там, где их прямо запрешено использовать.
   DJ Anthon
 
5 - 07.07.21 - 11:08
(3) я так и делал
(4) да, я в курсе, но у меня все серверные вызовы были вынесены, как в (3)
Но вот что удалось выяснить.
    Элементы.ИнформационнаяПанельНаименованиеТовара.Заголовок = Элементы.СписокСтандартныйПоискНоменклатура.ТекущаяСтрока;
Как оказалось, этот код - тоже серверный вызов.
То есть я меняю заголовок кнопки/поля на форме, не обращаясь к реквизитам ссылки, а даже просто ссылка, как она есть - тоже серверный вызов.
Именно он мне пудрил мозги, а найти было его сложно.
Я его перенес в серверную часть и всё заработало.
Правда, флаги всё равно пришлось сделать через структуру.
Основная методика получилась такой:

реквизит формы Стопы типа Произвольный
при открытии присваиваем ему тип Структура.

на форме

&НаКлиенте
Процедура А_СписокСтандартныйПоискНоменклатураПриАктивизацииСтрокиПосле(Элемент)
    Если Стопы.Свойство("СписокСтандартныйПоискНоменклатура") Тогда
        Стопы.Удалить("СписокСтандартныйПоискНоменклатура");
        Возврат;
    КонецЕсли;
....
КонецПроцедуры


Как использовать:
...
            Стопы.Вставить("СписокСтандартныйПоискНоменклатура", Истина);
            Элементы.СписокСтандартныйПоискНоменклатура.ТекущаяСтрока = ТекущиеДанные.Номенклатура;
            Стопы.Удалить("СписокСтандартныйПоискНоменклатура")//иногда надо, иногда нет
...


Это в упрощенном виде.

Проблема была в том, что я не мог найти, от чего запускались все события активации, хотя серверных вызовов не видно. Опытным путем перебрать тысячу строк кода тоже не хотелось, но все равно пришлось это сделать и вроде всё решилось. Просто я копировал стандартный функционал из трех типовых в одну, а там у них черт ногу сломит.
   acht
 
6 - 07.07.21 - 11:24
(5) > Опытным путем перебрать тысячу строк кода
https://ibb.co/ZmdPZhn

Ваш К.О.
   DJ Anthon
 
7 - 07.07.21 - 12:38
(6) я думал, что серверные вызовы - это вызовы процедур с пометкой &НаСервере. Знать бы что искать...
   Вафель
 
8 - 07.07.21 - 13:04
(5) конечно серверный.
текущая строка - ссылка.
заголовок - строка.
У тебя неявное представление ссылки получается

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.