Весы с печатью этикеток предназначены для взвешивания товаров при фасовке, для расчета стоимости и формирования соответствующего штрихового кода с последующей печатью результатов на самоклеющихся этикетках или на ленте, изготовленной из термочувствительной бумаги. На этикетке, в зависимости от модели весов, может отображаться наименование товара, его вес и цена, а также другая информация. Вес и код товара записываются в штрих-коде. При считывании штрих-кода кассовая программа на основании правил разбора штрих-кода осуществляет поиск товара в базе данных и выполняет регистрацию с указанием количества.
Перед началом работы с весами в них загружается информация о товарах, подлежащих взвешиванию. В зависимости от используемой модели оборудования загрузка товара может быть выполнена:
- при программировании весов непосредственно с клавиатуры,
- при загрузке с ПК по интерфейсам.
Кассовое ПО Artix поддерживает загрузку весов Digi SM-100. При передаче данных для кассы используются текстовые файлы. Загрузку данных обеспечивает сервис artix-scaleloadservice
. Загрузка данных выполняется в несколько шагов:
- проверка наличия файла с данными,
- копирование файла на локальный диск,
- сохранение информации в очередь,
- загрузка данных в память весов.
При отсутствии связи с весами данные помещаются в очередь и гарантированно передаются в устройство после восстановления связи.
Настройка сервиса загрузки данных
Для использования сервиса загрузки данных в весы с печатью этикеток необходимо установить пакет artix45-scaleloadservice
. Настройка сервиса загрузки данных производится в конфигурационном файле /linuxcash/cash/scaleloadservice/scaleload.ini
. Если в настройку сервиса artix-scaleloadservice
были внесены изменения, то для их вступления в силу сервис необходимо перезапустить командой:
initctl restart artix-scaleloadservice
Протокол работы сервиса сохраняется в файл /linuxcash/logs/current/scaleloadservice.log
.
Наименование | Тип данных | Возможные значения | Описание | Примечания |
---|---|---|---|---|
port | целочисленный | целое положительное число | Порт устройства | Порт Digi SM-100 формируется по правилу: последняя тетрада IP адреса плюс 2000. |
host | строковый | IP адрес весов | ||
encoding | строковый |
| Кодировка данных в файле-справочнике | |
timeout | целочисленный | Интервал опроса флагов в секундах | ||
mask | строковый | Маска файлов с данными | Поддерживаются символы * и ? | |
path | строковый | Директория, в которой расположен файл справочник | ||
flagfile | строковый | Полное имя файла-флага | ||
localfile | строковый | Полное имя временного файла | ||
statusfile | строковый | Полное имя файла, который содержит результат загрузки | ||
arcfile | строковый | Полное имя архива загруженных данных | ||
loadWithZeroPrice | логический |
| Признак загрузки товаров с нулевой ценой |
[SCALE] ; кодировка файла-справочника ;encoding = utf-8 encoding = cp1251 ; маска файлов с данными mask = *.dat ; каталог с файлами справочниками path = /linuxcash/net/ ; таймаут опроса флагов timeout = 30 ; файл флаг flagfile = /linuxcash/net/flag.txt ; временный файл localfile = /tmp/ ; файл для сохранения состояния statusfile = /tmp/status.txt ; архив исходного справочника arcfile = /tmp/arc.zip ; хост устройства host = 192.169.10.140 ; порт устройства port = 2140 ; передача товаров с нулевой ценой loadWithZeroPrice = False
Загрузка данных на несколько устройств
В крупных торговых сетях имеется необходимость использования нескольких весов с функцией печати этикеток. ПО Artix позволяет производить загрузку данных одновременно на разные устройства. Настройка подключенного оборудования производится в конфигурационном файле /linuxcash/cash/scaleloadservice/scaleload.ini
. Для каждого устройства создается отдельная секция настроек. Название секции включает в себя префикс SCALE
и идентификатор весов, создаваемый при подключении весов к кассе, например, [SCALE.1]
.
[SCALE.1] ; ... ; файл для сохранения состояния statusfile = /tmp/status.txt ; архив исходного справочника arcfile = /tmp/arc.zip ; хост устройства host = 192.169.10.140 ; порт устройства port = 2140 ... [SCALE.2] ; statusfile = /tmp/status1.txt arcfile = /tmp/arc1.zip host = 192.169.10.141 port = 2141 ...
Печать этикетки на принтере
Образ этикетки с указанием веса товара, добавляемого в чек, генерируется на основании шаблона с сохранением результата в xml
файл. Образ этикетки копируется из файла отчета в файл подключенного принтера и выводится на печать.
Печать этикетки может быть настроена на добавление позиции или закрытие чека. Для этого необходимо в утилите администрирования Yuki:
создать действие "Печать этикетки" с командой
COMMAND_OPERATION
с параметрами:report://print-label?out=file&document=current&append=false&createifempty=false&name=/tmp/label.txt shell:////linuxcash/cash/bin/print-label.sh?document=current#/tmp/label.txt
- на основании действия создать маркос "Печать этикетки";
- назначить макрос на необходимое событие.
В процессе работы может возникнуть необходимость калибровки принтера, для чего используется специальная команда:
#!/bin/bash echo '~JC' > /dev/usblp0
Примеры
Образ этикетки:
<?xml version="1.0" encoding="UTF-8" ?> <!-- Шаблон этикетки для позиции в документе --> <report name="print-label" type="document" cached="false" title="Этикетка для позиции"> <select query="select 1 from dual where $position.measure$ = 166"> <text>^XA</text><br/> <text>^CI28</text><br/> <text>^A@N,20,20,E:SAB00.TTF</text><br/> <br/> <select query="SELECT UPPER('$position.name$') posName"> <extvar name="posName" width="35" split="byword" quoted="false" format="^A@N,40,17^FO%(token.posX[d]),%(token.posY[d])^FD%(token.data[-35.35s])^FS" delimiter="$LF$" startx="1" starty="220" incy="40"/> </select> <select query="SELECT REPLACE('$position.extendetoptions$', '##', '.') opt"> <extvar name="opt" width="50" split="byword" quoted="false" format="^A@N,12,12^FO%(token.posX[d]),%(token.posY[d])^FD%(token.data[s])^FS" delimiter="$LF$" startx="1" starty="360" incy="12"/> </select> <select query="select substr($position.bcode$, 1, 7) pref, substr(cast($position.bquant$ * 1000 + 100000 as char(6)), 2) qty, ($position.bquant$ * $position.price$) priceEnd"> <text>^FO220,670^BY2^BEN,80,Y,N^FD</text><var name="pref"/><var name="qty"/><text>^FS</text><br/> </select> <text>^A@N,20,15^FO20,560,^FDМасса нетто:^FS</text> <br/> <text>^A@N,25,25^FO20,580,^FD$position.bquant$^FS</text> <br/> <text>^A@N,20,15^FO290,570,^FDСтоимость: ^FS</text> <br/> <select query="select $position.sumb$ sumb"> <text>^A@N,25,25^FO290,590,^FD</text><var name="sumb" numberformat=".2"/><text>^FS</text> <br/> </select> <text>^A@N,20,15^FO20,610,^FDЦена за кг. руб.^FS</text> <br/> <text>^A@N,25,25^FO20,630,^FD</text> <var name="position.price" numberformat=".2"/> <text>^FS</text> <br/> <text>^A@N,20,15^FO10,670,^FDPLU: $position.code$^FS</text> <br/> <text>^A@N,20,15^FO10,690,^FDДата: </text> <select query="select cast(adddate('$position.item_datetime$', $document.dateincrement$) as date) workdate"><var name="workdate" dateformat="dd-mm-yy" /> </select> <text>^FS</text> <br/> <text>^A@N,20,15^FO10,710,^FDИзг/упак: </text> <var name="position.item_datetime" dateformat="hh:mi" /> <text>^FS</text> <br/> <text>^A@N,20,15^FO10,730,^FDУпаковщик:^FS</text> <br/> <select query="select coalesce(m.name, $position.scode$) username from dictionaries.mol m where m.code = $position.scode$"> <text>^A@N,20,20^FO10,755,^FD$username$^FS"</text> <br/> </select> <text>^XZ</text><br/> <br/> </select> </report>
Команда печати этикетки:
FILE=$1 if [ -e $FILE ] ; then cat $FILE > /dev/usblp0 fi rm -f $FILE