Имя: Пароль:
1C
1С v8
Удаление строк в таблице.
0 Max2015
 
20.07.15
15:47
Привет всем, изучаю 1С и прошу помочь с решением задачи.

Есть заполняемая по команде таблица:

&НаКлиенте
Процедура ЗаполнитьТаблицу(Команда)
    
    ГСЧ = Новый ГенераторСлучайныхЧисел;
    Для Инд = 1 По 100 Цикл
        СтрТЧ = Объект.СписокТоваров.Добавить();
        СтрТЧ.Номенклатура = "Номенклатура"+Инд;
        СтрТЧ.Услуга = ГСЧ.СлучайноеЧисло(0,1);
    КонецЦикла;
КонецПроцедуры

и  команда на удаление "услуг"

&НаКлиенте
Процедура УдалитьУслуги(Команда)
        Для Каждого СтрТЧ Из Объект.СписокТоваров

    Цикл
        Если СтрТЧ.Услуга = Истина Тогда
            Объект.СписокТоваров.Удалить(СтрТЧ);
        КонецЕсли;         
    КонецЦикла;
КонецПроцедуры


Но по видимому из-за смещения строк при удалении происходит сбой и удаляется только часть значений. Никак не доходит, как решить данную проблему.
1 Fish
 
гуру
20.07.15
15:51
(0) Обходи ТЧ при удалении с конца. Или сначала загоняй строки для удаления в массив, а потом удаляй.
2 cw014
 
20.07.15
15:52
&НаКлиенте
Процедура УдалитьУслуги(Команда)
        КолВоСтрок = Объект.СписокТоваров.Количество(); Сч = 0;
        Пока Сч < КолВоСтрок Цикл
            СтрТч = Объект.СписокТоваров[Сч];
            Если СтрТЧ.Услуга Тогда
                Объект.СписокТоваров.Удалить(СтрТЧ);
                КолВоСтрок = Объект.СписокТоваров.Количество();
            Иначе
                Сч = Сч + 1;
            КонецЕсли;        
    КонецЦикла;
КонецПроцедуры
3 rozer76
 
20.07.15
16:02
i = 0;
Пока i < Таб.Количество() Цикл
    Если <?"Условие"> Тогда
      Таб.Удалить(i)
    Иначе
      i = i +1
    КонецЕсли;
КонецЦикла;
4 rozer76
 
20.07.15
16:04
КолвоЭлементовКоллекции = Строки.Количество();
        Для ОбратныйИндекс = 1 По КолвоЭлементовКоллекции Цикл
            ЭлементКоллекции = Строки[КолвоЭлементовКоллекции - ОбратныйИндекс];
            Если ЭлементКоллекции.Номенклатура.Услуга Тогда
                Строки.Удалить(ЭлементКоллекции);
            КонецЕсли;
        КонецЦикла;
5 Max2015
 
20.07.15
16:34
Благодарю за столь быстрые ответы.
6 mikecool
 
20.07.15
16:34
М = НайтиСтроки (Новый Структура("Услуга", Истина)
Для Каждого Строка Из М
Удалить(Строка)
7 D_E_S_131
 
20.07.15
16:37
Вот так и пишутся дипломы по 1С...
Ошибка? Это не ошибка, это системная функция.