Имя: Пароль:
IT
Как страшно жить
РБК подставил, выдал неверные курсы валют :(
0 Fragster
 
гуру
29.12.20
10:54
1 mave13
 
29.12.20
10:57
Аналогично
2 ptiz
 
29.12.20
11:05
Вчерашние курсы подсунули?
3 ptiz
 
29.12.20
11:10
Может, они неправильно поняли указание о "заморозке цен"? :)
4 mave13
 
29.12.20
11:17
(2) ага
5 Волшебник
 
29.12.20
11:26
Никогда такого не было и вот опять...

Курсы надо грузить от первоисточника - Центробанка России.
Если оттуда не грузится, то от РБК и обязательно проверять вручную.
6 Fragster
 
гуру
29.12.20
11:30
(5) в старых БСП грузится с этого ресурса, в более новых - с ИТС или с этого ресурса
7 kzot
 
29.12.20
11:31
(5) было и раньше, научили...

а если у Центробанка неверно ? )
8 Fragster
 
гуру
29.12.20
11:59
(7) у центробанка вот с этого: https://www.cbr.ru/development/DWS/
получается полная шляпа:
https://i.imgur.com/JKgk8pW.png
9 Fragster
 
гуру
29.12.20
11:59
в ответ вместо данных приходит схема данных ответа
10 Волшебник
 
29.12.20
12:06
(7) Вероятность очень мала. Даже если у Центробанка вдруг будет техническая ошибка, то есть вероятность, что её узаконят где-то в недрах ЦБ.
11 ptiz
 
29.12.20
12:21
(8)



Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    ТекстОшибки = "";
    ПроксиВебСервиса = ПолучитьНовыйПроксиВебСервисаКурсовВалютЦБ(ТекстОшибки);
    
    Если ЗначениеЗаполнено(ТекстОшибки) Тогда
        Сообщить(ТекстОшибки);
        Возврат;
    КонецЕсли;

    // курсы
    ДатаСтрокой = Формат(ДатаКурса, "ДФ=yyyy-MM-ddTHH:mm:ss");
    
    ТипWSПараметра = ПроксиВебСервиса.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDateXML";);
    WSПараметр = ПроксиВебСервиса.ФабрикаXDTO.Создать(ТипWSПараметра);    
    
    WSПараметр.On_date = ДатаСтрокой;
    
    
    Попытка
        СтрокаОтвета = ПроксиВебСервиса.GetCursOnDateXML(WSПараметр);
    Исключение
        ТекстОшибки = "Ошибка веб-сервиса: " + ОписаниеОшибки();
    КонецПопытки;
    
    Если ЗначениеЗаполнено(ТекстОшибки) Тогда
        Сообщить(ТекстОшибки);
    Иначе
        //Сообщить(СтрокаОтвета);
        
        Для каждого Элемент Из СтрокаОтвета.GetCursOnDateXMLResult.ValuteData.ValuteCursOnDate Цикл
        
            Сообщить(СокрЛП(Элемент.Vname) + " - " + СокрЛП(Элемент.Vcurs));
        
        КонецЦикла;
    КонецЕсли;
        
    
КонецПроцедуры


Функция ПолучитьНовыйПроксиВебСервисаКурсовВалютЦБ(ТекстОшибки = "", ТаймАут = 5) Экспорт
    
    Пользователь = "";
    Пароль = "";
    
    ОпределениеСервиса = Неопределено;
    
    АдресВебСервиса = "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL";;
    
    ТекстОшибки = "";
    Попытка
        ОпределениеСервиса = Новый WSОпределения(АдресВебСервиса, Пользователь, Пароль, ТаймАут);
    Исключение
        ТекстОшибки = ОписаниеОшибки();
        ОпределениеСервиса = Неопределено;
    КонецПопытки;
    
    Если ОпределениеСервиса = Неопределено Тогда
        ТекстОшибки = ТекстОшибки + ?(ТекстОшибки = "", "", Символы.ПС) + "Не удалось получить определение веб-сервиса";
        Возврат Неопределено;
    КонецЕсли;
    
    Попытка
        Сервис = ОпределениеСервиса.Сервисы[0];
        Прокси = Новый WSПрокси(ОпределениеСервиса, Сервис.URIПространстваИмен, Сервис.Имя, Сервис.ТочкиПодключения[0].Имя, ТаймАут);
        Прокси.Пользователь = Пользователь;
        Прокси.Пароль = Пароль;
    Исключение
        ТекстОшибки = ОписаниеОшибки();
        ОпределениеСервиса = Неопределено;
        Прокси = Неопределено;
    КонецПопытки;

    Если Прокси = Неопределено Тогда
        ТекстОшибки = ТекстОшибки + ?(ТекстОшибки = "", "", Символы.ПС) + "Не удалось получить прокси веб-сервиса";
        Возврат Неопределено;
    КонецЕсли;
    
    Возврат Прокси;
    
КонецФункции


Процедура ПриОткрытии()
    
    ДатаКурса = ТекущаяДата();
    
КонецПроцедуры
12 Fragster
 
гуру
29.12.20
12:26
(11) уже сделал так:

Адрес = "https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL";;

Определение = Новый WSОпределения(Адрес);

Сервис = Определение.Сервисы[Определение.Сервисы.Количество() - 1];

ПространствоИмен = Сервис.URIПространстваИмен;
ТочкаПодключения = Сервис.ТочкиПодключения[Сервис.ТочкиПодключения.Количество() - 1];

Прокси = Новый WSПрокси(Определение, ПространствоИмен, Сервис.Имя, ТочкаПодключения.Имя);
Фабрика = Определение.ФабрикаXDTO;

Тип = Фабрика.Тип(ПространствоИмен, "EnumValutes");
Параметр = Фабрика.Создать(Тип);
Результат = Прокси.EnumValutes(Параметр);
СписокВалют = Результат.EnumValutesResult.diffgram.ValuteData.EnumValutes;

Для каждого СтрокаВалют Из СписокВалют Цикл
    Если СтрокаВалют.Получить("VcharCode") = "EUR" Тогда
        КодВалюты = СокрЛП(СтрокаВалют.Vcode);
        Прервать;
    КонецЕсли;
КонецЦикла;


Тип = Фабрика.Тип(ПространствоИмен, "GetCursDynamic");
//Тип = Фабрика.Тип(ПространствоИмен, "GetCursDynamicXML");
Параметр = Фабрика.Создать(Тип);
Параметр.FromDate = НачалоДня(ТекущаяДата() - 5*86400);
Параметр.ToDate = НачалоДня(ТекущаяДата());
Параметр.ValutaCode = КодВалюты;

Результат = Прокси.GetCursDynamic(Параметр);
//Результат = Прокси.GetCursDynamicXML(Параметр);

Курсы = Результат.GetCursDynamicResult.diffgram.ValuteData.ValuteCursDynamic

Для каждого СтрокаКурсов Из Курсы Цикл
    
КонецЦикла;
13 Fragster
 
гуру
29.12.20
12:26
у них свои коды прост. + ответ они отдают неправильный, из-за которого он AnyType
14 Fragster
 
гуру
29.12.20
12:27
и надо что влечет некоторое количество кода на преобразование список-объект и строк в числа идаты
15 Fragster
 
гуру
29.12.20
12:32
как-то так:
Курсы = Результат.GetCursDynamicResult.diffgram.ValuteData.ValuteCursDynamic;

Если ТипЗнч(Курсы) <> Тип("СписокXDTO") Тогда
    ТМП = Новый Массив;
    ТМП.Добавить(Курсы);
    Курсы = ТМП;
КонецЕсли;
Для каждого СтрокаКурсов Из Курсы Цикл
    Дата = XMLЗначение(Тип("Дата"), СтрокаКурсов.CursDate);
    Курс = XMLЗначение(Тип("Число"), СтрокаКурсов.Vcurs);
    Кратность = XMLЗначение(Тип("Число"), СтрокаКурсов.Vnom);
КонецЦикла;
16 Fragster
 
гуру
29.12.20
12:32
+ оно с пропусками дат (в отличии от РБК)
17 Оболтус
 
29.12.20
12:40
РБК чинить-то собирается?
18 ДенисЧ
 
29.12.20
12:45
(17) Сейчас пообедаем и будем чинить. Иншалла починим...
19 kzot
 
29.12.20
13:13
(18) не поел ещё ? цб курс выдало на 30.12  90,2074
20 ДенисЧ
 
29.12.20
13:15
(19) Я же сказал - иншалла...
21 kzot
 
29.12.20
14:19
(17) уже поправили.

(20) свинину ел что ли ?
22 ДенисЧ
 
29.12.20
14:20
(21) Ты хочешь оскорбить чувства свиноедов или свиней?
23 Оболтус
 
29.12.20
14:36
Да, поправили. Наконец-то.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший