Загрузка платежей из Сбербанк Онлайн по картам физических лиц

Код для загрузки выписки по карте из Сбербанк.Онлайн НЕ Сбербанк Бизнес Онлайн.

Код содержит функцию парсер для загрузки выписки в формате TXT экспортированную из Сбербанк.Онлайн. Не перепутайте со Сбербанк Бизнес Онлайн. Предназначен для разработчиков для быстрого внедрения кода в собственное решение. Код одинаково применим для обычных и управляемых форм с небольшой модификацией, учитывающей клиент-серверный режим работы.

В Сбербанк.Онлайн нет возможности выгрузить выписку в формате XLS или CSV или любом другом формате для простого импорта в 1С. На текущий момент выписка предоставляется в обычном TXT файле без каких либо разделителей полей.

Данный программный код преобразует текстовый файл в массив структур с данными платежа.

Как использовать:

1. Закажите на почту выписку по карте через Сбербанк-Онлайн.
2. Скачайте файл выписки в формате TXT.
3. Отдать парсеру данные из файла

Функция МассивМесяцев()
Месяцы = Новый Структура;
Месяцы.Вставить("НУЛ",0);
Месяцы.Вставить("ЯНВ",1);
Месяцы.Вставить("ФЕВ",2);
Месяцы.Вставить("МАР",3);
Месяцы.Вставить("АПР",4);
Месяцы.Вставить("МАЙ",5);
Месяцы.Вставить("ИЮН",6);
Месяцы.Вставить("ИЮЛ",7);
Месяцы.Вставить("АВГ",8);
Месяцы.Вставить("СЕН",9);
Месяцы.Вставить("ОКТ",10);
Месяцы.Вставить("НОЯ",11);
Месяцы.Вставить("ДЕК",12);

Возврат Месяцы;
КонецФункции

Функция РазбитьСтроку(Стр,Разделитель)

ФСтр = Стр;
Масс = Новый Массив;

Пока Найти(ФСтр,Разделитель) <> 0 Цикл
ФФ = Лев(ФСтр,Найти(ФСтр,Разделитель)-1);
Масс.Добавить(ФФ);
ФСтр = Прав(ФСтр,СтрДлина(ФСтр)-Найти(ФСтр,Разделитель));
КонецЦикла;

Масс.Добавить(ФСтр);

Возврат Масс;
КонецФункции

Функция СбербанкВМассив(Текст)
Месяцы = МассивМесяцев();

Данные = РазбитьСтроку(Текст,Символы.ПС);

Возвр = Новый Массив;

ТекСтрока = Неопределено;
Для Каждого Стр Из Данные Цикл
Месяц1 = Неопределено;
День1 = Неопределено;
День2 = Неопределено;
Месяц2 = Неопределено;
Год2 = Неопределено;
СуммаОперации = Неопределено;
СуммаПлатежа = Неопределено;
НомерОперации = Неопределено;

Попытка День1 = Число(Сред(Стр, 21, 2)) Исключение КонецПопытки;
Попытка Месяц1 = Число(Месяцы[Сред(Стр, 23, 3)]) Исключение КонецПопытки;
Попытка День2 = Число(Сред(Стр, 27, 2)) Исключение КонецПопытки;
Попытка Месяц2 = Число(Месяцы[Сред(Стр, 29, 3)]) Исключение КонецПопытки;
Попытка Год2 = 2000 + Число(Сред(Стр, 32, 2)) Исключение КонецПопытки;

// Operation comment and text before and after it
СодержаниеПлатежа = Сред( Стр, 42, 22 );
врм1 = Сред( Стр, 21, 21 );
врм2 = Сред( Стр, 66, 34 );

// Operation currency, summs and direction
Валюта = Сред( Стр, 65, 3 );
Попытка СуммаОперации = Число(СокрЛП(Сред( Стр, 69, 15 ))) Исключение КонецПопытки;
Попытка СуммаПлатежа = Число(СокрЛП(Сред( Стр, 85, 11 ))) Исключение КонецПопытки;

Плюс = ?(Сред( Стр, 96, 2 ) = "CR", Истина, Ложь);

Попытка НомерОперации = Число(Сред( Стр, 35, 6 )) Исключение КонецПопытки;

Если (врм1 = "                     ") И (врм2 = "                                  ") И СодержаниеПлатежа <> ("                     ") Тогда
Если ( ТекСтрока <> Неопределено ) Тогда
ТекСтрока.СодержаниеПлатежа = ТекСтрока.СодержаниеПлатежа + СодержаниеПлатежа;
КонецЕсли;

ИначеЕсли ЗначениеЗаполнено(День1) И ЗначениеЗаполнено(Месяц1) И ЗначениеЗаполнено(День2) И ЗначениеЗаполнено(Месяц2) И
ЗначениеЗаполнено(Год2) И ЗначениеЗаполнено(СодержаниеПлатежа) И ЗначениеЗаполнено(Валюта) Тогда

Если ТекСтрока <> Неопределено Тогда
ТекСтрока.СодержаниеПлатежа = СокрЛП(ТекСтрока.СодержаниеПлатежа);
Возвр.Добавить(ТекСтрока);
ТекСтрока = Неопределено;
КонецЕсли;

ДатаИсполнения = Дата(Формат(Год2,"ЧЦ=4; ЧРГ=; ЧН=0; ЧВН=; ЧГ=")+Формат(Месяц2,"ЧЦ=2; ЧН=0; ЧВН=")+Формат(День2,"ЧЦ=2; ЧН=0; ЧВН=")+"000000");

Год1 = ?(Месяц1 > Месяц2, Год2 - 1, Год2);
ДатаОперации = Дата(Формат(Год1,"ЧЦ=4; ЧРГ=; ЧН=0; ЧВН=; ЧГ=")+Формат(Месяц1,"ЧЦ=2; ЧН=0; ЧВН=")+Формат(День1,"ЧЦ=2; ЧН=0; ЧВН=")+"000000");

ТекСтрока = Новый Структура;
ТекСтрока.Вставить("ДатаОперации",ДатаОперации);
ТекСтрока.Вставить("ДатаИсполнения",ДатаИсполнения);
ТекСтрока.Вставить("НомерОперации",НомерОперации);
ТекСтрока.Вставить("СуммаОперации",СуммаОперации);
ТекСтрока.Вставить("Валюта",Валюта);
ТекСтрока.Вставить("СуммаПлатежа",?(Плюс,СуммаПлатежа,-1*СуммаПлатежа));
ТекСтрока.Вставить("СодержаниеПлатежа",СодержаниеПлатежа);
ИначеЕсли (ТекСтрока <> Неопределено ) Тогда
ТекСтрока.СодержаниеПлатежа = СокрЛП(ТекСтрока.СодержаниеПлатежа);
Возвр.Добавить(ТекСтрока);
ТекСтрока = Неопределено;
КонецЕсли;

КонецЦикла;

Если ТекСтрока <> Неопределено Тогда
ТекСтрока.СодержаниеПлатежа = СокрЛП(ТекСтрока.СодержаниеПлатежа);
Возвр.Добавить(ТекСтрока);
ТекСтрока = Неопределено;
КонецЕсли;

Возврат Возвр;

КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если Диалог.Выбрать() Тогда
ИмяФайла = Диалог.ПолноеИмяФайла;

Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);

ДанныеФайла = Текст.ПолучитьТекст();
МассивОпераций = СбербанкВМассив(ДанныеФайла);
Для Каждого Стр Из МассивОпераций Цикл
НовСтр = ТабличноеПоле1.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Стр);
КонецЦикла;
КонецЕсли;
КонецПроцедуры

 

Leave a Comment

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