如何在ABAP中實現賬單詳情查詢功能
阿新 • • 發佈:2020-12-23
賬單詳情查詢功能函式
函式語法:ABAP
開發工具:SAP GUI 740
- 基本邏輯:
通過賬單編號billid取數,僅傳輸應收賬單日期小於等於次月最後一天的賬單資訊
功能函式實現程式碼如下,很簡單的函式,主要是實現三塊邏輯:
- 呼叫系統內部函式,獲取當前操作時間的次月最後一天值;
- 按照功能說明書要求進行取值;
- 做一個篩選判斷,查詢符合基本邏輯的資訊;
補充:賬單資訊的傳輸通過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.