1С Деньги + загрузка данных по операциям (sms + яндекс кошелек)

11.05.18

Интеграция - WEB-интеграция

Данная статья рассматривает пример интеграции 1с + яндекс денег + получение данных смс. Данная статья может быть полезна тем кто ведет учет личных финансов в 1с деньги, и не хочет забивать операции руками. for fun. its works.

Скачать исходный код

Наименование Файл Версия Размер
source мобильное приложение(xamarin, c#)
.cs 10,14Kb
0
.cs 10,14Kb Скачать
cf
.cf 19,10Kb
2
.cf 19,10Kb 2 Скачать

Появилась идея не заносить руками операции в 1с деньги(далее 1сд), а загружать смс(напримере сбер банк(900)) и парсить данные по апи яндекс денег.

Конфигурация: Деньги 8, редакция 2.0 (2.0.33.13) (http://v8.1c.ru/money)

Платформа: 1С:Предприятие 8.3 (8.3.10.2650)

В процессе реализации идеи было реализовано:

1. шлюз для приема пакета смс в 1сд(http сервис)

2.модуль парсинга сообщений

3.мобильное приложение(кривое(андроид дев не мое), но со своей задачей справляется)(xamarin, android)

4.прикручен модуль обработки данных яндекс апи(//infostart.ru/public/304373)

Описание модулей 1сд:

1.Общий модуль DataSMS - модуль создания операций

2.общий модуль ЯндексДеньги - (ссылка на первоисточник:(//infostart.ru/public/304373)) - модуль работы с апи яндкс денег

3.HTTP-сервис DataSMS - шлюз приема данных с мобильного приложения 

Общий принцип работы:

Для запуска процесса выгрузки необходимо запустить мобильное приложение. Мобильное приложение получает данные sms, сериализует json, отправляет в http сервис 1сд. 1сд получает пакет, запускает фоновое задание в котором:

1. создаются операции (доход\расход\перемещение) по данным смс

2. получает данные с яндекс денег(при необходимости)

3. создаются операции (доход\расход\перемещение) по данным яндекс денег

Пример установки:

1. Опубликовать HTTP-сервис

2. Собрать мобильное приложение (изменить при необходимости порт, адрес)(могу приложить бинарь)

3. Если есть необходимость работы с яндекс деньгами то: получить акцес токен яндекс денег(//infostart.ru/public/304373), изменить его в модуле ЯндексДеньги ф-ия ОписаниеКошелька()

Здесь стоит отметить что для получения акцесс токен нужен будет белый ип адрес(разово)

Соответствия статьи доходов\расходов тексту (смс), заголовку (для яд):

 

Загруженные операции:

Пример загруженной операции

 

 

Код мобильного приложения:

using Android.App;
using Android.OS;
using Android.Telephony;
using Android.Content;
using System;
using Android.Util;
using System.Net;
using System.Text;
using System.IO;
using System.Collections.Specialized;

using System;

namespace DataSMSForMoney
{
    [Activity(Label = "DataSMSForMoney", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        private char n;

  
        protected override void OnCreate(Bundle bundle)
        {

            string textJson = "";
            string filePath = "/storage/sdcard0/logApp8/logApp8.log";

            var uri = Android.Net.Uri.Parse("content://sms/inbox");
            var cursor = ContentResolver.Query(uri, null, null, null, null);

            textJson = textJson + "[";

            while (cursor.MoveToNext())
            {
                textJson = textJson + "{";

                for (int i = 0; i < cursor.ColumnCount; i++)
                {
                    textJson = textJson + " " + '\u0002' + cursor.GetColumnName(i).ToString() + '\u0002' + ": " + '\u0002' +
                        cursor.GetString(i) + '\u0002';


                    if (i != cursor.ColumnCount - 1)
                    {
                        textJson = textJson + ", ";
                    }

                    //Toast.MakeText(this, cursor.GetColumnName(i).ToString()+"="+cursor.GetString(i), ToastLength.Short).Show();
                }

                textJson = textJson + "}";

                if (!cursor.IsLast)
                {
                    textJson = textJson + ",";
                }
            }
            textJson = textJson + "]";

            //System.IO.File.WriteAllText(filePath, textJson);

            var Url = "http://192.168.1.99/Money/hs/dataSMS/load";

            WebClient wc = new WebClient();

            byte[] dataBytes = Encoding.UTF8.GetBytes(textJson);
            byte[] responseBytes = wc.UploadData(new Uri(Url), "POST", dataBytes);

            this.FinishAffinity();


        }
    }
}

Модуль работы с яд апи взят отсюда: //infostart.ru/public/304373

 

апдейт

код парсинга текста смс(900):

Функция РазобратьСообщениеСберБанк(ТекСтрока)
		
	ОписаниеОперации = Неопределено;
	
	ТелоСообщения = СокрЛП(ТекСтрока.body);
	
	Если Не Найти(ТелоСообщения, "ОТКАЗ")>0 Тогда 
		
		Если Лев(ТелоСообщения, 4)="VISA" Тогда 
			
			Кошелек = Неопределено;
			Сумма = Неопределено;
			ВидОперации = Неопределено;
			СтатьяДСОписание = Неопределено;
			СтатьяДС = Неопределено;
			Комментарий = Неопределено;
			Комиссия = Неопределено;
			
			Комментарий = ТелоСообщения;
			
			КошелекТекст = Лев(ТелоСообщения, 8); 
			Кошелек = ПолучитьОбъектСоответствия(КошелекТекст);
			
			ТелоСообщения = СокрЛП(Сред(ТелоСообщения, СтрДлина(КошелекТекст)+1));
			
			ЭтоОплатаМобильногоБанка = Найти(Нрег(ТелоСообщения), "оплата мобильного банка")>0; 
			Если ЭтоОплатаМобильногоБанка Тогда 
				
				ВидОперации = "оплата услуг";
				
				ДатаСообщения = СокрЛП(Сред(ТелоСообщения, 0, 8));
				
				ТелоСообщения = СокрЛП(Сред(ТелоСообщения, СтрДлина(ДатаСообщения)+1));
				
				СтатьяДСОписание = Сред(ТелоСообщения, 0, 48); 
				
				ТелоСообщения = СтрЗаменить(ТелоСообщения, СтатьяДСОписание, "");
				ТелоСообщения = Сред(ТелоСообщения, 1, Найти(Нрег(ТелоСообщения), "баланс:")-1);
				
				Сумма = Сред(ТелоСообщения, 1, Найти(Нрег(ТелоСообщения), "р")-1);

				СтатьяДС = ПолучитьОбъектСоответствия("оплата мобильного банка");
				
				Сумма = СтрЗаменить(Сумма, " ", "");

			Иначе 
				
				ДатаСообщения = СокрЛП(Сред(ТелоСообщения, 0, 15));
				
				ТелоСообщения = Сред(ТелоСообщения, СтрДлина(ДатаСообщения));
				
				Если Найти(Нрег(ТелоСообщения), "оплата услуг")>0 Тогда 
					
					ВидОперации = "оплата услуг";
					
				ИначеЕсли Найти(Нрег(ТелоСообщения), "оплата")>0 Тогда 	
					
					ВидОперации = "оплата";
					
				ИначеЕсли Найти(Нрег(ТелоСообщения), "покупка")>0 Тогда 	
					
					ВидОперации = "покупка";
					
				ИначеЕсли Найти(Нрег(ТелоСообщения), "зачисление")>0 Тогда 	
					
					ВидОперации = "зачисление";
					
				ИначеЕсли Найти(Нрег(ТелоСообщения), "списание")>0 Тогда 	
					
					ВидОперации = "списание";
					
				ИначеЕсли Найти(Нрег(ТелоСообщения), "выдача наличных")>0 Тогда 	
					
					ВидОперации = "выдача наличных";
					
				ИначеЕсли Найти(Нрег(ТелоСообщения), "выдача")>0 Тогда 	
					
					ВидОперации = "выдача";
					
				КонецЕсли;
				
				Если Не ВидОперации=Неопределено Тогда 
					
					ТелоСообщения = Сред(ТелоСообщения, (Найти(Нрег(ТелоСообщения), ВидОперации))+СтрДлина(ВидОперации));
					
					Сумма = Сред(ТелоСообщения, 1, Найти(Нрег(ТелоСообщения), "р")-1);
					
					ЕстьКомиссия = Найти(Нрег(ТелоСообщения), "с комиссией")-1;
					Если ЕстьКомиссия>0 Тогда
						
						ТекстКомиссия = СокрЛП(Сред(ТелоСообщения, Найти(Нрег(ТелоСообщения), "р")+1)); 
						
						Комиссия = Сред(ТекстКомиссия, 13, Найти(Нрег(ТелоСообщения), "р")-1);
						
					КонецЕсли;
					
					СтатьяДСОписание = СокрЛП(Сред(ТелоСообщения, (Найти(Нрег(ТелоСообщения), "р"))+1));
					СтатьяДСОписание = СокрЛП(Сред(СтатьяДСОписание, 0 ,(Найти(Нрег(СтатьяДСОписание), "баланс:"))-1));
					СтатьяДСОписание = СокрЛП(СтрЗаменить(СтатьяДСОписание, Сумма+"р", ""));
					
					СтатьяДС = ПолучитьОбъектСоответствия(СтатьяДСОписание);
					
					Сумма = СтрЗаменить(Сумма, " ", "");
					
				КонецЕсли;
				
			КонецЕсли;
			
			ОписаниеОперации = Новый Структура;
			
			ОписаниеОперации.Вставить("Кошелек", Кошелек);
			ОписаниеОперации.Вставить("Комментарий", Комментарий);
			ОписаниеОперации.Вставить("ДатаСообщения", ДатаСообщения);
			ОписаниеОперации.Вставить("Сумма", Сумма);
			ОписаниеОперации.Вставить("ВидОперации", ВидОперации);
			ОписаниеОперации.Вставить("СтатьяДСОписание", СтатьяДСОписание);
			ОписаниеОперации.Вставить("СтатьяДС", СтатьяДС);
			ОписаниеОперации.Вставить("Комиссия", Комиссия);
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат ОписаниеОперации;
	
КонецФункции

код парсинга текста смс агропромкредитбанк:

Функция РазобратьСообщениеАгроПромКредитБанк(ТекСтрока)
	
	ОписаниеОперации = Неопределено;
	
	ТелоСообщения = СокрЛП(ТекСтрока.body);
	
	Если Не Найти(ТелоСообщения, "ОТКАЗ")>0 Тогда
		
		Комментарий = ТелоСообщения;
		
		Сумма = Неопределено;
		ВидОперации = Неопределено;
		СтатьяДСОписание = Неопределено;
		СтатьяДС = Неопределено;
		Кошелек = Неопределено;
		
		Если СокрЛП(Сред(ТелоСообщения, 0, 1))="+" Тогда 
			
			ВидОперации = "зачисление";
			
			ТелоСообщения = Сред(ТелоСообщения, 2);
			
		ИначеЕсли СокрЛП(Сред(ТелоСообщения, 0, 1))="-" Тогда 
			
			ВидОперации = "покупка";
			
			ТелоСообщения = Сред(ТелоСообщения, 2);
			
		КонецЕсли;
		
		Если Не ВидОперации=Неопределено Тогда 
			
			ТелоСообщения = СокрЛП(Сред(ТелоСообщения, 0, Найти(ТелоСообщения, ". Dostupno")-1));
			
			ДатаСообщения = СокрЛП(Прав(ТелоСообщения, 19));
			
			ТелоСообщения = СокрЛП(СтрЗаменить(ТелоСообщения, ДатаСообщения, ""));
			
			Если Не ВидОперации=Неопределено Тогда 
				
				Сумма = СокрЛП(Сред(ТелоСообщения, 0, Найти(ТелоСообщения, "RUR -")-1));
				
				ТелоСообщения = СтрЗаменить(ТелоСообщения, Сумма+" RUR -", "");  
				
				СтатьяДСОписание = ТелоСообщения;
				
				КошелекТекст = СокрЛП(Сред(ТелоСообщения, 0, Найти(ТелоСообщения, "-")-1));
				Кошелек = ПолучитьОбъектСоответствия(КошелекТекст);
				
				СтатьяДСТекст = СокрЛП(СтрЗаменить(ТелоСообщения, КошелекТекст, "")); 
				СтатьяДС = ПолучитьОбъектСоответствия(СокрЛП(Сред(СтатьяДСТекст, 2)));
				
				Сумма = СтрЗаменить(Сумма, " ", "");

			КонецЕсли;
			
			ОписаниеОперации = Новый Структура;
			
			ОписаниеОперации.Вставить("Кошелек", Кошелек);
			ОписаниеОперации.Вставить("Комментарий", Комментарий);
			ОписаниеОперации.Вставить("ДатаСообщения", ДатаСообщения);
			ОписаниеОперации.Вставить("Сумма", Сумма);
			ОписаниеОперации.Вставить("ВидОперации", ВидОперации);
			ОписаниеОперации.Вставить("СтатьяДСОписание", СтатьяДСОписание);
			ОписаниеОперации.Вставить("СтатьяДС", СтатьяДС);
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат ОписаниеОперации;
	
КонецФункции

код парсинга яндекс денег(апи):

Функция РазобратьСообщениеЯндексДеньги(ТекСтрока)
	
	ДанныеЗаписи = ТекСтрока.data;
	
	ОписаниеОперации = Неопределено;
	
	type = ДанныеЗаписи["type"];
	status = ДанныеЗаписи["status"];
	
	ЭтоУспешнаяОперация = status="success";  
	
	СтатьяДСОписание = СокрЛП(ДанныеЗаписи["title"]);
	
	ЭтоЗачислениеСберБанк = СтатьяДСОписание="Сбербанк, пополнение"; 
	Если ЭтоЗачислениеСберБанк Тогда 
		
		Возврат ОписаниеОперации;
		
	КонецЕсли;
	
	Если ЭтоУспешнаяОперация Тогда 
		
		Кошелек = ОсновнойКошелекЯндексДенег();
		Сумма = Неопределено;
		ВидОперации = Неопределено;
		СтатьяДС = Неопределено;
		Комментарий = Неопределено;
		Комиссия = Неопределено;
		
		Комментарий = ДанныеЗаписи["title"];
		
		Если type="payment-shop" Тогда 
			
			ВидОперации = "покупка";
			
		ИначеЕсли type="deposition" Тогда 
			
			ВидОперации = "зачисление"			
			
		КонецЕсли;
		
		ДатаСообщения = СтрЗаменить(ДанныеЗаписи["datetime"], "T", " ");
		ДатаСообщения = СтрЗаменить(ДатаСообщения, "Z", " ");
		ДатаСообщения = СтрЗаменить(ДатаСообщения, "-", " ");
		ДатаСообщения = СтрЗаменить(ДатаСообщения, ":", " ");
		ДатаСообщения = СтрЗаменить(ДатаСообщения, " ", "");
		
		ДатаСообщения = Дата(ДатаСообщения);
		
		Сумма = ДанныеЗаписи["amount"];
		
		СтатьяДС = ПолучитьОбъектСоответствия(СтатьяДСОписание);
		
		ОписаниеОперации = Новый Структура;
		
		ОписаниеОперации.Вставить("Кошелек", Кошелек);
		ОписаниеОперации.Вставить("Комментарий", Комментарий);
		ОписаниеОперации.Вставить("ДатаСообщения", ДатаСообщения);
		ОписаниеОперации.Вставить("Сумма", Сумма);
		ОписаниеОперации.Вставить("ВидОперации", ВидОперации);
		ОписаниеОперации.Вставить("СтатьяДСОписание", СтатьяДСОписание);
		ОписаниеОперации.Вставить("СтатьяДС", СтатьяДС);
		ОписаниеОперации.Вставить("Комиссия", Комиссия);
		
	КонецЕсли;
	
	Возврат ОписаниеОперации;
	
КонецФункции

 

1c деньги парсинг sms яндекс деньги api

См. также.

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16433    15    18    

15

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18680    10    15    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13191    35    8    

14

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    86416    26    51    

50
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vsbronnikov 80 11.05.18 11:33 Сейчас в теме
Каким образом система узнаёт, по какой СМС нужно создать документы расход, доход, перемещение или вообще не создавать?
Как вычлиняется из СМС сумма, дата операции, "объект data SMS" (Ваш термин)?
2. dmarenin 351 11.05.18 11:58 Сейчас в теме
"объект data SMS" (Ваш термин) - да, из смс парситься текст код открыт, оттуда же и вид операции, например сбер пишет что то вроде "покупка, оплата и тд", там если проанализовать
для яд в пакете будет вид операций уже.
3. vsbronnikov 80 11.05.18 12:36 Сейчас в теме
(2) Но СМС - это просто текстовая строка. Интересно каким способом производится парсинг (код скачать не могу)? Парсинг зашит в коде или есть какой-то универсальный механизм?
4. dmarenin 351 11.05.18 12:58 Сейчас в теме
зашит в коде там просто все относительно по формату, могу отдельно в статью добавить код
5. dmarenin 351 11.05.18 13:02 Сейчас в теме
9. vsbronnikov 80 15.05.18 09:34 Сейчас в теме
(4) Я делаю вот так https://infostart.ru/public/829677/. Возможно Вам будет интересно, особенно Этап 2. Не нужно будет хардкодить парсинг.
6. Mortum 11.05.18 15:04 Сейчас в теме
Можно было не писать приложение для андроид, а воспользоваться Automate. Там настраивается просто, как карта маршрута бизнес-процесса.
7. dmarenin 351 11.05.18 15:18 Сейчас в теме
(6) оно умеет ли в get\post? в доке не нашел
8. Mortum 11.05.18 15:26 Сейчас в теме
Оставьте свое сообщение