Мобильное приложение Кешбэк на платформе 8.5 для Android.
Версия платформы для разработки - 8.5.1.1343
Версия мобильной платформы - 8.5.1.151
Позволяет хранить категории кешбэка различных банков в одном месте и без лишних усилий получить соответствующую информацию. Нажал пару кнопок, увидел на экране все, что нужно.
Вообще это приложение я сделал для себя и своей семьи, как только вышла и стала доступной первая платформа 8.5.
Даже когда-то хотел разместить его в RuStore (кстати, на тот момент подобных там не было), но пока хотел и дорабатывал, в магазине появились подобные приложения. На текущий момент решил, что мобильные приложения 1С пока не конкуренты другим технологиям. Из плюсов – быстрая разработка, на этом все (личное мнение). Из минусов – цвета, это вообще отдельная песня, цвета какие угодно, но не те, которые задаешь и хочешь увидеть. Отображение и навигация иерархии справочников – боль. Поможет только полностью кастомное решение на форме, но это долго и утомительно. От иерархии пришлось отказаться, да и не нужна она особо. Если по двум разным картам одного банка (дебетовая, кредитная) разные категории, все равно нужно заводить два счета. Они и без иерархии выглядят достойно и не мешают друг другу.
В общем, меня устраивает, да и просто интересно потрогать новую платформу.
Вариантов и доработок было достаточно много, некоторые из них:
- Прикрутил api GigaChat, отправлял скриншоты категорий, назад получал текст со списком категорий и процентом. Работает хорошо, но токенов бесплатного тарифа хватает на пару картинок.
- tesseract.js – в поле HTML в текущей версии не работает из-за старой версии JavaScript (привет вендору, ждем новой версии 8.5.5, вроде как обещали обновить JS, возможно, и в мобильную завезут). Приходилось открывать через вызов установленного по умолчанию браузера из приложения и передавать ему .html сохраненный во временных файлах. Распознание такое себе.
- Распознавание речи – так и не смог завести Web Speech API в поле HTML, хотя в отличие от десктоп, в мобильной платформе работает, но получить разрешение на использование микрофона не удалось получить (не смотря на выданные разрешения самому приложению и соответственно платформе). Пробовал так же через вызов браузера – работает. В итоге стал использовать вызов приложения - //infostart.ru/1c/tools/1480573/
Не судите строго, но в этой версии ни чего это нет. Эти доработки вызывают дополнительные сложности. В итоге было принято решение разработать некий механизм для быстрого и удобного добавления/редактирования кешбэка.
Банков и тем более категорий в текущем месяце может быть много и раньше добавление нового занимало у меня минут 30 – заводил категории через документы, в текущей версии все занимает от силы 5-10 минут.
В итоге текущая версия приложения с минимально необходимым и на мой взгляд максимально удобным функционалом.
В ходе работы выявились некоторые баги, которые до сих пор не исправлены (проверял в тестовой 8.5.4), возможно я просто не умею их готовить. Дальше постараюсь показать некоторые из них.
Приложение разделено на три основных страницы. Навигация по страницам – либо по кнопкам в верхней части, либо перелистыванием страниц свайпом влево, вправо.
1. Избранные категории текущего месяца
Страница открывается при запуске приложения, на ней отображается кешбэк п избранным категориям. Свойство избранная задается непосредственно в карточке категории (элемент справочника Категории).
Проблемы:
-
Текст в карточке всегда прижат влево, даже если разделить строку на две колонки, в каждой из них текст будет слева. Ни горизонтальное положение, ни условное форматирование в дин. списке не помогают, кстати цвет текста можно изменить только в условном оформлении списка. Решение нашел только одно – создание элементов программно, там проблем нет хоть лево, хоть право, цвет тоже без проблем. Если кто-то найдет другое решение просьба поделиться в комментариях.
-
Зафиксировать группу кнопок (на картинке вверху 4-е кнопки навигации) можно только если на форме/на одной из доступных видимых страниц формы есть динамический список. Какие бы настройки не делал, пока нет дин. списка группа кнопок не зафиксируется. Список может быть на любой из страниц, достаточно одного, но главное чтоб страница была доступной (либо заголовки страниц, либо перелистывание), если отключить видимость заголовков страниц совсем и обрабатывать их смену программно, но кнопки так же не фиксируются.
2. Список всех категорий текущего месяца
При выборе категории открывается страница с расшифровкой по всем счетам в данной категории.

Проблемы:
-
Долго боролся с тем, как вывести в карточку флаг избранной категории. В итоге флаг отображается в виде картинки, и очень интересно, но картинка в таком варианте может быть только черно-белой,цветная галка не выводится. Т.е. если отображение будет в другом варианте, вид не поле картинки, то все нормально, платформа выведет зеленую галку, если же выбрать вид как поле картинки и задать туже саму зеленую галку, то она не будет выводиться, только черно-белая.
-
То же самое, программное формирование элементов расшифровки, чтоб разместить текст процента справа.
3. Страница настроек
Здесь все вроде очевидно, «Счета» – справочник счетов, «Категории» – справочник категорий.
«Кешбэк» – открывает форму создания нового, или редактирования выбранного кешбэка. Об этом далее.
В карточке категории можно задать признак избранной. В карточке счета можно задать признак того, что счет участвует в кешбэке, т.е. может быть выбран при создании кешбэка. Пока оставлен как рудимент от прошлых более расширенных версий.



Если справочники Счета, или Категории не заполнены, то на форме списка справочника будет доступна кнопка заполнения предустановленными значениями.

Справка
Страница справки открывается по нажатию 4-й кнопки. Это отдельная форма и логически не относиться к основным страницам. Там вроде все очевидно, краткая справка по приложению с основным описанием возможностей.

Кешбэк
По кнопке открывается отдельная форма с несколькими страницами.
На первой представлены счета, которые участвуют в кешбэке (в карточке счета стоит флаг «Кешбэк по счету»). При выборе счета открывается следующая страница с выбором нужных категорий.
После выбора категорий и нажатия соответствующей кнопки открывается последняя страница, где нужно проставить процент по каждой, а так же можно изменить флаг «Выбрано».
Здесь надо пояснить, дело в том, что банк может предложить например 10 категорий, но выбрать можно только 4. Если есть необходимость хранить информацию по всем 10-ти категориям, то можно выбрать все нужные, а флаг «Выбрано» установить только 4-м выбранным.
Кнопка «Готово» возвращает на страницу выбора счета, при этом галка в строке счета указывает на то, что по данному счету данные заполнены.
Можно нажать кнопку «Сохранить» и продолжить заполнять кешбэк по другим счетам, можно заполнять другие без охранения и сохранить все внесенные данные в конце.


Проблемы:
-
Последняя страница также формируется программно, здесь хотелось добиться того, чтобы редактирование каждой категории было в рамках одного окна и не открывалось в отдельном ка это происходит при редактировании строки табличной части.
-
Отдельная песня поле флажка, при попытке программной установки вида флажка выключатель выходит ошибка. Т.е. в свойствах поля формы это задать можно, программно нельзя.
Короче пришлось решать так, костыль конечно, но работает.
ИмяЭлемента = "ФлагУчаствует" + ИндексСтрокой;
ФлагУчаствует = Элементы.Добавить(ИмяЭлемента,
Тип("ПолеФормы"),
СтрокаПроцентВыбрано);
ФлагУчаствует.Вид = ВидПоляФормы.ПолеФлажка;
ФлагУчаствует.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
ФлагУчаствует.Заголовок = "Выбрано";
ФлагУчаствует.ПутьКДанным = "Кешбэк[" + ИндексСтрокой + "].Участвует";
// Выдает ошибку что не доступен в мобильном приложении
Выполнить("ФлагУчаствует.ВидФлажка = ВидФлажка.Выключатель");
-
Также из за большого желания закрепить кнопки в нижней части экрана пришлось разделить форму на несколько страниц, на некоторые страницы добавить динамический список, сделать смену страниц свайпом (ОтображениеСтраниц - Пролистывание (сенсорный экран)), но при этом в событии ПриСменеСтраницы программно возвращать на текущую, так как логика в этом месте не предполагает такую смену. А если отключить отображение страниц, как писал выше, кнопки перестанут фиксироваться в одном месте.
Бэкап
Открывается окно, в котором можно создать новый файл резервной копии, или загрузить резервную копию из сохраненных ранее файлов.
Также при сохранении нового файла будет предложено поделиться файлом с другими приложениями. Например, отправить в тот же Max в избранное, или в облако. Спасибо - //infostart.ru/1c/tools/301851/
&НаКлиенте
Асинх Процедура ПоделитьсяФайлом(Знач ИмяФайла, ЗадаватьВопрос = Истина)
Если ЗадаватьВопрос = Истина Тогда
СписокОпераций = Новый СписокЗначений;
СписокОпераций.Добавить(1, "Да");
СписокОпераций.Добавить(2, "Нет");
СписокОпераций.Добавить(0, "Отмена");
ОбещаниеВыбора = ВопросАсинх("Поделиться файлом", СписокОпераций, , , " ");
КодОперации = Ждать ОбещаниеВыбора;
Если КодОперации <> 1 Тогда
Возврат;
КонецЕсли;
КонецЕсли;
#Если МобильноеПриложениеКлиент Тогда
Запуск = Новый ЗапускПриложенияМобильногоУстройства();
Запуск.Действие = "android.intent.action.SEND";
// Работает на всех трех типах
// проверена отправка в Max и облако Mail
//Запуск.Тип = "application/json";
//Запуск.Тип = "text/plain";
Запуск.Тип = "text/json";
Если СтрНайти(ИмяФайла, "file:///") = 0 Тогда
ИмяФайла = "file:///" + ИмяФайла;
КонецЕсли;
// Третий параметр "Uri" обязателен
// без него отправки не будет, 1С не понимает
Запуск.ДополнительныеДанные.Добавить("android.intent.extra.STREAM", ИмяФайла, "Uri");
Запуск.ЗапуститьАсинх();
#КонецЕсли
КонецПроцедуры
При выборе строки существующего файла будет предложено загрузить бекап из файла, поделиться файлом, или удалить его.
При сохранении выгружаются счета и категории (наименования), а также история кешбэка из соответствующего регистра сведений.
При восстановлении поиск счетов и категорий происходит по наименованию, если не найдено, создаются новые. Так же создаются записи в регистре сведений. Периодичность – месяц.



Проблемы
-
Выборка каталога для сохранения, в отличие от выбора файла для восстановления, возможна только внутри песочницы приложения. Это создает проблемы в том, что стандартным файловым менеджером туда не добраться, папка Android – data будет пустой. Собственно поэтому было решено хранить путы файлов бэкапа непосредственно в приложении, а так же добавить возможность поделитьсся файлом.
-
Выбор каталога пришлось сделать по старинке через Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога).
Асинхронный метод ПолучитьФайлССервераАсинх() не заработал результат обещания всегда Неопределено и нет возможности получить полное имя файла, хотя сам файл сохраняется корректно. В то же время метод ПоместитьФайлНаСерверАсинх() при выборе файла для восстановления работает корректно, обещание возвращает в результат адрес загруженного файла.

Собственно, все.
Если у кого-то будут способы решения описанных выше проблем, пишите в комментариях.
Изменения в файле:
- на форму выбора категорий при создании/редактировании кешбэка добавлена строка поиска категории и кнопка создания новой категории;
- кнопка сохранить на форме создания /редактирования кешбэка закрывает форму только если по всем счетам добавлены данные;
- на форму бэкапа в карточку файла добавлена информация о его имени без каталога;
- изменено имя файла бэкапа.
Вступайте в нашу телеграмм-группу Инфостарт