Релиз 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С v8.3 1С:Конвертация данных Платные (руб)

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

13200 руб.

27.12.2021    38193    108    161    

201

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

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

3000 руб.

03.12.2018    59288    192    103    

172

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

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

2000 руб.

22.04.2019    97216    586    189    

321

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

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

3450 руб.

28.04.2023    9468    15    0    

9

Мобильная разработка Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Управленческий учет Платные (руб)

Мобильное приложение и конфигурация 1С для автоматической торговли на бирже через API Тинькофф банка. Достаточно задать настройки, нажать «Пуск», и робот сам торгует ежедневно.

7000 руб.

25.05.2022    4643    1    0    

6

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

Экспериментальный релиз и простенький скрипт к нему закрывает потребности в любых видах синхронизации между устройствами Simple и между Simple и бек-системами (например 1С). По сути – это очень простой python-скрипт, который можно запустить на доступной машине, сервере или VPS и он будет связывать клиентские устройства между собой и с 1С или другими бек-системами. В самой платформе появилось для этого множество доработок для поддержки стабильного постоянного соединения, докачки больших файлов и работе в фоне. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

23.08.2024    1215    6    informa1555    1    

13

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

В этом релизе собрано много нового из области интерфейса, связи, хранения и важные новые способы управления. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

25.06.2024    2606    29    informa1555    0    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. rumik007 02.10.23 10:16 Сейчас в теме
Опечаточка на ссылке на канал в телеграмм, в конце I не хватает
2. informa1555 2715 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 2715 02.10.23 17:10 Сейчас в теме
(3) Я знаю, но мне нужна итерация по списку ключей. В документе если несколько ключей, к каждому я хочу применить условие, не обязательно равно...
5. gybson 02.10.23 17:17 Сейчас в теме
(4) в словаре не может быть дубликатов ключей
6. informa1555 2715 02.10.23 17:46 Сейчас в теме
(5) я же говорю это поиск по всем ключам. у вас словарь из словарей {"id1":{"name":"1c"},"id2":{"name":"simple"},"id3":{"vendor_name":"sap"}} . Вам надо найти все элементы в которых например есть поле name. Или например условие применить к этому полю. Понятно что у меня есть и хашиндексы и сбалансированное бинарное дерево - все это есть, но то частные случаи.
7. SerVer1C 815 02.10.23 19:38 Сейчас в теме
Про самописную СУБД интересно. Вы говорите, что 1М записей быстро обрабатывает, но этот объем свободно умещается в оперативной памяти. Что будет, если в вашей СУБД будет, например, 100М записей по 100..500 байт?
8. informa1555 2715 02.10.23 20:44 Сейчас в теме
(7) она работает на запись через диск естественно, в кеше только на чтение. Что будет если записей будет много - будет большой файл, в который она будет дописывать строчки в конец (и обновлять несколько байт в заголовке). Скорость этих 2х операций не зависит от размера файла и на Винде и в Линуксе. Поиск по хешиндексу будет такой же мгновенный если индекс уместится в памяти. В целом, это инструмент для того чтобы хранить бизнес -логику на мобильных устройствах, оптимизировано под конкретные сценарии.
9. astro71 21.11.23 22:45 Сейчас в теме
Доброго дня. Подскажите пожалуйста: при попытке добавить фото из галереи возвращает: begin 0, end 1, lenth 1. ПрочитатьJSON вызывает исключение.
10. informa1555 2715 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С?
Оставьте свое сообщение