Имя: Пароль:
1C
1C 7.7
v7: Последняя строка не выполняет условие
0 Mafiozaa
 
12.04.21
05:34
Всем доброго времени суток, вопрос такой, код отрабатывает правильно, но в последней строке, нет, возможно код не совсем красивый, но то что от него хотят выполняет

Процедура Сформировать()                                          
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Если Найти(КодМаркировки, "<НомУпак>") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);                                    
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);
            ТЗАгр.НомерУпаковки = Сред(ТЗАгр.НомерУпаковки, 10, 18);
            ТЗАгр.НомерУпаковки = "00"+ТЗАгр.НомерУпаковки;
        КонецЕсли;
        Если Найти(КодМаркировки, "<КИЗ>") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);
            Если Найти(ТЗАгр.НомерУпаковки, "<КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "<КИЗ>", "");
            КонецЕсли;
            Если Найти(ТЗАгр.НомерУпаковки, "</КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "</КИЗ>", "");
            КонецЕсли;
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);
            ТЗАгр.НомерУпаковки = ТЗАгр.НомерУпаковки;
        КонецЕсли;
        Если Найти(КодМаркировки, "<НомСредИдентТов ИдентТрансУпак=") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);
            ТЗАгр.НомерУпаковки = Сред(ТЗАгр.НомерУпаковки, 34, 18);
            ТЗАгр.НомерУпаковки = "00"+ТЗАгр.НомерУпаковки;
        КонецЕсли;
    КонецЦикла;
    УдалитьСтроки();
    ТЗАгр.ВыбратьСтроки();
    Пока ТЗАгр.ПолучитьСтроку() = 1 Цикл
        НоваяСтрока();
        Если Найти(ТЗАгр.НомерУпаковки, "&amp;") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);
        КонецЕсли;
            ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "&amp;", "&");
        Если Найти(ТЗАгр.НомерУпаковки, "&lt") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);
            ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "&lt;", "<");
        КонецЕсли;
        Если Найти(ТЗАгр.НомерУпаковки, "&gt") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);
            ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "&gt;", ">");
        КонецЕсли;
        КодМаркировки = ТЗАгр.НомерУпаковки;
    КонецЦикла;
КонецПроцедуры

Суть в чем загружается документ в txt из ЭДО, и удаляется все лишнее, оставляя только то что меня интересует, а именно кодмаркировки,

010629110366046621Yg0U_!*QuXFnH - Предпоследняя строка
<КИЗ>010629110366046621NIXxnsZmp!VEG</КИЗ> - Последняя строка

Почему не удаляет тег?
1 big
 
12.04.21
06:51
Если Найти(КодМаркировки, "<КИЗ>") <> 0 Тогда
            ПолучитьСтрокуПоНомеру(НомерСтроки);
            Если Найти(ТЗАгр.НомерУпаковки, "<КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "<КИЗ>", "");
            КонецЕсли;
            Если Найти(ТЗАгр.НомерУпаковки, "</КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "</КИЗ>", "");
            КонецЕсли;
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);
            ТЗАгр.НомерУпаковки = ТЗАгр.НомерУпаковки;
        КонецЕсли;


Сначала ищешь в Найти(ТЗАгр.НомерУпаковки, "<КИЗ>"), а только потом добавляешь строку
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);

По-моему надо сначала строку добавить.
2 HawkEye
 
12.04.21
09:02
(0) ужас какой-то...
  ПолучитьСтрокуПоНомеру(НомерСтроки); - это зачем в каждом условии??

это как понимать:
Если Найти(ТЗАгр.НомерУпаковки, "<КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "<КИЗ>", "");
            КонецЕсли;
            Если Найти(ТЗАгр.НомерУпаковки, "</КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "</КИЗ>", "");
            КонецЕсли;
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);

??? )))

что по твоему будет в "НомерУпаковки", для строки: "<КИЗ>010629110366046621NIXxnsZmp!VEG</КИЗ>"? ))))

хотя о чем я...

ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);
            ТЗАгр.НомерУпаковки = Сред(ТЗАгр.НомерУпаковки, 10, 18);
            ТЗАгр.НомерУпаковки = "00"+ТЗАгр.НомерУпаковки;

))
3 Mikeware
 
12.04.21
09:19
(2) он в стопочку записывает...  три заза запишет - три раза прочитает
4 HawkEye
 
12.04.21
09:45
(3) думаешь фифо практикует? )))
5 Mikeware
 
12.04.21
09:47
(4) может, стек.. а может, и очередь...
"автомат Калашникова - конечный автомат для преобразования стека в очередь"©
6 Mafiozaa
 
12.04.21
09:47
(4) (3) (2) ха-ха, красавчики, ну ткните носом
7 Mikeware
 
12.04.21
09:49
(6) с первого раза никак?
8 HawkEye
 
12.04.21
09:51
(6) объясни этот кусок кода:
Если Найти(ТЗАгр.НомерУпаковки, "<КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "<КИЗ>", "");
            КонецЕсли;
            Если Найти(ТЗАгр.НомерУпаковки, "</КИЗ>") <> 0 Тогда
                ТЗАгр.НомерУпаковки = СтрЗаменить(ТЗАгр.НомерУпаковки, "</КИЗ>", "");
            КонецЕсли;
            ТЗАгр.НоваяСтрока();
            ТЗАгр.НомерУпаковки = СокрЛП(КодМаркировки);
9 hhhh
 
12.04.21
10:01
(6) да это невозможно прочитать, какое там тыкать?
10 Mikeware
 
12.04.21
10:03
(9) тебя ж не просят прочитать, тебя просят написать! :-)
11 Mafiozaa
 
12.04.21
10:09
(8) Если нахожу в ТЗАгр "Киз" тогда меняю этот киз на ""
Если нахожу в ТЗАгр "/Киз" меняю на ""
Потом создаю новую строку и записываю в нее то что находится в табличной части
12 acanta
 
12.04.21
10:12
(9) ответ типичного программиста...
13 Злопчинский
 
12.04.21
10:23
1с++ XMLite
14 HawkEye
 
12.04.21
11:11
(11) т.е. если находишь и меняшь, то записываешь в предыдущую строку, да?
и тебя не смущает что в строчке есть и Киз и /Киз? а в нову строчку ты записываешь совсем не то, что меняшь ))))
15 Salimbek
 
12.04.21
11:31
(0) Странный код.
1) Получаешь КодМаркировки в переменную КМ
2) Чистишь эту переменную как тебе нужно (я бы делал просто КМ = СтрЗаменить(КМ,"Мусор",""))
3) Записываешь обратно КодМаркировки = КМ
Все...