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

11.05.18

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Появилась идея не заносить руками операции в 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 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    21876    32    24    

25

SALE! 15%

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17280 14688 руб.

20.12.2024    4079    20    2    

21

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки. Основные преимущества: 1. Документация API создаётся автоматически. Удобна для программной обработки. 2. Изменить API столь же просто как настроить отчёт. Можно опубликовать существующий вариант отчёта. 3. Отчёты в API поддерживают параметры (Период, ДатаНачала и др.) 4. При создании простых методов не требуется изменять конфигурацию. 5. Поддерживается работа с планами обмена.<br/> 6. Возможно настроить отправку из 1С данных корреспондирующей системе, для случаев когда 1С сама "знает" какие данные нужно отправить. 7. После записи в 1С Ле Мурр может возвращать соответствие полученных идентификаторов созданным в 1С объектам данных.

36000 руб.

27.09.2024    9072    7    5    

10

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

Обмен данными с "Порталом поставщиков" zakupki.mos.ru Москвы и Московской области с целью создания оферт для закупок государственными учреждениями. Модуль устраняет рутину, минимизирует ошибки и помогает выигрывать больше закупок. Работает строго по требованиям 44-ФЗ.

14400 руб.

13.12.2016    41397    54    39    

37
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация