ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 客户对账单-本月欠款

客户对账单-本月欠款

原创 Linux操作系统 作者:KawaiPinky 时间:2010-11-25 16:13:59 0 删除 编辑
CREATE OR REPLACE FUNCTION  BYamountFN(CUSTOMERNUM varchar2,
                                    startdate   date,
                                    enddate     date) RETURN CHAR IS
  v_amount          number;
  v_receipt_amount  number;
  refundAmount      number;
  l_receive_amount1 number;
  l_receive_amount2 number;
  lastdebt          number;
  thisamount        number;
  thismoeny         number;
  upExtendedamount  number;
begin
  ---------------------------**********得到上月欠款**************-------------------------------
  SELECT sum(nvl(rct.extended_amount_tax, 0)) extended_amount --当前参数日期之前的所有货款
    into v_amount
    FROM (SELECT ctl.customer_trx_line_id,
                 ct.customer_trx_id,
                 ct.initial_customer_trx_id,
                 ct.trx_number,
                 nvl(cux_ar_utl_pkg.get_trx_gl_date(ct.customer_trx_id),
                     ct.trx_date) trx_date,
                 ct.bill_to_customer_id,
                 nvl(ctl.gross_extended_amount, ctl.extended_amount) extended_amount_tax
            FROM ra_customer_trx_all       ct,
                 ra_customer_trx_lines_all ctl,
                 hz_parties                hpt,
                 hz_cust_accounts          hca,
                 ra_cust_trx_types_all     ctt,
                 mtl_units_of_measure      uom
           WHERE ct.customer_trx_id = ctl.customer_trx_id
             AND ct.org_id = ctl.org_id
             AND ct.bill_to_customer_id = hca.cust_account_id
             AND hca.party_id = hpt.party_id
             AND ctt.cust_trx_type_id = ct.cust_trx_type_id
             AND ctl.line_type != 'TAX'
             AND ctt.TYPE IN ('INV', 'CM')
             AND ctt.cust_trx_type_id !=
                 cux_ar_utl_pkg.get_return_commitment_type
           --  AND ctt.NAME != 'SH-内销开帐'
             AND ctl.uom_code = uom.uom_code(+)) rct
   WHERE 1 = 1
     and rct.bill_to_customer_id =
         (SELECT a.CUSTOMER_ID
            FROM ar_customers a
           where a.CUSTOMER_NUMBER = CUSTOMERNUM)
     AND rct.trx_date <= startdate - 1;
 
  SELECT SUM(nvl(acr.functional_amount, 0)) --当前参数日期之前的所有应付款
    INTO v_receipt_amount
    FROM ar_cash_receipts_v acr
   WHERE acr.gl_date <= startdate - 1
     AND acr.state != 'REVERSED'
     AND acr.customer_id =
         (SELECT a.CUSTOMER_ID
            FROM ar_customers a
           where a.CUSTOMER_NUMBER = CUSTOMERNUM);
 
  SELECT nvl(sum(araa.amount_applied),0) --当前参数日期之前的所有退款
    into refundAmount
    FROM AR_CASH_RECEIPT_HISTORY_ALL    acrh,
         AR_CASH_RECEIPTS_all           aCR,
         AR_RECEIVABLE_APPLICATIONS_all araa
   WHERE acrh.gl_date <= startdate - 1
     AND acrh.STATUS != 'REVERSED'
     AND ACR.CASH_RECEIPT_ID = ACRH.CASH_RECEIPT_ID
     AND ACRh.CASH_RECEIPT_HISTORY_ID = araa.CASH_RECEIPT_HISTORY_ID
     AND araa.APPLIED_CUSTOMER_TRX_ID is null
     AND ACRH.ORG_ID = ACR.ORG_ID
     and araa.DISPLAY = 'Y'
     and araa.STATUS = 'ACTIVITY'
     AND aCR.PAY_FROM_CUSTOMER =
         (SELECT a.CUSTOMER_ID
            FROM ar_customers a
           where a.CUSTOMER_NUMBER = CUSTOMERNUM);
  lastdebt := (v_amount - v_receipt_amount+refundAmount); --小于当前日期之前的所有货款 减去 小于当前日期之前的所有应付帐款 加小于当前日期之前的所有退款=上月欠款
  ---------------------------***********本月货款**********-------------------------------
  select nvl(sum(extended_amount),0)
    into thisamount
    from (SELECT ct.trx_number,
                 ct.trx_date,
                 decode(ctl.gross_extended_amount,
                        null,
                        ctl.extended_amount,
                        ctl.gross_extended_amount) as extended_amount
            FROM ra_customer_trx_all          ct,
                 ra_customer_trx_lines_all    ctl,
                 hz_parties                   hpt,
                 hz_cust_accounts             hca,
                 ra_cust_trx_types_all        ctt,
                 mtl_units_of_measure         uom,
                 ra_cust_trx_line_gl_dist_all rctl
           WHERE ct.customer_trx_id = ctl.customer_trx_id
             AND RCTL.Customer_Trx_Id = CT.CUSTOMER_TRX_ID
             AND 'REC' = rctl.ACCOUNT_CLASS
             AND 'Y' = rctl.LATEST_REC_FLAG
             AND ct.org_id = ctl.org_id
             AND ct.bill_to_customer_id = hca.cust_account_id
             AND hca.party_id = hpt.party_id
             AND ctt.cust_trx_type_id = ct.cust_trx_type_id
             AND ctl.line_type != 'TAX'
             AND ctt.TYPE IN ('INV', 'CM')
             AND ctt.cust_trx_type_id !=
                 cux_ar_utl_pkg.get_return_commitment_type
            -- AND ctt.NAME != 'SH-内销开帐'
             AND ctl.uom_code = uom.uom_code(+)
             AND to_char(RCTL.GL_DATE, 'yyyy-mm-dd') BETWEEN
                 TO_CHAR(startdate, 'YYYY-MM-DD') AND
                 TO_CHAR(enddate, 'YYYY-MM-DD')
             AND hca.account_number = CUSTOMERNUM);
  ---------------------------**********本月回款************-------------------------------
  SELECT nvl(SUM(acr.functional_amount), 0) --付款
    INTO l_receive_amount1
    FROM ar_cash_receipts_v acr
   WHERE TO_CHAR(acr.gl_date, 'YYYY-MM-DD') BETWEEN
         TO_CHAR(startdate, 'YYYY-MM-DD') AND
         TO_CHAR(enddate, 'YYYY-MM-DD')
     AND acr.state != 'REVERSED'
     AND acr.customer_id =
         (SELECT a.CUSTOMER_ID
            FROM ar_customers a
           where a.CUSTOMER_NUMBER = CUSTOMERNUM);
  SELECT nvl(sum(araa.amount_applied),0) --退款
    into l_receive_amount2
    FROM AR_CASH_RECEIPT_HISTORY_ALL    acrh,
         AR_CASH_RECEIPTS_all           aCR,
         AR_RECEIVABLE_APPLICATIONS_all araa
   WHERE TO_CHAR(acrh.gl_date, 'YYYY-MM-DD') BETWEEN
         TO_CHAR(startdate, 'YYYY-MM-DD') AND
         TO_CHAR(enddate, 'YYYY-MM-DD')
     AND acrh.STATUS != 'REVERSED'
     AND ACR.CASH_RECEIPT_ID = ACRH.CASH_RECEIPT_ID
     AND ACRh.CASH_RECEIPT_HISTORY_ID = araa.CASH_RECEIPT_HISTORY_ID
     AND araa.APPLIED_CUSTOMER_TRX_ID is null
     AND ACRH.ORG_ID = ACR.ORG_ID
     and araa.DISPLAY = 'Y'
     and araa.STATUS = 'ACTIVITY'
     AND aCR.PAY_FROM_CUSTOMER =
         (SELECT a.CUSTOMER_ID
            FROM ar_customers a
           where a.CUSTOMER_NUMBER = CUSTOMERNUM);
  thismoeny := (l_receive_amount1 - l_receive_amount2); --本月回款 = 本月应付帐款-本月退款
  ---------------------------**********本月欠款************-------------------------------             
  --本月欠款= 上月欠款+本月货款-本月回款         
  upExtendedamount := (lastdebt + thisamount - thismoeny);
  return upExtendedamount;
end;
 
 
 
 
 
cux_ar_utl_pkg.get_return_commitment_type
 
FUNCTION get_return_commitment_type RETURN NUMBER IS
    CURSOR csr_type IS
      SELECT cust_trx_type_id
        FROM ra_cust_trx_types_all
       WHERE NAME = 'SH-保证金退回';
    retval NUMBER;
  BEGIN
    OPEN csr_type;
    FETCH csr_type
      INTO retval;
    CLOSE csr_type;
    RETURN nvl(retval, -1);
  END;
 
公式:上月欠款+本月货款-本月回款=本月欠款

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24899662/viewspace-680281/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 应收帐款汇总
请登录后发表评论 登录
全部评论

注册时间:2010-11-10

  • 博文量
    32
  • 访问量
    53031