Каталог решений - Мобильная платформа 1С 8.3: чтение СМС, журнала звонков и т.д. и т.п.

Мобильная платформа 1С 8.3: чтение СМС, журнала звонков и т.д. и т.п.

Мобильная платформа 1С 8.3: чтение СМС, журнала звонков и т.д. и т.п.

В наличии

Пишем приложение по учету личных финансов с загрузкой СМС от банков на основе мобильной платформы 8.3.15.62 …

Категория:

Описание

Случилось так, что мои знакомые попросили найти программку по учету личных финансов. Изучив возможные предложения обнаружил, что необходимый функционал (загрузка операций из СМС о банка, загрузка номенклатуры с чека) в основном во всех предложениях платны. Было принято решение написать свое приложение. Единственный момент, более ранние релизы платформы не поддерживали чтение СМС. В поисках решения, вплоть до написания отдельного приложения на базе андроид, с выгрузкой журнала СМС в файл и последующей загрузкой в мобильное приложение, обнаружил, что последние версии платформы имеют такой функционал.

Перерыв интернет более или менее понятных пояснений не обнаружил, по этому, путем проб и ошибок хотелось бы поделиться своим опытом:

1. Чтения журнала СМС, обязательно должно быть установлено разрешение на чтение журнала СМС:

2.Далее код на клиенте в любом месте:

Если СредстваТелефонии.ПоддерживаетсяЖурналSMS()=Истина Тогда
ЖурналSMS=СредстваТелефонии.ПолучитьЖурналSMS();
Если ЖурналSMS<>Неопределено Тогда
Отбор = Новый ОтборКомпоновкиДанных; 
ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомераТелефонов"); 
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; 
ЭлементОтбора.ПравоеЗначение = "900"; 
ЭлементОтбора.Использование = Истина;     
SMSОтБанка=ЖурналSMS.НайтиЗаписи(отбор);
сч=0;
Для Каждого SMS из SMSОтБанка Цикл
    Если ЗначениеЗаполнено(SMS.ДатаПолучения)=Истина Тогда
        сч=сч+1;
Если сч=10 Тогда
    Прервать;
КонецЕсли;

    Если ОбщийМодуль.ЗагрузитьСМС(SMS.ДатаПолучения,SMS.Текст)=0 Тогда
        Прервать;
    КонецЕсли;    
    КонецЕсли;
    КонецЦикла;    
КонецЕсли;    

И здесь грабли, равно как и при получении журнала звонков, но об этом далее.

Дело в том, что провайдер связи или у меня телефон такой, я еще не понял, скорее всего провайдер, возвращает не верную дату. У меня TELE2, разница в три часа ровно!!! На других не пробывал. Можно предположить, что сервер TELE2 находиться в другом часовом поясе, возможно как и сервера других провайдеров.

Тоже самое наблюдалось и при загрузке журнала звонков:

Если СредстваТелефонии.ПоддерживаетсяЖурналЗвонков()=Истина Тогда
ЖурналЗвонков=СредстваТелефонии.ПолучитьЖурналЗвонков();
Тек=ЖурналЗвонков.НайтиЗаписи();
Если тек<>Неопределено Тогда
сч=0;    
Отчет=""+Отчет+" ПОСЛЕДНИЕ 50 ЗВОНКОВ"+Символы.ПС+Символы.ПС+"";
Для Каждого зв из тек Цикл
сч=сч+1;
Если сч=50 Тогда
    Прервать;
КонецЕсли;
Имя=ВернутьКонтакт (зв.НомерТелефона);
ДатаПолучения=зв.Дата+10800;
Отчет=""+Отчет+""+ДатаПолучения+" "+зв.ТипЗвонка+" "+Имя+" "+зв.НомерТелефона+"  "+зв.Продолжительность+""+Символы.ПС+"";
КонецЦикла;
КонецЕсли;  

 
Цифра 10800 как раз поправка в три часа.

Чтение контактов:

Контакты=МК.НайтиКонтакты();
Если Контакты<>Неопределено Тогда
Отчет="";    
Для Каждого ключ из Контакты Цикл
Конт=МК.ПолучитьКонтакт(ключ);
Номера=конт.ДанныеКонтакта.НомераТелефонов;
НомераТелефонов="";
Для Каждого ном из Номера Цикл
НомераТелефонов=""+НомераТелефонов+""+ном.Значение+"";    
КонецЦикла;    
Отчет=""+Отчет+""+СокрП(конт.ДанныеКонтакта.Фамилия)+"  "+СокрП(конт.ДанныеКонтакта.Имя)+"  "+СокрП(конт.ДанныеКонтакта.Отчество)+"  "+НомераТелефонов+""+Символы.ПС+"";    
КонецЦикла;    

Соответственно для всех манипуляций должно быть разрешение у вашего приложения.

 

Не знаю, будет кому-то эта информация полезна или нет, но информации по этим вопросам оооч мало по запросам в поисковиках.

has been added to your cart:
Оформление заказа