7.7 Загрузка курсов валют

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем VIPOS, 25 апр 2013.

  1. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Доброго времени суток уважаемые форумчане!
    Появилась небольшая проблемка...
    Перестала работать обработка загруки курсов валют с сайта нац банка. т.е. она работает, но не совсем корректно
    т.е. всесто курса Usd = 8600 показывает 8, вместо eur= 11200 показывает 11, только российский рубль показывает верно.
    В чем может быть проблема?
    1 с 7.7 htl 4.5 БУ
  2. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Люди хелпните пожалуйста!
  3. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
  4. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    У меня загрузка с нац Банка РБ
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Конфа я так понимаю для Белоруссии? Обработка типовая? Что отладчик говорит?
  6. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    да обработка типовая... в отладчике все норм проходит... ща проверяю пошагово
  7. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    предроложительно нашел ошибку
    после вот этих преобразований файл курсов меняет кодировку с utf-8 на ansi

    Код:
    Для Индекс = 8 По Ткст.КоличествоСтрок() Цикл   //читаем со 2-ой строки, в первой ничего интересного
    Стр =  Ткст.ПолучитьСтроку(Индекс);
    Если Найти(Стр,"Курс<tr>") > 0 Тогда	    // до фразы "Курс<tr>" тоже ничего интересного
    Стр = Сред(Стр,Найти(Стр,"Курс<tr>")+8);  // -- отрезаем
    КонецЕсли;
    Если Найти(Стр,"</table></table></body></html>") > 0 Тогда    // ну и хвост нам не нужен
    Стр = Лев(Стр,Найти(Стр,"</table></table></body></html>")-1); // -- режем
    КонецЕсли;
    //меняем теги на нужные символы
    Стр = СтрЗаменить(Стр,"<td align=centrer>","");	
    Стр = СтрЗаменить(Стр,"<td align=right>","|");
    Стр = СтрЗаменить(Стр,"<td nowrap class=t>",":");
    Стр = СтрЗаменить(Стр,"<tr>",РазделительСтрок); //конец строки --вставляем разделитель
    Стр = СтрЗаменить(Стр,Симв(160)," ");
    ОбщСтр = ОбщСтр + Стр;
    КонецЦикла;
  8. Vlan
    Offline

    Vlan Гость Гость

    Насчет кодировки ничего не вижу, а вот режет текст направо и налево.
  9. Vlan
    Offline

    Vlan Гость Гость

    Похоже, вы получаете валюты примерно в таком виде
    EUR Евро 11 230,00 11 280,00
    Понятно, что, дойдя до пробела, текст обрезается.
    Попробуйте вместо

    Код:
    Если Найти(Стр,"") > 0 Тогда    // ну и хвост нам не нужен
    Стр = Лев(Стр,Найти(Стр,"")-1); // -- режем
    КонецЕсли;
    подставить


    Код:
      Стр = СокрП(Стр);
    
  10. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    В том то и дело , что кодировка ен прописывается, но при создании файл идет кодировки utf, но после нарезки становиться ansi

    получается такой же результат..

    или может быть подскажете как переделать загрузку вот с этой таблицы?
    http://www.nbrb.by/statistics/Rates/RatesPrint.asp?fromDate=
  11. Vlan
    Offline

    Vlan Гость Гость

    А можете вывести значение Стр после
    Код:
    Стр =  Ткст.ПолучитьСтроку(Индекс);
    и выложить сюда?
    Причина в пробеле между тысячами, печенкой чую. Рубль без тысяч, поэтому отображается нормально.
  12. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    кстати да, проблема именно с тысячами
    Код:
    ТЗ.Курс = Число(СтрЗаменить(Сред(Стр,Найти(Стр,"|")+1)," ",""));
    если в этой строке 1 заменить на 2 или больше тогда показыватся хвост числа

    Вложения:

  13. Vlan
    Offline

    Vlan Гость Гость

    У меня обработка ничего не конвертирует. Получает кракозябры utf-ные.
    Код:
    Стр = "<tr><td>AUD<td nowrap class=t>1 австралийский доллар<td align=right>8В 849,82<tr><td>BGN<td nowrap class=t>1 болгарский лев<td align=right>5В 741,40<tr><td>UAH<td nowrap class=t>1 РіСЂРёРІРЅР°<td align=right>1В 062,46<tr><"
  14. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    у меня такую же фигню показывает., но курс и валюту он показывает
    AUD1 и 1В 062,46
  15. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    какая-то херня с преобразованием!

    ща колупаю
    пробую из xml делать выгрузку
    http://www.nbrb.by/Services/XmlExRates.aspx?ondate=
  16. Vlan
    Offline

    Vlan Гость Гость

    "B" после тысяч и мешает
  17. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    вот и не знаю как от этого избавиться!
  18. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    при загрузке файла этой В нету
  19. Vlan
    Offline

    Vlan Гость Гость

    С UTF не работал. Но у меня была подобная ситуация, когда нужно было загрузить файл из АТС, где символы конца строки были перепутаны. 1С-ка сходила с ума.
    Пришлось считывать посимвольно через внешнюю компоненту.
    Или попробовать перекодировку с ИНфостарта:

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

    Vlan Гость Гость

    Вот с таким циклом (+ добавленная функция ) должно работать

    Код:
      Стр =  Ткст.ПолучитьСтроку(Индекс);   
    Стр = СтрЗаменить(Стр,"<td align=centrer>","");	
    Стр = СтрЗаменить(Стр,"<td align=right>","|");
    Стр = СтрЗаменить(Стр,"<td nowrap class=t>","");
    Стр = СтрЗаменить(Стр,"<td>","");
    Стр = СтрЗаменить(Стр,"<tr>",РазделительСтрок); //конец строки --вставляем разделитель
    Стр = ПреобразоватьСтрокуИзУТФ8(Стр);
    Если Найти(Стр,"</table></table></body></html>") > 0 Тогда    // ну и хвост нам не нужен
    Стр = СокрП(Стр); // -- режем
    КонецЕсли;
    // //меняем теги на нужные символы
    Стр = СтрЗаменить(Стр,Симв(160)," ");
    ОбщСтр = ОбщСтр + Стр;
    КонецЦикла;
    

Поделиться этой страницей