Случилось так, что мои знакомые попросили найти программку по учету личных финансов. Изучив возможные предложения обнаружил, что необходимый функционал (загрузка операций из СМС о банка, загрузка номенклатуры с чека) в основном во всех предложениях платны. Было принято решение написать свое приложение. Единственный момент, более ранние релизы платформы не поддерживали чтение СМС. В поисках решения, вплоть до написания отдельного приложения на базе андроид, с выгрузкой журнала СМС в файл и последующей загрузкой в мобильное приложение, обнаружил, что последние версии платформы имеют такой функционал.
Перерыв интернет более или менее понятных пояснений не обнаружил, по этому, путем проб и ошибок хотелось бы поделиться своим опытом:
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 как раз поправка в три часа.
Чтение контактов:
Контакты=МК.НайтиКонтакты();
Если Контакты<>Неопределено Тогда
Отчет="";
Для Каждого ключ из Контакты Цикл
Конт=МК.ПолучитьКонтакт(ключ);
Номера=конт.ДанныеКонтакта.НомераТелефонов;
НомераТелефонов="";
Для Каждого ном из Номера Цикл
НомераТелефонов=""+НомераТелефонов+""+ном.Значение+"";
КонецЦикла;
Отчет=""+Отчет+""+СокрП(конт.ДанныеКонтакта.Фамилия)+" "+СокрП(конт.ДанныеКонтакта.Имя)+" "+СокрП(конт.ДанныеКонтакта.Отчество)+" "+НомераТелефонов+""+Символы.ПС+"";
КонецЦикла;
Соответственно для всех манипуляций должно быть разрешение у вашего приложения.
Не знаю, будет кому-то эта информация полезна или нет, но информации по этим вопросам оооч мало по запросам в поисковиках.