The easiest way is to replace a qad function with a wrapper program that runs the vanilla qad program. But, before running the qad function, you can set triggers based on activity that will follow in the qad function.
Here is an example.
/*program xxsbpap.p - replaces arsbpap.p in the menu*/
{mfdeclre.i} DEF var tmp-hdl AS handle NO-UNDO. DEF var billto LIKE ad_addr NO-UNDO. DEF var trans_nbr LIKE sbi_xmission NO-UNDO. DEF var selfbill LIKE sbi_nbr NO-UNDO. DEF var sb_recid AS RECID NO-UNDO. DEF var ar_recid AS RECID NO-UNDO. DEF var ws-total AS decimal NO-UNDO. {xxcmhcr1.i} /* RETRIEVE THE SELF-BILL RECORD, SELF-BILL NUMBER AND BILL-TO TO STORE */ ON go anywhere DO: IF focus:frame-name eq "a" AND CAN-DO("bill_to,transmission_nbr,selfbill_nbr", focus:name) THEN DO:
ASSIGN billto = "" trans_nbr = "" selfbill = "" sb_recid = ? tmp-hdl = FOCUS. FOR EACH t-err: DELETE t-err. END. DO WHILE tmp-hdl ne ?: IF tmp-hdl:name eq "bill_to" THEN billto = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "transmission_nbr" THEN trans_nbr = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "selfbill_nbr" THEN selfbill = tmp-hdl:screen-value. tmp-hdl = tmp-hdlrev-sibling. END. IF billto eq "" OR trans_nbr eq "" OR selfbill eq "" THEN DO: tmp-hdl = FOCUS. DO WHILE tmp-hdl ne ?: IF tmp-hdl:name eq "bill_to" THEN billto = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "transmission_nbr" THEN trans_nbr = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "selfbill_nbr" THEN selfbill = tmp-hdl:screen-value. tmp-hdl = tmp-hdl:next-sibling. END. END. FIND FIRST sbi_mstr WHERE sbi_bill = billto AND sbi_nbr = selfbill NO-ERROR. IF AVAILABLE sbi_mstr THEN DO: /*Penny Rounding Issue*/ /*message 'aaa1-'. pause.*/ ASSIGN ws-total = 0. FOR EACH sbid_det WHERE sbid_bill = sbi_bill AND sbid_nbr = sbi_nbr: ASSIGN sbid_amt = round(sbid_amt,2) ws-total = ws-total + sbid_amt. . FIND FIRST six_ref WHERE six_trnbr = sbid_trnbr. ASSIGN six_amt = round(six_amt,2). END. ASSIGN sbi_amt = ws-total sbi_ctrl_amt = ws-total sb_recid = RECID(sbi_mstr). END. END. END.
ON WRITE OF ard_det /*This is where you insert edits or
supplemental table updates.*/
DO:
FIND ih_hist NO-LOCK WHERE ih_inv_nbr eq ard_ref NO-ERROR.
FIND sbi_mstr NO-LOCK WHERE RECID(sbi_mstr) eq sb_recid NO-ERROR.
FIND ar_mstr NO-LOCK WHERE ar_nbr eq ard_nbr NO-ERROR.
assign ard_amt = round(ard_amt,2).
IF NOT AVAILABLE sbi_mstr OR NOT AVAILABLE ar_mstr OR NOT AVAILABLE ih_hist
THEN
RETURN.
The easiest way is to replace a qad function with a wrapper program that runs the vanilla qad program. But, before running the qad function, you can set triggers based on activity that will follow in the qad function.
Here is an example of a QAD trigger program wrapper.
/*program xxsbpap.p - replaces arsbpap.p in the menu*/
{mfdeclre.i} DEF var tmp-hdl AS handle NO-UNDO. DEF var billto LIKE ad_addr NO-UNDO. DEF var trans_nbr LIKE sbi_xmission NO-UNDO. DEF var selfbill LIKE sbi_nbr NO-UNDO. DEF var sb_recid AS RECID NO-UNDO. DEF var ar_recid AS RECID NO-UNDO. DEF var ws-total AS decimal NO-UNDO. {xxcmhcr1.i} /* RETRIEVE THE SELF-BILL RECORD, SELF-BILL NUMBER AND BILL-TO TO STORE */ ON go anywhere DO: IF focus:frame-name eq "a" AND CAN-DO("bill_to,transmission_nbr,selfbill_nbr", focus:name) THEN DO: ASSIGN billto = "" trans_nbr = "" selfbill = "" sb_recid = ? tmp-hdl = FOCUS. FOR EACH t-err: DELETE t-err. END. DO WHILE tmp-hdl ne ?: IF tmp-hdl:name eq "bill_to" THEN billto = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "transmission_nbr" THEN trans_nbr = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "selfbill_nbr" THEN selfbill = tmp-hdl:screen-value. tmp-hdl = tmp-hdlrev-sibling. END. IF billto eq "" OR trans_nbr eq "" OR selfbill eq "" THEN DO: tmp-hdl = FOCUS. DO WHILE tmp-hdl ne ?: IF tmp-hdl:name eq "bill_to" THEN billto = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "transmission_nbr" THEN trans_nbr = tmp-hdl:screen-value. ELSE IF tmp-hdl:name eq "selfbill_nbr" THEN selfbill = tmp-hdl:screen-value. tmp-hdl = tmp-hdl:next-sibling. END. END. FIND FIRST sbi_mstr WHERE sbi_bill = billto AND sbi_nbr = selfbill NO-ERROR. IF AVAILABLE sbi_mstr THEN DO: /*Penny Rounding Issue*/ /*message 'aaa1-'. pause.*/ ASSIGN ws-total = 0. FOR EACH sbid_det WHERE sbid_bill = sbi_bill AND sbid_nbr = sbi_nbr: ASSIGN sbid_amt = round(sbid_amt,2) ws-total = ws-total + sbid_amt. . FIND FIRST six_ref WHERE six_trnbr = sbid_trnbr. ASSIGN six_amt = round(six_amt,2). END. ASSIGN sbi_amt = ws-total sbi_ctrl_amt = ws-total sb_recid = RECID(sbi_mstr). END. END. END.
ON WRITE OF ard_det /*This is where you insert edits or
supplemental table updates.*/
DO:
FIND ih_hist NO-LOCK WHERE ih_inv_nbr eq ard_ref NO-ERROR.
FIND sbi_mstr NO-LOCK WHERE RECID(sbi_mstr) eq sb_recid NO-ERROR.
FIND ar_mstr NO-LOCK WHERE ar_nbr eq ard_nbr NO-ERROR.
assign ard_amt = round(ard_amt,2).
IF NOT AVAILABLE sbi_mstr OR NOT AVAILABLE ar_mstr OR NOT AVAILABLE ih_hist
THEN
RETURN.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.