Рубрики
Настройки системы

Подключение дисплея покупателя

В данной статье рассмотрим подключение дисплея покупателя.

В данной статье рассмотрим подключение дисплея покупателя.

В эксперте возможно настроить три варианта дисплея покупателя:

  • Дисплей вакуумный флуоресцентный (VFD
  • GraphicCustomerDisplay (второй LCD монитор) (далее GCD)
  • Avers.ClientMonitor (второй LCD монитор) (далее AVC)

Пункт 1.
Подключение VFD к системе Эксперт.

VFD — это дисплеи с двумя строчками вывода текста.

Умеет выводить только текст.

VFD

Для работы с подобными дисплеями необходимо:

  1. Физически подключить дисплей к COM-порту или по USB и установить драйвер от дисплея (появится виртуальный COM-порт).
  2. Настроить переключатели на режим работы ESC/POS. Обычно он называется режим EPSON или Noritake. Переключатели настраиваются по инструкции от дисплея.
  3. Отредактировать и затем выполнить скрипт C:\AVERS\display_color\displ_posiflex_BIRCH.sql
displ_posiflex_BIRCH.sql

DROP TRIGGER DISPBIGTotal
;
DROP TRIGGER DISPBIGTotal2
;
DROP TRIGGER DISPBIGTotalBill
;
DROP TRIGGER DisPSXItem
;
DROP TRIGGER DisPSXTotal
;
DROP TRIGGER DisPSXPayment
;
DROP TRIGGER DisPSXCheck
;
DROP TRIGGER DISPSXITEMFRAC
;
DROP TRIGGER DISPLAYITEMDEL
;
DROP TRIGGER DISPLAYITEM
;
DROP TRIGGER DISPLAYITEMFRAC
;
DROP TRIGGER DISPLAYPAYMENT
;
DROP TRIGGER DISPLAYCLIENT
;
DROP TRIGGER DISPLAYCHECK
;
DROP TRIGGER DISPLAYITEMBR
;
DROP TRIGGER DISPLAYPAYMENTBR
;
DROP TRIGGER DISPLAYCLIENTBR
;
DROP TRIGGER DISPLAYITEMFRACBR
;
DROP TRIGGER DISPLAYCHECKBR
;

DROP TRIGGER DISPLAYITEM;

CREATE TRIGGER DisplayItem
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=4)
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0, ‘ ’ CONCAT LTRIM(RTRIM(MAX(i.ShortName))
CONCAT REPEAT(‘ ‘,40-LENGTH(MAX(i.ShortName))-LENGTH( STRIP(RTRIM(» CONCAT CHAR(MAX(p.Price))),L,’0’)))
CONCAT » CONCAT STRIP(RTRIM(CHAR(MAX(p.Price))),L,’0′) ),n.stationid+180000
FROM Item i, Price p, Bill b
—WHERE i.Name=n.Text AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND b.BillNumber=n.BillNumber
WHERE i.Code=ltrim(rtrim(substr(n.Text,2,locate(‘)’,n.Text)-2))) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND b.BillNumber=n.BillNumber
;

— 2016-09-26-11.09.52

DROP TRIGGER DISPLAYPAYMENT;

CREATE TRIGGER DisplayPayment
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=14)
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0,’ ’ CONCAT
CASE WHEN LOCATE(n.Text,’|’)=0
THEN RTRIM(SUBSTR(n.Text,1,LOCATE(‘:’,n.Text))
CONCAT SUBSTR(n.Text,LOCATE(‘:’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘:’,n.Text)))
ELSE
RTRIM(SUBSTR(n.Text,1,LOCATE(‘|’,n.Text)-1)
CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text)))
END
,n.stationid+180000
FROM Log
WHERE LogID=n.LogID
;

— 2016-09-26-11.09.52

DROP TRIGGER DISPLAYCLIENT;

CREATE TRIGGER DisplayClient
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID in (105))
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0, ‘ ’ CONCAT LTRIM(
CASE WHEN n.ActionID=105 THEN
» CONCAT SUBSTR((SELECT LTRIM(Name) FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)),1,20)
CONCAT ‘Доступно:’ CONCAT
CASE WHEN (SELECT ag.DayWithDraw FROM Client Cl, Account a, AccountGroup ag
WHERE Cl.Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND Cl.AccountID=a.AccountID AND a.AccountGroupID=ag.AccountGroupID) IS NULL
THEN rtrim(STRIP(cast(VALUE(
(SELECT a.Total FROM Account a WHERE a.AccountID=(SELECT AccountID FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)))
,0) as char(35)),L,’0′))
ELSE rtrim(STRIP(cast(VALUE(
CASE WHEN (SELECT a.Total FROM Account a WHERE a.AccountID=(SELECT AccountID FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)))< (( SELECT VALUE(ag.DayWithDraw,0) FROM Client Cl, Account a, AccountGroup ag WHERE Cl.Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND Cl.AccountID=a.AccountID AND a.AccountGroupID=ag.AccountGroupID) - (SELECT VALUE(sum(total),0) FROM TRANSACTION WHERE Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND SUBSTR(TIME,1,10) = SUBSTR(CHAR(CURRENT DATE,JIS),1,10) AND Total>0 ))
THEN (SELECT a.Total FROM Account a WHERE a.AccountID=(SELECT AccountID FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)))
ELSE (( SELECT VALUE(ag.DayWithDraw,0) FROM Client Cl, Account a, AccountGroup ag
WHERE Cl.Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND Cl.AccountID=a.AccountID AND a.AccountGroupID=ag.AccountGroupID)

(SELECT VALUE(sum(total),0) FROM TRANSACTION
WHERE Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)
AND SUBSTR(TIME,1,10) = SUBSTR(CHAR(CURRENT DATE,JIS),1,10)
AND Total>0 )) END
,0) as char(35)),L,’0′)) END
ELSE » END ),n.stationid+180000
FROM Bill b
WHERE b.BillNumber=n.BillNumber
;

— 2016-09-26-11.18.49

DROP TRIGGER DISPLAYITEMFRAC;

CREATE TRIGGER DisplayItemFrac
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=86)
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0, ‘ ’ CONCAT
CASE WHEN LOCATE(‘|’,n.Text)=0
THEN
LTRIM(RTRIM(MAX(i.ShortName))
CONCAT REPEAT(‘ ‘,20-LENGTH(MAX(i.ShortName)))
CONCAT ‘К-ВО:’ CONCAT SUBSTR(n.Text,LENGTH(n.Text)-4,5)
CONCAT REPEAT(‘ ‘,20-LENGTH(RTRIM(» CONCAT CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3)) AS NUMERIC(13,2)))))
-LENGTH(‘К-ВО:’ CONCAT SUBSTR(n.Text,LENGTH(n.Text)-4,5)))
CONCAT » CONCAT RTRIM(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2)))) )
ELSE
LTRIM(RTRIM(MAX(i.ShortName))
CONCAT REPEAT(‘ ‘,20-LENGTH(MAX(i.ShortName)))
CONCAT ‘К-ВО:’ CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text))
CONCAT REPEAT(‘ ‘,20-LENGTH(RTRIM(» CONCAT STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3)) AS NUMERIC(13,2))),L,’0’) ))
-LENGTH(‘К-ВО:’ CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text))))
CONCAT » CONCAT RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2))),L,’0′) ) )
END
,n.stationid+180000
FROM Item i, Price p, Bill b
—WHERE i.Name=SUBSTR(n.Text,1,LOCATE(‘|’,n.Text)-1) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND b.BillNumber=n.BillNumber
— AND n.text<>‘Ошибка чтения количества’
WHERE i.Code=ltrim(rtrim(substr(n.Text,2,locate(‘)’,n.Text)-2))) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND b.BillNumber=n.BillNumber
AND n.text<>‘Ошибка чтения количества’

;

— 2016-09-26-11.20.08

DROP TRIGGER DISPLAYCHECK;

CREATE TRIGGER DisplayCheck
AFTER INSERT ON Check
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
VALUES(0,’ ’CONCAT ‘ ПРИЯТНОГО АППЕТИТА! ЖДЕМ ВАС СНОВА ‘,n.ClosedAtStationID+180000)
;

DROP TRIGGER DISPBIGITEMFRAC;

CREATE TRIGGER DISPBIGItemFrac
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=86)
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0, ‘ ‘ CONCAT
CASE WHEN LOCATE(‘|’,n.Text)=0
THEN
LTRIM(RTRIM(MAX(i.ShortName))
CONCAT REPEAT(‘ ‘,20-LENGTH(MAX(i.ShortName)))
CONCAT ‘К-ВО:’ CONCAT SUBSTR(n.Text,LENGTH(n.Text)-4,5)
CONCAT REPEAT(‘ ‘,20-LENGTH(RTRIM(» CONCAT CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3)) AS NUMERIC(13,2)))))
-LENGTH(‘К-ВО:’ CONCAT SUBSTR(n.Text,LENGTH(n.Text)-4,5)))
CONCAT » CONCAT RTRIM(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2)))) )
ELSE
LTRIM(RTRIM(MAX(i.ShortName))
CONCAT REPEAT(‘ ‘,20-LENGTH(MAX(i.ShortName)))
CONCAT ‘К-ВО:’ CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text))
CONCAT REPEAT(‘ ‘,20-LENGTH(RTRIM(» CONCAT STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3)) AS NUMERIC(13,2))),L,’0’) ))
-LENGTH(‘К-ВО:’ CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text))))
CONCAT » CONCAT RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2))),L,’0′) ) )
END
,n.StationID+18000
FROM Item i, Price p, Bill b
—WHERE i.Name=SUBSTR(n.Text,1,LOCATE(‘|’,n.Text)-1) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND b.BillNumber=n.BillNumber
— AND n.text<>‘Ошибка чтения количества’
WHERE i.Code=ltrim(rtrim(substr(n.Text,2,locate(‘)’,n.Text)-2))) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND b.BillNumber=n.BillNumber
AND n.text<>‘Ошибка чтения количества’

;

В самом скрипте необходимо изменить 2 вещи. Для этого используйте меню замены в текстовом редакторе (Блокнот — CTRL+H, FAR — CTRL+F7).

Знак в одинарных кавычках задаёт кодировку выводимого текста. В режиме ESC/POS нам необходима codepage 866 или Cyrilic #2 866. Сам символ прописываем в файле, согласно таблице в инструкции от дисплея. Символ вводится комбинацией клавиш ALT+’цифры на NUM-клавиатуре’. Если перекодировка не требуется, то символ можно заменить на пустышку, оставив только одинарные кавычки.

Число с плюсом используется для того чтобы отделить ID заданий для дисплея от ID заданий нефискальной печати на ФР, например.

Если у вас ID станции 12, нефискальная печать тоже 12, то дисплей необходимо сделать отличным от этих значений. К примеру, прибавив 100 к ID станции. Получим ID заданий от дисплея 112. В скрипте заменяем +18000 на +100.

Выполняем скрипт.

4. Настраиваем раздел [OUT] в C:\AVERS\SPOOL\spooler.cfg
[OUT]
Mode=112 — указываем модифицированное ID станции.
Port=COM5 — номер COM-порта
BaudRate=9600 — скорость COM-порта
ComMode=8N2 — дополнительные параметры COM-порта: биты данных, чётность, стоповые биты.
ActionLog=Yes — YES или NO, вкл или выкл ведение лога работы спулера.
Trace=Yes — YES или NO, вкл или выкл подробное

5. Убираем rem в C:\AVERS\spoolers.bat перед ospool.exe.

6. В планировщик импортируем задание на перезапуск ospool.exe C:\AVERS\SPOOL\ospool_reboot.xml

Пункт 2.
Настройка GraphicCustomerDisplay.

GraphicCustomerDisplay — это наша программа для вывода информации о счёте покупателю на второй LCD монитор.

Умеет показывать видео и картинку. Текстовая составляющая выглядит посредственно.

Моноблок со вторым LCD дисплеем
  1. Физически подключить дисплей терминалу и подать на него питание.
  2. Установить драйвер на видеокарту в Windows.
  3. Установить Microsoft Visual C++ не ниже версии 2015 года. Прямая ссылка на скачивание с официально сайта Microsoft vc_redist.x86.exe
  4. В свойствах экранов в Windows установить параметр «Расширить эти экраны».
    Жмём правой кнопкой мыши по рабочему столу —> Параметры экрана — > раздел «Несколько дисплеев».
  5. Выполняем скрипт C:\AVERS\display_color\displNEWBIG.sql, предварительно изменив в тексте скрипта только модификатор для ID станции.
  6. Настраиваем gcd.cfg. Настроек в нём довольно много, все они имеют описание в самом файле. Для стартовой настройки нас интересует три:
    StationID= — модифицированный ID станции
    MainImage= — путь к файлу изображения для дисплея.
    MainVideo= — путь к файлу видео для дисплея.
  7. Убираем rem в C:\AVERS\script.bat перед
    cd c:\AVERS\display_color\
    del dbreq.log
    start GraphicCustomerDisplay.exe
  8. В планировщик импортируем задание на перезапуск ospool.exe C:\AVERS\SPOOL\display_color\gcd_reboot.xml
displNEWBIG.sql

DROP TRIGGER DISPBIGTotal
;
DROP TRIGGER DISPBIGTotal2
;
DROP TRIGGER DISPBIGTotalBill
;
DROP TRIGGER DisPSXItem
;
DROP TRIGGER DisPSXTotal
;
DROP TRIGGER DisPSXPayment
;
DROP TRIGGER DisPSXCheck
;
DROP TRIGGER DISPSXITEMFRAC
;
DROP TRIGGER DISPLAYITEMDEL
;
DROP TRIGGER DISPLAYITEM
;
DROP TRIGGER DISPLAYITEMFRAC
;
DROP TRIGGER DISPLAYPAYMENT
;
DROP TRIGGER DISPLAYCLIENT
;
DROP TRIGGER DISPLAYCHECK
;
DROP TRIGGER DISPLAYITEMBR
;
DROP TRIGGER DISPLAYPAYMENTBR
;
DROP TRIGGER DISPLAYCLIENTBR
;
DROP TRIGGER DISPLAYITEMFRACBR
;
DROP TRIGGER DISPLAYCHECKBR
;

— для фронта который в лог вставляет товары с кодом. дата фронта после 2018-07-05

DROP TRIGGER DISPBIGItem
;

CREATE TRIGGER DISPBIGItem
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=4 )
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0,
CASE
WHEN LENGTH(MAX(i.Name) CONCAT ‘ ‘ CONCAT STRIP(RTRIM(CHAR(MAX(p.Price))),L,’0’) CONCAT ‘руб’) >54
THEN LTRIM(RTRIM(SUBSTR(MAX(i.Name),1,54-LENGTH(STRIP(RTRIM(CHAR(MAX(p.Price))),L,’0′) CONCAT ‘руб’)-4)) CONCAT ‘…’
CONCAT ‘ ‘ CONCAT STRIP(RTRIM(CHAR(MAX(p.Price))),L,’0’) CONCAT ‘руб’)
ELSE LTRIM(RTRIM(MAX(i.Name))
CONCAT REPEAT(‘ ‘,54-LENGTH(MAX(i.Name))-LENGTH(STRIP(RTRIM(» CONCAT CHAR(MAX(p.Price))),L,’0’) CONCAT ‘руб’))
CONCAT STRIP(RTRIM(CHAR(MAX(p.Price))),L,’0′) CONCAT ‘руб’) END,
n.StationID+2000
FROM Item i, Price p, Bill b
WHERE i.Code=ltrim(rtrim(substr(n.Text,2,locate(‘)’,n.Text)-2))) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND p.measureID not in (5,6) AND b.BillNumber=n.BillNumber
;

DROP TRIGGER DISPBIGItemDel
;

CREATE TRIGGER DISPBIGItemDel
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID in (5,7) )
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0,
CASE
WHEN LENGTH(LTRIM(RTRIM(‘УДАЛЕНИЕ: ‘ CONCAT right(n.text,length(n.text)-locate(‘)’,n.text)-1) CONCAT ‘шт’))) >54
THEN
LTRIM(RTRIM(‘УДАЛЕНИЕ: ‘ CONCAT SUBSTR(right(n.text,length(n.text)-locate(‘)’,n.text)-1),1,LENGTH(right(n.text,length(n.text)-locate(‘)’,n.text)-1))-21) CONCAT’…’ CONCAT SUBSTR(right(n.text,length(n.text)-locate(‘)’,n.text)-1),LENGTH(right(n.text,length(n.text)-locate(‘)’,n.text)-1))-5,6) CONCAT ‘шт’))
ELSE LTRIM(RTRIM(‘УДАЛЕНИЕ: ‘ CONCAT right(n.text,length(n.text)-locate(‘)’,n.text)-1) CONCAT ‘шт’)) END,
n.StationID+2000
FROM Log WHERE LogID=n.LogID
;

DROP TRIGGER DISPBIGItemFrac
;

CREATE TRIGGER DISPBIGItemFrac
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=86 )
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0, » CONCAT
CASE WHEN LOCATE(‘|’,n.Text)=0
THEN
LTRIM(RTRIM(MAX(i.Name))
CONCAT REPEAT(‘ ‘,40-LENGTH(MAX(i.Name)))
CONCAT ‘К-ВО:’ CONCAT SUBSTR(n.Text,LENGTH(n.Text)-4,5)
CONCAT REPEAT(‘ ‘,20-LENGTH(RTRIM(» CONCAT CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3)) AS NUMERIC(13,2)))))
-LENGTH(‘К-ВО:’ CONCAT SUBSTR(n.Text,LENGTH(n.Text)-4,5)))
CONCAT » CONCAT RTRIM(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2)))) )
ELSE

CASE
WHEN LENGTH( LTRIM(RTRIM(MAX(i.Name) CONCAT ‘К-ВО:’
CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text)) CONCAT ‘ ‘
CONCAT RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2))),L,’0′)) CONCAT ‘руб’ )))>54
THEN LTRIM(RTRIM(
SUBSTR(MAX(i.Name),1,54-LENGTH(‘ ‘ CONCAT ‘К-ВО:’
CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text)) CONCAT ‘ ‘
CONCAT RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2))),L,’0′)) CONCAT ‘руб’)-3)
CONCAT ‘…’ CONCAT ‘ ‘ CONCAT ‘К-ВО:’
CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text)) CONCAT ‘ ‘
CONCAT RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2))),L,’0′)) CONCAT ‘руб’ ))
ELSE LTRIM(RTRIM(MAX(i.Name) CONCAT ‘ ‘ CONCAT ‘К-ВО:’
CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text))
CONCAT REPEAT(‘ ‘,54-LENGTH(MAX(i.Name) CONCAT ‘ ‘ CONCAT ‘К-ВО:’) — LENGTH(SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text)))
-LENGTH(RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3)) AS NUMERIC(13,2))),L,’0′)) CONCAT ‘руб’))
CONCAT RTRIM(STRIP(CHAR(CAST(MAX(p.Price)*CAST(SUBSTR(n.Text,LENGTH(n.Text)-4,5) AS NUMERIC(13,3))AS NUMERIC(13,2))),L,’0′)) CONCAT ‘руб’ ))
END
END
,n.StationID+2000
FROM Item i, Price p, Bill b
WHERE i.Code=ltrim(rtrim(substr(n.Text,2,locate(‘)’,n.Text)-2))) AND i.ItemID=p.ItemID AND p.PricelistID=b.PricelistID AND p.measureID not in (5,6) AND b.BillNumber=n.BillNumber
AND n.text<>‘Ошибка чтения количества’
;

DROP TRIGGER DISPBIGPayment
;

CREATE TRIGGER DISPBIGPayment
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID=14)
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0,» CONCAT
CASE WHEN LOCATE(n.Text,’|’)=0
THEN RTRIM(SUBSTR(n.Text,1,LOCATE(‘:’,n.Text))
CONCAT SUBSTR(n.Text,LOCATE(‘:’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘:’,n.Text)))
ELSE
RTRIM(SUBSTR(n.Text,1,LOCATE(‘|’,n.Text)-1)
CONCAT SUBSTR(n.Text,LOCATE(‘|’,n.Text)+1,LENGTH(n.Text)-LOCATE(‘|’,n.Text)))
END
,n.StationID+2000
FROM Log
WHERE LogID=n.LogID
;

DROP TRIGGER DISPBIGClient
;

CREATE TRIGGER DISPBIGClient
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID in (40,41,105))
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
SELECT 0, » CONCAT LTRIM(
CASE WHEN n.ActionID in (40,41,105) THEN
» CONCAT SUBSTR((SELECT LTRIM(Name) FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)),1,20)
CONCAT ‘Доступно:’ CONCAT
CASE WHEN (SELECT ag.DayWithDraw FROM Client Cl, Account a, AccountGroup ag
WHERE Cl.Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND Cl.AccountID=a.AccountID AND a.AccountGroupID=ag.AccountGroupID) IS NULL
THEN rtrim(STRIP(cast(VALUE(
(SELECT a.Total FROM Account a WHERE a.AccountID=(SELECT AccountID FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)))
,0) as char(35)),L,’0′))
ELSE rtrim(STRIP(cast(VALUE(
CASE WHEN (SELECT a.Total FROM Account a WHERE a.AccountID=(SELECT AccountID FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)))< (( SELECT VALUE(ag.DayWithDraw,0) FROM Client Cl, Account a, AccountGroup ag WHERE Cl.Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND Cl.AccountID=a.AccountID AND a.AccountGroupID=ag.AccountGroupID) - (SELECT VALUE(sum(total),0) FROM TRANSACTION WHERE Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND SUBSTR(TIME,1,10) = SUBSTR(CHAR(CURRENT DATE,JIS),1,10) AND Total>0 ))
THEN (SELECT a.Total FROM Account a WHERE a.AccountID=(SELECT AccountID FROM Client WHERE ClientID=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)))
ELSE (( SELECT VALUE(ag.DayWithDraw,0) FROM Client Cl, Account a, AccountGroup ag
WHERE Cl.Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber) AND Cl.AccountID=a.AccountID AND a.AccountGroupID=ag.AccountGroupID)

(SELECT VALUE(sum(total),0) FROM TRANSACTION
WHERE Clientid=(SELECT ClientID FROM BILL WHERE BillNumber=n.BillNumber)
AND SUBSTR(TIME,1,10) = SUBSTR(CHAR(CURRENT DATE,JIS),1,10)
AND Total>0 )) END
,0) as char(35)),L,’0′)) END
ELSE » END ),n.StationID+2000
FROM Bill b
WHERE b.BillNumber=n.BillNumber
;

DROP TRIGGER DISPBIGCheck
;

CREATE TRIGGER DISPBIGCheck
AFTER INSERT ON Check
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
INSERT INTO OutPrint (OutPrintID,Text,DeviceID)
VALUES(0,»CONCAT ‘ ПРИЯТНОГО АППЕТИТА! ЖДЕМ ВАС СНОВА ‘,n.ClosedAtStationID+2000)
;

—DROP TRIGGER DISPBIGCheck
—;

DROP TRIGGER DISPBIGTOTAL;

CREATE TRIGGER DISPBIGTotal
AFTER INSERT ON Log
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ActionID in (300) )
INSERT INTO OutPrint (OutPrintID,Text,DeviceID,Status)
SELECT 0,
CASE
WHEN (SELECT SubTotal FROM Bill WHERE BillNumber=n.BillNumber)=(SELECT Total FROM Bill WHERE BillNumber=n.BillNumber)
THEN LTRIM(RTRIM(‘ИТОГО:’ CONCAT SUBSTR(n.Text,23,LENGTH(n.Text)-23) ))
ELSE LTRIM(RTRIM(‘ИТОГО:’ CONCAT SUBSTR(n.Text,23,LENGTH(n.Text)-23) ))
CONCAT ‘ (СКИДКА ‘
CONCAT RTRIM(STRIP(CHAR(CAST(
(SELECT SubTotal-Total FROM Bill WHERE BillNumber=n.BillNumber)
AS NUMERIC(13,2))),L,’0′)) CONCAT ‘руб’ CONCAT ‘)’ END,
n.StationID+2000,1
FROM Log WHERE LogID=n.LogID
;

gcd.cfg
[Base Settings] DBProvider=IBMDADB2
DBName=POS
DBLogin=userid
DBPassword=PASSWORD
StationID=2001
#Номер экрана в системе, на котором будет отображаться программа
ScreenNumber=1
#Содержание строки в чеке, по которой понятно, что обслуживание клиента завершено
EndStringKey=Приятного аппетита
#Количество дополнительных полей
NumOfAddFields=3

[Media] BackgroundColor=Black
MainImage=C:\avers\display_color\MainKassa.jpg
ImageX=0
ImageY=0
ImageHeight=
ImageWidth=
MainVideo=C:\avers\display_color\MainKassa.jpg
VideoX=0
VideoY=0
VideoHeight=
VideoWidth=

[Print] #Фон поля с чеком
BackgroundColor=LightBlue
#Включает выделение цветом поля вывода чека, для настройки его расположения, при DebugMode = Y
DebugMode=N
#Периодичность обновления данных из БД (не рекомендую делать меньше 500), мс
UpdateInterval=1000
#Видимость окна с чеком после завершения обслуживания, мс
ReceiptViewTime=5000
#Высота области с чеком
Height=840
#Ширина области с чеком
Width=1020
#Прозрачность области с чеком, %
Opacity=80
#Радиус закругления углов области с чеком, пикселей
Radius=24
#Отступ текста чека от верхней границы области чека, пикселей
TextBorderUp=90
TextBorderDown=2
TextBorderLeft=2
TextBorderRight=2
#Имя шрифта установленного в системе
FontName=PT Mono
#Цвет шрифта
FontColor=Black
#Размер шрифта, пикселей
FontSize=20
#Жирность шрифта. Y — полужирный, N — обычный
FontBold=N

[Additional Field 1] #Размещение дополнительного поля. Receipt — область чека, Main — подложка
ParentScreen=Receipt
#Возможность изменения значения поля в процессе работы. Y — неизменное поле, N — динамическое поле
StaticField=N
#Отступ от родительской области, пикселей
ScreenX=20
ScreenY=30
FontName=Sans Serif
FontColor=Blue
FontSize=22
FontBold=Y
#Стартовое значение поля
StartValue=

[Additional Field 2] ParentScreen=Receipt
StaticField=Y
ScreenX=5
ScreenY=70
FontName=Sans Serif
FontColor=Red
FontSize=10
FontBold=N
StartValue=

[Additional Field 3] ParentScreen=Main
StaticField=Y
ScreenX=20
ScreenY=20
FontName=Comic Sans MS
FontColor=Blue
FontSize=20
FontBold=Y
StartValue=

Пункт 3.
Настройка Avers.ClientMonitor.exe.

Avers.ClientMonitor — это наша программа для вывода информации о счёте покупателю на второй LCD монитор.

Умеет показывать слайд шоу. Хорошо отображает текст. Прост в настройке.

  1. Выполняем действия 1,2,3 и 4 из предыдущего пункта.
  2. Настраиваем C:\AVERS\AVC\Avers.ClientMonitor.config.
    Настроек в нём довольно много, все они имеют описание в самом файле. Для стартовой настройки нас интересует всего одна:
    setting>name=»HostAddress» serializeAs=»String
    value>localhost</value
    setting</setting

    Вместо localhost нужно указать Имя или IP-адрес самого дисплея, такое же значение необходимо указать во front.cfg.
  3. Настраиваем C:\AVERS\front.cfg.
    В раздел [Station] добавляем строку
    ClientMonitorAddress=localhost

    Вместо localhost нужно указать Имя или IP-адрес ПК, на котором запущен AVC, с которым соединяется Front для отображения данных.
  4. Убираем rem в C:\AVERS\script.bat перед
    cd c:\avers\avc
    start Avers.ClientMonitor.exe
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Исходная конфигурация. Не трогать.-->
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Avers.ClientMonitor.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <Avers.ClientMonitor.Properties.Settings>
<!-- Отображает текст на экране, если SlideFullScreen=false, либо когда отключено слайдшоу SlideFill=false -->
            <setting name="WelcomeText" serializeAs="String">
                <value>ДОБРО ПОЖАЛОВАТЬ!</value>
            </setting>
<!-- Имя или IP-адрес самого дисплея, такое же значение необходимо указать во front.cfg-->
            <setting name="HostAddress" serializeAs="String">
                <value>localhost</value>
            </setting>
<!-- Включение/отключение отображения ошибок: вкл - true; выкл - false -->
            <setting name="UseFailureWindow" serializeAs="String">
                <value>False</value>
            </setting>
<!-- Включение/отключение отображения кода клиента: вкл - true; выкл - false -->
            <setting name="ClientCodeShow" serializeAs="String">
                <value>True</value>
            </setting>
<!-- Время отображения одного слайда в милесекундах. 1000 = 1 секунде -->
			<setting name="SlideTimeOut" serializeAs="String">
                <value>6000</value>
            </setting>
<!-- Слайдшоу из папки IMAGES\SLIDES: включено - SlideFill=true; выключено - SlideFill=false -->
            <setting name="SlideFill" serializeAs="String">
                <value>true</value>
            </setting>
<!-- Режим полного экрана или экрана 50/50. Полный true, 50/50 false -->
			<setting name="SlideFullScreen" serializeAs="String">
                <value>true</value>
            </setting>
        </Avers.ClientMonitor.Properties.Settings>
    </userSettings>
</configuration>

Таким образом мы научились подключать 3 варианта дисплеев покупателя к системе Эксперт.

Первичная статья написана Елыковым Д.В. на http://kb.averstech.ru/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *