Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

удаление строк ТЧ

удаление строк ТЧ
Я
   _barracuda_
 
10.05.18 - 16:38
Добрый день.
Удаляю строки:

Для каждого СтрокаТаблицы Из Товары Цикл
    если СтрокаТаблицы.Флаг=Истина Тогда
    Товары.Удалить(СтрокаТаблицы)    ;
    КонецЕсли;
КонецЦикла;


Не удаляется последняя строка

Хотя вроде все правильно:
Табличная часть (Tabular section)
Удалить (Delete)
Синтаксис:

Удалить(<Индекс>)
Параметры:

<Индекс> (обязательный)

Тип: Число; Строка табличной части.
Индекс удаляемой строки в табличной части, либо сама удаляемая строка.
 
 
   Buster007
 
1 - 10.05.18 - 16:40
плохой подход
   DrShad
 
2 - 10.05.18 - 16:40
классика
выборка сбивается
   _barracuda_
 
3 - 10.05.18 - 16:42
"либо сама удаляемая строка".Удаляю именно строку
   mr_K
 
4 - 10.05.18 - 16:42
НайтиСтроки.
Удалить
   _barracuda_
 
5 - 10.05.18 - 16:42
Продолжить; ??
   DrShad
 
6 - 10.05.18 - 16:43
(5) либо обход ТЧ с последней строки до первой
либо собрать строки которые нужно удалить в массив и обходом массива удалить из ТЧ
   bolobol
 
7 - 10.05.18 - 16:49
Как эти глупыши умудрились сбивать выборку при удалении строки, на которой выборка спозиционирована. Элемент Следующий известен на этапе позиционирования, вдруг... становится неким другим. Как в анекдоте: "Да как так-то??"
   Масянька
 
8 - 10.05.18 - 16:51
(7) Это не анекдот... Это классика...
"Средств у нас хватает. У нас ума не хватает" (Кот Матроскин).
   Ахмадинежад
 
9 - 10.05.18 - 16:52
Для х = - ТЗ.КоличествоСТрок() По -1 Цикл

ТекСтрока = ТЗ[-х-1];
ТЗ.Удалить(ТекСтрока);
КонецЦикла;
   _barracuda_
 
10 - 10.05.18 - 17:01
Сч = 0;
Пока Сч < Товары.Количество() Цикл
    СтрокаТаблицы = Товары.Получить(Сч);
        Товары.Удалить(СтрокаТаблицы);
    Сч = Сч + 1;
    КонецЦикла;

сделал так.средний не удаляется)
 
 Рекламное место пустует
   bolobol
 
11 - 10.05.18 - 17:03
(10) Написали же - НайтиСтроки, Удалить
   bolobol
 
12 - 10.05.18 - 17:04
(10) Так а чего в (10)-то написано? Чушь какая-то... Удаляешь строки, а счётчик увеличиваешь
   Buster007
 
13 - 10.05.18 - 17:05
(10) лучше так
Сч = 0;
Пока Сч < Товары.Количество() Цикл
        Товары.Удалить(Товары[0]);
    Сч = Сч + 1;
    КонецЦикла;
   bolobol
 
14 - 10.05.18 - 17:05
(13) Ещё один...
   Buster007
 
15 - 10.05.18 - 17:05
+(13) а еще можно Товары.Очистить()
   bolobol
 
16 - 10.05.18 - 17:07
(10) Кстати, а куда пропало условие удаления "если СтрокаТаблицы.Флаг=Истина Тогда" ?
   Timon1405
 
17 - 10.05.18 - 17:07
Лучше так 
ТЗ.удалить()
Конфигуратор.Закрыть()
Мозг.Включать()
Поиск.Использовать()
ТупыхТем.НеСоздавать()
   _barracuda_
 
18 - 10.05.18 - 17:09
Format C)))
   3achem
 
19 - 10.05.18 - 17:13
Классика

ВременнаяТЗ = ИсходнаяТЗ.Скопировать(); 
СтрокиУдалить = ВременнаяТЗ .НайтиСтроки(Новый Структура("ЧтоТо", ЧтоТо);
Для каждого Запись Из СтрокиУдалить Цикл    
ВременнаяТЗ.Удалить(Запись);    
КонецЦикла; 
ИсходнаяТЗ = ВременнаяТЗ;
   Buster007
 
20 - 10.05.18 - 17:23
(19) а чего 1 раз скопировал ТЗ только? Может еще раз на всякий случай скопировать?)
   3achem
 
21 - 10.05.18 - 17:23
(20) скопирую 5 раз, чтобы потом 4 раза ТЗ обнулить
   hhhh
 
22 - 10.05.18 - 17:41
(21) надо так
НаВсякийСлучайКопияТЗ = ИсходнаяТЗ;
ИсходнаяТЗ = ВременнаяТЗ;
   Масянька
 
23 - 10.05.18 - 17:50
(18) Блин... Ты даже хард форматнуть не можешь...
   _barracuda_
 
24 - 10.05.18 - 17:53
Лыжи не едут(((((
из 1,2,3 удаляет 1 и 3

ПараметрыОтбора = Новый Структура;
Для каждого СтрокаТаблицы Из Товары Цикл
    Если СтрокаТаблицы.Флаг=Истина Тогда
        //    ПараметрыОтбора = Новый Структура;

        ПараметрыОтбора.Вставить("Номенклатура", СтрокаТаблицы.Номенклатура);
        НайденныеСтроки =Товары.НайтиСтроки(ПараметрыОтбора);
        для каждого стр из  НайденныеСтроки Цикл
            Товары.Удалить(стр);
        КонецЦикла;
    КонецЕсли;
КонецЦикла;
   Масянька
 
25 - 10.05.18 - 17:55
(24) Кац предлагал сдаться (С)
   _barracuda_
 
26 - 10.05.18 - 17:56
Кац жив
   palladyi
 
27 - 10.05.18 - 17:57
Автор, когда ты удаляешь строчку из таблицы, твоя позиция в ней сдвигается (то есть текущая строка становится та, которая должна была стать следующей). И ты тут же переходишь на следующую строчку. Так и будешь перескакивать
   palladyi
 
28 - 10.05.18 - 17:58
Лучше всего в отдельный массив отобрать строки на удаление (методом найтиСтроки()), а затем поэлементно удалять эти строки из ТЗ
   palladyi
 
29 - 10.05.18 - 17:59
А старожилам желаю не стебаться и не намекать, а объяснять логику советов, иначе к ним не прислушаются никогда
   _barracuda_
 
30 - 10.05.18 - 18:00
(29)Спасибо уважаю.А то чувствую себя мусором
   palladyi
 
31 - 10.05.18 - 18:00
(30) Да все нормально) Сам долго не мог понять эту тему, пока не объяснили подробно)
   Йохохо
 
32 - 10.05.18 - 18:05
(24) зачем тебе цикл? почему не сделать отбор 1 раз по Флаг?
   3achem
 
33 - 10.05.18 - 18:11
(24) Ну как не работает то?

https://yadi.sk/d/EGhpqlyY3VgR2v
 
 
   Fram
 
34 - 10.05.18 - 18:12
(31) как же ты работаешь с более сложными вещами, если такие элементарные тяжело даются
   _barracuda_
 
35 - 10.05.18 - 18:16
(34) стараюсь.набираюсь опыта
   Fram
 
36 - 10.05.18 - 18:35
(35) скажи честно, прежде чем создать эту ветку, отладчиком хотя бы воспользовался сначала?
   _barracuda_
 
37 - 10.05.18 - 18:56
(36)все сделал.всем спасибо
   НаборДанных
 
38 - 10.05.18 - 20:04
(37)В смысле всё сделал за тебя человек из (33) и даже готовую обработку выложил?)))
   Масянька
 
39 - 11.05.18 - 08:33
(29) (30) Да, ладно вам... :)))
В бытность моей учебы в универе говорили - каждый нормальный программист должен в своей жизни один раз написать бесконечный цикл.
Сегодня понимаю, что и удалить неправильно должен.
   _barracuda_
 
40 - 11.05.18 - 08:55
(38)в прямом смысле.мне не удалось ее скачать.Сделал как описал Волшебник и (28)
   assasu
 
41 - 11.05.18 - 08:57
(0)мой, проверенный годами метод
мУдалить = Новый Массив;
для каждого стр из тз цикл
  если....тогда
    мУдалить.Добавить(стр);
  конецесли;
конеццикла;

для каждого уу из мУдалить Цикл
  тз.Удалить(уу);
конеццикла;
   3achem
 
42 - 11.05.18 - 10:10
(38) Даже не знаю как это (40) прокомментировать
   Мыш
 
43 - 11.05.18 - 10:14
Тоже отмечусь:
Для Счетчик=1-Коллекция.Количество() По 0 Цикл
   ЭлементКоллекции=Коллекция[-Счетчик];
КонецЦикла;
   MiamiVice
 
44 - 11.05.18 - 11:26
Товары = Товары.Скопировать(Новый Структура("Флаг", Истина));


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует