Имя: Пароль:
1C
1C 7.7
v7: Вопросы из дворницкой. Как техничнее удалить некоторые строки из ТЗ ?
,
0 raykom
 
29.08.14
11:48
Есть ТЗ в ней есть колонка - число.
Вот надо как то быстро и технично грохнуть все строки, в которых этот реквизит = 0.

Как правильно ?

Первое, что приходит - цикл. Только там как то надо строку переставлять чето, не ?

Подкиньте мысль. Спасибо.
1 _fvadim
 
29.08.14
11:49
воспользуйся поиском. пожалуйста.
2 H A D G E H O G s
 
29.08.14
11:50
Массив=ТЗ.НайтиСтроки();

Для Каждого ЭлементМассива
ТЗ.Удалить(ЭлементМассива);
3 raykom
 
29.08.14
11:53
(1)Это очень просто для меня.
(2)Бляэто очень сложно :DDD
Чуток разверни. И потом, это же клюшки.
4 Aceforg
 
29.08.14
11:55
А ТС 9 лет на форуме
5 raykom
 
29.08.14
11:56
(2)Ну не важно, понял я или нет, что за коварный план ты мне предлагаешь, но это всеравно - цикл. Строки то передвигать не надо ?
(4)Это констатация или одобрение ? Или может вообще, зависть о_О ...
6 Ёпрст
 
29.08.14
11:56
ну если клюшки, то через выгрузить
7 пипец
 
29.08.14
11:56
обратным циклом
8 Ёпрст
 
29.08.14
11:58
(0) в этих строках, этот реквизит может быть <0 ? или нет ?
9 Chum
 
29.08.14
12:00
Пятница?

(5) варианты:

1. сортирнуть, найти первую строку с 0, пройтись циклом.
2. см (2) там сразу готовый отбор и удаление строк без лишних перескоков. это типа в 8-ке реализовано
3. запрос написать, всосать тз, выгрузить
10 raykom
 
29.08.14
12:00
(6)ЧТо ? Перед этим идти циклом и выгружать только нужные строки ?
(7)На вскидку не помню как ... Таблицу отсортировать ?
(8)Не может. Или 1 или 0
11 raykom
 
29.08.14
12:02
(9)>1. сортирнуть, найти первую строку с 0, пройтись циклом.
По остаткам ? Вариант ...
2. Так клюшки же ...
3. Да ну ... Нервный срыв будет. Чревато запоем.
12 raykom
 
29.08.14
12:03
Вот (2) и (9) 2.
Это таки как ? Заинтриговали.
Или это для восьмерки по ошибке сюда приплели ?
13 anatoly
 
29.08.14
12:05
(7) +1
14 Ёпрст
 
29.08.14
12:05
(10)

ТЗ.Сортировать("ТвояКолонка-");
стр="";
Если ТЗ.НайтиЗначение(0,стр,"ТвояКолонка")=1 Тогда
  ТЗ.Выгрузить(ТЗ,1,ст-1);
КлнецЕсли;
15 пипец
 
29.08.14
12:05
(11) перебор через минус при получить строку
16 ildary
 
29.08.14
12:06
Функция   ОтобратьТЗ( ТЗ2 )
Перем ТЗ_СЛУЖ;

    КонСтрока = Мин( ТЗ2.НоваяКолонка( "СЛУЖ_КОЛ" ), 0 ); // (примечание mszsuz: вот такая "оптимизация" началась, ради "красоты" ...)

    ТЗ2.ВыбратьСтроки();
    Пока ТЗ2.ПолучитьСтроку()=1 Цикл
        
        Если УсловиеВыполняется( ТЗ2 ) = 1 Тогда
            
            КонСтрока = КонСтрока + 1;
            ТЗ2.СЛУЖ_КОЛ = 1;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Если ( КонСтрока = 0 ) ИЛИ ( КонСтрока = ТЗ2.КоличествоСтрок() ) Тогда
        
        ТЗ2.КоличествоСтрок( КонСтрока );
        ТЗ2.УдалитьКолонку( "СЛУЖ_КОЛ" );
        
    Иначе
        
        ТЗ2.Сортировать( "-СЛУЖ_КОЛ" );
        ТЗ2.УдалитьКолонку( "СЛУЖ_КОЛ" );
        ТЗ2.Выгрузить( ТЗ_СЛУЖ,, КонСтрока );
        ТЗ2 = ТЗ_СЛУЖ;
        
    КонецЕсли;
    
КонецФункции //ОтобратьТЗ

вот рекордсмен по скорости отбора. Остается в УсловиеВыполняется() прописать сравнение и все.
17 Ёпрст
 
29.08.14
12:06
ну или так (только это дольше):

стр="";
Пока ТЗ.НайтиЗначение(0,стр,"ТвояКолонка")=1 Цикл
  ТЗ.УдалитьСтроку(стр);
  стр="";
КонецЦикла
18 Ёпрст
 
29.08.14
12:08
Ну или так

Для к = -ТЗ.КоличествоСтрок() по -1 Цикл
  ТЗ.ПолучиьСтрокуПоНомеру(-к);
  Ежели ТЗ.Чтото=КомуТо Тогда
    ТЗ.УдалитьСтроку(-к);
  КонецЕжели
КонецЦикла

и т.д..
19 Ёпрст
 
29.08.14
12:08
в общем, быстрее всего в (14)
20 raykom
 
29.08.14
12:16
Парни, спасибо. Достаточно информации.
(19)Соглашусь, пожалуй.

(16)Нуу есть пожалуй смысл ... Много чего сразу в переменные запоминается.
Но практика подсказывает, что чем меньше кода - тем быстее )))
Ну, почти всегад ...
21 raykom
 
29.08.14
12:17
Вопрос закрыт. Дворницкая закрыта.
22 DCKiller
 
29.08.14
12:19
ИМХО, (17) - самый красивый способ :)
23 raykom
 
29.08.14
12:21
(22)Да, лаконично.
(14)>ТЗ.Выгрузить(ТЗ,1,ст-1);

ст-1 имелось в виду стр-1 ?
24 raykom
 
29.08.14
12:24
(14)Все работает отлично. Благодарствуем из дворницкой :D
25 Ёпрст
 
29.08.14
12:28
(23) ага
26 Ёпрст
 
29.08.14
12:29
только, нужно еще условие = что стр <>1, а то мот там во всей табличке "нули".. и тогда просто ТЗ.УдалитьСтроки()
27 ildary
 
29.08.14
12:51
(20) метод, что я привел в (16) - самый универсальный: сегодня надо фильтровать по 1, завтра - по 0, послезавтра - по долгу больше 100 тыщ. Главное - что возвращает УсловиеВыполняется().
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс