Если не были применены правила разбора, заданные в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/input.ini
, то будут применены правила разбора из файла
/linuxcash/cash/conf/bcode.ini
.
Задание правил разбора штрих-кодов в input.ini
позволяет добиться большой гибкости при обработке последовательностей данных, отличающихся по структуре.
Конфигурирование
Для возможности задания правил разбора штрих-кодов в input.ini
необходимо:
Активировать плагин
input
в конфигурационном файле/linuxcash/cash/conf/ncash.ini.d/input.ini
в секции[plugins]
.Наименование Тип данных Возможные значения Описание Примечания input строковый - on
- off
Активация плагина для разбора вводимых данных
По умолчанию on
Пример настройки[plugins] ; Плагин разбора вводимых данных input = on
Задать правила разбора и преобразований в конфигурационном файле
/linuxcash/cash/conf/ncash.ini.d/input.ini
.Правила разбора представляют собой набор секций вида
[Rule.<порядок>]
или[Rule.<порядок>.<имя захваченного значения>],
где<порядок>
– целое положительное число.Пример;[Rule.1] ; Правило разбора с порядком 1 ... ;[Rule.1.code] ;Правило преобразования захваченного значения code ... ;[Rule.1.weight] ;Правило преобразования захваченного значения weight ... ;[Rule.2] ; Правило разбора с порядком 2 ... ;[Rule.2.barcode] ;Правило преобразования захваченного значения barcode ... ;[Rule.2.weight] ;Правило преобразования захваченного значения weight ...
В каждой секции задается одно правило в формате:
search = <регулярное выражение со значениями для захвата>
В каждой секции вида
[Rule.<порядок>.<имя захваченного значения>]
задаются два правила в формате:search = <регулярное выражение со значениями для захвата> replace = <выражение для подстановки обработанных захваченных значений в исходное регулярное выражение>
Допускается использование следующих имен для захваченных значений:
barcode
– штрих-код товара,code
– код товара,weight
– вес товара,quantity
– количество товара.
Пример настройки;[Rule.1] ; Правило разбора с порядком 1 ;search = "((?<piece>26)|(?<fractional>27))(?<code>[0-9]{10})(?(piece)(?<quantity>[0-9]{5})|(?<weight>[0-9]{5}),[0-9]{5};" ;[Rule.1.code] ;Правило преобразования захваченного значения code ;search = "0*([0-9]{0,10})" ;replace = "\1" ;[Rule.1.weight] ;Правило преобразования захваченного значения weight ;search = "0*([0-9]{0,2})([0-9]{3})" ;replace = "\1.\2"
Имена
piece
иfractional
используются для захвата целых и дробных значений соответственно и могут быть заданы произвольно.Значения для префиксов кодов или штрих-кодов (в примере выше – 26 и 27) могут быть заданы произвольно.
Значения по умолчанию не заданы. Для корректной работы необходимо раскомментировать секции и параметры.
Принцип работы
Поиск подходящего правила разбора происходит по возрастанию порядка. Если введенная последовательность данных удовлетворяет правилу разбора, то будет осуществлен переход к разбору по секциям для захваченных значений. При корректных данных товары с введенными штрих-кодами (кодами) будут добавлены в чек.
Если введенные данные содержат как штрих-код товара так и код, то товар будет добавлен по штрих-коду.
Если введенные данных содержат как вес товара так и количество, то товар будет добавлен со значением веса.
Примеры разбора
Правило разбора в input.ini
:
[Rule.1]
search = "((?<piece>26)|(?<fractional>27))(?<barcode>[0-9]{20})(?(piece)(?<quantity>[0-9]{5})|(?<weight>[0-9]{5})),[0-9]{5};"
[Rule.1.weight]
search = "0*([0-9]{0,2})([0-9]{3})"
replace = "\1.\2"
Разбор:
При вводе 26460708092027100015,00020;27460708092024002315,00025; строка будет разобрана следующим образом:
Реальный штрих-код первого товара = 4607080920271,
Кол-во = 15 шт.
Реальный штрих-код второго товара = 4607080920240,
Вес = 2.315 кг.
В чек будут добавлены товары со штрих-кодами 4607080920271 и 4607080920240.
Последовательность введенных данных может содержать любое ненулевое количество штрих-кодов с неуникальными префиксами, расположенных в произвольном порядке. Например:
- 26460708092027100015,00020;
- 27460708092024002315,00025;26460708092027100015,00020;27460708092024402315,00025;
quantity
или weight
, стоящее до или после запятой в регулярном выражении. Для этого необходимо изменить правило разбора.Правило разбора в input.ini
:
[Rule.1]
search = "((?<piece>301)|(?<fractional>401))(?<code>[0-9]{10})[0-9]{5},(?(piece)(?<quantity>[0-9]{5})|(?<weight>[0-9]{5}));"
[Rule.1.code]
search = "0*([0-9]{0,10})"
replace = "\1"
Разбор:
При вводе 301000001006800010,00020; строка будет разобрана следующим образом:
Реальный код (с отсеченными лидирующими нулями) = 10068,
Кол-во товара = 20 шт.
В чек будет добавлен товар с кодом 10068.
Логирование
Логирование работы плагина ведется в файле /linuxcash/logs/current/terminal.log
.