|
v7: Удаление лишних строк в ТЗ (NNNN-ная ветка на эту тему) | ☑ | ||
---|---|---|---|---|
0
mirror1982
03.10.12
✎
14:26
|
Как в ТЗ в цикле удалить строки, которые не подходят мне по каким-то критериям.
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Товар........ Тогда ТЗ.УдалитьСтроку(); КонецЕсли; КонецЦикла; Это не работает! |
|||
1
Галахад
гуру
03.10.12
✎
14:27
|
Фигасе.
|
|||
2
mikecool
03.10.12
✎
14:28
|
(1) +1 и главное - при чем здесь копирование
|
|||
3
Zmich
03.10.12
✎
14:28
|
Баян.
Удалять строки надо с конца. |
|||
4
mirror1982
03.10.12
✎
14:30
|
(2) Ну можно из одной ТЗ скопировать данные, которые удовлетворяют моим условиям в другую чистую ТЗ. Без описаний колонок (можно ли так?)
|
|||
5
mirror1982
03.10.12
✎
14:33
|
ау
|
|||
6
Галахад
гуру
03.10.12
✎
14:35
|
||||
7
Pr0gLamer
03.10.12
✎
14:35
|
http://www.mista.ru/tutor_1c/tz.htm
там есть рабочий пример |
|||
8
mikecool
03.10.12
✎
14:35
|
(5) можно
|
|||
9
Zmich
03.10.12
✎
14:36
|
ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
ТЗ.Загрузить(ТЗ2); // а дальше удаляй строки в ТЗ2, только правильным алгоритмом, а не таким, как у тебя |
|||
10
mikecool
03.10.12
✎
14:36
|
копия ТЗ с колонками:
ТЗ1.Выгрузить(ТЗ2, 1, 1); ТЗ2.УдалитьСтроки(); все |
|||
11
МихаилМ
03.10.12
✎
14:38
|
лет 10 назад на хиппо (проклаб)
был конкурс на быстрое удааление строк в тз 1с 77 |
|||
12
Светлый Гений
03.10.12
✎
14:40
|
(0)что-нить типа
сч = 1; КолСтрок = ТЗ.КоличествоСтрок(); Пока сч <= КолСтрок Цикл ТЗ.ПолучитьСтрокуПоНомеру(сч); Если ТЗ.Товар........ Тогда ТЗ.УдалитьСтроку(сч); КолСтрок = КолСтрок - 1; Продолжить; КонецЕсли; сч = сч + 1; КонецЦикла; |
|||
13
Boroda
03.10.12
✎
14:40
|
Как уже было сказано, надо удалять с конца. Тогда все нормально.
Например я обычно делаю так: Для ц = -тз.КоличествоСтрок() по -1 Цикл тз.ПолучитьСтрокуПоНомеру(-ц); Если ...// Если условие выполняется тз.УдалитьСтроку(); КонецЕсли; КонецЦикла; |
|||
14
Boroda
03.10.12
✎
14:42
|
Для небольших таблиц иногда делаю как в (1), но добавляю после удаления строки тз.ВыбратьСтроки();
|
|||
15
Светлый Гений
03.10.12
✎
14:44
|
(14)все равно жесть ))
|
|||
16
Mikeware
03.10.12
✎
14:44
|
(14) лучше ИндексированнаяТаблица-ДобавитьИндекс-УстановитьФильтр-Выгрузить или ИндексированнаяТаблица-ДобавитьИндекс-УстановитьФильтр-УдалитьСтроки
|
|||
17
МихаилМ
03.10.12
✎
14:47
|
||||
18
Эльниньо
03.10.12
✎
16:58
|
Давненько не было самой популярной темы.
(3) Нет, сначала. Спорим? |
|||
19
Deon
03.10.12
✎
17:02
|
(18) А слабо из середины одновременно в разные стороны?
|
|||
20
Эльниньо
03.10.12
✎
17:05
|
(11) Мой алгоритм конкурс не прошёл, но в какой-то учебник попал.
Сейчас, как правило, его советуют. Странно, что здесь ещё не выложили. |
|||
21
Deon
03.10.12
✎
17:06
|
(20) Покажешь?
|
|||
22
Эльниньо
03.10.12
✎
17:15
|
(21) В (0) Если заменить на Пока. Ну и ещё пару строчек.
|
|||
23
Mikeware
03.10.12
✎
18:09
|
(19) легко. Только зачем?
кстати, выбор алгоритма изрядно зависит от критерия и входных данных. |
|||
24
acsent
03.10.12
✎
18:16
|
даже помнится конкурс на эту тему был
|
|||
25
Злопчинский
04.10.12
✎
16:37
|
//******************************************************************************
// ОчисткаТЗ() // Параметры: ТЗ, которую надо очистить // В ТЗ д.б. Колонки с идентификаторами "НадоУдалить" и "ОПС" (оригинальный порядок строк) // Описание: очищает ТЗ от ненужных строк Процедура глОчисткаТЗ(ТЗдляЧистки, ОПС="+ОПС", КолонкаУдалить="НадоУдалить", Режим=0) Экспорт Попытка НадоУдалить = ТЗдляЧистки.Итог(КолонкаУдалить); Исключение Возврат; КонецПопытки; ТЗКС = ТЗдляЧистки.КоличествоСтрок(); Если Режим <> 0 Тогда Сообщить("> ["+ТекущееВремя()+"]: *** удаляем "+НадоУдалить+" из "+ТЗКС+" ****"); КонецЕсли; Если НадоУдалить <= 0 Тогда Возврат; КонецЕсли; Если НадоУдалить >= ТЗКС Тогда ТЗдляЧистки.УдалитьСтроки(); Иначе ТЗРаб = СоздатьОбъект("ТаблицаЗначений"); ТЗдляЧистки.Выгрузить(ТЗРаб); ТЗРаб.Сортировать("+"+КолонкаУдалить); ТЗРаб.Выгрузить(ТЗдляЧистки,1,ТЗКС-НадоУдалить); ТЗРаб = 0; КонецЕсли; Если ОПС = "" Тогда Возврат; КонецЕсли; //сортировать не надо Если ОПС = "###" Тогда Возврат; КонецЕсли; //сортировать не надо //восстановим оригинальный порядок строк ТЗдляЧистки.Сортировать(ОПС); КонецПроцедуры //глОчисткаТЗ() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |