Идентификация всего, чего угодно, в SimpleUI. Нечеткий поиск

14.04.25

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

Товары (либо другие учетные объекты) могут быть промаркированы штрихкодами либо быть без штрихкодов, но с число-буквенным обозначением (артикулом, VIN-номером и т.д.). И та, и другая ситуация не проблема для SimpleUI. Но что делать, если нет ни того, ни другого? Вообще никакой маркировки. Как можно максимально ускорить работу с таким объектами? В статье показываю новые фичи релиза и готовые для встраивания поисковые комбайны на все случаи жизни. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Версия с ActiveCV для телефона
.ui 48,75Kb
1
1 Скачать (1 SM) Купить за 1 850 руб.
Версия для ТСД
.ui 41,65Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Постановка задачи и предлагаемые решения

 

 

  • Требуется идентифицировать товар с штрихкодами, без штрихкодов, но с каким-то текстовым идентификатором и без идентификатора. Т.е. условно 3 группы товаров.
  • Все должно работать оффлайн – и сами справочники храниться оффлайн, и методы поиска тоже должны быть автономные. Потому что где-то есть покрытие, где-то нет. А даже если и есть 100% покрытие – зачем лишняя нагрузка на бек-систему? Офлайн быстрее.

С первыми двумя группами (штрихкоды и OCR) все понятно. OCR уже настолько же отработанная технология, как и штрихкоды. Для нее в Simple используется вторая генерация ActiveCV, почитать можно тут

 

 

С оффлайном тоже все понятно – в Simple есть разные виды СУБД для хранения, но специально для «внешних данных» (справочников и прочих данных внешних систем) я сделал еще такой механизм, как «датасеты» - почитать можно тут: Датасеты меняют всё

С третьей группой – чуть-чуть были вопросы. Просто дать экран с поиском по вхождению строки – не очень удобно на практике. Это на компе, с клавиатурой и большим монитором мы ищем в справочнике «Номенклатура». На ТСД это тоже можно делать, но очень неудобно. Получается, с таким товаром работа сильно замедлится? Но выход есть.

 

 

Первое, что было сделано – нечеткий поиск. Никакого предварительного индексирования, просто динамическая проверка расстояния Левенштейна по датасету. Работает быстро, сильно зависит от процессора устройства. Немного, конечно, медленнее, чем regex-поиск по вхождению строки, но зато и возможности поинтереснее. С нечетким поиском можно делать ошибки в словах и формулировать запрос более свободно. Это не вектора, эмбеддинги и векторные базы пока, но уже лучше, чем «вхождение строки»

 

 

С нечетким поиском сразу напрашивается логическая связка – распознавание речи. Оно было в симпле, но я его сделал удобнее и с большими возможностями. Эта связка – «распознавание речи» + «нечеткий поиск» - это что-то! Это реально находка. Работает это так – нечеткий поиск выдает из датасета записи с точностью выше какой-то границы, отранжированные по убыванию. Наверху списка, соответсвенно, наиболее совпадающие. Т.е. получается в ситуации «пользователь абы что сказал -> как-то там оно распозналось (на самом деле распознавалка у Google отличная) -> что-то там нашлось и отранжировалось по релевантности» на каждом этапе ошибки возможны, но это частично нивелируется нечетким поиском, а частично тем, что пользователь сам делает выбор по результатам поиска. Да, имеем человеческий фактор. Но ускоряет это процесс? Однозначно.

На самом деле с нечетким поиском напрашивается еще одна связка – OCR. Об этом – ниже.

 

Что добавлено в релизе

 

Доработано распознавание речи


listen() в python и команда-переменная “listen”  можно вызвать распознавание речи из кода. Например, в примере я вызываю при клике по карточке или при считывании штрихкода/распознавании артикула. Но, кстати говоря, еще можно использовать в SimpleUI так: повесить на аппаратную кнопку ТСД. Люди иногда работают в перчатках/рукавицах, и нажимать на экране неудобно. А так – нажал кнопку на ТСД, сказал команду – красота.

Оба варианта работают в зависимости от контекста исполнения:

1) если открыт экран, то событие onInput экрана (listener - voice_success)+ переменная voice_result

2) если вне контекста экрана эти 2 команды - то в общее событие падает событие onRecognitionListenerResult и результат.

 

Добавлен нечеткий полнотекстовый поиск


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

Поиск работает в двух ипостасях:

1) В виде поиска в тулбаре. Для этого в опциях списка надо написать метод levenshtein, например, так (да, списки теперь определяются так)

j = { "customtable":         {
                        "options":{
              "search_enabled":True,
              "dataset_search":{"method":"levenshtein", "keys":"name","min_length":3}
                },
                     "layout": "^item",
             "tabledata":"~goods"}
}


2) В виде метода датасета findTextLevenshtein(String text,int confidence), в который передается поисковая строка и требуемая точность
 

ds = GetDataSet("goods") #берем датасет с товарами
goods_select = CreateDataSet("goods_select") #создаем новый датасет для результатов поиска
results = ds.findTextLevenshtein("name",hashMap.get("voice_text"),75) #вызываем нечеткий поиск, точность 75
goods_select.put(results) #записываем результаты в новый датасет

В результате будут выданы записи для датасета, подходящей точности, отсортированные по точности в порядке убывания. В каждом элементе датасета будет добавлено поле точности - _confidence

 

Добавлена команда для запуска ActiveCV на весь экран, с возвратом результата

 

RunCV2, <listener> - запускает из экрана ActiveCV на весь экран до считывания первого результата, после чего закрывает камеру и генерирует событие с указанным в параметре именем события. Эта возможность для ситуаций, когда что-то нужно быстро считать, а размещать на экране элемент ActiveCV не хочется или нет возможности (экран маленький). В примере ниже я использую чисто для распознавания OCR на новом движке ActiveCV2 для ТСД-варианта. На ТСД не нужен сканер через камеру (свой есть), а вот OCR нужен, но размещать на экране ActiveCV негде (экран маленький). Вот такое решение. Да, можно сделать отдельный экран, разместить на нем элемент ActiveCV и запускать его. Но мне показалось, что так удобнее.

 

Что еще планируется либо рассматривается по этой теме:

 

  • Распознавание русского алфавита (грядет). Как следствие этого – не только распознавание артикулов, содержащее русские буквы, но и более интересное – распознавание названий на коробках с тем, чтобы скрестить это с нечетким поиском. Вот это будет интересно.
  • Улучшенное распознавание текста с термальной/лазерной и другой не очень хорошо читаемой печати (грядет)
  • Эмбеддинги русского языка – экспериментирую, но пока неясно. А так бы было неплохо говорить «долото» вместо «зубило» (под вопросом)
  • Другие варианты нечеткого полнотекстового поиска (исследуется)
  • Локальная LLM для работы с датасетами – тут все зависит от Google и его политики. Но планы есть. Это, конечно, все поменяет – тут не только поиск, но и отборы по товарам по промптам (под вопросом, но очень хочется)
  • Подключение своих обученных моделей для классификации изображений. Если классов (товаров, которые надо распознавать по виду) не очень много – то тоже норм вариант. Но, например, «песок карьерный» от «песок речной» вряд ли она отличит (будет)
  • Уже давно есть, но на ActiveCV-1, сейчас ActiveCV-2, туда еще не перетащил – one-shot распознавание 2-D объектов по фичам. Писал тут: https://telegra.ph/OpenCV-v-relize-SimpleUI-1150-04-20

 

Суперпоиски

 


Тестировалось на 1С:Предприятие 8.3 (8.3.16.1148) на конфигурации 1С:Комплексная автоматизация 2 (2.4.8.63)


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

Со стороны 1С нужно опубликовать сервис OData и дать доступы на:

  • Справочник Номенклатура
  • Справочник УпаковкиЕдиницыИзмреения
  • Регистр сведений ШтрихкодыНоменклатуры

 

В настройках вводятся данные подключения к OData 1С. 

При загрузке данные справочников и регистра «склеиваются» в один датасет. Берутся товары только без характеристик. Для упрощения примера.

Он отображается в виде списка с нечетким поиском.

В обоих вариантах поддерживается голосовой ввод количества, см. видео.

 

 

Конфигурация «для телефонов»

Окно распознавания штрихкодов/артикулов вписано в экран. Режим штрихкоды/артикулы переключается кнопками.

Подсветка объектов в ActiveCV переключается: если объект не найден – белая, если найден, но пока не в корзине – светло-зелёная, найден и в корзине – тёмно-зелёная.

Поиск может быть в тулбаре. Это нечеткий поиск. И также ввод поискового запроса голосом. Тоже нечеткий поиск.

 

Конфигурация для ТСД 


Для ТСД отличия в том, что нет окошка ActiveCV. OCR запускается отдельной кнопкой в отдельном окне. Штрихкоды считываются встроенным сканером. Остальное – аналогично.

Я решил в статьях также писать используемые технологии в примерах. Вот список технологий в этой статье:

  • работа с датасетами и обновленный синтаксис списков
  • работа с обновленным хранением ключ/значение (запись настроек непосредственно, без кнопки)
  • новая работа с диалогом
  • нечеткий поиск
  • новая работа с распознаванием речи
  • ActiveCV-2 и OCR на датасетах, запуск ActiveCV в новом окне с возвратом

 

 

Для работы примеров понадобится версия 14.35.55, ее можно скачать на моем сайте https://simpleui.ru/

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

SimpleUI Android ТСД поиск товара

См. также

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

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

3000 руб.

03.12.2018    61824    210    103    

179

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

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

13200 руб.

27.12.2021    41184    117    167    

211

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 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    101761    622    190    

333

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

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

21000 руб.

28.04.2023    10807    17    3    

10

Мобильная разработка Программист Платформа 1С v8.3 Абонемент ($m)

В Simple появился еще один онлайн-режим, не через REST-API, а через веб-сокеты. Показываю, что это дает, ради чего было сделано. А также два чисто онлайновых примера с такими обработчиками еще и с использованием новой ActiveCV 2.0. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

07.02.2025    3447    informa1555    3    

28

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

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

1 стартмани

23.08.2024    1780    6    informa1555    1    

13

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

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

1 стартмани

25.06.2024    3322    29    informa1555    0    

34
Оставьте свое сообщение