Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Удаление строк в табличной части документа с пустыми ценами.          
inna.innainna84 Подменю пользователя
сообщение 18.01.16, 16:51
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Процедура Удалить()
       ВыбратьСтроки();
             Пока ПолучитьСтроку() = 1 Цикл
         Если ЦенаСНДС = 0 Тогда
               УдалитьСтроку();
            КонецЕсли;                      
             КонецЦикла;  
               
КонецПроцедуры



Удаляет только по одной строке. Если ставишь УдалитьСтроки(); то удаляеть все. Помогить решить этот вопрос

Сообщение отредактировал Vofka - 18.01.16, 17:08

Acid Подменю пользователя
сообщение 18.01.16, 17:22
Сообщение #2

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

Этим циклом сформируйте список значений с номерами строк.
А затем удаление строк по номерут циклом по списку, начиная с последней строки.

а если по-правильному, то нужно создать НаборДанных запросом по Табличной части, где Цена больше нуля, и тут же загрузить весь НаборДанных в табличную часть.


Signature

Документируйте Код! мать вашу...


inna.innainna84 Подменю пользователя
сообщение 18.01.16, 18:05
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

// ===============================          
   Процедура Удалить()
       ВыбратьСтроки();
        

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

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



Спасибо за подсказку вот что получилось может кому пригодиться.

Сообщение отредактировал Vofka - 19.01.16, 12:58

CobraS Подменю пользователя
сообщение 18.01.16, 18:38
Сообщение #4

Говорящий
Иконка группы
Группа: Местный
Сообщений: 99
Спасибо сказали: 86 раз
Рейтинг: 74.6

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


inna.innainna84 Подменю пользователя
сообщение 18.01.16, 20:23
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Спасибо.

Vofka Подменю пользователя
сообщение 19.01.16, 12:59
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8


 ! 

inna.innainna84, выделяйте код!
 

Naghual Подменю пользователя
сообщение 21.01.16, 10:09
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Мне нравится решать такие задачи методом обратного цикла.
Вот примерно так:
Для Инд = -КоличествоСтрок() по -1 Цикл
    ПолучитьСтрокуПоНомеру(-Инд);
    Если ЦенаСНДС = 0  Тогда
        УдалитьСтроку();
    КонецЕсли;
КонецЦикла


Signature
Я желаю всем Счастья!

CobraS Подменю пользователя
сообщение 21.01.16, 14:46
Сообщение #8

Говорящий
Иконка группы
Группа: Местный
Сообщений: 99
Спасибо сказали: 86 раз
Рейтинг: 74.6

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

А с опытом приходит понимание, что при больших табличных частях на каждом шаге цикла
идет вызов функции КоличествоСтрок() нагружая систему 09000000.gif .
Поэтому не всегда красивый код - оптимальный.

nysysimara Подменю пользователя
сообщение 21.01.16, 15:43
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

CobraS @ Сегодня, 14:46 *,
я всегда использую
    
    ТхКС=Тх.КоличествоСтрок();
    Для Сч = -ТхКС По -1 Цикл
        Если Тх.ПолучитьЗначение(-Сч,ИмяКолонки)=0 Тогда //или другое условие
            Тх.УдалитьСтроку(-Сч);
        КонецЕсли;    
    КонецЦикла;


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Naghual Подменю пользователя
сообщение 21.01.16, 16:25
Сообщение #10

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Цитата(CobraS @ 21.01.16, 14:46) *
А с опытом приходит понимание, что при больших табличных частях на каждом шаге цикла
идет вызов функции КоличествоСтрок() нагружая систему

Я ж написал :
Цитата(Naghual @ 21.01.16, 10:09) *
Вот примерно так:


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

Вот и nysysimara, в теме.


Signature
Я желаю всем Счастья!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 27.04.24, 23:27
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!