Условия: Компания занимается продажей электронной техники, и ведет управленческий учет в USD.
Также всё расчеты с поставщиками проходят в USD, компания сотрудничает только с одним банком MAIB.
Задача: загружать курс продажи валюты из личного кабинета и загружать в качестве курса в 1С вместо курса ЦБ Молдовы.
Решение:
- Пишем программу на Python с использованием библиотеки Selenium, которая получает входные данные логин и пароль, производит вход в личный кабинет по адресу https://business.maib.md/IBMAIB/, находит курс обмена валют через парсинг HTML.
- Для получения данных подключаем библиотеку SYS
- Полученную программу компилируем в EXE файл
- В 1С пишем обработку, которая будет выполняться по расписанию. Скомпилированный EXE добавляем в макеты обрабокти.
- Т.к. у меня IQ 10, логин и пароль храним в коде
- Получаем повестку в суд от банка за нарушение правил пользования личным кабинетом.
Код в 1С
&НаСервере
Процедура ЗагрузитьКурс() Экспорт
Логин = "Login";
Пароль = "Password";
ВременныйКаталог = КаталогВременныхФайлов();
ПутьКИсполяемому = ВременныйКаталог + "TakeExchangeRate.exe" ;
ПутьКXML = ВременныйКаталог + "ExchangeRates.xml";
Если не ПроверитьСуществованиеФайла(ПутьКИсполяемому) Тогда
Попытка
Индификатор = ПолучитьДанныеМакета(ПутьКИсполяемому);
МакетДоговора = ПолучитьИзВременногоХранилища(Индификатор);
МакетДоговора.Записать(ПутьКИсполяемому);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Попытка
ФайлСкрипта = ВременныйКаталог + "TakeExchangeRate.bat";
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(ПутьКИсполяемому + " "+ Логин + " "+ Пароль );
ТекстовыйДокумент.Записать(ФайлСкрипта, "cp866");
КодВозврата = Неопределено;
ЗапуститьПриложение(ФайлСкрипта,ВременныйКаталог, Истина, КодВозврата);
Исключение
Сообщить("Ошибка при запуске команды: " + ПутьКИсполяемому);
Возврат ;
КонецПопытки;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКXML);
ИнформацияКомпоненты = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Если НЕ ИнформацияКомпоненты.Свойства().Получить("USD") = Неопределено тогда
Курс = Число(СокрЛП(СтрРазделить(ИнформацияКомпоненты.USD.VanzareUSD, Символы.ПС)[0]));
КонецЕсли;
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Валюта = Справочники.Валюты.НайтиПоНаименованию("USD");
МенеджерЗаписи.Курс = Курс;
МенеджерЗаписи.Кратность = 1;
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Записать();
ЧтениеXML.Закрыть();
КонецПроцедуры
&НаСервере
Функция ПроверитьСуществованиеФайла(ЛокПолноеИмяФайла) Экспорт
ВыбФайл = Новый Файл(ЛокПолноеИмяФайла);
Возврат ВыбФайл.Существует();
КонецФункции
&НаСервере
Функция ПолучитьДанныеМакета(ПутьКИсполяемому)
АдресХранилища = Новый УникальныйИдентификатор();
Макет = ПолучитьМакет("PythonКод");
ВременныйФайл = ПолучитьИмяВременногоФайла(ПутьКИсполяемому);
Макет.Записать(ВременныйФайл);
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл), АдресХранилища);
УдалитьФайлы(ВременныйФайл);
Возврат Адрес;
КонецФункции
Протестировано на конфигурации
- Управление торговлей для Молдовы, редакция 2.5
- Локализация для Молдовы: 1C-Account-Timbal SRL (2.5.2.0)