Автоматическая загрузка выписок Сбербанк-бизнес онлайн с помощью 1С:ДиректБанк

14.03.18

Учетные задачи - Банковские операции

На примере Управление нашей фирмой, редакция 1.6 (1.6.13.48) и Сбербанк Бизнес Онлайн с использованием СМС авторизаций. Простой способ автоматизировать рутинную работу по загрузке выписок с помощью 1С:ДиректБанк, без снятия с поддержки и изменения метаданных. Способ подходит в том числе и для базовой версии. 

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Автоматическая загрузка выписок Сбербанк-бизнес онлайн с помощью 1С:ДиректБанк:
.cfe 80,96Kb ver:0.001
21
21 Скачать (1 SM) Купить за 1 850 руб.

Принцип работы 1С:ДиректБанк: 
Запрашиваем выписку, авторизовываемся, подтверждаем авторизацию СМС паролем и получаем выписку. Все хорошо работает, но для того что бы спустя время повторно получить выписку, приходится опять проходить авторизацию.
Само подключение подключение к 1С:ДиректБанк - не рассматриваем, так как в интернете полно инструкций, да и встроенная обработка по подключению полностью автоматизирована.

О способе: 
Эмпирически было замечено, что сбербанк после авторизации для получения выписки инициирует vpn соединение и завершает сессию при отсутствии активности спустя некоторого времени. Так что мы будем использовать эту особенность для многократного получения выписок, по сути постоянно генерируем активность в сессии не давай ей закрыться.
В общем этот способ хоть и костыль, но позволяет нам оперативно видеть движения по расчетному счету и минимизировать человеческий фактор.

Способ безопасен, ибо дает возможность только получения выписок, для отправки платежей все равно потребуется подписывание с помощью СМС.

Из минусов, придется держать открытым 1С с запущенной формой загрузки выписок

Добавленный или измененный код обернут в "////", большая часть изменений связана с отключением вывода предупреждений и прочих окон. Можете по этому принципе доработать любую типовую конфигурацию. 

1. Добавляем новое расширением, называем как хотим и снимаем оба флажка в списке расширений.

2. Добавляем в расширение форму "Обработка.КлиентБанк.ФормаЗагрузка"

3. В расширяемой форме, добавляем новый реквизит "Таймер", тип Число. Установка Таймера - будет отключать все. Для удобства включаем у реквизита "Таймер" флаг "Сохранения", что бы значение таймера сохранялось.

4. Добавляем в удобное для вас место на форме, я добавил между кнопками запросить выписку и настройки. (скриншот 1cv8c_2018-03-14_17-26-28.png)

5. Вставляем код в модуль расширяемой формы  "Обработка.КлиентБанк.ФормаЗагрузка"

 
 //  Эту процедура инициирует создание и если настроено, проведение документов на основе загруженной выписки. 
// в этой процедур мы отключаем все окна, предупреждения и прочие открываемые формы
&Вместо("ЗагрузитьВыполнить")
&НаКлиенте
Процедура hands_center_ЗагрузитьВыполнить(Команда)
    
    ПослеЗагрузкиВыписокВ1С = Истина;
    
    Если НЕ ПроверитьЗаполнениеРеквизитовФормы() Тогда
        
        Возврат;
        
    КонецЕсли;
    
    Если Объект.Загрузка.Количество() > 0 Тогда
        
        ЕстьОтмеченныеСтроки = Ложь;
        Для Каждого ТекущаяСтрока Из Объект.Загрузка Цикл
            Если ТекущаяСтрока.Загружать Тогда
                ЕстьОтмеченныеСтроки = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Если Не ЕстьОтмеченныеСтроки Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = НСтр("ru = 'Не отмечено ни одной строки! Выписки не будут загружены. Нужно установить отметку в загружаемых строках и нажать кнопку еще раз.'");
            Сообщение.Поле = "Объект.Загрузка[0].Загружать";
            Сообщение.Сообщить();
            Возврат;
        КонецЕсли;
        
        ТаблицаРезультата.Очистить();
        
        Состояние(
            НСтр("ru='Выполняется загрузка выписки из файла в 1С...'"),
            ,
            НСтр("ru='Пожалуйста, подождите'"),
            БиблиотекаКартинок.ЗагрузкаДанных32
        );
        
        СтруктураДанныхЗагрузки = ЗагрузитьВыполнитьНаСервере();
        
        Если СтруктураДанныхЗагрузки.Свойство("ТекстПредупреждения") И НЕ ПустаяСтрока(СтруктураДанныхЗагрузки.ТекстПредупреждения) Тогда
            ПоказатьПредупреждение(Неопределено, СтруктураДанныхЗагрузки.ТекстПредупреждения);
        КонецЕсли;
        
        ПараметрыЗавершения = Новый Структура("ЕстьПредупржедения, ОбработаноСтрок, ВсегоСтрок, СообщенияПользователю", 
        СтруктураДанныхЗагрузки.ЕстьПредупржедения, СтруктураДанныхЗагрузки.ОбработаноСтрок, СтруктураДанныхЗагрузки.ВсегоСтрок, СтруктураДанныхЗагрузки.СообщенияПользователю);
        
        ////Добавляем дополнительное условие вывода предупреждений, пусть только когда отключена автозагрузка
        Если Таймер > 0 Тогда
            возврат
        КонецЕсли;
        ////    
        #Если ВебКлиент Тогда
            
            ЛеваяЧастьПредупреждения = "Загрузка платежных документов завершена";
            ПраваяЧастьПредупреждения = НСтр("ru = 'Обработано строк: '")+ПараметрыЗавершения.ОбработаноСтрок+НСтр("ru = '. Всего строк: '")+ПараметрыЗавершения.ВсегоСтрок+".";
            ТекстПредупреждения = ЛеваяЧастьПредупреждения + Символы.ПС + Символы.ПС + ПраваяЧастьПредупреждения;
            ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
            
            РезультатЗавершения = Неопределено; // Новый Структура("ПоказатьПротокол", Истина);
            ЗагрузкаПлатежныхДокументовЗавершение(РезультатЗавершения, ПараметрыЗавершения);
            
        #Иначе
            
            ОписаниеОповещенияЗагрузкиПлатежныхДокументов = Новый ОписаниеОповещения("ЗагрузкаПлатежныхДокументовЗавершение", ЭтотОбъект, ПараметрыЗавершения);
            ОткрытьФорму("Обработка.КлиентБанк.Форма.ФормаЗагрузкаДокументовЗавершена",
            ПараметрыЗавершения,
            ,,,,ОписаниеОповещенияЗагрузкиПлатежныхДокументов, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
            
        #КонецЕсли
        
    Иначе
        ////Добавляем дополнительное условие вывода предупреждений, пусть только когда отключена автозагрузка
        Если Таймер > 0 Тогда
            возврат
        КонецЕсли;
        ////    
        ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Список документов для загрузки пуст.'"));
        
    КонецЕсли;
    
КонецПроцедуры // ЗагрузитьВыполнить()


//// Эта процедура выполняется после получения загруженных выписок
//// Вносим внее изменения для того что отключить все всплывающие окна и предупреждения, когда у нас включен таймер

&Вместо("ПрочитатьЭлектронныеВыпискиБанка")
&НаКлиенте
Процедура hands_center_ПрочитатьЭлектронныеВыпискиБанка()
    
    СтекОповещений = Новый Массив;
    ТекстПредупреждения = "";
    
    ИмпортТекстДляРазбора = "";
    Для каждого ЭлементСписка Из ВыпискиБанка Цикл
        ТекстВыписки = ПрочитатьЭлектроннуюВыпискуБанкаНаСервере(ЭлементСписка.Значение, СтекОповещений);
        ИмпортТекстДляРазбора = ИмпортТекстДляРазбора + Символы.ПС + ТекстВыписки;
    КонецЦикла;
    
    Если Не ЗначениеЗаполнено(ИмпортТекстДляРазбора) Тогда
        ТекстСообщения = НСтр("ru = 'Файл загрузки не содержит данных!'");
        УправлениеНебольшойФирмойКлиент.СообщитьОбОшибке(ЭтаФорма, ТекстСообщения);
        Возврат;
    КонецЕсли;
    
    СтрокаСообщения = ЗаполнитьДокументыНаИмпорт(ИмпортТекстДляРазбора);
    Если ЗначениеЗаполнено(СтрокаСообщения) Тогда
        ТекстПредупреждения = ТекстПредупреждения + ?(ЗначениеЗаполнено(ТекстПредупреждения), Символы.ПС, "") + СтрокаСообщения;
    КонецЕсли;
    
    Для каждого Сообщение Из СтекОповещений Цикл
        УправлениеНебольшойФирмойКлиент.СообщитьОбОшибке(ЭтаФорма, Сообщение.Текст);
    КонецЦикла;
    
    //// Если у нас установлен Таймер повторного запроса выписки
    Если Таймер > 0  тогда
        ЗагрузитьВыполнить(Неопределено); //// запускаем обработку документов выписки
        ПодключитьОбработчикОжидания("hands_center_ЗапроситьЭлектроннуюВыпискуБанка", Таймер, Истина); //// Устанавливаем Таймер на повторную загрузку выписки.
        возврат;
    КонецЕсли;
    //// 
    
    Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда
        ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
    КонецЕсли;
    
    
КонецПроцедуры

//// "нажимаем" кнопку "Запросить выписку" 
&НаКлиенте
Процедура hands_center_ЗапроситьЭлектроннуюВыпискуБанка() экспорт
    ЗапроситьЭлектроннуюВыпискуБанка(Неопределено);    
КонецПроцедуры

 

6. Добавляем в расширение "ОбщийМодуль.ОбменСБанкамиСлужебныйКлиент"

7. Вставляем в модуль код, вносимые изменения выделены

 
 //// Подменяем стандартную процедуру выполняемую после авторизации клиент-банка

&Вместо("ПослеФормированияИОтправкиЗапросовВыпискиСбербанк")
Процедура хц_ПослеФормированияИОтправкиЗапросовВыпискиСбербанк(Результат, ДополнительныеПараметры) Экспорт
    
    ПараметрыЖурналирования = ОбменСБанкамиСлужебныйВызовСервера.ПараметрыЖурналирования(
        ДополнительныеПараметры.НастройкаОбмена);
        
    Если ПараметрыЖурналирования.ИспользоватьЖурналирование Тогда
        СохранитьЖурналВФайл(ДополнительныеПараметры.НастройкаОбмена, ПараметрыЖурналирования.КаталогДляЖурналирования);
    КонецЕсли;
    
    Если Результат = Неопределено Тогда // задание было отменено пользователем
        Возврат;
    КонецЕсли;
    
    Если Результат.Статус = "Ошибка" Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.КраткоеПредставлениеОшибки);
    Иначе // выполнено
        РезультатОперации = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
        
        
        Если РезультатОперации.ГотовыеВыписки.Количество() 
            //// Добавляем дополнительное условия, для вывода вопроса о повторной загрузке выписки
            и ДополнительныеПараметры.Владелец.Таймер = 0 
            ////
            Тогда 
            ДополнительныеПараметры.Вставить("ГотовыеВыписки", РезультатОперации.ГотовыеВыписки);
            ОписаниеОповещенияОЗавершении = Новый ОписаниеОповещения(
                "ПолучитьВыпискуСбербанкаПослеВопросаОбИхНаличии", ЭтотОбъект, ДополнительныеПараметры);
            ТекстВопроса = НСтр("ru = 'В базе уже есть выписки банка за указанный период.
                                    |Загрузить выписки из базы или получить новые из банка?'");
            Кнопки = Новый СписокЗначений;
            Кнопки.Добавить(Истина, НСтр("ru = 'Загрузить из базы'"));
            Кнопки.Добавить(Ложь, НСтр("ru = 'Получить из банка'"));
            Заголовок = НСтр("ru = 'Получение выписки'");
            ПоказатьВопрос(ОписаниеОповещенияОЗавершении, ТекстВопроса, Кнопки, , Истина, Заголовок);
            
        //// Если уже есть загруженные выписки, но включен таймер сразу переходим к получению новой выписки
        ИначеЕсли РезультатОперации.ГотовыеВыписки.Количество() 
            и ДополнительныеПараметры.Владелец.Таймер > 0 Тогда
               ПолучитьВыпискуСбербанкаПослеВопросаОбИхНаличии(Ложь, ДополнительныеПараметры);
        ////               
        ИначеЕсли РезультатОперации.МассивТикетов.Количество() Тогда // запросы были отправлены в банк и получены тикеты
            ВладелецФормы = ДополнительныеПараметры.Владелец;
            ПараметрыФормы = Новый Структура("МассивСообщенийОбмена, НастройкаОбмена, ГотовыеВыписки, ДатаНачала, ДатаОкончания,
                                            |ПринудительноеПолучениеВыписки, НомерСчета");
            ЗаполнитьЗначенияСвойств(ПараметрыФормы, ДополнительныеПараметры);
            ПараметрыФормы.Вставить("ВидОперации", "ПолучениеВыписки");
            ПараметрыФормы.Вставить("МассивТикетов", РезультатОперации.МассивТикетов);
            ПараметрыФормы.Вставить("МассивСообщенийОбмена", РезультатОперации.МассивСообщенийОбмена);
            ПараметрыФормы.Вставить("ГотовыеВыписки", Новый Массив);
            ОткрытьФорму("Обработка.ОбменСБанками.Форма.ЗапросВБанк", ПараметрыФормы, ВладелецФормы);
        ИначеЕсли РезультатОперации.ИспользуетсяТокен Тогда
            ДополнительныеПараметры.Вставить("ГотовыеВыписки", Новый Массив);
            ДополнительныеПараметры.Вставить("МассивСообщенийОбмена", РезультатОперации.МассивСообщенийОбмена);
            ОбработчикПослеПодписания = Новый ОписаниеОповещения(
                "ОтправитьЗапросВыпискиПослеПодписанияСбербанк", ЭтотОбъект, ДополнительныеПараметры);
            ПодписатьЭДСбербанк(
                ОбработчикПослеПодписания, ДополнительныеПараметры.НастройкаОбмена, РезультатОперации.МассивСообщенийОбмена);
        Иначе //отправка по логину, требуется установка сессии.
            ДополнительныеПараметры.Вставить("МассивСообщенийОбмена", РезультатОперации.МассивСообщенийОбмена);
            Обработчик = Новый ОписаниеОповещения(
                "ПолучитьВыпискиПослеБазовойАутентификацииСбербанк", ЭтотОбъект, ДополнительныеПараметры);
            ВыполнитьБазовуюАутентификациюСбербанк(Обработчик, ДополнительныеПараметры.РеквизитыНастройкиОбмена.ИмяВнешнегоМодуля,
                ДополнительныеПараметры.НастройкаОбмена, ДополнительныеПараметры.НастройкаОбмена);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

 

Для себя я установил таймер в 600 секунд. Прошел день, все работает!

Готовое решение

1С обмен данными с клиентом банка для БП 3.0, ERP 2.4, ERP 2.5 с дополнительными правилами загрузки

Модуль представляет собой автоматизацию обмена данными 1С с банком для БП 3.0, ERP 2.4, ERP 2.5. Выписка клиент-банка загружается и обрабатывается по Вашим правилам. Заполнение реквизитов документов, анализ назначения платежа. Работа с клиент-банком не отличается от типового варианта, а документы автоматически заполняются так, как нужно вам. Дополнительная обработка, работающая совместно с основным расширением позволяет подключать собственные произвольные алгоритмы.


ДиректБанк автоматическая загрузка выписок унф

См. также

Банковские операции Обмен с интернет-банком Эквайринг/ридер магнитных карт Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

15000 руб.

21.03.2023    11478    75    16    

64

Обмен с интернет-банком Банковские операции Программист Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Модуль представляет собой комплексную автоматизацию обмена данными 1С с банком для БП 3.0, ERP 2.4, ERP 2.5. Выписка клиент-банка загружается и обрабатывается по Вашим правилам. Заполнение реквизитов документов, анализ назначения платежа. Работа с клиент банком не отличается от типового варианта, а документы автоматически заполняются так, как нужно вам. Дополнительная обработка, работающая совместно с основным расширением позволяет подключать собственные произвольные алгоритмы.

20400 руб.

03.04.2013    125137    253    377    

164

Банковские операции Обмен с интернет-банком Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Беларусь Россия Бухгалтерский учет Платные (руб)

Типовая обработка "Клиент-банк" из конфигурации 1С "Бухгалтерия для Беларуси, редакция 2.1" корректно работает с выписками только банка "Дабрабыт", до 28.01.2019 "Москва-Минск". А бухгалтеру нужно работать и с другими банками и с другими конфигурациями. Для этого было разработано расширение, которое позволит решить данную проблему!

10.10.2017    38061    82    Xershi    41    

69

Банковские операции Обмен с интернет-банком Загрузка и выгрузка в Excel Программист Бухгалтер Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Платные (руб)

Обработка создания файла по стандарту обмена с системами "Клиент банка" kl_to_1c.txt Формат файла обмена Российская Федерация, версия 1.03 При восстановлении учета в случае отсутствия в 1с банковских выписок (например, р/с в банке закрыт в связи с банкротством и доступ к выгрузке из клиент-банка невозможен), можно запросить у банка выписку за период в формате Excel. С помощью этой обработки создается файл формата 1CClientBankExchange, в 1с77 он назывался kl_to_1c.txt который загружается штатными средствами в 1с8. При этом будут созданы загружаемые контрагенты и их р/с.

3840 руб.

19.04.2019    44250    150    53    

84

Внешние источники данных Банковские операции Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Россия Бухгалтерский учет Платные (руб)

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    39627    139    104    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Proplus74 20.04.18 21:48 Сейчас в теме
можно как-то запустить без программирования?
2. handscenter 68 23.04.18 09:24 Сейчас в теме
расширение прикреплено, но я его не проверял на последней версии УНФ
3. user1199510 07.10.19 23:24 Сейчас в теме
"Из минусов, придется держать открытым 1С с запущенной формой загрузки выписок"
Здравствуйте. Я правильно понимаю, что просто в 1С, должна быть постоянно открыта эта вкладка, и пока она открыта, в он-лайне выписки будут подгружаться? Если закроется, надо снова открыть.

"В расширяемой форме, добавляем новый реквизит "Таймер", тип Число. Установка Таймера - будет отключать все. Для удобства включаем у реквизита "Таймер" флаг "Сохранения", что бы значение таймера сохранялось." Для чего таймер нужен? Зачем указывать значения, я к сожалению суть этого не уловил....
4. handscenter 68 08.10.19 01:03 Сейчас в теме
(3) другого пути нет, впн сессия до сбера поднимается на клиенте, была бы на сервере - можно было сделать регламентное задание.
Цель таймера установить время автоперезапуска обмена с банком.
Вообще это конечно костыль, сбер мог бы сделать пользователя с доступом только на чтение выписок без см..Тот же мобильный клиент сбера, работает без смс подтверждений входа.
У меня эта схема работает уже почти 1.5 года. Удобно.
5. yuliya1985 03.12.19 12:40 Сейчас в теме
Добрый день, для на БП 3.0 (3.0.74.63) будет работать или может быть есть отдельная обработка?
6. handscenter 68 04.12.19 08:57 Сейчас в теме
(5) не будет, под БП нужно писать свой код
7. 440777 16.11.20 14:16 Сейчас в теме
(6) можно заказать у вас такую отработку для БП3,0?
8. пользователь 16.11.20 15:22
Сообщение было скрыто модератором.
...
9. user1963874 28.06.23 12:26 Сейчас в теме
Сергей, здравствуйте, а можно Вам заказать установку такого приложения для нужд нашей компании?
Оставьте свое сообщение