1. 程式人生 > 其它 >如何在ABAP中實現賬單詳情查詢功能

如何在ABAP中實現賬單詳情查詢功能

技術標籤:ABAP學習後端sap

賬單詳情查詢功能函式

函式語法:ABAP
開發工具:SAP GUI 740

  • 基本邏輯:
    通過賬單編號billid取數,僅傳輸應收賬單日期小於等於次月最後一天的賬單資訊
    功能函式實現程式碼如下,很簡單的函式,主要是實現三塊邏輯:
  1. 呼叫系統內部函式,獲取當前操作時間的次月最後一天值;
  2. 按照功能說明書要求進行取值;
  3. 做一個篩選判斷,查詢符合基本邏輯的資訊;

補充:賬單資訊的傳輸通過PO介面傳送實現,在介面METHOD呼叫此函式即可。

FUNCTION zsrefm_check_bill.
*"----------------------------------------------------------------------
*"*"本地介面:
*"  TABLES
*"      ET_ZSS0120 STRUCTURE  ZSSFI0120
*"      IT_ZSS0120A STRUCTURE  ZSSFI0120A
*"----------------------------------------------------------------------
*  描述:        賬單詳情查詢介面
************************************************************************
*  版本號 日期      修改描述   功能更改說明書
************************************************************************
*  1.  2020/10/29  賬單詳情查詢介面
************************************************************************
*宣告表:應收賬單資訊、收款明細表、條件型別 、條件型別文字
  TABLES:zstyc0002,zstyc0042b,zstyc0042a,tivcdcondtype,tivcdcondtypet.

*宣告獲取次月最後一天函式相關變數
  DATA: lv_months LIKE  p0001-begda, "指系統當前時間的下一個月
        lv_days   LIKE  sy-datum.   "指該月最後一天的日期

*定義內表  ///可以用另一種方式呼叫-type 已有表或結構  TYPES ty_bill TYPE ZSSFI0120.
  TYPES: BEGIN OF  ty_bill,
           zprojid    TYPE zstyc0002-zprojid,       "商管專案
           billid     TYPE zstyc0002-billid,        	"賬單編號
           zstatus    TYPE zstyc0002-zstatus,      "賬單狀態
           ztype      TYPE zstyc0002-ztype,         "賬單型別
           recnnr     TYPE zstyc0002-recnnr,        "合同
           recntype   TYPE zstyc0002-recntype,   "合同型別
           brand_name TYPE zstyc0002-brand_name,       "品牌名稱
           ronumber   TYPE zstyc0002-ronumber,     		 "鋪位編號
           condtype   TYPE zstyc0002-condtype,   		     "條件型別
           xcondtypel TYPE tivcdcondtypet-xcondtypel, 	"費項名稱
           paymdate   TYPE zstyc0042b-paymdate,    		 "收款日期
           checkdate  TYPE zstyc0042a-checkdate,    	"複核日期
           reciptamt1 TYPE zstyc0042b-reciptamt1,  	    "收款金額
           reciptid   TYPE zstyc0042b-reciptid,   			   "收款單編號
         END OF ty_bill.


*定義內表和工作區
  DATA:lt_bill TYPE TABLE OF ty_bill,
       ls_bill TYPE ty_bill.    "工作區命名  ///一般用ls_


**定義判斷語句
* DATA:lt_con TYPE TABLE OF ZSSFI0120.


*獲取應收賬單日期的下一個月
  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date      = sy-datum    "系統當前時間
      days      = 0
      months    = 1
      signum    = '+'
      years     = 0
    IMPORTING
      calc_date = lv_months.


* 獲得一個月的最後一天
  CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
    EXPORTING
      day_in            = lv_months
    IMPORTING
      last_day_of_month = lv_days
* EXCEPTIONS
*     DAY_IN_NO_DATE    = 1
*     OTHERS            = 2
    .
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.


  IF it_zss0120a[] IS NOT INITIAL.  "如果傳入的表不為空
*讀取資料
  SELECT
    a~zprojid,       "商管專案
    a~billid,        "賬單編號
    a~zstatus,       "賬單狀態
    a~ztype,   	     "賬單型別
    a~recnnr,        "合同
    a~recntype,      "合同型別
    a~brand_name,    "品牌名稱
    a~ronumber,    	 "鋪位編號
    a~condtype,      "條件型別
    c~xcondtypel,    "費項名稱
    b~paymdate,      "收款日期
    d~checkdate,     "複核日期
    b~reciptamt1,    "收款金額
    b~reciptid       "收款單編號
  FROM zstyc0002 AS a
  LEFT JOIN zstyc0042b AS b
  ON a~billid = b~billid  "用同一個賬單編號來取數,多條資料明細全部列出來
  LEFT JOIN tivcdcondtypet AS c
  ON a~condtype = c~condtype  "通過ZSTYC0002–CONDTYPE=TIVCDCONDTYPE-CONDTYPE,取出TIVCDCONDTYPE-XCONDTYPEL,也可以直接取
  LEFT JOIN zstyc0042a AS d
  ON b~reciptid = d~reciptid   "通過收款單編號取複核日期
  INTO CORRESPONDING FIELDS  OF TABLE @et_zss0120        "傳出引數,自動匹配欄位,不需要排序
  FOR ALL ENTRIES IN @it_zss0120a
  WHERE a~paydate LE @lv_days
  AND a~billid = @it_zss0120a-billid.     "billid介面傳入的引數 執行篩選,只取需要的欄位


  ELSE.
    MESSAGE '賬單編號傳入資料為空,取數未成功' TYPE 'E'.
  ENDIF.
*傳輸應收日期 ZSTYC0002-PAYDATE 小於等於次月最後一天的賬單


*返回一個訊息,判斷取數是否成功
*  IF sy-subrc NE 0.                 "如果sy-subrc不等於0
*    MESSAGE '賬單編號取數未成功' TYPE 'E'.
*  ENDIF.

ENDFUNCTION.