根据供应商取暂估:
第一:FUNCTION
1)FUNCTION中输入输出参数截图,详细代码见图下:
2)FUNCTION中的详细代码:
FUNCTION z_sdl_grir.
*"----------------------------------------------------------------------
*"*"Local interface:
*" TABLES
*" IT_LIFNR STRUCTURE ZLIFNRGRIR OPTIONAL
*" IT_ZGRIR STRUCTURE ZGRIR OPTIONAL
*"----------------------------------------------------------------------
DATA: zes(15) TYPE p DECIMALS 3,
zqs(15) TYPE p DECIMALS 3,
zeh(15) TYPE p DECIMALS 3,
zqh(15) TYPE p DECIMALS 3.
DATA: BEGIN OF it_ekbe OCCURS 0,
bewtp LIKE ekbe-bewtp,"PO历史记录分类
bwart LIKE ekbe-bwart,"移动类型
dmbtr LIKE ekbe-dmbtr,"金额
arewr LIKE ekbe-arewr,"冲销发票的金额
shkzg LIKE ekbe-shkzg,"借贷标志
belnr LIKE ekbe-belnr,"物料凭证
ebeln LIKE ekbe-ebeln,"采购订单
ebelp LIKE ekbe-ebelp,"项目
gjahr LIKE ekbe-gjahr,"会计年度
buzei LIKE ekbe-buzei,"项目
zekkn LIKE ekbe-zekkn,"顺序No.帐户分配
vgabe LIKE ekbe-vgabe,"业务/事件类型
lifnr LIKE ekko-lifnr,"供应商编码
END OF it_ekbe.
SELECT
a~bewtp
a~bwart
a~dmbtr
a~arewr
a~shkzg
a~belnr
a~ebeln
a~ebelp
a~gjahr
a~buzei
a~zekkn
a~vgabe
b~lifnr
INTO CORRESPONDING FIELDS OF TABLE it_ekbe
FROM ekbe AS a
INNER JOIN ekko AS b ON b~ebeln = a~ebeln
FOR ALL ENTRIES IN it_lifnr
WHERE b~lifnr = it_lifnr-lifnr.
LOOP AT it_ekbe.
CLEAR :zes,zqs,zeh,zqh.
IF it_ekbe-bewtp = 'E' AND it_ekbe-bwart IS NOT INITIAL AND it_ekbe-shkzg = 'S' .
zes = it_ekbe-dmbtr.
ELSEIF it_ekbe-bewtp = 'Q' AND it_ekbe-bwart IS INITIAL AND it_ekbe-shkzg = 'S' .
zqs = it_ekbe-arewr.
ELSEIF it_ekbe-bewtp = 'E' AND it_ekbe-bwart IS NOT INITIAL AND it_ekbe-shkzg = 'H' .
zeh = it_ekbe-dmbtr.
ELSEIF it_ekbe-bewtp = 'Q' AND it_ekbe-bwart IS INITIAL AND it_ekbe-shkzg = 'H' .
zqh = it_ekbe-arewr.
ENDIF.
it_zgrir-dmbtr = zes - zqs - zeh + zqh.
it_zgrir-lifnr = it_ekbe-lifnr.
COLLECT it_zgrir .
ENDLOOP.
ENDFUNCTION.
第二:调用FUNCTION输出暂估报表详细代码:
REPORT zgrir.
TABLES: ekko.
"定义需要使用的类型池
TYPE-POOLS:slis,truxs.
"定义内表
DATA:it_lifnr LIKE TABLE OF zlifnrgrir WITH HEADER LINE.
DATA:it_zgrir LIKE TABLE OF zgrir WITH HEADER LINE.
"引入Alv常用的变量、
DATA: gwa_field TYPE slis_fieldcat_alv." 相当于工作区
DATA: git_field LIKE TABLE OF gwa_field.
DATA: gwa_layout TYPE slis_layout_alv.
DATA: gd_repid TYPE sy-repid.
DATA: lit_sort TYPE slis_t_sortinfo_alv.
DATA: lwa_sort TYPE slis_sortinfo_alv,
gc_grid_title(50) TYPE c .
"开始时候屏幕上显示的 查询条件的 输入框
SELECT-OPTIONS:
p_lifnr FOR ekko-lifnr."供应商编码
"设定屏幕事件
START-OF-SELECTION.
"定义frm_getdata方法
PERFORM frm_getdata.
"判断it_display表中的行数
IF LINES( it_zgrir ) > 0.
"定义frm_show方法
PERFORM frm_show.
ELSE.
MESSAGE '未查询到数据' TYPE 'I'.
ENDIF.
"编写数据查询方法
*&---------------------------------------------------------------------*
*& Form frm_getdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_getdata.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_lifnr
FROM lfa1
WHERE lifnr IN p_lifnr.
CALL FUNCTION 'Z_SDL_GRIR'
TABLES
it_lifnr = it_lifnr
it_zgrir = it_zgrir.
LOOP AT it_zgrir.
ENDLOOP.
ENDFORM. "frm_getdata
"创建工具栏
*&---------------------------------------------------------------------*
*& Form alv_status_set
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_status_set.
SET TITLEBAR'ZMAJYTEST_ALV_ITLE'."双击引号内文本进入标题创建界面
SET PF-STATUS'ZMAJYTEST_ALV_LIST'."双击引号内文本进入工具栏创建界面
ENDFORM. " ALV_STATUS_SET
"界面内工具栏默认为空,点击顶部菜单栏中的Extras —> Adjust template,选择一个工具栏模板。
" 创建点击事件
*&---------------------------------------------------------------------*
*& Form alv_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->C_UCOMM text
* -->C_SELFIELD text
*----------------------------------------------------------------------*
FORM alv_user_command USING c_ucomm LIKE sy-ucomm
c_selfield TYPE slis_selfield.
CASE c_ucomm.
WHEN '&F03' OR '&F12' OR '&F15'."事件编码与工具栏中对应图标一致
LEAVE TO SCREEN 0."只有当数字0被用于分支到下一个屏幕时,离开屏幕才会终止屏幕序列。
ENDCASE.
ENDFORM. " ALV_USER_COMMAND
" 创建ALV列结构
*&---------------------------------------------------------------------*
*& Form frm_fieldcat_init
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GIT_FIELD text
*----------------------------------------------------------------------*
FORM frm_fieldcat_init USING p_git_field TYPE slis_t_fieldcat_alv.
CLEAR gwa_field.
gwa_field-fieldname = 'LIFNR'.
gwa_field-seltext_l ='供应商'.
APPEND gwa_field TO git_field.
CLEAR gwa_field.
gwa_field-fieldname = 'DMBTR'.
gwa_field-seltext_l ='暂估金额(GR/IR)'.
APPEND gwa_field TO git_field.
ENDFORM. "frm_fieldcat_init
"创建ALV
*&---------------------------------------------------------------------*
*& Form frm_show
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_show.
gd_repid = sy-repid.
gwa_layout-info_fieldname = ' COLOR'.
gwa_layout-colwidth_optimize = 'X'.
PERFORM frm_fieldcat_init USING git_field[].
SET TITLEBAR '100' WITH gc_grid_title.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
is_layout = gwa_layout
it_fieldcat = git_field[]
TABLES
t_outtab = it_zgrir[].
ENDFORM. "frm_show