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

14.03.18

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

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

Файлы

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

Наименование Скачано Купить файл
Автоматическая загрузка выписок Сбербанк-бизнес онлайн с помощью 1С:ДиректБанк:
.cfe 80,96Kb ver:0.001
22 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Принцип работы 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С:Предприятие 8 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

19520 руб.

21.03.2023    20962    149    27    

116

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

Корректируйте банковские документы быстро и легко! Создайте правило обработки, и оно автоматически применится при загрузке выписки, экономя ваше время (Можно настроить отбор по любому реквизиту или по регулярному выражению). Решение позволяет автоматически заполнять расшифровку платежа, исключать загрузку ненужных документов (дублей) из банка, заполнять комиссию за эквайринг и многое другое. Вам не нужно доплачивать за алгоритмы, они уже включены в решение. Автоматическая обработка применяется при загрузке данных как из файлов клиент банка, так и через DirectBank. Доступен AI чат бот который умеет консультировать по функционалу решения.

15250 руб.

20.12.2024    13805    58    27    

55

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

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

12200 руб.

10.10.2017    41837    95    49    

80

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

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

20740 руб.

03.04.2013    131535    266    378    

170

Банковские операции Взаиморасчеты Оборотно-сальдовая ведомость, Анализ счета Анализ продаж Бухгалтер Пользователь 1С 8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

«Умные отчеты в один клик» – инструмент, от которого невозможно отказаться! Получайте отчеты «ОСВ по счету» и «Анализ субконто» мгновенно, прямо из документа – все параметры подставляются автоматически. Незаменимо в ежедневной работе бухгалтера: благодаря простоте получения отчетов вы будете чаще проверять учет "оборотками", снижая риск ошибок. Экономьте время каждый день – используйте «Умные отчеты»!

8930 руб.

25.06.2025    1961    7    0    

8

Банковские операции Обмен с ГосИС Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Платные (руб)

Обработка для выгрузки платежных поручений из конфигураций 1С:БП 3.0 и ERP/КА в банк Департамента финансов г. Москвы. Поддерживается выгрузка в текстовом и XML-форматах.

19520 руб.

15.06.2020    25913    84    42    

58

Банковские операции Обмен с интернет-банком Загрузка и выгрузка в Excel Программист Бухгалтер 1С:Предприятие 8 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. При этом будут созданы загружаемые контрагенты и их р/с.

5612 руб.

19.04.2019    48716    168    54    

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

"В расширяемой форме, добавляем новый реквизит "Таймер", тип Число. Установка Таймера - будет отключать все. Для удобства включаем у реквизита "Таймер" флаг "Сохранения", что бы значение таймера сохранялось." Для чего таймер нужен? Зачем указывать значения, я к сожалению суть этого не уловил....
4. handscenter 71 08.10.19 01:03 Сейчас в теме
(3) другого пути нет, впн сессия до сбера поднимается на клиенте, была бы на сервере - можно было сделать регламентное задание.
Цель таймера установить время автоперезапуска обмена с банком.
Вообще это конечно костыль, сбер мог бы сделать пользователя с доступом только на чтение выписок без см..Тот же мобильный клиент сбера, работает без смс подтверждений входа.
У меня эта схема работает уже почти 1.5 года. Удобно.
5. yuliya1985 03.12.19 12:40 Сейчас в теме
Добрый день, для на БП 3.0 (3.0.74.63) будет работать или может быть есть отдельная обработка?
6. handscenter 71 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 Сейчас в теме
Сергей, здравствуйте, а можно Вам заказать установку такого приложения для нужд нашей компании?
Для отправки сообщения требуется регистрация/авторизация