В данной статье описано использование скриптов на блокировку печати.
Задача
Предположим, есть 3 терминала, на первом и втором установлен ФР, а на третьем обычный термо-принтер. Для первого и второго необходимо настроить фискальный режим, а для третьего нефискальный. В этом нам помогут триггеры из папки С:\AVERS\TRIGGERS nocspool_st.sql — блокирует печать нефискальных чеков на указанных станциях, norspool_st.sql — блокирует печать нефискальных отчётов на указанных станциях, nofspool_st.sql — блокирует печать фискальных чеков и отчётов на указанных станциях.
Исполнение
Пункт 1. Подготовка и выполнение скриптов.
Определим ID станций. В C:\AVERS\front.cfg StationID = 1 (ФР), StationID = 2 (ФР), StationID = 3 (принтер).
Исходя из этих параметров редактируем скрипты.
Для StationID = 1 (ФР) и StationID = 2 (ФР).
nocspool_st.sql
DROP TRIGGER NoCSpoolIns
;
CREATE TRIGGER NoCSpoolIns
AFTER INSERT ON CheckPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Operation IN (1,8,9,10) AND n.StationID IN (1,2))
DELETE FROM CheckPrint WHERE CheckPrintID=n.CheckPrintID
;
DROP TRIGGER NoCSpoolUpd
;
CREATE TRIGGER NoCSpoolUpd
AFTER UPDATE ON CheckPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Operation IN (1,8,9,10) AND n.StationID IN (1,2))
DELETE FROM CheckPrint WHERE CheckPrintID=n.CheckPrintID
;
norspool_st.sql
DROP TRIGGER NoRSpoolIns
;
CREATE TRIGGER NoRSpoolIns
AFTER INSERT ON ReportPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN ((n.ReportID=24 OR n.ReportID=100) AND n.StationID IN (1,2))
DELETE FROM ReportPrint WHERE ReportPrintID=n.ReportPrintID
;
DROP TRIGGER NoRSpoolUpd
;
CREATE TRIGGER NoRSpoolUpd
AFTER UPDATE ON ReportPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN ((n.ReportID=24 OR n.ReportID=100) AND n.StationID IN (1,2))
DELETE FROM ReportPrint WHERE ReportPrintID=n.ReportPrintID
;
nocspool_st.sql
norspool_st.sql
Для StationID = 3 (принтер).
nofspool_st.sql
DROP TRIGGER Rep25
;
CREATE TRIGGER Rep25
NO CASCADE BEFORE INSERT ON ReportPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ReportID=25 AND n.StationID IN (3))
SET n.ReportID=100
;
DROP TRIGGER Rep26
;
CREATE TRIGGER Rep26
AFTER INSERT ON ReportPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ReportID=26 AND n.StationID IN (3))
DELETE FROM ReportPrint WHERE ReportPrintID=n.ReportPrintID
;
DROP TRIGGER Rep201
;
CREATE TRIGGER Rep201
AFTER INSERT ON ReportPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.ReportID=201 AND n.StationID IN (3))
DELETE FROM ReportPrint WHERE ReportPrintID=n.ReportPrintID
;
DROP TRIGGER Ch5
;
CREATE TRIGGER Ch5
NO CASCADE BEFORE INSERT ON CheckPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Operation=5 AND n.StationID IN (3))
SET n.Operation=10
;
DROP TRIGGER Ch7
;
CREATE TRIGGER Ch7
NO CASCADE BEFORE INSERT ON CheckPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Operation=7 AND n.StationID IN (3))
SET n.Operation=8
;
DROP TRIGGER Ch3
;
CREATE TRIGGER Ch3
NO CASCADE BEFORE INSERT ON CheckPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Operation=3 AND n.StationID IN (3))
SET n.Operation=9
;
DROP TRIGGER Ch246
;
CREATE TRIGGER Ch246
AFTER INSERT ON CheckPrint
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.Operation IN (2,4,6) AND n.StationID IN (3))
DELETE FROM CheckPrint WHERE CheckPrintID=n.CheckPrintID
;
nofspool_st.sql(Не полный, часть для примера)
После того как скрипты отредактированы выполняем их поочерёдно в любой последовательности.
Выполнение скрипта
Пункт 2. Настройка ID станций.
Чтобы скрипты корректно отрабатывали задания необходимо правильно указать ID станции для спулеров на каждой физической станции. Сделать это необходимо в C:\AVERS\SPOOL\spooler.cfg на каждой из станций в зависимости от того где запускаются спулера.
Например на терминале StationId = 1 (ФР) у нас будет работать только фискальный спулер, соответственно изменяем раздел MODE только для него. Остальные значения не имеют, т.к. не будут запускаться.