Предистория
11.10.2018 стал очень знаменательным днём, т.к. именно в этот день перестала правильно работать основная обработка загрузки курсов валют с сайта finance.ua. Эта обработка входит во все типовые конфигурации 1С Украины. В своё время она была "революцией" онлайн получения данных из Интернета. Но пришло время для ревизии.
В результате проведенного анализа, оказалось, что НБУ на своем сайте уже давно имеет описание API, который можно использовать для получения курсов валют за любую дату (с какого-то момента 2016 года, если быть точным). Вся информация находится здесь: https://bank.gov.ua/control/uk/publish/article?art_id=38441973
Поэтому и возникла мысль об изменении обработки и переходе на получение данных из "первоисточника".
Описание предлагаемой обработки
Обработка была разработана для замены той, что входит в типовые конфигурации. Главный концепт - это минимизация интерфейса и сообщений для пользователя.
Практика показала, что пользователи используют обработку исключительно для того, чтобы автоматически заполнять курсы валют для всех элементов из справочника Валюты. Никаких дополнительных настроек никто не хочет делать. Поэтому, в новой обработке сейчас нет выбора валют и нет вывода никакой информации. Результаты пользователь и так увидит в регистре сведений. Все, что ему необходимо - это выбрать период (или не выбирать) и нажать кнопку "Загрузка".
Особенности
НБУ сейчас использует защищенный протокол. Для 8.3 все прекрасно работает штатными средствами. Для 8.2 - всё оказалось нет так уж и просто.
Определение версии программы производится обычным методом по данным из СистемнойИнформации.
// определяем версию программы - если 8.2 - тогда другая методика
СисИнфо = Новый СистемнаяИнформация;
СтрРез = Неопределено;
Если Лев(СисИнфо.ВерсияПриложения, 3) >= "8.3" Тогда
СтрРез = ПолучитьОтветСКурсамиВалютНаДату1С(НаДату);
КонецЕсли;
Если СтрРез = Неопределено Тогда
// пробуем старым методом
СтрРез = ПолучитьОтветСКурсамиВалютНаДату(НаДату);
КонецЕсли;
Для получения данных с сайта в 8.2 использован COMОбъект "MSXML2.ServerXMLHTTP.6.0" или "MSXML2.ServerXMLHTTP.4.0".
//пытаемся определить версию MSXML
Версия = "6";
Попытка
ХТТП = Новый COMОбъект("MSXML2.ServerXMLHTTP."+Версия+".0");
Исключение
Попытка
Версия = "4";
ХТТП = Новый COMОбъект("MSXML2.ServerXMLHTTP."+Версия+".0");
Исключение
Сообщить(ОписаниеОшибки(),"!");
Сообщить("Для работы загрузки данных курсов валюты необходима MSXML не ниже 4.0","!");
Возврат "";
КонецПопытки;
КонецПопытки;
ХТТП.open ("GET", Адрес, Ложь);
ХТТП.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ХТТП.send();
Обработка прекрасно себя показала на версиях Бухгалтерии Украины 1.2 в качестве полной замены типовой обработки ЗагрузкаКурсовВалют. Поэтому, в её модуле оставлены методы, которые используются в типовой конфигурации. На других версиях - не тестировалась. Автоматическая загрузка курсов валют при старте тоже работает, только теперь её работы пользователь никак не видит. И ему нет необходимости постоянно закрывать надоедливое окно открывающегося сайта после загрузки курсов в 1С.
Все происходит благодаря следующему коду в модуле обычного приложения:
В модуле обработки оставлены следующие экспортные методы:
Процедура ЗагрузитьКурсыПоНастройкам() Экспорт
ЗагрузитьКурсыНаДату();
КонецПроцедуры
Функция КодДоступаАктуален() Экспорт
Возврат Истина;
КонецФункции
Также добавлена функция автоматической установки необходимых параметров для возможности автоматического старта обработки при старте системы:
При этом, кроме установки в Истина записи регистра "НастройкиПользователей" с настройкой "Загружать актуальные курсы валют при запуске системы" для текущего пользователя, обработка также запишет параметр "ЗагружатьЕжедневно" в константу "НастройкиЗагрузкиКурсовВалют".
// теперь константа НастройкиЗагрузкиКурсовВалют
Настройки = Новый Структура("ЗагружатьЕжедневно", Истина);
ХранилищеНастроек = Новый ХранилищеЗначения(Настройки);
Попытка
Константы.НастройкиЗагрузкиКурсовВалют.Установить(ХранилищеНастроек);
Исключение
Сообщить("Не удалось записать значение ""ЗагружатьЕжедневно"" в константу ""НастройкиЗагрузкиКурсовВалют""", СтатусСообщения.Важное);
КонецПопытки;
Проверить результат можно в настройках текущего пользователя:
Процедура загрузки обработки в конфигурацию
Данная обработка может быть подключена в справочник внешних обработок и отчетов. Но можно выполнить и замену типовой обработки в конфигураторе. Чтобы это сделать необходимо осуществить простые и известные любому администратору 1С действия:
Считаю, что также будет полезным выключить и поддержку у данной обработки:
Заключение
Очень надеюсь, что данная обработка станет Вам полезным инструментом.
А также, желаю всем замечательных творческих успехов! ("ЖТУ" - (с)Л.М.)