Имя: Пароль:
1C
1С v8
8.2 Как отловить момент когда строку в табличной части сместили вверх/вниз
,
0 Aswed
 
12.12.16
13:54
САБЖ используя стандартные кнопки вверх/вниз
1 nordbox
 
12.12.16
13:56
Получить текущую позицию, запомнить, прочитать опять текущую(новую), сравнить
2 nordbox
 
12.12.16
13:57
+1 Получить текущую позицию = номер строки
3 nordbox
 
12.12.16
13:57
+2 процедуру впихнуть в обработку табличной части
4 Aswed
 
12.12.16
13:59
(1) Блин, а типового механизма нет?
А то это гемор.
5 nordbox
 
12.12.16
14:03
(4) а как ты себе представляешь типовой механизм????
6 Aswed
 
12.12.16
14:11
(5) ну есть же событие ПриПеретаскивании, могли бы и подобное сделать.
7 Cool_Profi
 
12.12.16
14:17
(6) У тебя есть шанс. Сменить жаркий юг на душную Москву...
8 Mort
 
12.12.16
14:18
Интересно, для чего понадобилось такое?
9 Aswed
 
12.12.16
14:21
(7) )))))
10 RomaH
 
naïve
12.12.16
14:23
запретить изменение порядка
и добавить свои две команды
11 Aswed
 
12.12.16
14:27
(8) Вот для этого

ТаблицаДанных[ВыбраннаяСтрока][Поле.Имя]

По индексу получаю значение.
При этом когда меняется порядок строки, значение ВыбраннаяСтрока остается первоначальной.

Т.е. поднимаю снизу списка строку наверх, а её номер по прежнему остается 18
12 RomanYS
 
12.12.16
14:31
(11) ВыбраннаяСтрока - это идентификатор, используй индекс и всё будет ОК.
13 Aswed
 
12.12.16
14:33
(12) Выбранная строка это число.
Номер строки в таблице

&НаКлиенте
Процедура ТаблицаДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
        ТаблицаДанных[ВыбраннаяСтрока][Поле.Имя] = НЕ ТаблицаДанных[ВыбраннаяСтрока][Поле.Имя];
14 lubitelxml
 
12.12.16
14:34
(10) +1
15 Aswed
 
12.12.16
14:36
Разрулил по другому

&НаКлиенте
Процедура ТаблицаДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
        ВыбраннаяСтрока = Таблицаданных.Индекс(Элемент.ТекущиеДанные);

        ТаблицаДанных[ВыбраннаяСтрока][Поле.Имя] = НЕ ТаблицаДанных[ВыбраннаяСтрока][Поле.Имя];    

Получил по индексу элемента
16 Aswed
 
12.12.16
14:36
Всем спасибо за участие.
17 RomanYS
 
12.12.16
14:42
(13) (15) потому что "идентификатор" :) (да числовой, не ГУИД).

Если "правильно" переименовать:

&НаКлиенте
Процедура ТаблицаДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
        ИндексВС = Таблицаданных.Индекс(ВыбраннаяСтрока);

        ТаблицаДанных[ВыбраннаяСтрока][Поле.Имя] = НЕ ТаблицаДанных[ИндексВС [Поле.Имя];
18 Aswed
 
12.12.16
14:46
ИндексВС = Таблицаданных.Индекс(ВыбраннаяСтрока);
будет возвращать всегда -1
19 RomanYS
 
12.12.16
14:55
(18) да тут я напутал:
на самом деле Элемент.ТекущиеДанные и Таблицаданных.НайтиПоИдентификатору(ВыбраннаяСтрока) это одно и тоже (элемент коллекции). А ВыбраннаяСтрока - как раз его(элемента) идентификатор.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший