Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удаление строк в табличной части документа с пустыми ценами.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
inna.innainna84
Процедура Удалить()
       ВыбратьСтроки();
             Пока ПолучитьСтроку() = 1 Цикл
         Если ЦенаСНДС = 0 Тогда
               УдалитьСтроку();
            КонецЕсли;                      
             КонецЦикла;  
               
КонецПроцедуры



Удаляет только по одной строке. Если ставишь УдалитьСтроки(); то удаляеть все. Помогить решить этот вопрос
Acid
Этим циклом сформируйте список значений с номерами строк.
А затем удаление строк по номерут циклом по списку, начиная с последней строки.

а если по-правильному, то нужно создать НаборДанных запросом по Табличной части, где Цена больше нуля, и тут же загрузить весь НаборДанных в табличную часть.
inna.innainna84
// ===============================          
   Процедура Удалить()
       ВыбратьСтроки();
        

Пока ПолучитьСтроку()=1 Цикл
~начало:
Если ЦенаСНДС = 0 Тогда
УдалитьСтроку(); //следующая строка стала текущей
Если НомерСтроки<>0 Тогда
Перейти ~начало;
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры
// ===============================



Спасибо за подсказку вот что получилось может кому пригодиться.
CobraS
inna.innainna84 @ Сегодня, 18:05 необходимо зарегистрироваться для просмотра ссылки,
Оператор Перейти желательно использовать в исключительных случаях.
    Ном = КоличествоСтрок();
    Если Ном > 0 Тогда
        Пока  Ном > 0 Цикл
            ПолучитьСтрокуПоНомеру(Ном);
            Если ЦенаСНДС = 0  Тогда
                УдалитьСтроку();
            КонецЕсли;
            Ном = Ном-1;
        КонецЦикла;
    КонецЕсли;

inna.innainna84
Спасибо.
Vofka

 ! 

inna.innainna84, выделяйте код!
 
Naghual
Мне нравится решать такие задачи методом обратного цикла.
Вот примерно так:
Для Инд = -КоличествоСтрок() по -1 Цикл
    ПолучитьСтрокуПоНомеру(-Инд);
    Если ЦенаСНДС = 0  Тогда
        УдалитьСтроку();
    КонецЕсли;
КонецЦикла
CobraS
Цитата(Naghual @ 21.01.16, 10:09) необходимо зарегистрироваться для просмотра ссылки
Мне нравится решать такие задачи методом обратного цикла.
Вот примерно так:
Для Инд = -КоличествоСтрок() по -1 Цикл
    ПолучитьСтрокуПоНомеру(-Инд);
    Если ЦенаСНДС = 0  Тогда
        УдалитьСтроку();
    КонецЕсли;
КонецЦикла

А с опытом приходит понимание, что при больших табличных частях на каждом шаге цикла
идет вызов функции КоличествоСтрок() нагружая систему 09000000.gif .
Поэтому не всегда красивый код - оптимальный.
nysysimara
CobraS @ Сегодня, 14:46 необходимо зарегистрироваться для просмотра ссылки,
я всегда использую
    
    ТхКС=Тх.КоличествоСтрок();
    Для Сч = -ТхКС По -1 Цикл
        Если Тх.ПолучитьЗначение(-Сч,ИмяКолонки)=0 Тогда //или другое условие
            Тх.УдалитьСтроку(-Сч);
        КонецЕсли;    
    КонецЦикла;
Naghual
Цитата(CobraS @ 21.01.16, 14:46) необходимо зарегистрироваться для просмотра ссылки
А с опытом приходит понимание, что при больших табличных частях на каждом шаге цикла
идет вызов функции КоличествоСтрок() нагружая систему

Я ж написал :
Цитата(Naghual @ 21.01.16, 10:09) необходимо зарегистрироваться для просмотра ссылки
Вот примерно так:


Я показал методику но не реализацию.
Я прекрасно понимаю о чем Вы говорите.
icon_beer17.gif

Вот и nysysimara, в теме.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.