Как автоматически грузить выписку Сбербанка в 1С через Директ-Банк без вмешательства в код
У меня появился заказ, где была базовая отраслевая конфигурация, в которую хотели автоматически загружать в 1С через Директ-банк. При этом для ввода подтверждающих СМС используется API Push Bullet. API Fintech не используется, потому что дорогое (10.000 рублей в месяц).
Конфигурация базовая, поэтому вмешиваться в код нельзя.
Идея была такая — через обновлятор в каждой базе открывать внешнюю обработку, она открывает выписку, нажимает кнопку «Загрузить» и должны загружаться документы выписки.
Но был один момент — при этом запрашивается СМС. Его можно получить через Push Bullet. Но модальное окно по вводу смс работает в режиме блокировки всего интерфейса. Были сомнения, что туда можно программно что-то ввести, тем более в базовой версии, где нельзя изменять код.
Но, к счастью, все благополучно удалось решить. Расскажу как.
Я написал тестовую обработку, которая периодически раз в секунду получала список открытых окон и если находила окно ввода СМС, вводила туда «12345» нажимала кнопку ОК. Вот код:
&НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("Таймер", 1); КонецПроцедуры &НаКлиенте Процедура Таймер() ОкнаПриложения = ПолучитьОкна(); Сообщить("---- " + ТекущаяДата() + "------"); Для каждого ОкноПриложения Из ОкнаПриложения Цикл // Анализ заголовка окна Сообщить(ОкноПриложения.Заголовок); Если ОкноПриложения.Заголовок = "Аутентификация на сервере банка" Тогда ОкноПриложения.Содержимое[0].ПарольПользователя = "12345"; Shell= Новый COMОбъект("Wscript.Shell"); Shell.SendKeys("^{ENTER}"); //Ctrl + Enter КонецЕсли; КонецЦикла; КонецПроцедуры
Посмотрел как получить список открытых окон тут.
Пароль успешно вводится в поле ввода и кнопка ОК нажимается:
Форма ввода СМС, кстати, называется Обработка.ОбменСБанками.Форма.ЗапросПароляКСертификату.
В окне сообщений я вывожу все открытые окна и там видно окно с заголовком «Аутентификация на сервер банка»:
Возник вопрос — как нажать на кнопку ОК. Подумал, что самый простой способ — отправить CTRL+Enter через SendKeys. И действительно, работает, даже если отправлять кнопки из фонового режима таймера.
Сначала я посмотрел обработку, которая целиком грузит выписки по расписанию, но это из пушки по воробьям, на мой взгляд. Я за повторное использование уже готового кода.
В конфиграции есть регламентное задание ОбменСБанкамиСлужебный.АвтоматическоеПолучениеВыписки(), но, увы, оно не работает с теми банками, где требуется запрос одноразового пароля. Понять доступно ли автоматическое получение выписок можно в регистре сведений ПараметрыОбменСБанками по галочке АвтоматическоеПолучениеВыписки.,
Определить, настроен ли банковский счет для обмена по Директ-банку можно по наличию записи по этому счету в Справочник.НастройкиОбменСБанками.
Свежие комментарии