|
УФ. "Текущая строка" сбивается при удалении строки. | ☑ | ||
---|---|---|---|---|
0
cube033
15.12.14
✎
12:23
|
Есть таблица значений на форме, в ней есть, например, 4 строки. Нумерация от 0 до 3. Пользователь заполняет данные в предпоследней строке (номер 2), а дальше строка удаляется по номеру текущей строки. Остается три строки (от 0 до 2). Индексы строк не обновляются. Пользователь заполняет последнюю строку (2), но при попытке удалить текущую строку отладчик показывает номер текущей строки (3). Естественно, удаление проваливается, так как строки с индексом 3 на самом деле нет. Подскажите как совладать с номерами строк.
|
|||
1
vicof
15.12.14
✎
12:24
|
Наверное, удалять по идентификатору строки.
|
|||
2
cube033
15.12.14
✎
12:35
|
(1) Какому именно идентификатору? Созданному вручную?
|
|||
3
vicof
15.12.14
✎
12:37
|
ДанныеФормыЭлементКоллекции.ПолучитьИдентификатор (FormDataCollectionItem.GetID)
ДанныеФормыЭлементКоллекции (FormDataCollectionItem) ПолучитьИдентификатор (GetID) Синтаксис: ПолучитьИдентификатор() Возвращаемое значение: Тип: Число. Описание: Получает идентификатор для элемента коллекции. Этот идентификатор не привязан к позиции элемента в коллекции. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. |
|||
4
cube033
15.12.14
✎
12:37
|
Мне кажется в рамках платформы номер строки - это и есть её идентификатор
|
|||
5
vicof
15.12.14
✎
12:39
|
(4) Тебе кажется
|
|||
6
cube033
15.12.14
✎
12:59
|
(5) ИДЭлемента = Элементы.ТаСамаяТаблица.ТекущиеДанные.ПолучитьИдентификатор();
Где "Элементы.ТаСамаяТаблица.ТекущиеДанные" имеет тип ДанныеФормыЭлементКоллекции. Для первой строки возвращает 0, для второй строки 1. Т.е. возвращает тот же номер строки. Более того - идентификатор точно так же сбивается при удалении одной из строк. |
|||
7
Жан Пердежон
15.12.14
✎
13:07
|
(6) по-моему тут только ты сбиваешься, в СП и (3) специально написали: "...идентификатор не привязан к позиции элемента в коллекции."
|
|||
8
cube033
15.12.14
✎
13:15
|
(7) Вижу, что написано.
Однако также в (6) написано, что на практике возвращает номер строки в таблице и также сбивается. |
|||
9
vicof
15.12.14
✎
13:18
|
(8) Спешл фо ю.
ДанныеФормыКоллекция.НайтиПоИдентификатору (FormDataCollection.FindByID) ДанныеФормыКоллекция (FormDataCollection) НайтиПоИдентификатору (FindByID) Синтаксис: НайтиПоИдентификатору(<Идентификатор>) Параметры: <Идентификатор> (обязательный) Тип: Число. Идентификатор строки таблицы. Возвращаемое значение: Тип: ДанныеФормыЭлементКоллекции; Неопределено. Неопределено - элемент не найден. Описание: Получает элемент коллекции по идентификатору. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. См. также: ТаблицаФормы, свойство ВыделенныеСтроки ТаблицаФормы, свойство ТекущийРодитель ТаблицаФормы, свойство ТекущаяСтрока |
|||
10
Мыш
15.12.14
✎
13:37
|
(0) Надо осознать, что индекс строки и номер строки - это разные сущности.
|
|||
11
Мыш
15.12.14
✎
13:40
|
Ещё надо осознать, что на форме не таблица значений, а табличное поле. У табличного поля есть источник данных. От типа значения источника данных зависит, будет ли в наличии служебный реквизит "НомерСтроки".
|
|||
12
cube033
15.12.14
✎
13:48
|
(10) да я бы рад))
Есть метод "ПолучитьИдентификатор()" он поможет мне найти идентификатор. (А не номер строки!!!). Чтобы воспользоваться методом мне нужны данные с типом "ДанныеФормыЭлементКоллекции". Отладчик твердит мне, что "Элементы.ТаСамаяТаблица.ТекущиеДанные" как раз имеют такой тип. Метод "ПолучитьИдентификатор()" в данном случае возвращает Число точь в точь совпадающее с номером строки. Более того если пойти обратным путем в схожем направлении "ЭтаФорма.ТаСамаяТаблица.НайтиПоИдентификатору(ТотСамыйИдентификатор)" мы снова получим данные нашей строки. |
|||
13
Krabobor
15.12.14
✎
13:51
|
(12)
вот ты упертый) |
|||
14
antoneus
15.12.14
✎
13:52
|
(12) теперь удали все строки и добавь парочку новых.
|
|||
15
cube033
15.12.14
✎
14:01
|
(13) я бы рад - скажите кто-нибудь что-нибудь новое)
Я же расписал результат прошлых советов. |
|||
16
Жан Пердежон
15.12.14
✎
17:02
|
(15) смотри как это выглядит со стороны:
ты пощупал ПолучитьИдентификатор() и он у тебя какое-то время совпадал с номером строки; ты, не читая СП, уверовал что это есть суть одно и тоже; потом ты начал проводить манипуляции с ТЧ - перемещать и удалять строки и вдруг: КАРАУЛ, ПАМАГИТЕ, ОНЕ СБИВАЮТСЯ!!1 В общем: Индекс<>НомерСтроки<>Идентификатор Надеюсь этот код как-то поможет (удаление выделенных строк на клиенте) Для каждого Идентификатор из Элементы.ТаблицаНаФорме.ВыделенныеСтроки цикл ТаблицаНаФорме.Удалить(ТаблицаНаФорме.НайтиПоИдентификатору(Идентификатор)); КонецЦикла |
|||
17
Drac0
15.12.14
✎
17:05
|
(12) Очисти таблицу и заполни снова. И, вуа-ля, индентификатор совсем-совсем не равен индексу и номеру строки.
|
|||
18
Drac0
15.12.14
✎
17:06
|
+(17) Это две абсолютно разные сущности. То, что они иногда совпадают не значит ничего. Это как часы со стрелкой и компас. Могут иногда показывать в одну сторону, но...
|
|||
19
cube033
16.12.14
✎
07:14
|
(16) Как это выглядит это с моей стороны.
Я: Не удаляются нормально строки - сбивается номер Не Я: Бери идентификатор Я: Что за идентификатор? Не Я: СП "ПолучитьИдентификатор" Я: О круто попробую... нифига тот же результат. Я же правильно использую метод? Не Я: Должно работать! Я: Не работает. Точно всё правильно?! Не Я: Должно работать! Не Я: Пойми - Должно работать! Не Я: Осознай - Должно работать! (16)(17)(18) - Номер и Идентификатор могут совпадать! Это на самом деле нужная информация - так как фраза "Этот идентификатор не привязан к позиции элемента в коллекции" - не прям супер очевидная. Не зная как работает метод "ПолучитьИдентификатор()" можно предположить, что идентификатор возвращается относительно элементов формы, а не таблицы, так как тип данных: "ДанныеФормыЭлементКоллекции", и тогда значения 0 или 1 говорят, что я просто неправильно его применяю. (16) Перечитывал СП много раз. Да это разные сущности - я понимаю, только выражены они в моем случае одним типом данных и значением. Да, я увидел бы разницу, если бы удалил/добавил строки, но не подразумевает интерфейс у меня такой функции - все автоматом. Можно конечно добавить кнопки добавление/удаление, но смысл? Ведь в итоге идентификатор дает тот же сбой!!! (13) я ни разу не отрицал, что это разные сущности и они когда-то примут разные значения. А теперь решение: Суть решения в том, то минус на минус дает плюс. Помогла подсказка (16), а именно кусок кода оказался рабочим. Если взять тот же пример, то удаление первой строки показывает правильный идентификатор и удаляется правильная строка. Удаление следующей строки показывает идентификатор за пределами таблицы, но методу НайтиПоИдентификатору() это не мешает и в итоге находится и удаляется верная строка. |
|||
20
Chameleon1980
16.12.14
✎
07:19
|
(19) в книгу
|
|||
21
cube033
16.12.14
✎
07:29
|
(20)Что значит данное устойчивое выражение?
|
|||
22
Cube
16.12.14
✎
07:35
|
(0) Хоспади, когда тебе уже надоест этот ник?))))
Сделай мини обработку на которой можно воспроизвести ошибку, а то ничего не понятно... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |