Имя: Пароль:
1C
 
Excel удаление строк
0 buh1977
 
16.12.09
13:05
НомСтр = 7;
   Пока Не НомСтр = 254 Цикл
       ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value);
       Если (ЗначСум = "")или(ЗначСум = "0") Тогда
           Сумма0 = "0.00";
           ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = Сумма0;
           ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ;
                   
   ;

       Иначе
            ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум;



проблема    припопытки удалить строки с нулевыми или пуствми значениями определенных ячеек.так срабатывает но приэтом удаляет строки через 1 ..т.е 2,4.8 не смотря на то что 3и 5 тоже пустые как
граиотно удалить строки в файле

           
       КонецЕсли;    
             НомСтр = НомСтр + 1;

   КонецЦикла;
1 ДенисЧ
 
16.12.09
13:06
После удаления строка следующая получает номер удалённой. Дальше рассказывать?
2 lxs
 
16.12.09
13:06
(1) опередил ))
3 buh1977
 
16.12.09
13:10
а если она не удалилалсь..т.е второе условие выполнено тогда тоже не надо увеличивать номстр
4 buh1977
 
16.12.09
13:11
пожалуйста уж напишите как правильнонадо увеличить счетчик и где
5 wise
 
16.12.09
13:17
при удалениии НомСтр НЕ должна увеличиваться...!!
6 ДенисЧ
 
16.12.09
13:24
ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ;
номСтр = НомСтр-1;
7 buh1977
 
17.12.09
07:33
Пока Не НомСтр = 254 Цикл
       ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value);
       Если (ЗначСум = "")или(ЗначСум = "0") Тогда
           Сумма0 = "0.00";
           ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ;
           номСтр = НомСтр-1;
           Иначе
            ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум;
           

        КонецЕсли;    
            НомСтр = НомСтр + 1;

         КонецЦикла;    
так будет правильно
8 buh1977
 
17.12.09
07:34
чего тоя у меня не получается подскажите гже косяк
9 buh1977
 
17.12.09
07:37
как то странно изменяется значения номера в счетчике при удалении,если просто не увеличивать при удалении он циклит если до конца файла не встретит заполненную строку
10 buh1977
 
17.12.09
07:38
в предложеннорм варианте тоже зависает
11 Rie
 
17.12.09
07:38
(8) Как ты думаешь, после удаления строки - их становится меньше?
Если да - то, может быть, имеет смысл несколько иначе сформулировать условие цикла?
12 buh1977
 
17.12.09
07:38
в предложенном коде тоже зависает
13 buh1977
 
17.12.09
07:40
8 например как
14 Rie
 
17.12.09
07:40
(11) В коде из (7)?
Ну так при удалении пустых строк НомСтр ну никак не станет 254. Никогда.
15 buh1977
 
17.12.09
07:41
подскажите варианты решения по условию цикла
16 Rie
 
17.12.09
07:43
(15) Ну, например,

ВсегоСтрок = 254;
Пока НомСтр<ВсегоСтрок Цикл
   //...
   Если УдаляетсяСтрока Тогда
       //...
       НомСтр = НомСтр-1;
       ВсегоСтрок = ВсегоСтрок-1;
   КонецЕсли;
   //...
КонецЦикла;
17 buh1977
 
17.12.09
07:54
НомСтр = 7;
      ВсегоСтрок = 254;
      Пока   НомСтр<ВсегоСтрок Цикл

       //   Не НомСтр = 254 Цикл
       ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value);
       Если (ЗначСум = "")или(ЗначСум = "0") Тогда
       УдаляетсяСтрока=Истина;
         Иначе УдаляетсяСтрока=Ложь;
        КонецЕсли;    
   
       Если УдаляетсяСтрока Тогда
       ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ;
       номСтр = НомСтр-1;
       ВсегоСтрок = ВсегоСтрок-1;
         Иначе
       ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум;
       КонецЕсли;    
   //    НомСтр = НомСтр + 1;

         КонецЦикла;
18 buh1977
 
17.12.09
07:54
таким образом
19 Rie
 
17.12.09
07:56
(18) Спорим, что опять зацикливается?

(Ты НомСтр _увеличивать_ нигде не собираешься?)
20 buh1977
 
17.12.09
07:57
там где комментарии снять
21 buh1977
 
17.12.09
07:58
или так
НомСтр = 7;
      ВсегоСтрок = 254;
      Пока   НомСтр<ВсегоСтрок Цикл

       //   Не НомСтр = 254 Цикл

       ЗначСум = СокрЛП(ЛистВыгрузкиСБ.Cells(НомСтр,4).Value);
       Если (ЗначСум = "")или(ЗначСум = "0") Тогда
       УдаляетсяСтрока=Истина;
          Иначе УдаляетсяСтрока=Ложь;
        КонецЕсли;    
   
       Если УдаляетсяСтрока Тогда
       ЛистВыгрузкиСБ.Rows(НомСтр).Delete() ;
       номСтр = НомСтр-1;
       ВсегоСтрок = ВсегоСтрок-1;
          Иначе
       ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум;
 НомСтр = НомСтр + 1;

       КонецЕсли;    
     

          КонецЦикла;
22 Rie
 
17.12.09
08:01
(21) Тоже не взлетит.
Если увеличение номера у тебя в Иначе - то не нужно уменьшать его в Тогда.

И мелкие советы:

можно написать прямо:

УдаляетсяСтрока = (ЗначСум="") ИЛИ (ЗначСум="0");

А можно это же условие вставить и непосредственно в оператор Если УдаляетсяСтрока Тогда (вместо УдаляетсяСтрока) - но это уже дело вкуса, введение переменной заодно и текст комментирует, и упрощает изменения.
23 buh1977
 
17.12.09
08:05
так где же увеличивать счетчик
24 buh1977
 
17.12.09
08:08
не получается не по первому варианту не по второму- строки вычищает все
25 Rie
 
17.12.09
08:11
(24) А подумать не пробовал?

ВсегоСтрок = 254;
НомСтр = 7;
Пока НомСтр<ВсегоСтрок Цикл
   Если СтрокуНужноУдалить(НомСтр) Тогда
       // удаляем строку
       ВсегоСтрок = ВсегоСтрок-1;
   Иначе
       // что-то другое со строкой проворачиваем
       НомСтр = НомСтр+1;
   КонецЕсли;
КонецЦикла;
26 buh1977
 
17.12.09
09:32
еще вопрос ..все отработало корректно но
в фале оказались кривые значения
11 307,6000000009
4 708,50000000099
8 300,76
8 455,5
11 307,6000000009
13 725,79
5 321,06
76 219,21
5 458,36000000099
5 361,50000000099
10 716,9200000009
27 buh1977
 
17.12.09
09:33
причем исходные значения с точностью до 2 знака и непонятно по какому признаку он часть пишет правильно а часть косячит
28 Масянька
 
17.12.09
09:34
Я так делала:
   й = КолВоСтрок;
   Пока й >= 2 Цикл
       Состояние("Выполняется удаление пустых строк...");
       мТекЗначение = Строка(мТекЛист.Cells(й, мКолонка).Value);
       Если (НЕ ЗначениеЗаполнено(мТекЗначение)) Тогда
           мТекЛист.Rows(й).Delete();
           й = й - 1;
       Иначе    
           й = й - 1;
       КонецЕсли;    
       ИндикаторОбработки  = ИндикаторОбработки + 1;
   КонецЦикла;
й - это количество строк уже посчитанное.
29 Aprobator
 
17.12.09
09:43
(0)

        .......
        Иначе
            ЛистВыгрузкиСБ.Cells(НомСтр,4).Value = ЗначСум;
           
            НомСтр = НомСтр + 1; // СЮДА ПОСТАВИТЬ
        КонецЕсли;    
       
        // НомСтр = НомСтр + 1; // ОТСЮДА УБРАТЬ
30 Rie
 
17.12.09
09:48
(26) Округли, если тебя именно в последних знаках цифры беспокоят.
31 buh1977
 
17.12.09
12:37
еще вопрос как правильно при каждом запуске копировать эталонный файл с одного места в другое
32 buh1977
 
17.12.09
12:40
КнигаВыгрузкиЭлектронноСБ.SaveAs("c\эталон\1.xls","c\старт\1.xls");
типа этого или как