Как автоматически грузить выписку Сбербанка в 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. И действительно, работает, даже если отправлять кнопки из фонового режима таймера.

Сначала я посмотрел обработку, которая целиком грузит выписки по расписанию, но это из пушки по воробьям, на мой взгляд. Я за повторное использование уже готового кода.

В конфиграции есть регламентное задание ОбменСБанкамиСлужебный.АвтоматическоеПолучениеВыписки(), но, увы, оно не работает с теми банками, где требуется запрос одноразового пароля. Понять доступно ли автоматическое получение выписок можно в регистре сведений ПараметрыОбменСБанками по галочке АвтоматическоеПолучениеВыписки.,

Определить, настроен ли банковский счет для обмена по Директ-банку можно по наличию записи по этому счету в Справочник.НастройкиОбменСБанками.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *