Имя: Пароль:
1C
1C 7.7
v7: Работа с двумя объектами "ТаблицаЗначений"
,
0 МатьКузи
 
25.10.15
12:57
Коллеги, помогите разобраться с проблемой:
В экранной форме два объекта типа "ТаблицаЗначений", Таб2 подчинена таблице Таб1, т.е. при перемещении по Таб1 меняется информация в Таб2. При перемещении курсора(указателя мыши) в Таб2 перемещение по колонкам происходит (мышкой, стрелками клавы не важно), а по строкам нет! Двойной щелчок мышкой по первой строке Таб2 обрабатывается, по другим строкам - никакой реакции!
1 Фокусник
 
25.10.15
13:02
(0) вероятно, таб2 обновляется, поэтому выбранная в ней строка "сбрасывается"
2 spectre1978
 
25.10.15
13:02
(0) В стандартном визуальном представлении таблицы от клюшек обрабатывается только двойной щелчок или нажатие клавиши Ввод. Внутри обработчика вы можете получить текущую строку и текущую колонку и таким образом определить, в каком месте таблицы вы сейчас находитесь. Предварительно рекомендую проверить, а не пуста ли таблица. Собственно, все.
3 Фокусник
 
25.10.15
13:09
(1)+ так будет, если обновление таб2 выполняется формулой (в тексте) на форме обработки.
4 МатьКузи
 
25.10.15
13:16
(1) При щелчке в Таб2 и движении курсора Таб2 не обновляется.
(2) Таб2 не пуста и визуально, и программно стоит проверка на колво строк в Таб2.
В обработке дв щелчка по Таб2 сделал программно переход к след строке, выдал Предупреждение, вижу курсор на второй строке, как нажимаю ОК на предупреждении, возвращается на первую строку. Гонял через отладчик, Текущая строка в обработке Таб2 меняется.
5 Sserj
 
25.10.15
13:16
Нужно в том обработчике что обновляет Таб2 проверялось условие изменилась ли текущая строка в Таб1 и только тогда обновлять Таб2
6 МатьКузи
 
25.10.15
13:18
(5) Так это работает, что его проверять
7 МатьКузи
 
25.10.15
13:20
(3) Обновление Таб2 выполняется как функция "Информация" о строке из Таб1. Как еще можно ?
8 viktor_vv
 
25.10.15
13:27
(7) покажи функцию обновления
9 МатьКузи
 
25.10.15
13:36
(7) Примерно так:
Функция Информация();
    Если Таб1.КоличествоСтрок()=0 Тогда Возврат ""; КонецЕсли;
    
    Таб2.УдалитьСтроки();
    
    // Далее перебираю файл ДБФ, по условию добавляю строки в Таб2.
    // При этом считаю некую контрольную сумму
    
    Возврат    КонтрольнаяСумма;

КонецФункции //Информация()
10 Фокусник
 
25.10.15
13:43
(9) нужно в переменной модуля запомнить номер строки таб1 и обновлять таб2 только при изменении номера строки (сравнивать с этой переменной). А пока строка не изменилась, не "дергать" таб2
11 МатьКузи
 
25.10.15
13:54
(10) Зачем его запоминать? Сейчас проверил через отладчик: функция вышеописанная не "дергается" при перемещении по колонкам Таб1, а только по строкам Таб1. Это работает. Не могу добиться перемещения по строкам Таб2 !
12 Фокусник
 
25.10.15
14:11
(11)в том и дело: при перемещении  по строкам таб2 функция дергается и перезаполняет таб2, а если анализировать номер строки таб1 и его неизменность, то таб2 останется бе перезаполнения и в ней не будет сливаться текущая строка.
Поставь Предупреждение("перезаплняем таб2") в свою функцию и станет наглядно...
13 HawkEye
 
25.10.15
14:24
(11) если у тебя Таб2 перересовывается в зависимости от ТекущейСтроки Таб1, значит функция висит на форме, а значит и  вызывается они при ЛЮБОМ изменении формы..

если ты не будешь проверять изменилась ли текущаястрока таб1, таб2 у тебя будет постоянно перезаполняться и текущей в таб2 всегда будет первая...
14 МатьКузи
 
25.10.15
14:29
(11) Не думал, что функция дергается при перемещении по Таб2. Сохранил, проанализировал, получилось! Фокусник,  HawkEye спасибо. И всем за участие !
Программист всегда исправляет последнюю ошибку.