|
8.2 УИ: Растёт индекс выбранной строки для ТаблицыЗначений | ☑ | ||
---|---|---|---|---|
0
wisekat
26.12.11
✎
20:40
|
Имеем реквизит формы типа "ТаблицаЗначений", который используется как ПутьКДанным в одноимённой таблице-элементе. По некоторому алгоритму эта ТЗ обновляется в коде команды наподобие следующего:
Перем ТЗ; ТЗ = РеквизитФормыВЗначение("ТаблицаМесяц"); ТЗ.Очистить(); // заполняем как-то заново ТЗ ЗначениеВРеквизитФормы(ТЗ, "ТаблицаМесяц"); Если после повторного выполнения данного кода пытаюсь обратиться в событии Выбор для таблицы к выбранной строке: Процедура ТаблицаМесяцВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ДатаНачала = ТаблицаМесяц_Даты[ВыбраннаяСтрока][ИмяКолонки]; , получаю ошибку "Индекс находится за границами массива". Параметр ВыбраннаяСтрока выдаёт значение, отличающееся от требуемого на количество строк, которые находились в предыдущий раз в этой таблице. Т.е. если в таблице до этого было 5 строк, и таблицу заполнили заново, то для первой выделенной строки значение будет уже 5, потом 10 и т.д. - при каждом обновлении значение "накручивается". Как это побороть? |
|||
1
wisekat
26.12.11
✎
21:01
|
После раскопок, как я понял, получается следующее. На самом деле параметр ВыбраннаяСтрока - это то же, что и свойство ТекущаяСтрока. В отладчике оно Число, но это не то же самое что и номер строки на экране!!!
При каждом вызове ЗначениеВРеквизитФормы создаётся новый набор строк в таблице, а ТекущаяСтрока - это согласно синтакс-помощнику на самом деле "Идентификатор текущей строки таблицы". Вот и получается, что строки каждый раз наращивают свой ID ;) Профессионалы, поправьте меня если я не прав. Но вообще я "худею" с этой 1С 8.2 УИ ... |
|||
2
wisekat
26.12.11
✎
21:19
|
Для любителей кода. Правильно надо было делать так:
Процедура ТаблицаМесяцВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Перем НомерТекущейСтроки, ИмяКолонки, ДатаНачала, Форма, ПараметрыФормы; НомерТекущейСтроки = ТаблицаМесяц.Индекс(ТаблицаМесяц.НайтиПоИдентификатору(ВыбраннаяСтрока)); ДатаНачала = ТаблицаМесяц_Даты[НомерТекущейСтроки][ИмяКолонки]; |
|||
3
wisekat
26.12.11
✎
21:20
|
Если после обновления таблицы хотите сделать активной текущую строку (она слетает), надо делать так:
Элементы.ТаблицаМесяц.ТекущаяСтрока = ТаблицаМесяц.Получить(НомерТекущейСтроки).ПолучитьИдентификатор(); |
|||
4
wisekat
26.12.11
✎
21:27
|
Элементы.ТаблицаМесяц.ТекущаяСтрока = ТаблицаМесяц.Получить(НомерТекущейСтроки).ПолучитьИдентификатор(); |
|||
5
ДенисЧ
26.12.11
✎
21:36
|
по поводу обновления и слетания строки - этому посвящён отдельный раздел в книге по УИ
|
|||
6
МишельЛагранж
26.12.11
✎
22:40
|
(0) это зачем и где используется все?
|
|||
7
wisekat
27.12.11
✎
12:23
|
(5) На Главу 3.17 "Работа с таблицей в форме" из книги Радченко, Хрусталевой и сотоварищей намекаете? Вобщем-то, она как раз и дала ключ к разгадке страшной тайны текущей строки таблиц в УИ.
|
|||
8
wisekat
27.12.11
✎
12:26
|
(6) Кастомная система расчёта зарплаты, форма периодического (недельного) графика работ, визуальное представление в виде месяца. Когда бегаем по месяцам взад-вперёд, таблица для отображения раскладки на месяц постоянно перезаполняется.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |