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

11.05.18

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
source мобильное приложение(xamarin, c#)
.cs 10,14Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.
cf
.cf 19,10Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Появилась идея не заносить руками операции в 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С:ITIL, 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2208    2    0    

9

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С. Бесплатный период Техподдержки - 1 месяц.

60000 руб.

07.05.2019    34244    64    45    

24

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    1958    1    1    

4

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

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

36000 руб.

03.08.2020    18813    21    22    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    3442    3    2    

4

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18550    53    50    

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