Удаление строки из таблицы значений

1. HAMMER_59 245 26.04.17 10:22 Сейчас в теме
Команда для удаление строки
ИндексСтроки = Элементы.СписокСловДляКонтроля.ТекущаяСтрока;
СписокСловДляКонтроля.Удалить(ИндексСтроки);


Событие "Выбор" для ТЗ
&НаКлиенте
Процедура СписокСловДляКонтроляВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	// Вставить содержимое обработчика.
	сСписокСловДляКонтроля = СписокСловДляКонтроля[ВыбраннаяСтрока];
	текПеревод = ПолучитьПеревод(сСписокСловДляКонтроля.Слово);
	
	ПоказатьПредупреждение(,текПеревод);
КонецПроцедуры


&НаСервереБезКонтекста
Функция ПолучитьПеревод(вхСлово)
	Возврат вхСлово.Перевод;
	
КонецФункции
Показать


Казалось бы все просто, но не работает. После удаление строки. Если "выбрать" строку ниже удаленной, выдает данные на строку ниже, хотя отображает верно.

Пример:
Состояние 1 строки
1
2
3
4
5

Удаляем 2
Выбираем 3
На экране видим сообщение по 4 строке.

Что я не так делаю?
По теме из базы знаний
Найденные решения
12. ImHunter 315 26.04.17 10:54 Сейчас в теме
Попробуйте удалять так:
	ИД = Элементы.Реквизит1.ТекущаяСтрока;
	Реквизит1.Удалить(Реквизит1.НайтиПоИдентификатору(ИД));
creatermc; herfis; HAMMER_59; sommid; m-serg74; +5 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. WasiliyMay 8 26.04.17 10:37 Сейчас в теме
(1) Обсуждалось уже много раз. Делайте обход выборки с конца. Тогда смещение индекса не будет мешать.
5. HAMMER_59 245 26.04.17 10:40 Сейчас в теме
(4) Где вы видите выборку? Где вы видите обход выборки?
6. m-serg74 46 26.04.17 10:47 Сейчас в теме
(5) ну надо же было что то написать:)
7. a3a 15 26.04.17 10:47 Сейчас в теме
(5) если нету то нужно сделать обход выборки, и с конца, иначе индексы сбиваются.
8. m-serg74 46 26.04.17 10:51 Сейчас в теме
(7) хватит бредить, человек удаляет одну строку, конкретную причекм тут обходы и выборки?
HAMMER_59; +1 Ответить
9. WasiliyMay 8 26.04.17 10:51 Сейчас в теме
(5) А. Извиняюсь. Затупил. Заголовок только прочитал)
10. m-serg74 46 26.04.17 10:52 Сейчас в теме
(1)
СписокСловДляКонтроляВыбор


а что это за событие - Событие "Выбор" для ТЗ ?
НачалоВыбора, НачалоВыбораИзСписка, ОбработкаВыбора... а просто Выбор не видно такого


сорри
14. m-serg74 46 26.04.17 11:02 Сейчас в теме
(1) ИМХО можно сделать так:

&НаКлиенте
Процедура СписокСловДляКонтроляВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
сСписокСловДляКонтроля = СписокСловДляКонтроля[Элемент.ТекущаяСтрока];
2. Sokar 26.04.17 10:31 Сейчас в теме
ессно... удаление приводит к смещению индекса, ту столько копий уже поломали на подобных удалениях
я для себя привык нужные позиции выгружать в пустой клон таблицы или списка, пропуская те, которые нужно удалить, потом чищу исходную таблицу и загружаю в нее из клона "отфильтрованные" нужные позиции...
да, может не очень практично, зато без ошибок ))
3. Viger 26.04.17 10:33 Сейчас в теме
Все логично, удаляете строку, ТЗ изменяется и на место удаленной попадает следующая за ней, а вы получаете строку по индексу до удаления в результате получаете следующую строку относительно той которую хотели.
11. HAMMER_59 245 26.04.17 10:53 Сейчас в теме
(3) А мне не логично.
Я удаляю первую строку. И вижу на экране что удаляется первая строка.
Теперь делаю выбор первой строки (которая раньше была второй), и получаю индекс строки 1.
Мне не понятно почему 1, когда я вижу на экране что строка первая, а значит индекс строки должен быть 0.
13. m-serg74 46 26.04.17 10:57 Сейчас в теме
(11) здесь (в УФ индекс немного не то), надо работать с Идентификаторами, а они не меняются от удаления строк
т.е. добавили в таблицу 10 строк, потом первые 9 удалили, оставшаяся будет все равно иметь идентификатор 10
HAMMER_59; +1 Ответить
15. herfis 499 26.04.17 11:12 Сейчас в теме
(11) Это не индекс. "ВыбраннаяСтрока" в обработчике выбора - это идентификатор строки.
18. m-serg74 46 26.04.17 11:21 Сейчас в теме
(15) ага или массив... так то
19. herfis 499 26.04.17 11:25 Сейчас в теме
(18) Да. Но можно на это закрыть глаза. Когда массив - ты и так будешь точно знать, что как вариант ожидаешь массив :)
12. ImHunter 315 26.04.17 10:54 Сейчас в теме
Попробуйте удалять так:
	ИД = Элементы.Реквизит1.ТекущаяСтрока;
	Реквизит1.Удалить(Реквизит1.НайтиПоИдентификатору(ИД));
creatermc; herfis; HAMMER_59; sommid; m-serg74; +5 Ответить
20. HAMMER_59 245 26.04.17 11:26 Сейчас в теме
24. ImHunter 315 26.04.17 11:31 Сейчас в теме
(20) Всегда пожалуйста, земеля:)
16. HAMMER_59 245 26.04.17 11:16 Сейчас в теме
Попробую по-другому объяснить.
Есть ТЗ, эта ТЗ размещена на форме в виде Табличного поля.

Добавляю обработку Выбор, в которой хочу получить строку таблицы значений связанную с выбранной строкой Табличного поля.

Для меня казалось логичным, что ТекущаяСтрока в ТабличномПоле и ТЗ одна и та же. Но оказывается нет.

Как добраться до строки в ТЗ?
17. herfis 499 26.04.17 11:19 Сейчас в теме
(16) Тебе уже сказали в (12). Через НайтиПоИдентификатору().
Если очень хочется индекс, то его можно получить через РеквизитТЗ.Индекс(РеквизитТЗ.НайтиПоИдентификатору(ВыбраннаяСтрока))
HAMMER_59; +1 Ответить
21. m-serg74 46 26.04.17 11:26 Сейчас в теме
да так то можно на все закрыть глаза, просто пользователь выбирает две строки, и тыкает два раза мышью.... и что дальше будет?
22. herfis 499 26.04.17 11:27 Сейчас в теме
(21) А разве не успеет перевыбраться одна строка?
23. herfis 499 26.04.17 11:28 Сейчас в теме
Гы. Если кликать на подсвеченной строке, то нет :)
Но разве так кто-то делает?
25. m-serg74 46 26.04.17 11:44 Сейчас в теме
(23) поверь делают, вот пример из Акселота
&НаКлиенте
Процедура ТоварыЯчейкаПриИзменении(Элемент)
	
	текСтрока = Элементы.Товары.ТекущиеДанные;
	Для Каждого текВыдСтрока Из Элементы.Товары.ВыделенныеСтроки Цикл 
		Товары.НайтиПоИдентификатору(текВыдСтрока).Ячейка = текСтрока.Ячейка;
	КонецЦикла;

КонецПроцедуры
Показать


выделил несколько строк, в одной выбрал нужное значение, во всех выделенных заполнилось тем же значением поле
26. herfis 499 26.04.17 11:49 Сейчас в теме
(25) Прикольно. Только суть моего замечания в том, что либо ты изначально реализовываешь обработку множественного выбора (и тогда вопрос не стоит), либо он не предусмотрен. И если забыли его отключить, то упасть по эксепшну в случае если пользователь его ошибочно произвел - абсолютно нормально. В итоге либо будет запрещен множественный выбор, либо реализован (если пользователям это нужно).
27. m-serg74 46 26.04.17 11:51 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот