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

Публикация № 911391

Обмен - Обмен с интернет-банком

Сбербанк Выписка обработка загрузка

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

Код содержит функцию парсер для загрузки выписки в формате 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.Добавить();
			ЗаполнитьЗначенияСвойств(НовСтр,Стр);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

 

6

См. также

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение