账单详情查询功能函数
函数语法:ABAP 开发工具:SAP GUI 740
- 基本逻辑: 通过账单编号billid取数,仅传输应收账单日期小于等于次月最后一天的账单信息 功能函数实现代码如下,很简单的函数,主要是实现三块逻辑:
- 调用系统内部函数,获取当前操作时间的次月最后一天值;
- 按照功能说明书要求进行取值;
- 做一个筛选判断,查找符合基本逻辑的信息;
补充:账单信息的传输通过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.