*&---------------------------------------------------------------------*
*& Report Z_FI_080
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_fi_080.
TABLES:vbrk,vbrp,lips,vbkd,kna1,knvk,vbak,likp.
TYPE-POOLS: slis. "这个类型组有很多ALV的自定义数据类型以及结构化数据类型
DATA:
i_fieldcat_alv TYPE slis_t_fieldcat_alv, "定义列标题(属性/信息)
i_layout TYPE slis_layout_alv, "alv格式
i_fieldcat TYPE slis_fieldcat_alv, "
i_events TYPE slis_t_event, "alv事件
w_events LIKE LINE OF i_events,
i_list_comments TYPE slis_t_listheader, "alv表单标题区域设置
w_list_comments LIKE LINE OF i_list_comments,
w_repid LIKE sy-repid. "当前程序
DATA: BEGIN OF h_itab OCCURS 0,
vbeln LIKE vbrp-vbeln, "开票凭证
posnr LIKE vbrp-posnr,
vgbel LIKE vbrp-vgbel, "参考凭证
vgpos LIKE vbrp-vgpos, "参考项目
aubel LIKE vbrp-aubel, "销售凭证
vbeln1 LIKE vbak-vbeln, "销售凭证
aupos LIKE vbrp-aupos, "项目
waerk LIKE vbrk-waerk, "币别
* waerk1 LIKE vbrk-waerk, "本位币
kunrg LIKE vbrk-kunrg, "客户 KUNNR
erdat LIKE vbrk-erdat, "发票日期
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1, "客户名称
kurrf LIKE vbrk-kurrf, "会计汇率
netwr LIKE vbrk-netwr, "金额(外币)
* netwr1 LIKE vbrk-netwr, "金额( 本位币)
bstnk LIKE vbak-bstnk, "采购订单编号
zterm LIKE vbkd-zterm, "付款条件
vbeln2 LIKE lips-vbeln, "交货单号
posnr2 LIKE lips-posnr, "交货单行项目
lfdat LIKE likp-lfdat, "交货日期
lfdat1 LIKE likp-lfdat, "发票到期日
END OF h_itab.
DATA: dayx(2) TYPE c .
SELECTION-SCREEN BEGIN OF BLOCK sel WITH FRAME TITLE text-001.
PARAMETERS pl_bukrs LIKE vbrk-bukrs OBLIGATORY MEMORY ID p_bukrs DEFAULT '1000'.
SELECT-OPTIONS pi_kunrg FOR vbrk-kunrg MEMORY ID rg."p_kunrg.
SELECT-OPTIONS pi_erdat FOR vbrk-erdat MEMORY ID p_erdat.
SELECT-OPTIONS pi_vbeln FOR vbrk-vbeln MEMORY ID p_vbeln.
SELECT-OPTIONS pi_aubel FOR vbak-vbeln MEMORY ID vbeln.
SELECTION-SCREEN END OF BLOCK sel.
SELECTION-SCREEN BEGIN OF BLOCK se2 WITH FRAME TITLE text-002.
PARAMETERS:pr_x TYPE i DEFAULT '100'.
SELECTION-SCREEN END OF BLOCK se2 .
INITIALIZATION.
SELECT SINGLE parva FROM usr05 INTO pl_bukrs WHERE bname = sy-uname AND parid = 'EKO'.
START-OF-SELECTION.
PERFORM getdata.
PERFORM layout_build.
PERFORM fields_build.
PERFORM display_data.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
FORM getdata .
SELECT vbrp~vbeln vbrp~posnr vbrp~vgbel vbrp~vgpos vbrp~aubel vbrp~aupos vbrk~waerk vbrk~kunrg vbrk~kurrf vbrk~netwr vbrk~erdat vbkd~zterm
FROM vbrp
INNER JOIN vbrk ON vbrp~vbeln = vbrk~vbeln
INNER JOIN lips ON vbrp~vgbel = lips~vbeln AND vbrp~vgpos = lips~posnr
INNER JOIN vbkd ON vbrp~aubel = vbkd~vbeln AND vbrp~aupos = vbkd~posnr
UP TO pr_x ROWS
INTO CORRESPONDING FIELDS OF TABLE h_itab" (h_itab-vbeln1,h_itab-posnr,h_itab-vgbel,h_itab-vgpos,h_itab-aubel,h_itab-aupos,h_itab-waerk,h_itab-kunrg,h_itab-kurrf,h_itab-netwr,h_itab-erdat,h_itab-zterm)
WHERE vbrp~vbeln IN pi_vbeln
AND vbrk~bukrs LIKE pl_bukrs
AND vbrk~kunrg IN pi_kunrg
AND vbrk~erdat IN pi_erdat
AND vbrp~aubel IN pi_aubel
AND vbrp~fkimg > 0
ORDER BY vbrp~vbeln vbrp~posnr.
LOOP AT h_itab.
SELECT SINGLE name1 FROM kna1 INTO h_itab-name1 WHERE kunnr = h_itab-kunrg. "获取客户名称
MOVE h_itab-kunrg TO h_itab-kunnr.
MOVE h_itab-aubel TO h_itab-vbeln1.
SELECT SINGLE bstnk FROM vbak INTO h_itab-bstnk WHERE vbeln = h_itab-aubel. "获取客户采购订单编号
SELECT SINGLE vbeln lfdat FROM likp INTO (h_itab-vbeln2,h_itab-lfdat) WHERE vbeln = h_itab-vgbel. "获取销售单和交货日期
IF h_itab-zterm+0(1) = 'i' OR h_itab-zterm+0(1) = 'I'.
IF h_itab-zterm+2(2) = 07.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 07
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 15.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 15
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 30.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 30
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 45.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 45
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 60.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 60
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 65.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 65
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 75.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 75
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 90.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 90
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
ENDIF.
IF h_itab-zterm+0(1) = 'm' OR h_itab-zterm+0(1) = 'M'. "月结
IF h_itab-zterm+2(2) = 30.
CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE' "获取下个月的今天
EXPORTING
months = '+1'
olddate = h_itab-lfdat
IMPORTING
newdate = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 45.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 45
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 50.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 50
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 60.
CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE' "获取下个月的今天
EXPORTING
months = '+2'
olddate = h_itab-lfdat
IMPORTING
newdate = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 65.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 65
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 70.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 70
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 75.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = h_itab-lfdat
days = 75
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+2(2) = 90.
CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE' "获取下个月的今天
EXPORTING
months = '+3'
olddate = h_itab-lfdat
IMPORTING
newdate = h_itab-lfdat1.
ENDIF.
IF h_itab-zterm+1(3) = 120.
CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE' "获取下个月的今天
EXPORTING
months = '+4'
olddate = h_itab-lfdat
IMPORTING
newdate = h_itab-lfdat1.
ENDIF.
CALL FUNCTION 'LAST_DAY_OF_MONTHS' "获得当月的最有一天
EXPORTING
day_in = h_itab-lfdat1
IMPORTING
last_day_of_month = h_itab-lfdat1 .
ENDIF.
MODIFY h_itab.
ENDLOOP.
ENDFORM. " GETDATA
*&---------------------------------------------------------------------*
*& Form LAYOUT_BUILD
*&---------------------------------------------------------------------*
FORM layout_build .
* PERFORM EVENTS_BUILD. "Create Alv Report Top-Buttom
i_layout-zebra = 'X'. "间隔颜色显示
i_layout-detail_popup = 'X'. "是否弹出详细信息窗口
* i_layout-no_vline = ' '. "这个用来设置列间隔线
* i_layout-colwidth_optimize = 'X'. "优化列宽选项是否设置
i_layout-detail_initial_lines = 'X'. "show also initial lines
i_layout-detail_titlebar = '详细内容'. "设置弹出窗口的标题栏
* i_layout-f2code = '&ETA'. "设置触发弹出详细信息窗口的功能码,这里是双击
* i_layout-no_colhead = ' '.
* i_layout-info_fieldname = 'COLOR'.
w_repid = sy-repid. "程序为当前程序
i_layout-info_fieldname = 'COLOR'. "颜色值
ENDFORM. " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*& Form FIELDS_BUILD
*&---------------------------------------------------------------------*
FORM fields_build .
REFRESH i_fieldcat_alv.
CLEAR i_fieldcat.
DATA colnum TYPE i.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'ERDAT'.
i_fieldcat-seltext_s = '发票日期'.
i_fieldcat-seltext_m = '发票日期'.
i_fieldcat-seltext_l = '发票日期'.
i_fieldcat-outputlen = 10.
* i_fieldcat-hotspot = 'X'. "设置热点区
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'LFDAT'.
i_fieldcat-seltext_s = '交货单日期'.
i_fieldcat-seltext_m = '交货单日期'.
i_fieldcat-seltext_l = '交货单日期'.
i_fieldcat-outputlen = 10.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'ZTERM'.
i_fieldcat-seltext_s = '付款条件'.
i_fieldcat-seltext_m = '付款条件'.
i_fieldcat-seltext_l = '付款条件'.
i_fieldcat-outputlen = 8.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'LFDAT1'.
i_fieldcat-seltext_s = '发票到期日'.
i_fieldcat-seltext_m = '发票到期日'.
i_fieldcat-seltext_l = '发票到期日'.
i_fieldcat-outputlen = 10.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'VBELN'.
i_fieldcat-seltext_s = '发票号码'.
i_fieldcat-seltext_m = '发票号码'.
i_fieldcat-seltext_l = '发票号码'.
i_fieldcat-outputlen = 12.
i_fieldcat-lzero = 'X'. "
i_fieldcat-no_zero = 'X'.
* i_fieldcat-hotspot = 'X'. "设置热点区
i_fieldcat-key = 'X'. "
* i_fieldcat-emphasize = 'C210'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'POSNR'.
i_fieldcat-seltext_s = '发票行项目'.
i_fieldcat-seltext_m = '发票行项目'.
i_fieldcat-seltext_l = '发票行项目'.
i_fieldcat-outputlen = 9.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'KUNRG'.
i_fieldcat-seltext_s = '客户编号'.
i_fieldcat-seltext_m = '客户编号'.
i_fieldcat-seltext_l = '客户编号'.
i_fieldcat-outputlen = 10.
* i_fieldcat-hotspot = 'X'. "设置热点区
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'NAME1'.
i_fieldcat-seltext_s = '客户名称'.
i_fieldcat-seltext_m = '客户名称'.
i_fieldcat-seltext_l = '客户名称'.
i_fieldcat-outputlen = 15.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'BSTNK'.
i_fieldcat-seltext_s = '客户PO'.
i_fieldcat-seltext_m = '客户PO'.
i_fieldcat-seltext_l = '客户PO'.
i_fieldcat-outputlen = 15.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'NETWR'.
i_fieldcat-seltext_s = '金额'.
i_fieldcat-seltext_m = '金额'.
i_fieldcat-seltext_l = '金额'.
i_fieldcat-outputlen = 10.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'WAERK'.
i_fieldcat-seltext_s = '币别(销售单)'.
i_fieldcat-seltext_m = '币别(销售单)'.
i_fieldcat-seltext_l = '币别(销售单)'.
i_fieldcat-outputlen = 10.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'AUBEL'.
i_fieldcat-seltext_s = '销售单号'.
i_fieldcat-seltext_m = '销售单号'.
i_fieldcat-seltext_l = '销售单号'.
i_fieldcat-outputlen = 10.
i_fieldcat-no_zero = 'X'.
* i_fieldcat-hotspot = 'X'. "设置热点区
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'AUPOS'.
i_fieldcat-seltext_s = '销售行项目'.
i_fieldcat-seltext_m = '销售行项目'.
i_fieldcat-seltext_l = '销售行项目'.
i_fieldcat-outputlen = 10.
i_fieldcat-no_zero = 'X'.
APPEND i_fieldcat TO i_fieldcat_alv.
CLEAR i_fieldcat.
ENDFORM. " FIELDS_BUILD
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM display_data .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_user_command = 'USER_COMMAND' "用户触发事件
* i_callback_pf_status_set = 'PF_STATUS_SET'(001) "调用用户事件和按钮事件
i_callback_program = w_repid "当前程序
* i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'"定义抬头
is_layout = i_layout "子函数layout_build填充的格式定义
it_fieldcat = i_fieldcat_alv[] "子函数fields填充的各列
it_events = i_events[]
* i_grid_title = ' 交货单清单(销售) '
i_save = 'A' "保存变式
TABLES
t_outtab = h_itab. "假设数据都在itab内表中
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form events_build
*&---------------------------------------------------------------------*
FORM events_build .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events WITH KEY name = 'TOP_OF_PAGE'
INTO w_events.
IF sy-subrc = 0.
MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
READ TABLE i_events INTO w_events WITH KEY name = 'USER_COMMAND'.
IF sy-subrc EQ 0.
w_events-name = 'USER_COMMAND'.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
READ TABLE i_events WITH KEY name = 'END_OF_LIST'"slis_ev_end_of_page
INTO w_events.
IF sy-subrc = 0.
MOVE 'ALV_END_OF_LIST' TO w_events-form.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
ENDFORM. " events_build
*&---------------------------------------------------------------------*
*& Form alv_top_of_page
*&---------------------------------------------------------------------*
FORM alv_top_of_page.
*
* CLEAR: i_list_comments.
*
* w_list_comments-typ = 'S'.
* w_list_comments-key = '交货单状态:'.
** w_list_comments-info = name1 .
* APPEND w_list_comments TO i_list_comments.
* CLEAR w_list_comments.
*
*
* CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
* EXPORTING
* it_list_commentary = i_list_comments
* i_logo = 'ENJOYSAP_LOGO' "标题图标.
* i_end_of_list_grid = 'X'.
** i_logo = 'ENJOYSAP_LOGO'. "标题图标
ENDFORM. "alv_top_of_page
*&---------------------------------------------------------------------*
*& Form alv_end_of_list
*&---------------------------------------------------------------------*
FORM alv_end_of_list.
* CLEAR: i_list_comments.
* w_list_comments-typ = 'S'.
* w_list_comments-info = '制作单:SAP部'.
* APPEND w_list_comments TO i_list_comments.
* CLEAR w_list_comments.
*
*
* CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
* EXPORTING
* it_list_commentary = i_list_comments
* i_logo = 'ENJOYSAP_LOGO' "标题图标
* i_end_of_list_grid = 'X'.
ENDFORM. "alv_end_of_list
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM user_command USING i_ucomm LIKE sy-ucomm
is_selfield TYPE slis_selfield.
* CASE i_ucomm.
** WHEN '&IC1'.
** DATA pt_type(30) TYPE c.
** CASE is_selfield-fieldname.
** WHEN 'KUNRG'.
** READ TABLE h_itab INDEX is_selfield-tabindex.
** IF sy-subrc EQ 0.
** SET PARAMETER ID 'RG' FIELD h_itab-kunnr.
** CALL TRANSACTION 'FBL5N' AND SKIP FIRST SCREEN.
** ENDIF.
** ENDCASE.
** ENDCASE.
* WHEN '&IC1'.
* DATA pt_type(30) TYPE c.
* CASE is_selfield-fieldname.
* WHEN 'AUBEL'.
* READ TABLE h_itab INDEX is_selfield-tabindex.
* IF sy-subrc EQ 0.
* SET PARAMETER ID 'VBELN2' FIELD h_itab-vbeln1.
* CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
* ENDIF.
* ENDCASE.
* ENDCASE.
ENDFORM. "user_command
Z_FI_080 发票到期日查询
最新推荐文章于 2024-07-31 08:54:39 发布