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