|
удаление строк из таблицызначений | ☑ | ||
---|---|---|---|---|
0
lucifer
02.07.12
✎
10:59
|
На форме лежит таблицазначений (реквизит формы)
в нее добавляются несколько строк, например 3. Обработчик при удалении: строки = Элементы.ТЗ.ВыделенныеСтроки; Для каждого к из строки Цикл текданные = ТЗ[к].ключ; Если текданные <> ПустаяСсылка Тогда Строка = ТЗ2.Добавить(); Строка.СсылкаКлюч= текданные; ЭтаФорма.Модифицированность = Истина; КонецЕсли; КонецЦикла; т.е. мне нужно значение из удаляемых строк записывать в другую таблицу. Проблема в следующем, если у нас на форме в ТЗ добавлено 3 строки, я сначала удаляю вторую, потом остальные две, и 1с орет что индекс находится на приделами значений, понятное дело почему, т.к. мы сначала удалили строку с индексом 1 потом идет обращение к строке с индексом 2, а ее уже нет, т.к. 1с где-то в кишках у себя перестроила индексы, однако Элементы.ТЗ.ВыделенныеСтроки все равно возвращает массив такого вида индекс массива значение --------------+--------- 0 0 --------------+--------- 1 2 |
|||
1
Maxus43
02.07.12
✎
11:01
|
с конца удаляют в ТЗ строки, а не сначала
|
|||
2
Tymoha
02.07.12
✎
11:04
|
делай найтистроки по отбору, получишь массив строк, дальше от него и пляшешь ...
|
|||
3
ZanderZ
02.07.12
✎
11:04
|
(1) можно и с начала..
|
|||
4
qeos
02.07.12
✎
11:06
|
(3) как? двумя циклами?
|
|||
5
lucifer
02.07.12
✎
11:11
|
(2) мне нужно выделеные строки удалять
|
|||
6
lucifer
02.07.12
✎
11:12
|
(1) что значит с конца, какая разница откуда, если я обращаюсь к индексу 2, а его нет, там индексы 0 и 1
|
|||
7
ale-sarin
02.07.12
✎
11:12
|
(5) В (2) все правильно сказали.
|
|||
8
Eugene_life
02.07.12
✎
11:13
|
(5) Отбором найди выделенные строки, скопируй в другую таблицу. Если нужно - эти строки удали.
|
|||
9
lucifer
02.07.12
✎
11:13
|
(7) я массив строк и так
Элементы.ТЗ.ВыделенныеСтроки; получаю |
|||
10
lucifer
02.07.12
✎
11:14
|
(8) ок, покажите мне пример отбора который вытащит только выделенные строки
|
|||
11
Eugene_life
02.07.12
✎
11:20
|
строки = Элементы.ТЗ.ВыделенныеСтроки;
КолвоСтрок = строки.Количество()-1; Пока КолвоСтрок <= 0 Цикл текданные = ТЗ[КолвоСтрок].ключ; Если текданные <> ПустаяСсылка Тогда Строка = ТЗ2.Добавить(); Строка.СсылкаКлюч= текданные; ЭтаФорма.Модифицированность = Истина; КонецЕсли; КолвоСтрок = КолвоСтрок -1; КонецЦикла; |
|||
12
lucifer
02.07.12
✎
11:27
|
(11) а если я хочу удалить только вторую или третью строку (одну) удалится первая
|
|||
13
lucifer
02.07.12
✎
11:42
|
tcnm tot vsckb e rjuj ybnm&
|
|||
14
lucifer
02.07.12
✎
11:42
|
ой
|
|||
15
lucifer
02.07.12
✎
11:45
|
мысли есть еще?
|
|||
16
Serg_1960
02.07.12
✎
11:48
|
Отбор. В отборе - ссылки - их и удаляй. Хоть с начала, хоть с конца - по барабану.
|
|||
17
anddro
02.07.12
✎
11:55
|
отбор это правильно, но не всегда подходит (в нем только условия на равенство)
Для Сч = 1 - ТаблицаЗначений.Количество() По 0 Цикл СсылкаНаСтроку = ТаблицаЗначений[-Сч]; Если ФункцияПроверки(СсылкаНаСтроку) Тогда ТаблицаЗначений.Удалить(СсылкаНаСтроку); КонецЕсли; КонецЦикла; |
|||
18
Eugene_life
02.07.12
✎
12:08
|
(12) Если ты хочешь удалить одну строку - то удаляй ее по индексу
ТЗ.Удалить(ТекСтрока); |
|||
19
lucifer
02.07.12
✎
12:56
|
(17) ФункцияПроверки() - как я проверю строку на то что она выделена (выбрана)
(18) даже если не одну а две пятую и шестую, в твоем примере удалятся 2 первые строки |
|||
20
lucifer
02.07.12
✎
15:28
|
вот почему
Элементы.ТЗ.ВыделенныеСтроки не меняет индексы? т.е. остаются старые, если сохранить и закрыть, и опять это же проделать. тогда все нормально |
|||
21
lucifer
02.07.12
✎
15:54
|
нашел решение, может кому пригодится
в цикл (0) добавить текданные = ТЗ.найтипоидентификатору(к) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |