7.7 Функция OemToAnsi не выводит текст если есть символ "="

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Kas-tet, 6 авг 2018.

  1. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Есть код, читает файл выгрузки из банка, но банк может выгрузить текст с любыми символами и если есть символ "=", то текст выводится не весь, в данном случае только первые 2 буквы
    Строка чтения↓
    Код:
        ТЗ.УстановитьЗначение(i, "НазначениеПлатежа", OemToAnsi(Сред(xml_ИмяТега, 9, СтрДлина(xml_ИмяТега) - 17)));
    Весь цикл↓
    Код:
    Пока xml_ИмяТега <> "</OPERINFO>" Цикл
                        ТЗ.НоваяСтрока();
                        ТЗ.УстановитьЗначение(i, "ДатаОперации", ДатаОперации);
                        ТЗ.УстановитьЗначение(i, "КодВалюты", КодВалюты);
                        ТЗ.УстановитьЗначение(i, "ИСОКодВалюты", ИСОКодВалюты);
                        ТЗ.УстановитьЗначение(i, "Курс", КурсВалюты);
                        ТЗ.УстановитьЗначение(i, "Счет", РС);
                        xml_Прочитать();//OPERUID сведения об операции
                        xml_Прочитать();//DOKN сведения об операции
                        ТЗ.УстановитьЗначение(i, "НомерДокумента", Сред(xml_ИмяТега, 7, СтрДлина(xml_ИмяТега) - 13));
                        xml_Прочитать();//MFOKORR сведения об операции
                        ТЗ.УстановитьЗначение(i, "МФО", Сред(xml_ИмяТега, 10, СтрДлина(xml_ИмяТега) - 19));
                        xml_Прочитать();//АCCKORR сведения об операции
                        ТЗ.УстановитьЗначение(i, "СчетКорресподента", Сред(xml_ИмяТега, 10, СтрДлина(xml_ИмяТега) - 19));
                        xml_Прочитать();//NAMEKORR сведения об операции
                        ТЗ.УстановитьЗначение(i, "НаименованиеКонтрагента", OemToAnsi(Сред(xml_ИмяТега, 11, СтрДлина(xml_ИмяТега) - 21)));
                        xml_Прочитать();//UNPKORR сведения об операции                                                      
                        ТЗ.УстановитьЗначение(i, "УНПКонтрагента", Сред(xml_ИмяТега, 10, СтрДлина(xml_ИмяТега) - 19));
                        xml_Прочитать();//SUMOPER сведения об операции
                        ТЗ.УстановитьЗначение(i, "СуммаДвал", xml_ПолучитьАтрибут("nd"));
                        ТЗ.УстановитьЗначение(i, "СуммаКвал", xml_ПолучитьАтрибут("nk"));
                        ТЗ.УстановитьЗначение(i, "СуммаД", xml_ПолучитьАтрибут("ed"));
                        ТЗ.УстановитьЗначение(i, "СуммаК", xml_ПолучитьАтрибут("ek"));
                        xml_Прочитать();//DETPAY сведения об операции 
                        ТЗ.УстановитьЗначение(i, "НазначениеПлатежа", OemToAnsi(Сред(xml_ИмяТега, 9, СтрДлина(xml_ИмяТега) - 17)));
                        xml_Прочитать();//RATEINFO сведения об операции
                        ТЗ.УстановитьЗначение(i, "КодВалюты", xml_ПолучитьАтрибут("Code"));
                        xml_Прочитать();//TAX сведения об операции
                        xml_Прочитать();//VO сведения об операции
                        ТЗ.УстановитьЗначение(i, "ВидОперации", Сред(xml_ИмяТега, 5, СтрДлина(xml_ИмяТега) - 9));
                        xml_Прочитать();//UNP3 сведения об операции
                        xml_Прочитать();//  /OPER сведения об операции
                        xml_Прочитать();//OPER сведения об операции
                        i = i + 1;
                КонецЦикла;  
    Строка в файле выгрузки, которую плохо читает
    Код:
           <DETPAY>ВОЗМЕЩЕНИЕ ДЕНЕЖНЫХ СРЕДСТВ ЗА ПРОДАННЫЕ ТОВАРЫ (ПРЕДОСТАВЛЕННЫЕ УСЛУГИ) ПО КАРТАМ В ПТС ПО ДОГ. 20639-IVMF НА ОСНОВАНИИ ОТЧЕТА OTCH11-690-20180801-BYN-001.TXT ОТ 01 августа 2018 ОБЩАЯ СУММА: 882=, СУММА КОМИССИИ: 16.37= </DETPAY>
    
    Скрин Результата прилагается.

    Вложения:

  2. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    4.003
    Симпатии:
    465
    Баллы:
    104
    а я думаю дело в "xml_ИмяТега", точнее в коде чтения и разбора xml файла

    там в
    Код:
    Функция xml_Прочитать
    вроде есть строка
    Код:
    имя=СокрЛП(СтрЗаменить(имя,"=",""));
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    попробуйте заменить функцию

    Функция ПреобразоватьСтрокуИзУТФ8(Стр)
    Длина=СтрДлина(Стр);
    Итог="";
    Для Н=1 По Длина Цикл
    Знак=Сред(Стр,Н,1);
    Код=КодСимв(Знак);
    Если Код<128 Тогда
    Итог=Итог+Знак;
    ИначеЕсли (Код>=128)И(Код<192) Тогда
    Иначе
    Н=Н+1;
    Знак2=Сред(Стр,Н,1);
    Код2=КодСимв(Знак2);
    Если Код=208 Тогда
    Если Код2=129 Тогда Итог=Итог+"Ё";
    Иначе Итог=Итог+Симв(КодСимв("А")+Код2-144);
    КонецЕсли;
    ИначеЕсли Код=209 Тогда
    Если Код2=145 Тогда Итог=Итог+"ё";
    Иначе Итог=Итог+Симв(КодСимв("р")+Код2-128);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Возврат Итог;
    КонецФункции
  4. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Да, там есть такая строка↓ только что с ней делать то?
    Код:
     i=1; //позиция в списке сз                                                                        //XML
                    рс=сз.РазмерСписка();                                                                             //XML
                    Пока i<=рс Цикл                                                                                   //XML
                            имя=сз.ПолучитьЗначение(i);                                                               //XML
                            имя=СокрЛП(СтрЗаменить(имя,"=",""));                                                      //XML
                            зн=сз.ПолучитьЗначение(i+1);                                                              //XML
                            //Заменяем спецсимволы XML                                                                //XML
                            зн=СтрЗаменить(зн,"&quot;","""");                                                         //XML
                            зн=СтрЗаменить(зн,"&apos;","'");                                                          //XML
                            зн=СтрЗаменить(зн,"&lt;","<");                                                            //XML
                            зн=СтрЗаменить(зн,"&gt;",">");                                                            //XML
                            зн=СтрЗаменить(зн,"&amp;","&");                                                           //XML
                            xml_СписокАтрибутов.ДобавитьЗначение(зн,имя);                                             //XML
                            i=i+2;                                                                                    //XML
                    КонецЦикла;    
    --- Объединение сообщений, 7 авг 2018 ---
    Последнее редактирование: 10 авг 2018