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

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

  • при программировании весов непосредственно с клавиатуры,
  • при загрузке с ПК по интерфейсам.

Кассовое ПО 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строковый
  • utf-8
  • cp1251
Кодировка данных в файле-справочнике
timeoutцелочисленный
Интервал опроса флагов в секундах
maskстроковый
Маска файлов с даннымиПоддерживаются символы * и ?
pathстроковый
Директория, в которой расположен файл справочник
flagfileстроковый
Полное имя файла-флага
localfileстроковый
Полное имя временного файла
statusfileстроковый
Полное имя файла, который содержит результат загрузки
arcfileстроковый
Полное имя архива загруженных данных
loadWithZeroPriceлогический
  • true
  • false

Признак загрузки товаров с нулевой ценой


Пример настройки
[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
  • No labels