Релиз 11.75 Simple UI. Октябрь 2023

02.10.23

Разработка - Мобильная разработка

В новом релизе сразу много всего: интегрирована собственная документно-ориентированная СУБД SimpleBase, развит функционал работы, доработана OCR и ActiveCV, работа с диалогами (более удобная) и много всего другого полезного. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

Новая NoSQL


Я написал свою JSON-ориентированную безсерверную NoSQL SimpleBase – быструю, надежную и с Mongo-подобным интерфейсом. Ее можно использовать в продуктах Simpe и любых других проектах. Код открыт.

Документация: https://simplebase.readthedocs.io/en/latest/# 

GitHub : https://github.com/dvdocumentation/simplebase


СУБД встроена в SimpleUI в виде python-библиотеки и в виде Java-класса, т.е. с базой данных можно работать разными способами.

 

Зачем я ее написал?

Это наиболее простой способ работы с локальным хранением – по сути чистый JSON, для которого не нужно знать SQL, да и вообще -на JSON в стеке симпла буквально все – команды, разметки экрана и переменных. Например: пришли документы из 1С по http – это JSON, его не надо растаскивать по таблицам, а можно хранить как есть, работать с ним как есть, выводить на экран, заполнять экранные списки – JSON, обратно отсылать – тоже JSON без собирания и упаковки. Получается это намного проще SQL, а из стека нужно знать только работу со словарями и списками  - итерации и вот это вот все.

За счет особой архитектуры работы с данными удалось добиться показателей скорости, сравнимых с SQL в критичных участках: добавление данных, поиск по индексу, текстовый поиск.

Свойства SimpleBase:

  •    Мгновенное добавление новых записей в коллекции независимо от размера коллекции благодаря специальной архитектуре хранения.
  •    Более быстрая работа с операциями, за счет того, что не требуется кодировать/декодировать всю коллекцию (которая может быть очень большой)
  •     Коллекции всегда хранятся в оперативной памяти с отслеживанием изменений одновременно: данные перечитываются с диска только в том случае, если они были изменены другим процессом.
  •     ACID для многопользовательской и многопоточной работы
  •     Два типа индексов для ключевых типов запросов — хеш-индекс и специальное B-дерево для полнотекстового поиска.
  •     Поддержка транзакций (сессий)

Примеры работы в документации, на гитхабе и в ui-примерах к статье

 

Интеграция питон-библиотеки

Питон библиотека уже встроена в приложения и для использования достаточно импорта, чтобы использовать СУБД
from pysimplebase import SimpleBase

Пути к базам по умолчанию располагаются в папке SimpleBase и для того чтобы работать с базой и из Python и из нативных обработчиков нужно располагать файл в ней. Для этого есть функция get_simplebase_files в классе SimpleUtilities

Например:

db = SimpleBase("testdb3",path=suClass.get_simplebase_dir(),timeout=200)

 

Нативная интеграция (переменные, нативные обработчики)


Также, помимо python реализована поддержка на уровне приложения – через обработчики типа nosql и через команды-переменные. Через команды-переменные можно работать с СУБД онлайн – из 1С например. И также нативные обработчики (аналогично нативным SQL-обработчикам) доступны всегда, а Python доступен только когда приложение запущено в памяти (есть контекст приложения), а, например, если приложение в памяти не висит, но при этом все еще доступен фоновый сервис или воркер – то Python в этот момент недоступен, в отличие от нативных обработчиков.

Важно. Нативные обработчики поддерживают только базовые CRUD функции + find(базовый) и all, со сложными запросами, индексами, сессиями  следует работать из python-обработчиков

Формат обработчиков типа обработчика nosql:


<имя базы> <имя коллекции> <команда> <параметр, если есть>

Например:

 

dbnative test_1 insert {"txt":"Привет мир","count":1}


Команды при успешном выполнении возвращают результат в переменную NOSQLResult 

Все то же самое поддерживается через команды-переменные с помощью общей команды "RunSimpleBase"

RunSimpleBase,< [{"database":<имя базы>,"collection":<имя коллекции>,"command":<команда>,"value":<значение>},…] >

Например (данный пример логичнее сделать из 1С, но у меня для простоты локальный Python):

hashMap.put("RunSimpleBase",json.dumps([{"database":"dbnative","collection":"test_1","command":"insert","value":{"caption":"Hello world"}}]))


Работа с файлами


Полноценно работать с файлами за пределами папки приложения в новых версиях Android все сложнее и сложнее, но кое-что пока можно. При этом внутри папки приложения можно работать средствами, например, Python без ограничений.


Диалоги «Открыть файл»/Сохранить файл


Открытие файла через диалог(пикер) состоит из комманды-переменной и обработчика события. 

Надо отметить, что можно открывать файлы и не через диалог, а через открытие файла приложением Simple через Открыть (доступен соответствующий общий обработчик). 

OpenExternalFile, пустой параметр  – команда запуска диалога, при открытии файла генерируется событие FileOpen которое можно перехватить в обработчике типа pythonbytes в который попадает байт-массив открытого файла. 

SaveExternalFile, параметр: {"path":<путь к внутреннему файлу>,"default":<имя по умолчанию>} – команда запуска диалога выбора локации сохранения файла и имени файла (можно выбрать имя по умолчанию). При успешном сохранении генерируется событие FileSave

 

Сохранение в Downloads


В Java классе SimpleUtilites появилась функция download_file(<имя файла>), которая сохраняет файл (сформированный в папке приложения) во внешнюю паапку Downloads (коллекция Загрузки). 

Таким образом можно сбрасывать информацию в виде файлов как через диалог так и безусловно.

 

Ручное задание VisionSettings для распознавания текста в экранах и ActiveCV


VisionSettings для настройки OCR можно задавать в конструкторе, но также сейчас есть возможность переопределять его в коде.

SetVisionSettings(<{словарь с настройками}>) – команда для экранов и ActiveCV которая, если ее выполнить до запуска OCR, задаст настройки детектора OCR

Доступные настройки тут: https://uitxt.readthedocs.io/ru/latest/cv.html#ocr


Модернизация детектора Мультисканер


Мультисканер это один из детекторов ActiveCV, который включает в себя детектирование материальных объектов для каждого из которых можно динамически подключить детектор штрихкодов внутри объекта (barcode), распознавание текста внутри объекта (ocr) и отключить детекторы (stop). На этом режиме построен ранее публикуемый прайсчекер //infostart.ru/1c/tools/1882131/

В новом релизе он значительно улучшен:

  1.     Добавлена возможность фильтрации OCR до передачи в обработчик. Текст внутри объекта разбивается на массив элементов, к кажому из которых можно применить фильтр по минимальной/максимальной длине, «заменять O на 0», «в верхний регистр» а также новый фильтр «OnlyNumbers» - только числа
  2. Для подключения режима предварительной фильтрации требуется использовать команду UseVisionSettings (предварительно должны быть установлены настройки распознавания)
  3.     Улучшена команда stop – синхронизируется между несколькими потоками и прерывает мгновенно
  4.     Улучшено быстродействие в целом и перенесена обработка на локальный TensorFlow


Мини-релизы, по которым не было описание на Инфостарте


В своем ТГ я публикую промежуточные релизы и патчи, для которых не пишу статьи на Инфостарт

Вот список изменений в последних двух релизах:

Релиз 11.50.00 https://telegra.ph/OpenCV-v-relize-SimpleUI-1150-04-20

•    Поддержка OpenCV. Теперь можно всё и сразу.
•    Распознавание 2D-материальных объектов по фичам (не нейросеть – feature detection). Теперь можно распознавать полиграфическую продукцию и тому подобное.

Релиз 11.50.35 https://telegra.ph/Nebolshoj-reliz-115035-04-28

•    Компрессия трафика GZIP для онлайн обработчиков. Сильно экономит трафик и скорость на 3G/4G
•    OCR для экранов: возможность использовать обработчик вместо опорной выборки (вместо SQL и списка значений)
•    selected_card_data – возврат всего содержимого карточки/строки таблицы
•    Возможность изменения запросов онлайн-обработчиков для работы в стиле *args


Запуска таймеров из кода


Таймеры (повторяющиеся в фоне задания) можно определить в конфигурации и также  в новом релизе запустить/остановить из кода.

StartTimers, пустой параметр – инициализирует объект таймеров

StartTimer, <{"handler":<массив обработчиков>,"period":<периодичность, мс>}> - добавляет новый таймер и запускает его

StopTimers, пустой параметр – останавливает объект таймеров и удаляет все ранее добавленные таймеры (командой StartTimer)

 

Улучшенная работа с диалогом


Переопределить содержимое модального диалога можно было через указание процесса с экраном-образцом, теперь можно задать контейнер  напрямую

ShowDialogLayout, <JSON-структура котнейнера> - определяет содержимое окна диалога. Используется совместно с командой ShowDialog

 

Режим записи переменных при возврате из обработчика StackAddMode


Обработчик, начиная свое выполнение, забирает содержимое стека переменных, а после выполнения возвращает назад перезаписью стека. При параллельной работе в нескольких потоках и одновременно при длительном выполнении обработчиков, может случиться коллизия – длительный обработчик вернет состояние переменных и перезапишет то, что за это время успело поменяться в других потоках, например, пользователем. 
Для избежания этой коллизии следует определить переменную _StackAddMode до начала обработчиков, тогда возвращаемый стек переменных будет в режиме объединения а не замещения.

 

Прочие доработки

 

  • Поддержка уведомлений в Андроид 13 (требуется разрешение)
  • Поддержка параметров в JSON в SQLQuery, SQLExcec (аналогично в SQLExcecMany)
  • runprogress можно запускать в onStart/onPostStart
  • интегрирована поддержка html2image для сохранения html в виде картинки. Документации нет – только пример.
  • исправлены ошибки и проведены оптимизации
  • переработаны разделы документации «Хранение», «CV»
     

Примеры к релизу, как всегда, в основной статье //infostart.ru/1c/tools/1153616/

Конечно же, Телеграм-канал проекта, в котором масса всего полезного:  https://t.me/devsimpleui

Android Simple

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн. Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

2880 руб.

03.12.2018    54927    139    102    

162

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33684    82    159    

177

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

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

Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    92226    519    186    

296

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

Логистика, склад и ТМЦ Мобильная разработка Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Специализированное программное обеспечение для мобильных устройств со встроенным сканером штрихкодов. Позволяет быстро автоматизировать, оптимизировать рабочие места и бизнес процессы по учету товара в магазине. Например, приемку товара по штрихкодам или инвентаризацию прямо в торговом зале.

12950 руб.

30.05.2023    3441    2    0    

4

Работа с графикой в браузере (SimpleWEB). Векторный редактор

Мобильная разработка WEB-интеграция Мобильная платформа Абонемент ($m)

В SimpleWEB добавились средства для работы с графикой и отслеживание событий мыши, в онлайн редактор https://seditor.ru:1555/ добавился «Векторный редактор» на этом API. Теперь можно нарисовать схемы складов на ПК, сделать карты (*.sug-файлы) для мобильной платформы SimpleUI, выводить данные из 1С в графическом виде. Таким образом, API для работы с векторными файлами теперь есть и в веб- и в мобильной платформе, а также средства для создания и редактирования векторных файлов есть тоже в обеих платформах.

1 стартмани

20.03.2024    1577    0    informa1555    1    

40

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    8702    ROk_dev    67    

40

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1678    informa1555    0    

25
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rumik007 02.10.23 10:16 Сейчас в теме
Опечаточка на ссылке на канал в телеграмм, в конце I не хватает
2. informa1555 2648 02.10.23 10:55 Сейчас в теме
3. gybson 02.10.23 16:45 Сейчас в теме
for key_document,value_document in document.items():
                            if key==key_document:
                                if not value_document in value['$in']:
                                    return True
                                else:
                                    return False


У словарей быстрый поиск по ключам, не надо перебирать их как списки.

if d.get(key)!= None:
    return d[key] == val


или даже просто d.get(key) == val
4. informa1555 2648 02.10.23 17:10 Сейчас в теме
(3) Я знаю, но мне нужна итерация по списку ключей. В документе если несколько ключей, к каждому я хочу применить условие, не обязательно равно...
5. gybson 02.10.23 17:17 Сейчас в теме
(4) в словаре не может быть дубликатов ключей
6. informa1555 2648 02.10.23 17:46 Сейчас в теме
(5) я же говорю это поиск по всем ключам. у вас словарь из словарей {"id1":{"name":"1c"},"id2":{"name":"simple"},"id3":{"vendor_name":"sap"}} . Вам надо найти все элементы в которых например есть поле name. Или например условие применить к этому полю. Понятно что у меня есть и хашиндексы и сбалансированное бинарное дерево - все это есть, но то частные случаи.
7. SerVer1C 750 02.10.23 19:38 Сейчас в теме
Про самописную СУБД интересно. Вы говорите, что 1М записей быстро обрабатывает, но этот объем свободно умещается в оперативной памяти. Что будет, если в вашей СУБД будет, например, 100М записей по 100..500 байт?
8. informa1555 2648 02.10.23 20:44 Сейчас в теме
(7) она работает на запись через диск естественно, в кеше только на чтение. Что будет если записей будет много - будет большой файл, в который она будет дописывать строчки в конец (и обновлять несколько байт в заголовке). Скорость этих 2х операций не зависит от размера файла и на Винде и в Линуксе. Поиск по хешиндексу будет такой же мгновенный если индекс уместится в памяти. В целом, это инструмент для того чтобы хранить бизнес -логику на мобильных устройствах, оптимизировано под конкретные сценарии.
9. astro71 21.11.23 22:45 Сейчас в теме
Доброго дня. Подскажите пожалуйста: при попытке добавить фото из галереи возвращает: begin 0, end 1, lenth 1. ПрочитатьJSON вызывает исключение.
10. informa1555 2648 22.11.23 06:32 Сейчас в теме
(9) Добрый день! Да, есть там ошибка в режиме без mm_local (когда не через файлы а через base64). Исправление войдет в ближайший релиз. Не заметили эту ошибку потому что без mm_local практически не пользуются - в base64 долго идет кодирование.
11. astro71 22.11.23 09:53 Сейчас в теме
(10) Спасибо, ждем. Еще раз спасибо за вашу разработку!
12. user1035175 2 12.03.24 21:50 Сейчас в теме
Добрый день. Есть необходимость очистить коллекцию в SimpleDB при старте экрана или сразу после. В документации есть пример на Python. А как это сделать нативным способом или на стороне 1С?
Оставьте свое сообщение