*&------------------------------------------------------------------
*& Program name: ZRFICO_RECEIVABLE
*& T-Code: (XXXX)
*& Porgram Type: Report
*& Description: SOPO计划表
*&------------------------------------------------------------------
*& Author: lipu
*& Date: 2011.05.16
*&------------------------------------------------------------------
*& Funciton Desc:
*& 应收账款台账
*& 显示结果:
*& 逻辑说明:* 1) 交货单数据LIKP、LIPS作为主数据:交货单号、行项目、物料号、交货数量、交货单创建日期、物料组、库位、批次
*& 2) 根据物料号,判断产品技术 (TN/FFS) 、厚度(1.0t/0.6t);
*& 根据交货单客户号,从KNA1——>客户名称;抓取VA03-抬头文本:二级客户长文本
*& 3) 物料描述——产品类型、厚度、工艺PS/BS、
*& 4) 预收款日期计算: 交货单创建日期 + 预收款条件设置日期 ; 另设置一列“人工编辑预收款日期”;
*& 5) 净价、净价单位抓取SO订单,金额 = 交货数量 * 净价 / 净价单位 ;
*& 6) 交货数量根据生产BOM来折算,Q-panel、CELL、GLASS
*& * 7) SO单价为USD,则计算美元金额; 为RMB,考虑增值税金额;
*& 8) VBRP:抓取形势发票号(发票类型F8)、系统发票号(F2)、系统发票日期,
*& 9) 判断预收款日期是否超过当前日期;
*& * 10)是否付款; 查询清账表BSAD、清账创建时间
*& * 11) 根据SO订单号、行项目查找客户PO号 : VBKD-BSTKD
*& 12) 根据系统发票(F2),抓取会计凭证号、本位币金额;
*& * 13) 抓取VBAK订单类型,描述-表TVAKT
*& 14) 查物料底层物料中是否有物料组为001的物料,判断是否外购
*&-------------------------------------------------------------------
*& Modification Log:
*& Version Date Author DESCRIPTION CHANGE REQUEST
*& -------- ---------- ----------- ------------- -----------------
*& 000 2011.05.16 lipu Initial release
REPORT ZRFICO_RECEIVABLE.
*----------------- TABLES ----------------------------*
TYPE-POOLS: slis.
TABLES:ZTFICO_YSZK,LIKP, LIPS , VBAK , VBAP .
*----------------- VARIANTS ----------------------------*
Data: name_1 LIKE ADRC-NAME1, " 暂存供应商名称
name_2 LIKE ADRC-NAME2.
" 长文本
DATA: gp_id LIKE thead-tdid,
gp_nam LIKE thead-tdname,
gp_obj LIKE thead-tdobject,
gt_dline LIKE TABLE OF tline WITH HEADER LINE.
DATA: lv_language TYPE c. " read_text 长文本语种
DATA : str_tmp TYPE string .
DATA: l_WEEK TYPE KWEEK .
DATA: VBELN_S TYPE VBELN.
DATA: l_MAKTX TYPE MAKTX, " 物料描述中间变量
* Head_text(20) TYPE C, " 存储分割后的字符串,不能固定长度
* Back_text(20) TYPE C.
Head_text TYPE string,
Back_text TYPE string,
Back_01 TYPE string.
*BOM展开
data: gt_stpox like stpox occurs 0 with header line. "
DATA:l_bom LIKE stko-bmeng.
DATA:l_stlnr LIKE mast-stlnr.
" user_command
DATA: u_command TYPE slis_formname VALUE 'USER_COMMAND'.
DATA: ok_code LIKE sy-ucomm.
*----------------- INTERNAL TABLES ----------------------------*
* BOM反查" 以下内表缺一不可
DEFINE BOM_FIND.
data : begin of &1 occurs &2. " 数量关系表
include structure &3.
data : end of &1.
END-OF-DEFINITION.
BOM_FIND: wultb 100 stpov,
equicat 0 cscequi,
kndcat 0 cscknd,
matcat 0 cscmat,
stdcat 0 cscstd,
tplcat 0 csctpl.
* 销售订单SO
DATA : BEGIN OF it_so OCCURS 0,
VBELV LIKE VBAP-VBELV, " 销售订单号——实际取VBELN 便于与交货单号区分
POSNV LIKE VBAP-POSNV, " 销售订单项目——实际取POSNR
WAERK LIKE VBAK-WAERK, " 币别
KUNNR LIKE VBAK-KUNNR, " 客户号
AUART LIKE VBAK-AUART, " 订单类型
BEZEI LIKE TVAKT-BEZEI, " SO订单描述
* ARKTX LIKE VBAP-ARKTX, " 物料文本
NETPR LIKE VBAP-NETPR, " 净价( 每X个价值为Y )
KPEIN LIKE VBAP-KPEIN, " 定价单位
" 销售凭证 : 业务数据
ZTERM LIKE VBKD-ZTERM, " 付款方式代码
ZTEXT1 LIKE T052U-TEXT1, " 收付款方式自解释
ZYSKD TYPE ZYSKD, " 预收款日
ZDUE TYPE ZTYWB, " 是否超期
" 客户PO号
BSTKD LIKE VBKD-BSTKD, " 客户PO号
" 二级客户文本
ZNAME2 TYPE ZNAME_KNA1,
END OF it_so.
" 发票
DATA : BEGIN OF it_vbrp OCCURS 0,
VGBEL LIKE VBRP-VGBEL, " 参考凭证-交货单号
AUPOS LIKE VBRP-AUPOS, " 项目——交货单行项目
VBELN LIKE VBRP-VBELN, " 开票凭证号
POSNR LIKE VBRP-POSNR, " 项目
FKART LIKE VBRK-FKART, " 发票类型
FKDAT LIKE VBRK-FKDAT, " 发票日期(只要系统发票的)
BLART LIKE BKPF-BLART, " 凭证类别
AWKEY LIKE BKPF-AWKEY, " 参考关键字
BELNR LIKE BKPF-BELNR, " 会计凭证号
GJAHR LIKE BKPF-GJAHR, " 会计年度
DMBTR LIKE BSIS-DMBTR, " 本位币金额
SHKZG LIKE BSIS-SHKZG, " 借贷
AUGBL LIKE BSAD-AUGBL, " 清账凭证号
AUGDT LIKE BSAD-AUGDT, " 清账日期
END OF it_vbrp.
DATA : it_T052 LIKE TABLE OF T052 WITH HEADER LINE.
"结果内表
DATA : it_out LIKE TABLE OF ZTFICO_YSZK WITH HEADER LINE.
" 中间内表
DATA: BEGIN OF it_lips OCCURS 0.
INCLUDE STRUCTURE it_out.
DATA : AUART LIKE VBAK-AUART, " 订单类型代码
KPEIN TYPE KPEIN, " 价格计量单位
END OF it_lips.
DATA: it_lips_tmp LIKE TABLE OF it_lips WITH HEADER LINE.
*----------------- macro & class ----------------------------*
DEFINE Lastday_month.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = &1
IMPORTING
last_day_of_month = &2
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
END-OF-DEFINITION.
" ALV取数、显示、修改
CLASS lcl_report DEFINITION.
PUBLIC SECTION.
DATA : num TYPE I.
TYPES : BEGIN OF type_data.
TYPES : ZNUM TYPE I.
INCLUDE STRUCTURE ZTFICO_YSZK.
TYPES : SEL(01) TYPE C,
ZYSKD_D TYPE ZYSKD, " 人工维护预收款日期——修改前
ZYSKD_S TYPE ZYSKD, " 系统预收款日期——修改前
END OF type_data.
DATA: t_data TYPE STANDARD TABLE OF type_data,
gw_data TYPE type_data.
METHODS:
get_data,
generate_output.
ENDCLASS.
DATA: lo_report TYPE REF TO lcl_report. " 对象实例
*----------------- SELECTION-SCREEN --------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE txt001.
SELECT-OPTIONS : p_WERKS For LIPS-WERKS DEFAULT '2100' to '2101',
s_ERDAT for LIPS-ERDAT . " 创建日期
SELECT-OPTIONS : s_VBELN for LIPS-VBELN MODIF ID M1, " 交货单
s_KUNNR for VBAK-KUNNR MODIF ID M1, " 售达方
s_VBELV FOR VBAP-VBELN MODIF ID M1, " 订单号
s_WADAT FOR LIKP-WADAT_IST MODIF ID M1. " 发货过账日期
SELECTION-SCREEN END OF BLOCK block1.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE title00.
PARAMETERS: p_xs TYPE c RADIOBUTTON GROUP rd DEFAULT 'X' USER-COMMAND rad_click2, "显示
p_js TYPE c RADIOBUTTON GROUP rd. "计算
SELECTION-SCREEN SKIP 1.
PARAMETERS p_dd TYPE c AS CHECKBOX MODIF ID M1 . " 订单
SELECTION-SCREEN END OF BLOCK b3.
*----------------- INITIALIZATION --------------------------——*
INITIALIZATION.
txt001 = '计算条件'.
title00 = '方式'.
s_ERDAT-sign = 'I'.
s_ERDAT-option = 'BT'.
s_ERDAT-low(06) = sy-datum(06).
s_ERDAT-low+6(02) = '01'.
s_ERDAT-high = sy-datum.
APPEND s_ERDAT.
* 创建 object
CREATE OBJECT lo_report.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'M1'.
if p_xs = 'X'.
screen-active = '1'.
else.
screen-active = '0'.
endif.
endcase.
MODIFY SCREEN.
ENDLOOP.
*----------------- START-OF-SELECTION --------------------------*
START-OF-SELECTION.
if p_js = 'X'. " 计算
" 交货单与SO数据
PERFORM frm_get_LIPS.
" 数据整理
PERFORM frm_deal_data.
" 保存数据