Как настроить автоматическую загрузку курсов валют с сайта Банка Кореи в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

При ведении учета в международных компаниях, имеющих филиалы в Южной Корее, или при работе с корейскими контрагентами неизбежно возникает необходимость оперативно получать актуальные курсы валют. Южнокорейская вона (KRW) является базовой валютой для местных расчетов, и ручной ввод курсов в информационную базу 1С крайне неэффективен и сопряжен с рисками ошибок. В этой статье мы подробно разберем, как автоматизировать загрузку курсов валют напрямую из официальных южнокорейских источников с помощью механизмов платформы 1С.

Рассмотрим два основных официальных и бесплатных источника данных в Южной Корее, которые предоставляют открытые интерфейсы API для автоматического получения курсов, а также напишем готовый код интеграции для 1С.

Вариант 1. Использование системы экономических статистических данных Банка Кореи (ECOS)

Центральный банк Республики Корея (Bank of Korea) предоставляет мощную систему под названием ECOS (Economic Statistics System), которая включает в себя бесплатный Open API для разработчиков. Этот инструмент позволяет получать не только курсы валют, но и множество других макроэкономических показателей страны.

Для интеграции с ECOS нам потребуется выполнить несколько шагов:

  1. Регистрация и получение ключа: Для работы в продуктивном режиме необходимо зарегистрироваться на портале ECOS и получить уникальный ключ аутентификации (인증키). Тем не менее, для тестирования и отладки кода в среде 1С разработчики могут использовать универсальный тестовый ключ sample.
  2. Формирование структуры GET-запроса: Запросы к сервису ECOS имеют строго определенный формат. Шаблон URL выглядит следующим образом:
    /api/[НазваниеСервиса]/[Ключ]/[Формат]/[Язык]/[НачальнаяСтрока]/[КонечнаяСтрока]/[КодТаблицы]/[Периодичность]/[ДатаНачала]/[ДатаОкончания]/[КодВалюты]
  3. Выбор формата данных: Сервис поддерживает форматы XML и JSON. Мы рекомендуем использовать именно JSON, так как встроенные механизмы 1С позволяют разобрать его максимально быстро и без лишних трудозатрат.
  4. Коды таблиц и валют:
    • Для получения курсов основных мировых валют к южнокорейской воне используется код таблицы 731Y001.
    • Каждая валюта внутри таблицы идентифицируется уникальным кодом. Например, доллар США (USD) имеет код 0000001, евро (EUR) — 0000003, а японская иена (JPY) — 0000002.

Проанализируем пример отправки запроса для получения курса доллара США к корейской воне за определенный период. Ниже приведен пример реализации получения данных на встроенном языке 1С:


Функция ПолучитьКурсИзБанкаКореи(ДатаНачала, ДатаОкончания) Экспорт
    
    // Формируем параметры подключения
    Сервер = "ecos.bok.or.kr";
    Ресурс = "/api/StatisticSearch/sample/json/en/1/10/731Y001/D/" 
             + Формат(ДатаНачала, "ДФ=yyyyMMdd") + "/" 
             + Формат(ДатаОкончания, "ДФ=yyyyMMdd") + "/0000001";
             
    Соединение = Новый HTTPСоединение(Сервер, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос(Ресурс);
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Возврат РазобратьJSONКурса(Ответ.ПолучитьТелоКакСтроку());
        Иначе
            ЗаписатьВЛогОшибка("Ошибка запроса к ECOS. Код состояния: " + Ответ.КодСостояния);
            Возврат Неопределено;
        EndIf;
    Исключение
        ЗаписатьВЛогОшибка("Не удалось установить соединение с сервером ECOS: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;

КонецФункции

Вариант 2. Использование API Экспортно-импортного банка Кореи (Korea Eximbank)

Для прикладных задач финансового и бухгалтерского учета в ERP-системах многие корейские компании предпочитают использовать альтернативный источник — Экспортно-импортный банк Кореи (Korea Eximbank). Его программный интерфейс значительно проще для интеграции, поскольку он возвращает плоский и понятный список всех курсов валют на заданную дату одним запросом, без необходимости указывать сложные коды статистических таблиц.

При интеграции с Korea Eximbank важно учитывать следующие особенности:

Выясним, как выглядит структура возвращаемого JSON-пакета от Korea Eximbank. Он содержит массив объектов, где для каждого курса указаны код валюты (cur_unit), название валюты (cur_nm), курс покупки (ttb), курс продажи (tts) и базовый курс (deal_bas_r).

Разбор данных и запись курсов в информационную базу 1С

Теперь детально рассмотрим процесс обработки полученного ответа в формате JSON и его запись в типовые объекты 1С. Предположим, что мы получили строку ответа от API Экспортно-импортного банка Кореи. Нам необходимо разобрать эту строку и обновить данные в стандартном регистре сведений КурсыВалют.

Для этого воспользуемся встроенным объектом платформы ЧтениеJSON. Разберем по шагам логику обработки полученного массива данных:


Процедура РазобратьЗагрузитьКурсыВалют(ЗначениеОтветаСтрокой, ДатаКурса)
    
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ЗначениеОтветаСтрокой);
    
    // Читаем данные в массив структур 1С
    ДанныеКурсов = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    Если ТипЗнч(ДанныеКурсов) <> Тип("Массив") Тогда
        ЗаписатьВЛогОшибка("Неверный формат ответа от финансового API");
        Возврат;
    КонецЕсли;
    
    Для Каждого СтрокаВалюты Из ДанныеКурсов Цикл
        
        КодВалюты = СтрокаВалюты.cur_unit; // Например, "USD", "EUR"
        БазовыйКурсСтрокой = СтрокаВалюты.deal_bas_r; // Курс к воне в виде строки, например "1,345.50"
        
        // В корейских данных разделителем тысяч может быть запятая. Очистим строку перед преобразованием.
        ОчищенныйКурс = СтрЗаменить(БазовыйКурсСтрокой, ",", "");
        ЧислоКурса = Число(ОчищенныйКурс);
        
        Если ЧислоКурса = 0 Тогда
            Продолжить;
        КонецЕсли;
        
        // Ищем валюту в справочнике по буквенному коду
        СсылкаВалюты = Справочники.Валюты.НайтиПоРеквизиту("КодВалютыСтроковый", КодВалюты);
        
        Если ЗначениеЗаполнено(СсылкаВалюты) Тогда
            // Записываем курс в регистр сведений "КурсыВалют"
            МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
            МенеджерЗаписи.Период = ДатаКурса;
            МенеджерЗаписи.Валюта = СсылкаВалюты;
            МенеджерЗаписи.Курс = ЧислоКурса;
            МенеджерЗаписи.Кратность = 1; // Для воны кратность обычно равна 1 или 1000 в зависимости от ведения учета
            
            Попытка
                МенеджерЗаписи.Записать(Истина);
            Исключение
                ЗаписатьВЛогОшибка("Не удалось записать курс для валюты " + КодВалюты + ": " + ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
        
    КонецЦикла;
    
    ПоказатьОповещениеПользователя("Загрузка курсов",, "Загрузка курсов валют из Кореи успешно завершена!");

КонецПроцедуры

Особенности работы с корейской воной (KRW) в 1С

При проектировании и доработке механизмов загрузки курсов важно учитывать специфику южнокорейской валюты:

Таким образом, мы детально проанализировали процесс автоматизации загрузки курсов с корейских финансовых порталов. Использование официальных бесплатный Open API от Банка Кореи или Экспортно-импортного банка Кореи позволяет полностью отказаться от ручного труда и гарантирует высокую точность ведения валютного и управленческого учета в вашей системе 1С.

← На главную