/* 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 ; ^