Если не были применены правила разбора, заданные в конфигурационном файле /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 ... ;[Rule.2.price] ;Правило преобразования захваченного значения price ...
В каждой секции задается одно правило в формате:
search = <регулярное выражение со значениями для захвата>
В каждой секции вида
[Rule.<порядок>.<имя захваченного значения>]
задаются два правила в формате:search = <регулярное выражение со значениями для захвата> replace = <выражение для подстановки обработанных захваченных значений в исходное регулярное выражение>
Допускается использование следующих имен для захваченных значений:
barcode
– штрих-код товара,code
– код товара,weight
– вес товара,price
– цена товара,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.2] ; Правило разбора с порядком 2 ;search = "(?<text>.*prc=)?(?<barcode>[0-9]{13})(?<price>P[0-9]*)?(?<date_price>D[0-9]{6})?(?<old_price>L[0-9]*)?" ;[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" ;[Rule.2.price] ; Правило преобразования захваченного значения price ;search = "^P(.*)([0-9]{2}$)" ;replace = "\1.\2"
Имена
piece
иfractional
используются для захвата целых и дробных значений соответственно и могут быть заданы произвольно.Значения
date_price
иold_price
не используются кассовым ПО.Значения для префиксов кодов или штрих-кодов (в примере выше – 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.
Правило разбора в input.ini
:
[Rule.2]
search = "(?<text>.*prc=)?(?<barcode>[0-9]{13})(?<price>P[0-9]*)?(?<date_price>D[0-9]{6})?(?<old_price>L[0-9]*)?"
[Rule.2.price]
search = "^P(.*)([0-9]{2}$)"
replace = "\1.\2"
Разбор:
При вводе 4600605011560P65500D121212L10000; строка будет разобрана следующим образом:
Реальный штрих-код = 4600605011560,
Текущая цена (P65000) = 655.00,
Дата цены = P121212 (не используется),
Старая цена = P10000 (не используется).
В чек будет добавлен товар с ценой 655.00.
Добавление товара с применением следующего правила
В кассовом ПО Artix реализована возможность применения следующего правила к вводимым данным, если при добавлении в чек товар не был найден. Для этого необходимо включить настройку useNextRuleIfGoodsNotFound
в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/input.ini
в секции [Input]
:
- при значении
true
, если товар не найден по правилу разбора, то используется следующее правило, - при значении
false
следующее правило разбора не применяется.
Наименование | Тип данных | Возможные значения | Описание | Примечания |
---|---|---|---|---|
| логический |
| Применить следующее правило к вводимым данным, если товар не найден | По умолчанию |
[Input] ; Применить следующее правило к вводимым данным, если товар не найден ; По умолчанию false useNextRuleIfGoodsNotFound = true
Правило разбора в input.ini
:
[Rule.1]
search = "(?<barcode>^90[0-9]{11})"
[Rule.2]
search = "(?<prefix>^90)(?<barcode>[0-9]{5})(?<weight>[0-9]{5})[0-9]{1}"
[Rule.2.weight]
search = "0*([0-9]{0,2})([0-9]{3})"
replace = "\1.\2"
В БД товар с штрих-кодом 77777.
Разбор:
При вводе 9077777012000; строка будет разобрана по правилу разбора второго порядка следующим образом:
Реальный штрих-код = 77777,
Вес = 1.2 кг.
В чек будет добавлен товар с штрих-кодом 77777.
Правило разбора в input.ini
:
[Rule.1]
search = "(?<barcode>^90[0-9]{11})"
[Rule.2]
search ="(?<prefix>^90)(?<barcode>[0-9]{5})(?<weight>[0-9]{5})[0-9]{1}"
[Rule.2.weight]
search = "0*([0-9]{0,2})([0-9]{3})"
replace = "\1.\2"
В БД товар с кодом 10169.
Осуществляется поиск штрих-кода. Штрих-код не найден. Происходит поиск по коду.
Разбор:
При вводе 9010169009700; строка будет разобрана по правилу разбора второго порядка следующим образом:
Реальный код = 10169,
Вес = 0.970 кг.
В чек будет добавлен товар с кодом 10169.
Правило разбора в input.ini
:
[Rule.1]
search = "(?<barcode>^90[0-9]{11})"
[Rule.2]
search = "(?<prefix>^90)(?<code>[0-9]{5})(?<weight>[0-9]{5})[0-9]{1}"
[Rule.2.weight]
search = "0*([0-9]{0,2})([0-9]{3})"
replace = "\1.\2"
В БД товар с кодом 66666.
Разбор:
При вводе 9066666009750; строка будет разобрана по правилу разбора второго порядка следующим образом:
Реальный код = 66666,
Вес = 0.975 кг.
В чек будет добавлен товар с кодом 66666.
Если при добавлении товара возникает ошибка, то обработка правил прекращается, на экран выводится диалог с ошибкой.
Логирование
Логирование работы плагина ведется в файле /linuxcash/logs/current/terminal.log
.