/*
29.07.2025
1
Системна актуализация
*/
SET TERM ^ ;
create or alter procedure SP_FORMAT_CURRENCY (
ADATA numeric(15,2),
AUSE_DOUBLE_CURRENCY char(1),
ACURRENCY_SIGN varchar(10),
ASEC_CURRENCY_SIGN varchar(10),
ASEC_CURRENCY_RATE numeric(15,5),
ASEC_CURRENCY_PREFIX varchar(10),
ASEC_CURRENCY_SUFFIX varchar(10),
AUSE_FIRST_CURRENCY char(1),
AUSE_SECOND_CURRENCY char(1))
returns (
ARES varchar(100))
as
begin
ARES = '';
if (:ACURRENCY_SIGN is null) then ACURRENCY_SIGN = '';
if (:ASEC_CURRENCY_SIGN is null) then ASEC_CURRENCY_SIGN = '';
if (:ASEC_CURRENCY_PREFIX is null) then ASEC_CURRENCY_PREFIX = '';
if (:ASEC_CURRENCY_SUFFIX is null) then ASEC_CURRENCY_SUFFIX = '';
if (:AUSE_FIRST_CURRENCY = 'T') then
SELECT :ARES || CAST(:ADATA AS NUMERIC(15, 2)) || ' ' || :ACURRENCY_SIGN FROM RDB$DATABASE INTO :ARES;
if (:AUSE_DOUBLE_CURRENCY = 'T') then
begin
if (:AUSE_SECOND_CURRENCY = 'T') then
begin
if (:AUSE_FIRST_CURRENCY = 'T') then
begin
if (CHAR_LENGTH(:ARES) > 0) then
SELECT :ARES || ' ' FROM RDB$DATABASE INTO :ARES;
SELECT :ARES || :ASEC_CURRENCY_PREFIX FROM RDB$DATABASE INTO :ARES;
end
/*
if (CHAR_LENGTH(:ARES) > 0) then
SELECT :ARES || ' ' FROM RDB$DATABASE INTO :ARES;
*/
SELECT :ARES || CAST(:ADATA / :ASEC_CURRENCY_RATE AS NUMERIC(15, 2)) || ' ' || :ASEC_CURRENCY_SIGN FROM RDB$DATABASE INTO :ARES;
if (:AUSE_FIRST_CURRENCY = 'T') then
begin
/*
if (CHAR_LENGTH(:ARES) > 0) then
SELECT :ARES || ' ' FROM RDB$DATABASE INTO :ARES;
*/
SELECT :ARES || :ASEC_CURRENCY_SUFFIX FROM RDB$DATABASE INTO :ARES;
end
end
end
suspend;
end^
SET TERM ; ^
SET TERM ^ ;
create or alter procedure SP_BC_PRINT_DATA (
ADELIVERY_DATE date)
returns (
ARTICLE_NAME varchar(100),
SALE_PRICE numeric(15,2),
BARCODE1 varchar(20),
BARCODE2 varchar(20),
LABEL_COUNT integer,
NZOK_CODE varchar(10),
REIMBURSEMENT numeric(15,2),
PROMO_SALE_PRICE numeric(15,2),
ARTICLE_ID integer,
PARCEL_NO varchar(20),
EXPIRY_DATE date,
SHELF_NAME varchar(5),
SHELF_ID integer,
DEL_ITEM_ID integer,
DEL_TYPE_ID integer)
as
BEGIN
if (:ADELIVERY_DATE is null) then
ADELIVERY_DATE = CURRENT_DATE;
FOR
SELECT
A.CYR_NAME NAME,
DI.SALE_PRICE PRICE,
A.BARCODE1,
A.BARCODE2,
CAST(CEIL(DI.QUANTITY_LEFT / CAST(M.FACTOR AS FLOAT)) AS INT) CNT,
AN.NZOK_CODE,
AN.REINBURSEMENT,
AP.PROMOTION_SALE_PRICE PROMOTION_PRICE,
A.ID ARTICLE_ID,
P.PARCEL_NO,
P.EXPIRY_DATE,
SH.NAME AS SHELF,
SH.ID,
DI.ID,
D.DEL_TYPE_ID
FROM DELIVERY_ITEM DI
INNER JOIN DELIVERY D ON (D.ID = DI.DELIVERY_ID)
INNER JOIN PARCEL P ON (DI.PARCEL_ID = P.ID) AND (P.IS_BLOCKED = 'F')
INNER JOIN ARTICLE A ON (P.ARTICLE_ID = A.ID)
INNER JOIN MEASURE M ON (A.ID = M.ARTICLE_ID) AND (M.IS_ATOMIC = 'T')
LEFT OUTER JOIN SHELF SH ON (SH.ID = DI.SHELF_ID)
LEFT OUTER JOIN ARTICLE_NZOK AN ON (A.ID = AN.ID)
LEFT OUTER JOIN ARTICLE_PROMOTIONS AP ON (A.ID = AP.ARTICLE_ID)
AND (AP.START_DATE < CURRENT_TIMESTAMP)
AND (AP.END_DATE >= CURRENT_TIMESTAMP)
WHERE (DI.QUANTITY_LEFT > 0)
-- AND (A.PRINT_BARCODE = 'T')
AND (D.DEL_DATE <= :ADELIVERY_DATE)
INTO
:ARTICLE_NAME,
:SALE_PRICE,
:BARCODE1,
:BARCODE2,
:LABEL_COUNT,
:NZOK_CODE,
:REIMBURSEMENT,
:PROMO_SALE_PRICE,
:ARTICLE_ID,
:PARCEL_NO,
:EXPIRY_DATE,
:SHELF_NAME,
:SHELF_ID,
:DEL_ITEM_ID,
:DEL_TYPE_ID
DO
SUSPEND;
END^
SET TERM ; ^
SET TERM ^ ;
create or alter procedure SP_BC_PRINT_DATA_FMT (
ADELIVERY_DATE date)
returns (
BARCODE varchar(20),
LABEL_COUNT integer,
SALE_PRICE varchar(100),
PROMO_SALE_PRICE varchar(100),
REMARK varchar(100),
NZOK_CODE varchar(10),
PATIENT_PRICE varchar(100),
PROMO_PATIENT_PRICE varchar(100),
REIMBURSEMENT varchar(100),
ARTICLE_ID integer,
PARCEL_NO varchar(20),
EXPIRY_DATE date,
SHELF_NAME varchar(5),
BARCODE1 varchar(20),
BARCODE2 varchar(20),
SHELF_ID integer,
DEL_ITEM_ID integer,
DEL_TYPE_ID integer)
as
declare variable ASALE_PRICE numeric(15,2);
declare variable AREIMBURSEMENT numeric(15,2);
declare variable APROMO_SALE_PRICE numeric(15,2);
declare variable AUSE_DOUBLE_CURRENCY char(1);
declare variable ACURRENCY_SIGN varchar(10);
declare variable ASEC_CURRENCY_SIGN varchar(10);
declare variable ASEC_CURRENCY_RATE numeric(15,5);
declare variable ASEC_CURRENCY_PREFIX varchar(10);
declare variable ASEC_CURRENCY_SUFFIX varchar(10);
declare variable APATIENT_PRICE numeric(15,2);
declare variable APATIENT_PROMO_PRICE numeric(15,2);
BEGIN
SELECT SP1.R FROM SP_AEV('UseDoubleCurrencyVisualization', 'F') SP1 INTO :AUSE_DOUBLE_CURRENCY;
SELECT SP1.R FROM SP_AEV('CurrencySign', 'лв.') SP1 INTO :ACURRENCY_SIGN;
SELECT SP1.R FROM SP_AEV('SecondaryCurrencySign', 'EUR') SP1 INTO :ASEC_CURRENCY_SIGN;
SELECT SP1.R FROM SP_AEV('SecondaryCurrencyRate', '1.95583') SP1 INTO :ASEC_CURRENCY_RATE;
SELECT SP1.R FROM SP_AEV('SecondaryCurrencyPrefix', '/ ') SP1 INTO :ASEC_CURRENCY_PREFIX;
SELECT SP1.R FROM SP_AEV('SecondaryCurrencySuffix', ' /') SP1 INTO :ASEC_CURRENCY_SUFFIX;
FOR
SELECT
SP.ARTICLE_NAME,
SP.SALE_PRICE,
SP.BARCODE1,
SP.BARCODE2,
SP.LABEL_COUNT,
SP.NZOK_CODE,
SP.REIMBURSEMENT,
SP.PROMO_SALE_PRICE,
SP.ARTICLE_ID,
SP.PARCEL_NO,
SP.EXPIRY_DATE,
SP.SHELF_NAME,
SP.SHELF_ID,
SP.DEL_ITEM_ID,
SP.DEL_TYPE_ID
FROM SP_BC_PRINT_DATA(:ADELIVERY_DATE) SP
INTO
:REMARK,
:ASALE_PRICE,
:BARCODE1,
:BARCODE2,
:LABEL_COUNT,
:NZOK_CODE,
:AREIMBURSEMENT,
:APROMO_SALE_PRICE,
:ARTICLE_ID,
:PARCEL_NO,
:EXPIRY_DATE,
:SHELF_NAME,
:SHELF_ID,
:DEL_ITEM_ID,
:DEL_TYPE_ID
DO
BEGIN
if (:ASALE_PRICE IS NULL) then
ASALE_PRICE = 0.00;
if (:AREIMBURSEMENT IS NULL) then
AREIMBURSEMENT = 0.00;
APATIENT_PRICE = :ASALE_PRICE - :AREIMBURSEMENT;
if (:APATIENT_PRICE < 0.00) then
APATIENT_PRICE = 0.00;
APATIENT_PROMO_PRICE = :APROMO_SALE_PRICE - :AREIMBURSEMENT;
if (:APATIENT_PROMO_PRICE < 0.00) then
APATIENT_PROMO_PRICE = 0.00;
SELECT
SP.ARES
FROM SP_FORMAT_CURRENCY(
:ASALE_PRICE, :AUSE_DOUBLE_CURRENCY, :ACURRENCY_SIGN, :ASEC_CURRENCY_SIGN,
:ASEC_CURRENCY_RATE, :ASEC_CURRENCY_PREFIX, :ASEC_CURRENCY_SUFFIX, 'T', 'T') SP
INTO
:SALE_PRICE;
SELECT
SP.ARES
FROM SP_FORMAT_CURRENCY(
:AREIMBURSEMENT, :AUSE_DOUBLE_CURRENCY, :ACURRENCY_SIGN, :ASEC_CURRENCY_SIGN,
:ASEC_CURRENCY_RATE, :ASEC_CURRENCY_PREFIX, :ASEC_CURRENCY_SUFFIX, 'T', 'T') SP
INTO
:REIMBURSEMENT;
SELECT
SP.ARES
FROM SP_FORMAT_CURRENCY(
:APROMO_SALE_PRICE, :AUSE_DOUBLE_CURRENCY, :ACURRENCY_SIGN, :ASEC_CURRENCY_SIGN,
:ASEC_CURRENCY_RATE, :ASEC_CURRENCY_PREFIX, :ASEC_CURRENCY_SUFFIX, 'T', 'T') SP
INTO
:PROMO_SALE_PRICE;
SELECT
SP.ARES
FROM SP_FORMAT_CURRENCY(
:APATIENT_PRICE, :AUSE_DOUBLE_CURRENCY, :ACURRENCY_SIGN, :ASEC_CURRENCY_SIGN,
:ASEC_CURRENCY_RATE, :ASEC_CURRENCY_PREFIX, :ASEC_CURRENCY_SUFFIX, 'T', 'T') SP
INTO
:PATIENT_PRICE;
SELECT
SP.ARES
FROM SP_FORMAT_CURRENCY(
:APATIENT_PROMO_PRICE, :AUSE_DOUBLE_CURRENCY, :ACURRENCY_SIGN, :ASEC_CURRENCY_SIGN,
:ASEC_CURRENCY_RATE, :ASEC_CURRENCY_PREFIX, :ASEC_CURRENCY_SUFFIX, 'T', 'T') SP
INTO
:PROMO_PATIENT_PRICE;
if (:BARCODE1 <> '') then
BARCODE = :BARCODE1;
else
BARCODE = :BARCODE2;
if (BARCODE <> '') then
SUSPEND;
END
END^
SET TERM ; ^