如何在ABAP中实现账单详情查询功能

2022-05-19 12:40:27 浏览数 (1)

账单详情查询功能函数

函数语法:ABAP 开发工具:SAP GUI 740

  • 基本逻辑: 通过账单编号billid取数,仅传输应收账单日期小于等于次月最后一天的账单信息 功能函数实现代码如下,很简单的函数,主要是实现三块逻辑:
  1. 调用系统内部函数,获取当前操作时间的次月最后一天值;
  2. 按照功能说明书要求进行取值;
  3. 做一个筛选判断,查找符合基本逻辑的信息;

补充:账单信息的传输通过PO接口发送实现,在接口METHOD调用此函数即可。

代码语言:javascript复制
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.

0 人点赞