Имя: Пароль:
1C
1C 7.7
v7: Почему метод УдалитьСтроку() удаляет сразу и сначала и с конца ТЧ?
0 23th
 
18.06.12
18:12
Тов.ВыбратьДокументы(Дата1,Дата2);
   Пока Тов.ПолучитьДокумент()=1 Цикл
       ном = 0;
       номстрок = 1;
       СколькоСтрок = Тов.КоличествоСтрок();
       Пока номстрок <= СколькоСтрок цикл
           Тов.ПолучитьСтрокуПоНомеру(номстрок);
           номстрок = номстрок + 1;
           Если Тов.ТипТранз = 11 тогда
               СписокПараметров.УдалитьВсе();
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.НомерДок)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.ДатаДок)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.СчетКредита)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.Товар.Код)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.Товар.VIN)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.Товар)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.ТипТранз)+"'");
               СписокПараметров.ДобавитьЗначение(Строка(Тов.Количество)+"'");
               СписокПараметров.ДобавитьЗначение(Строка(Тов.Всего));
               СтарКол=Тов.Количество;
               СтарВсего = Тов.Всего;
               Стр=СписокПараметров.ВСтрокуСРазделителями();                                                
               Текст.ДобавитьСтроку(Стр);        
               ном = ном+1;
           ИначеЕсли Тов.ТипТранз = 12 тогда
               Текст.УдалитьСтроку(ном);
               
           ИначеЕсли Тов.ТипТранз = 17 тогда    
               
               СписокПараметров.УдалитьВсе();
               
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.НомерДок)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.ДатаДок)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.СчетКредита)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.Товар.Код)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.Товар.VIN)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.Товар)+"'");
               СписокПараметров.ДобавитьЗначение(СокрЛП(Тов.ТипТранз)+"'");
               СписокПараметров.ДобавитьЗначение(Строка(СтарКол)+"'");
               СписокПараметров.ДобавитьЗначение(Строка(СтарВсего-Тов.Всего));
               
               Стр=СписокПараметров.ВСтрокуСРазделителями();                                                
               Текст.УдалитьСтроку(ном);
               Текст.ДобавитьСтроку(Стр);      
                               
           Иначе
               СписокПараметров.УдалитьВсе();
           КонецЕсли;
           ;
           Сообщить(Тов.НомерДок);
       
   КонецЦикла;
   
КонецЦикла;
Текст.Записать(ИмяФайла)
1 23th
 
18.06.12
18:13
Сразу скажу метод Пока Тов.ПолучитьСтроку() = 1 я уже пробовал эффект один и тот же
2 Shved_72
 
18.06.12
18:16
удаляем из ТЧ или из текста всетаки?
3 23th
 
18.06.12
18:17
из текстовика
4 NS
 
18.06.12
18:17
(3) Чтоб удалять из Текста, туда сначала нужно добавить? Или нет?!
5 23th
 
18.06.12
18:18
там же он по очереди добавляет, как я понял из отладчика
6 Партизан
 
18.06.12
18:18
gjnjve xnj ujdyjrjl
7 23th
 
18.06.12
18:19
ну да, просто есть одинаковые строки идущие друг за другом и вот предыдущие надо удалить и оставить последнюю.
8 Voronve
 
18.06.12
18:19
(7) а не добавлять такую строку ?
9 23th
 
18.06.12
18:20
я сначала удаляю старою строку, а затем на ее место ставлю новую.
10 NS
 
18.06.12
18:20
(7) То есть ты добавляешь в конец списка, а где-то в начале при этом удаляешь?
Круто!
11 NS
 
18.06.12
18:20
(9) А надо - удалить все строки, а потом добавить только нужные.
12 23th
 
18.06.12
18:22
почему я добавляю в конец и удаляю с конца
13 КонецЦикла
 
18.06.12
18:22
Может просто не нужно добавлять то что нужно потом удалить?  Ну это так, в порядке бреда
Либо в ТЗ добавить все, потом отсортировать по признаку удаления и нужный блок поместить в текстовик
14 23th
 
18.06.12
18:23
и тем более как я могу удалить из документа эти "ненужные" мне строки, остальным то они очень нужны.
15 23th
 
18.06.12
18:24
так как видно из кода, отсортировать не получиться, т.к. там идут взаимосвязь с предыдущей строкой.
16 NS
 
18.06.12
18:24
(14) Ты никаких строк из документа не удаляешь.
17 23th
 
18.06.12
18:25
"000001'","03.01.12'","41.2'","59833'","406.1005033'","????????? ??????????? ???? 406'","11'","1'","250"
"000001'","03.01.12'","41.2'","35524'","406.1006170-10'","??????????? ???? ?????? 406'","11'","1'","25"
"000001'","03.01.12'","41.2'","53449'","406-1006160-10'","??????????? ???? ??????? 406'","11'","1'","30"
"000001'","03.01.12'","41.2'","35522'","406.1006150-10'","??????????? ???? ??????? 406-1006150-10'","11'","1'","20"
"000001'","03.01.12'","41.2'","77054'","4052'","??????? ?????????????? ?????? 406??. (? ?????????????)'","11'","1'","692"
"000001'","03.01.12'","41.2'","61790'","3163-8110020-96'","???????????????? 3163'","11'","1'","1900"
"000001'","03.01.12'","41.2'","69217'","???007'","??????? ???????? ??? (2 ????.)L=120?? ??????'","11'","1'","90"

вот примерный выход в текстовик
18 NS
 
18.06.12
18:25
(12) ну-ну.
19 23th
 
18.06.12
18:27
и помещай не помещай в отдельную ТЗ ничего от этого не измениться.
20 23th
 
18.06.12
18:35
самое что интересное, он если удаляет именно 5ю строку, то в с конца он удаляет правильную только с конца текстовика 5ю строку! прям чудеса да и только!
21 GreyK
 
18.06.12
18:42
(20) Позовите программиста.
22 23th
 
18.06.12
18:47
это не ответ, так как по идее все гладко.
23 23th
 
18.06.12
18:48
NS

16 - 18.06.12 - 18:24
(14) Ты никаких строк из документа не удаляешь.

они то как раз и удаляются
24 GreyK
 
18.06.12
18:52
(22) Где движения по тексту?
25 NS
 
18.06.12
18:52
(23) Какая строка в коде удаляет строки из документа?
26 GreyK
 
18.06.12
18:54
+(24) Откуда растут ноги у этих строчек?
           ИначеЕсли Тов.ТипТранз = 12 тогда
               Текст.УдалитьСтроку(ном);
27 23th
 
18.06.12
18:56
это я удаляю строку в текстовике под номером переменной ном из цикла
28 23th
 
18.06.12
18:58
а там как раз номер строки предыдущей, то есть последней
29 GreyK
 
18.06.12
18:59
(27) > (24)
30 NS
 
18.06.12
19:00
Если тебе нужно удалить предыдущую строку - то

Текст.УдалитьСтроку(ном);
ном=ном-1;
31 NS
 
18.06.12
19:00
Ты кассу чтоли обрабатываешь? Только сейчас просек.
32 23th
 
18.06.12
19:02
да-да это отчет о продажах с транзакциями
33 Злопчинский
 
18.06.12
19:56
Уберите дятла от кассы! а то надолбит!!!
34 Скользящий
 
18.06.12
20:06
Зачем, за ним потом можно это все разгрести за вдвое большие бабки.
35 23th
 
19.06.12
04:51
Ура я сделал!!! только через ТЗ!!!
36 Simod
 
19.06.12
05:38
Надо еще посмотреть, что ты там "сделал"...
37 Касандер72
 
19.06.12
12:22
Медленно, но надежно:

       Для Счетчик = -Тов.КоличествоСтрок() По - 1  Цикл
       Тов.ПолучитьСтрокуПоНомеру(-Счетчик);
       Если Тов.ТипТранз = 12 Тогда
           Тов.УдалитьСтроку(-Счетчик);
       КонецЕсли;
   КонецЦикла;
38 Касандер72
 
19.06.12
12:32
+(37) сор не в ту степь)
2 + 2 = 3.9999999999999999999999999999999...