8.х УТ удвление строк

Тема в разделе ""1С:Управление торговлей УТ"", создана пользователем xotabich, 19 мар 2009.

  1. TopicStarter Overlay
    xotabich
    Offline

    xotabich

    Регистрация:
    11 фев 2009
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    Подскажите как удалить строкив табличной части документа в этой процедуре:

    Код:
    Процедура ДействияФормыОтчетСформировать(Кнопка)
    
    Док = Документы.ИнвентаризацияТоваровНаСкладе;
    Док = Представление;
    ТЧ = Док.Товары;
    НДС = СтавкаНДС;
    
    Для каждого Стр из ТЧ Цикл
    
    Если Стр.Номенклатура.СтавкаНДС = СтавкаНДС Тогда
    
    Док.Товары.Удалить(1);		
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры
    
    что необходимо дописать?
  2. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Обход для каждого не очень удобен. Удалить работает по индексу, а при удалении индексы сдвигаются и цикл некорректен.
  3. TopicStarter Overlay
    xotabich
    Offline

    xotabich

    Регистрация:
    11 фев 2009
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    подскажите тогда как лучше сделать чтобы перебрать строки в табличной части и не удовлетворяющие условию удалить.
  4. duh
    Offline

    duh Опытный в 1С

    Регистрация:
    21 янв 2009
    Сообщения:
    74
    Симпатии:
    0
    Баллы:
    26
    Собирай в табл значений а потом выгружай в табл часть
  5. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Работай через НайтиСтроки().

    На выходе получишь массив строк некорректных.

    А потом в цикле по массиву удаляй.

    Типа так:

    Код:
    МассивСтрок = тз.НайтиСтроки(Новый Структура("СтавкаНДС",СтавкаНДС));
    Если МассивСтрок.Количество() > 0 Тогда
    Для каждого стр из МассивСтрок Цикл
    тз.удалить(стр);
    КонецЦикла;
    КонецЕсли;
    
    
  6. vitaly_mnpz
    Offline

    vitaly_mnpz Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26
    Ну а если уж очень сильно хочется удалять элементы коллекции, то нужно использовать обход снизу вверх.

    Код:
    КолвоЭлементовКоллекции = Коллекция.Количество();
    Для ОбратныйИндекс = 1 По КолвоЭлементовКоллекции Цикл 
    ЭлементКоллекции = Коллекция[КолвоЭлементовКоллекции - ОбратныйИндекс]; 
    Если <Проверка условия> Тогда 
    Коллекция.Удалить(ЭлементКоллекции); 
    КонецЕсли; 
    КонецЦикла;
    

Поделиться этой страницей