Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 16:42

Интеграция с веб-сервисами

Автор Нияз Ахмадуллин, 03 окт 2020, 19:22

0 Пользователей и 1 гость просматривают эту тему.

Нияз Ахмадуллин

Задание:
Усовершенствуйте алгоритм получения курсов валют: если валюта,
загруженная с веб-сервиса, не найдена в базе данных, то она должна
создаваться. В документ "Установка курсов валют" также должна попасть
запись о курсе только что созданной валюты.
Создайте константу и функциональную опцию. Если константа
"Создавать валюты автоматически" выставлена в "Истина", то
ненайденные валюты создаются при загрузке курсов. Если "Ложь" -
пропускаются.


&НаСервере
Процедура      ЗагрузитьКурсыВалют()

Соединение = WSСсылки.WSСсылка1.СоздатьWSПрокси("http://web.cbr.ru/","DailyInfo","DailyInfoSoap");
   
ТипWSПарметра = Соединение.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDate");
    СегодняшняяДата = Соединение.ФабрикаXDTO.Создать(ТипWSПарметра);
    СегодняшняяДата.On_date = ТекущаяДата();
   
    КурсыВалют = Соединение.GetCursOnDate(СегодняшняяДата);
   
   
    НовыйДок = Документы.УстановкаКурсаВалют.СоздатьДокумент();
    НовыйДок.Дата = ТекущаяДата();
   
    Для Каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate Цикл
       
        НайденнаяВалюта = Справочники.Валюты.НайтиПоКоду(Элемент.Vcode);
       
            НВ = Справочники.Валюты.СоздатьЭлемент(Элемент.Vname);
       
        если ЗначениеЗаполнено(НайденнаяВалюта) Тогда
             НоваяСтрока = НовыйДок.Курсы.Добавить();
             НоваяСтрока.Валюта = НайденнаяВалюта;
             НоваяСтрока.Курс = Элемент.Vcurs;
        иначе
             НоваяСтрока = НовыйДок.Курсы.Добавить();
             НоваяСтрока.Валюта = НВ;
             НоваяСтрока.Курс = Элемент.Vcurs;
        КонецЕсли;           
   
    КонецЦикла;
   
   
    НовыйДок.Записать();
   
    Сообщить("Курс валют загружен. Создан документ:" + НовыйДок.Ссылка);
   
   
   
КонецПроцедуры   

antoneus

НайденнаяВалюта = Справочники.Валюты.НайтиПоКоду(Элемент.Vcode);
Если ЗначениеЗаполнено(НайденнаяВалюта) Тогда
    НоваяСтрока = НовыйДок.Курсы.Добавить();
    НоваяСтрока.Курс = Элемент.Vcurs;
    НоваяСтрока.Валюта = НайденнаяВалюта;
ИначеЕсли Константы.СоздаватьВалютыАвтоматически.Получить() Тогда
    НВ = Справочники.Валюты.СоздатьЭлемент();
    НВ.Код = Элемент.Vcode;
    НВ.Наименование = Элемент.Vname;
    НВ.Записать();
    НоваяСтрока = НовыйДок.Курсы.Добавить();
    НоваяСтрока.Курс = Элемент.Vcurs;
    НоваяСтрока.Валюта = НВ.Ссылка;
КонецЕсли;

Нияз Ахмадуллин

antoneus, большое спасибо. Все работает.
Два дня домал голову с этим

СоловейАда

не могу сделать продолжение этого задания:

Попробуйте также решить более сложный вариант задания: обработка должна удалять из табличных частей документов «Установка курсов валют» все непредопределённые валюты и перепроводить документ, если из его табличной части была удалена хотя бы одна запись. При этом сам документ не удаляется.

antoneus

СоловейАда, а что конкретно не получается?

NadyaX23

Здравствуйте!

Выдает ошибку:
{ОбщаяКоманда.ЗагрузкаКурсовВалют.МодульКоманды(28)}: Слишком много фактических параметров
          НВ = Справочники.Валюты.СоздатьЭлемент(Элемент.Vname);

LexaK

NadyaX23, yнадо так
  НВ = Справочники.Валюты.СоздатьЭлемент();
если помогло нажмите: Спасибо!

NadyaX23


Рустем

Процедура ЗагрузитьКурсыВалют()

    Соединение = WSСсылки.КурсыВалютССайтаЦБ.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
   
    ТипWSПараметра = Соединение.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDate");
    СегодняшняяДата  = Соединение.ФабрикаXDTO.Создать(ТипWSПараметра);
    СегодняшняяДата.On_Date= ТекущаяДата();
   
    КурсыВалют = Соединение.GetCursOnDate(СегодняшняяДата);
   
    НовыйДокумент = Документы.УстановкаКурсаВалют.СоздатьДокумент();
    НовыйДокумент.Дата = ТекущаяДата();
   
    Для Каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate Цикл
       
        НайденнаяВалюта = Справочники.Валюты.НайтиПоКоду(Элемент.Vcode);
       
         Если ЗначениеЗаполнено(НайденнаяВалюта) Тогда
            НоваяСтрока = НовыйДокумент.Валюты.Добавить();
            НоваяСтрока.Валюта = НайденнаяВалюта;
            НоваяСтрока.Курс = Элемент.Vcurs;
        ИначеЕсли Константы.СоздаватьВалютыАвтоматически.Получить() = истина Тогда
            НоваяВалюта = Справочники.Валюты.СоздатьЭлемент();
            НоваяВалюта.Код = Элемент.Vcode;
            НоваяВалюта.Наименование = Элемент.Vname;
            НоваяВалюта.Записать();
            НоваяСтрока = НовыйДокумент.Валюты.Добавить();
            НоваяСтрока.Курс = Элемент.Vcurs;
            НоваяСтрока.Валюта = НоваяВалюта.Ссылка;
        КонецЕсли;
           
    КонецЦикла;
   
    НовыйДокумент.Записать();
   
    Сообщить("Курс валют загружен! Создан дркумент: " + НовыйДокумент.Ссылка);
       
   

КонецПроцедуры // ЗагрузитьКурсыВалют()

Рустем

Но выходит ошибка помогите добро люди.
Поле объекта не обнаружено (СоздаватьВалютыАвтоматически)
{ОбщаяКоманда.ЗагрузкаКурсовВалют.МодульКоманды(40)}:      ИначеЕсли Константы.СоздаватьВалютыАвтоматически.Получить() = истина Тогда
{ОбщаяКоманда.ЗагрузкаКурсовВалют.МодульКоманды(5)}:   ЗагрузитьКурсыВалют();

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск