УФ. "Текущая строка" сбивается при удалении строки. #728713


#0 by cube033
Есть таблица значений на форме, в ней есть, например, 4 строки. Нумерация от 0 до 3. Пользователь заполняет данные в предпоследней строке (номер 2), а дальше строка удаляется по номеру текущей строки. Остается три строки (от 0 до 2). Индексы строк не обновляются. Пользователь заполняет последнюю строку , но при попытке удалить текущую строку отладчик показывает номер текущей строки . Естественно, удаление проваливается, так как строки с индексом 3 на самом деле нет. Подскажите как совладать с номерами строк.
#1 by vicof
Наверное, удалять по идентификатору строки.
#2 by cube033
Какому именно идентификатору? Созданному вручную?
#3 by vicof
Синтаксис: ПолучитьИдентификатор Возвращаемое значение: Тип: Число. Описание: Получает идентификатор для элемента коллекции. Этот идентификатор не привязан к позиции элемента в коллекции. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.
#4 by cube033
Мне кажется в рамках платформы номер строки - это и есть её идентификатор
#5 by vicof
Тебе кажется
#6 by cube033
ИДЭлемента = Элементы.ТаСамаяТаблица.ТекущиеДанные.ПолучитьИдентификатор; Где "Элементы.ТаСамаяТаблица.ТекущиеДанные" имеет тип ДанныеФормыЭлементКоллекции. Для первой строки возвращает 0, для второй строки 1. Т.е. возвращает тот же номер строки. Более того - идентификатор точно так же сбивается при удалении одной из строк.
#7 by Жан Пердежон
по-моему тут только ты сбиваешься, в СП и специально написали: "...идентификатор не привязан к позиции элемента в коллекции."
#8 by cube033
Вижу, что написано. Однако также в написано, что на практике возвращает номер строки в таблице и также сбивается.
#9 by vicof
Спешл фо ю. Синтаксис: НайтиПоИдентификатору(<Идентификатор>) Параметры: Тип: Число. Идентификатор строки таблицы. Возвращаемое значение: Тип: ДанныеФормыЭлементКоллекции; Неопределено. Неопределено - элемент не найден. Описание: Получает элемент коллекции по идентификатору. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. См. также: ТаблицаФормы, свойство ВыделенныеСтроки
#10 by Мыш
Надо осознать, что индекс строки и номер строки - это разные сущности.
#11 by Мыш
Ещё надо осознать, что на форме не таблица значений, а табличное поле. У табличного поля есть источник данных. От типа значения источника данных зависит, будет ли в наличии служебный реквизит "НомерСтроки".
#12 by cube033
да я бы рад)) Есть метод "ПолучитьИдентификатор" он поможет мне найти идентификатор. (А не номер строки!!!). Чтобы воспользоваться методом мне нужны данные с типом "ДанныеФормыЭлементКоллекции". Отладчик твердит мне, что "Элементы.ТаСамаяТаблица.ТекущиеДанные" как раз имеют такой тип. Метод "ПолучитьИдентификатор" в данном случае возвращает Число точь в точь совпадающее с номером строки. Более того если пойти обратным путем в схожем направлении "ЭтаФорма.ТаСамаяТаблица.НайтиПоИдентификатору(ТотСамыйИдентификатор)" мы снова получим данные нашей строки.
#13 by Krabobor
вот ты упертый)
#14 by antoneus
теперь удали все строки и добавь парочку новых.
#15 by cube033
я бы рад - скажите кто-нибудь что-нибудь новое) Я же расписал результат прошлых советов.
#16 by Жан Пердежон
смотри как это выглядит со стороны: ты пощупал ПолучитьИдентификатор и он у тебя какое-то время совпадал с номером строки; ты, не читая СП, уверовал что это есть суть одно и тоже; потом ты начал проводить манипуляции с ТЧ - перемещать и удалять строки и вдруг: КАРАУЛ, ПАМАГИТЕ, ОНЕ СБИВАЮТСЯ!!1 В общем: Индекс<>НомерСтроки<>Идентификатор Надеюсь этот код как-то поможет (удаление выделенных строк на клиенте)     Для каждого Идентификатор из Элементы.ТаблицаНаФорме.ВыделенныеСтроки цикл         ТаблицаНаФорме.Удалить(ТаблицаНаФорме.НайтиПоИдентификатору(Идентификатор));         КонецЦикла
#17 by Drac0
Очисти таблицу и заполни снова. И, вуа-ля, индентификатор совсем-совсем не равен индексу и номеру строки.
#18 by Drac0
+ Это две абсолютно разные сущности. То, что они иногда совпадают не значит ничего. Это как часы со стрелкой и компас. Могут иногда показывать в одну сторону, но...
#19 by cube033
Как это выглядит это с моей стороны. Я: Не удаляются нормально строки - сбивается номер Не Я: Бери идентификатор Я: Что за идентификатор? Не Я: СП "ПолучитьИдентификатор" Я: О круто попробую... нифига тот же результат. Я же правильно использую метод? Не Я: Должно работать! Я: Не работает. Точно всё правильно?! Не Я: Должно работать! Не Я: Пойми - Должно работать! Не Я: Осознай - Должно работать! - Номер и Идентификатор могут совпадать! Это на самом деле нужная информация - так как фраза "Этот идентификатор не привязан к позиции элемента в коллекции"  - не прям супер очевидная. Не зная как работает метод "ПолучитьИдентификатор" можно предположить, что идентификатор возвращается относительно элементов формы, а не таблицы, так как тип данных: "ДанныеФормыЭлементКоллекции", и тогда значения 0 или 1 говорят, что я просто неправильно его применяю. Перечитывал СП много раз. Да это разные сущности - я понимаю, только выражены они в моем случае одним типом данных и значением. Да, я увидел бы разницу, если бы удалил/добавил строки, но не подразумевает интерфейс у меня такой функции - все автоматом. Можно конечно добавить кнопки добавление/удаление, но смысл? Ведь в итоге идентификатор дает тот же сбой!!! я ни разу не отрицал, что это разные сущности и они когда-то примут разные значения. А теперь решение: Суть решения в том, то минус на минус дает плюс. Помогла подсказка , а именно кусок кода оказался рабочим. Если взять тот же пример, то удаление первой строки показывает правильный идентификатор и удаляется правильная строка. Удаление следующей строки показывает идентификатор за пределами таблицы, но методу НайтиПоИдентификатору это не мешает и в итоге находится и удаляется верная строка.
#20 by Chameleon1980
в книгу
#21 by cube033
Что значит данное устойчивое выражение?
#22 by Cube
Хоспади, когда тебе уже надоест этот ник?)))) Сделай мини обработку на которой можно воспроизвести ошибку, а то ничего не понятно...
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С