При ведении учета в международных компаниях, имеющих филиалы в Южной Корее, или при работе с корейскими контрагентами неизбежно возникает необходимость оперативно получать актуальные курсы валют. Южнокорейская вона (KRW) является базовой валютой для местных расчетов, и ручной ввод курсов в информационную базу 1С крайне неэффективен и сопряжен с рисками ошибок. В этой статье мы подробно разберем, как автоматизировать загрузку курсов валют напрямую из официальных южнокорейских источников с помощью механизмов платформы 1С.
Рассмотрим два основных официальных и бесплатных источника данных в Южной Корее, которые предоставляют открытые интерфейсы API для автоматического получения курсов, а также напишем готовый код интеграции для 1С.
Центральный банк Республики Корея (Bank of Korea) предоставляет мощную систему под названием ECOS (Economic Statistics System), которая включает в себя бесплатный Open API для разработчиков. Этот инструмент позволяет получать не только курсы валют, но и множество других макроэкономических показателей страны.
Для интеграции с ECOS нам потребуется выполнить несколько шагов:
인증키). Тем не менее, для тестирования и отладки кода в среде 1С разработчики могут использовать универсальный тестовый ключ sample./api/[НазваниеСервиса]/[Ключ]/[Формат]/[Язык]/[НачальнаяСтрока]/[КонечнаяСтрока]/[КодТаблицы]/[Периодичность]/[ДатаНачала]/[ДатаОкончания]/[КодВалюты]731Y001.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: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Для прикладных задач финансового и бухгалтерского учета в ERP-системах многие корейские компании предпочитают использовать альтернативный источник — Экспортно-импортный банк Кореи (Korea Eximbank). Его программный интерфейс значительно проще для интеграции, поскольку он возвращает плоский и понятный список всех курсов валют на заданную дату одним запросом, без необходимости указывать сложные коды статистических таблиц.
При интеграции с Korea Eximbank важно учитывать следующие особенности:
oapi.koreaexim.go.kr.YYYYMMDD и типа данных AP01 (означает курсы валют).Выясним, как выглядит структура возвращаемого JSON-пакета от Korea Eximbank. Он содержит массив объектов, где для каждого курса указаны код валюты (cur_unit), название валюты (cur_nm), курс покупки (ttb), курс продажи (tts) и базовый курс (deal_bas_r).
Теперь детально рассмотрим процесс обработки полученного ответа в формате JSON и его запись в типовые объекты 1С. Предположим, что мы получили строку ответа от API Экспортно-импортного банка Кореи. Нам необходимо разобрать эту строку и обновить данные в стандартном регистре сведений КурсыВалют.
Для этого воспользуемся встроенным объектом платформы ЧтениеJSON. Разберем по шагам логику обработки полученного массива данных:
Процедура РазобратьЗагрузитьКурсыВалют(ЗначениеОтветаСтрокой, ДатаКурса)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ЗначениеОтветаСтрокой);
// Читаем данные в массив структур 1С
ДанныеКурсов = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Если ТипЗнч(ДанныеКурсов) <> Тип("Массив") Тогда
ЗаписатьВЛогОшибка("Неверный формат ответа от финансового API");
Возврат;
КонецЕсли;
Для Каждого СтрокаВалюты Из ДанныеКурсов Цикл
КодВалюты = СтрокаВалюты.cur_unit; // Например, "USD", "EUR"
БазовыйКурсСтрокой = СтрокаВалюты.deal_bas_r; // Курс к воне в виде строки, например "1,345.50"
// В корейских данных разделителем тысяч может быть запятая. Очистим строку перед преобразованием.
ОчищенныйКурс = СтрЗаменить(БазовыйКурсСтрокой, ",", "");
ЧислоКурса = Число(ОчищенныйКурс);
Если ЧислоКурса = 0 Тогда
Продолжить;
КонецЕсли;
// Ищем валюту в справочнике по буквенному коду
СсылкаВалюты = Справочники.Валюты.НайтиПоРеквизиту("КодВалютыСтроковый", КодВалюты);
Если ЗначениеЗаполнено(СсылкаВалюты) Тогда
// Записываем курс в регистр сведений "КурсыВалют"
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ДатаКурса;
МенеджерЗаписи.Валюта = СсылкаВалюты;
МенеджерЗаписи.Курс = ЧислоКурса;
МенеджерЗаписи.Кратность = 1; // Для воны кратность обычно равна 1 или 1000 в зависимости от ведения учета
Попытка
МенеджерЗаписи.Записать(Истина);
Исключение
ЗаписатьВЛогОшибка("Не удалось записать курс для валюты " + КодВалюты + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
ПоказатьОповещениеПользователя("Загрузка курсов",, "Загрузка курсов валют из Кореи успешно завершена!");
КонецПроцедуры
При проектировании и доработке механизмов загрузки курсов важно учитывать специфику южнокорейской валюты:
Валюты рекомендуется устанавливать адекватную кратность (например, 100 или 1000), чтобы избежать потери точности при округлении дробной части в расчетах документов 1С.HTTPСоединение обязательно передавайте параметр Новый ЗащищенноеСоединениеOpenSSL(), чтобы избежать ошибок со стороны безопасности операционной системы.Таким образом, мы детально проанализировали процесс автоматизации загрузки курсов с корейских финансовых порталов. Использование официальных бесплатный Open API от Банка Кореи или Экспортно-импортного банка Кореи позволяет полностью отказаться от ручного труда и гарантирует высокую точность ведения валютного и управленческого учета в вашей системе 1С.