Новый формат JSON и “большая уборка”
Запланировано много изменений в дальнейшем, а формат XML неэкономный, учитывая необходимость в маскировании и то что вся остальная логика экранов на JSON. Теперь будет все на JSON. Приложение умеет читать и новый и старый формат, но все новые плюшки – только на JSON. Поэтому нужно обязательно обновить 1С-ную часть. Пока разница не сильно заметна, но это только пока.
Под это дело было решено также избавиться от всего лишнего хлама, который накопился с момента создания. Потому что те кто изучает платформу с нуля путаются и пугаются большого объема документации. А оно не нужно – многие вещи делаются более универсальными методами. Я основательно подошел к делу и перелопатил всю демо-базу (все примеры), а заодно и онлайн-документацию.
Под нож пошли:
- Упрощенный режим экрана – теперь все на контейнерах. Нужно сделать такое же – можно сделать на контейнерах. В корне экрана теперь только элементы ввода и то что занимает весь экран (корзина, плитки и т.д.), а вся визуалка – через контейнеры
- Упрощенное переключение экрана – все эти циклы и т.д. Теперь только ShowScreen на все случаи жизни
- Старая закладка offline
- Некоторые ненужные вещи – отложенные задачи (легко делаются либо на SQL либо на No SQL) и т.д.
Готовятся к вылету или преобразованию:
- «Задачи», которые торчат на главном экране. Их можно легко заменить карточками или плитками. Поэтому позже появится возможность настраивать пункты главного меню
- «Документы». Легко заменяются NoSQL. Возможно будут преобразованы или сольются с NoSQL
- Отправка статусов запуска процессов. Биллинг можно реализовать и по другому.
Работа с мультимедиа через галерею на экране.
На экране можно разместить карусель-галерею, куда будут падать все добавляемые картинки. Причем управление массивом картинок или файлов максимально автоматизировано и упрощено: если на экране размещена галерея то она перехватывает ввод с камеры или добавление с хранилища и сама формирует массив. Тоже самое с удалением. В общем достаточно добавить элемент, указать переменную и на входе и на выходе массив либо ссылок на файлы либо непосредственно base64 а дальше уже сами смотрите что с ними делать.
Работа с мультимедиа через файлы (режим mm_local)
Кодирование/раскодирование в base64 – это неизбежно фризы и тормоза. В этом варианте можно работать только если основательно сжимать фотки и по размеру и по компрессии. Ну а с видео – вообще все грустно. Поэтому самый нормальный режим – хранить файлы на устройстве во внутренней папке приложения. Т.е. допустим вы фотографируете, система складывает файл как есть (образуя новое имя= UUID) и на выходе возвращает вам идентификатор , которым вы можете оперировать (вставлять в объекты, сохранять) а когда надо получить по нему абсолютный путь к файлу и делать с этим файлом что захочется. Это обычно нужно для передачи файла по синхронизации. Но вообще учитывая что в обработчиках Python c файлом можно сделать много интересного. Это примерно как в гардеробе – сдали пальто, получили номерок, когда надо – отдали номерок, получили пальто. Имеется и таблица «id» - «абсолютный путь к файлу» где хранятся все такие файлы. Включается этот режим на экране через установку переменной mm_local. После чего галерея из предыдущего пункта начинает возвращать не JSON массив base64 а JSON-массив ИДшек
Также можно задать уровень компрессии и уровень сжатия размеров в процентах с помощью переменных mm_compression и mm_size
Интеграция с внешними NoSQL СУБД (CouchDB,MongoDB, Couchbase и т.д.)
Пару слов для чего это нужно. NoSQL прекрасно подходит для хранения неструктурированной информации и тех же файлов и мультимедиа. Эти системы записывают данные практически мгновенно и могут еще быть масштабированы (размещены на нескольких серверах) таким образом могут обеспечивать поддержку накопления больших данных и больших потоков мультимедиа с устройств. Короче, их можно использовать как прокладку между устройствами и 1С для хранения фоточек. Идея не нова, к ней пришли многие 1Сники столкнувшиеся с необходимостью организации подобного хранилища.
Кроме того, недавно в Simple UI появилась поддержка внутренней NoSQL а раз во внутренней все храниться в JSON (в основном) и в какой ни будь облачной СУБД NoSQL также объекты хранятся в JSON то идея сделать синхронизацию напрашивается сама собой и делается это все в несколько строчек.
Я вообще не стал заморачиваться и встраивать в платформу специальные средства для работы (как я сделал когда то с PostgREST, но это было до Python), а просто взял Питон и написал пример выгрузки/загрузки с Каучем. Причем он сразу с файлами – т.е. можно передавать файлы вместе с объектами или загружать фотки к объектам в синхронизации. Единственное что добавилось это команда addfile для того чтобы добавить пару «ИД-путь к файлу» в общий реестр. Ну потому что если вы добавляете файлы через питон, надо чтобы они как то добавлялись в этот реестр. Ну и все прекрасно работает.
Кстати говоря файлы передаются/принимаются в бинарном виде а не в base64 и поддерживается докачка. Это важно.
Изменения по работе с перехватом клавиатуры.
1. Появилась опция «Перехватывать все клавиши» которая регистрирует и события нажатия и события отпускания всех клавиш на экранах. Т.е. 2 события если устройство это поддерживает. И именно все клавиши. Т.е. если ввод штрихкода через клавиатуру то оно будет мешать, лучше через интент
2. Появилась возможность обрабатывать клавиатуру на главном экране через сервис. Так можно запускать процессы с клавиатуры например.
Общий модуль Python
Тут все просто – можно разместить свои процедуры в общем модуле, далее использовать «import ui_general» и вызывать свои процедуры из любых других обработчиков
Другие изменения
- Дата в контейнерах. Можно размещать сколько угодно и как угодно
- Отключение вопроса при закрытии экрана
- remove_queue для NoSQL – можно (и нужно!) перечислять id удаляемых объектов через точку с запятой
- В ActiveCV object_caption_list можно задавать верхний заголовок большой, с HTML (т.е. с выделениями и переносами) для этого надо задать JSON массив (кстати помимо обязательных можно добавлять и люые ключи если надо) [{"caption":"заголовок в HTML","любые ключи":"любые значения"},{}]
- В ActiveCV добавился синий список blue_list
- Можно задавать фокус на люом поле ввода через команду FocusField Переменные.Вставить("FocusField","qty");
Исправленные ошибки
- Исправлено и протестировано на большом количестве моделей ТСД работа с штрихкодом через intent
- Исправлены проблемы с фоновыми процессами и обработчиками по расписанию
- Другие исправления
Основная статья с комплектом разработчика тут: //infostart.ru/public/1153616/