*&---------------------------------------------------------------------*
*& REPORT ZMMR0015_PO_PRINT
*&---需求提出者:MM06 日期20230406-----------------------------------------------------------------*
*&
*&---BY JOKER------------------------------------------------------------------*
*程序名:Z(可执行程序)/Y(测试程序)模块名(MM/SD)R(可执行程序REPORT)开发编号_功能描述
REPORT YMMR0015_PO_PRINT.
*----------------------------------------------------------------------*
*--TABLES 申明,本程序用到的标准表
*----------------------------------------------------------------------*
TABLES: EKKO,EKPO,EKET.
*----------------------------------------------------------------------*
*--类型定义
*---TYPES关键字定义多个类型TYP_SHOW为一个结构体,里面包含多个字段极其结构,TYPE后可以是字段类型,但一般使用已有标准字段进行参照定义-------------------------------------------------------------------*
TYPES :BEGIN OF TYP_SHOW,
BUKRS TYPE EKKO-BUKRS,"公司代码
EKORG TYPE EKKO-EKORG,"公司代码
EBELN TYPE EKKO-EBELN,"采购订单号
BEDAT TYPE EKKO-BEDAT,"创建日期
LIFNR TYPE EKKO-LIFNR,"供应商编号
NAME1 TYPE LFA1-NAME1,"供应商名称
TELF1 TYPE LFA1-TELF1,"供应商电话
BSART TYPE EKKO-BSART,"采购订单类型
EKGRP TYPE EKKO-EKGRP,"采购组
MATNR TYPE EKPO-MATNR,"物料编号
TXZ01 TYPE EKPO-TXZ01,"物料描述
NETPR TYPE EKPO-NETPR,"单价
MENGE TYPE EKPO-MENGE,"数量
MEINS TYPE EKPO-MEINS,"单位
MWSKZ TYPE EKPO-MWSKZ,"
LBLKZ TYPE EKPO-LBLKZ,
EMLIF TYPE EKPO-EMLIF,
LGORT TYPE EKPO-LGORT,
WERKS TYPE EKPO-WERKS,
TITLE_LET TYPE BUT000-TITLE_LET,
EKTEL TYPE T024-EKTEL,
EINDT TYPE EKET-EINDT,
LGFSB TYPE MARC-LGFSB,
NORMT TYPE MARA-NORMT,
ZJHDD TYPE STRING,
ZSL TYPE STRING,
ZSLP TYPE P,
ZHJ TYPE EKPO-NETPR,
ZSE TYPE EKPO-NETPR,
ZZJZ TYPE EKPO-NETPR,
SLBOX TYPE C,
END OF TYP_SHOW.
TYPES : BEGIN OF TYP_PO_HEAD,
EBELN TYPE EKKO-EBELN,
BEDAT TYPE EKKO-BEDAT,
LIFNR TYPE EKKO-LIFNR,
NAME1 TYPE LFA1-NAME1,
TELF1 TYPE LFA1-TELF1,
BSART TYPE EKKO-BSART,
EKGRP TYPE EKKO-EKGRP,
TITLE_LET TYPE BUT000-TITLE_LET,
EKTEL TYPE T024-EKTEL,
ZSL TYPE STRING,
ZSLP TYPE P,
ZHJ TYPE EKPO-NETPR,
ZSE TYPE EKPO-NETPR,
END OF TYP_PO_HEAD.
TYPES : BEGIN OF TYP_PO_ITEM,
EBELN TYPE EKKO-EBELN,
MATNR TYPE EKPO-MATNR,
TXZ01 TYPE EKPO-TXZ01,
NETPR TYPE EKPO-NETPR,
MENGE TYPE EKPO-MENGE,
MEINS TYPE EKPO-MEINS,
NORMT TYPE MARA-NORMT,
MWSKZ TYPE EKPO-MWSKZ,
EINDT TYPE EKET-EINDT,
ZJHDD TYPE STRING,
ZNUM TYPE I,
END OF TYP_PO_ITEM.
*----------------------------------------------------------------------*
*--数据定义,DATA关键字定义内表,参照上述定义的类型进行表定义
*----------------------------------------------------------------------*
DATA : GT_SHOW TYPE STANDARD TABLE OF TYP_SHOW,
GS_SHOW TYPE TYP_SHOW.
DATA : GT_PO_HEAD TYPE STANDARD TABLE OF TYP_PO_HEAD,
GS_PO_HEAD TYPE TYP_PO_HEAD.
DATA : GT_PO_ITEMS TYPE STANDARD TABLE OF TYP_PO_ITEM,
GT_PO_ITEM TYPE STANDARD TABLE OF TYP_PO_ITEM,
GS_PO_ITEM TYPE TYP_PO_ITEM.
*---定义常量,并赋值TAXCN
CONSTANTS : GC_KALSM TYPE T007S-KALSM VALUE 'TAXCN'.
*----------------------------------------------------------------------*
*--选择屏幕,查询界面字段定义,SELECT-OPTIONS定义多条件查询,PARAMETERS关键字定义单值查询
*---PARAMETERS: P_matnr LIKE lips-matnr ."定义单个查询条件
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
SELECT-OPTIONS: S_BUKRS FOR EKKO-BUKRS .
SELECT-OPTIONS: S_EBELN FOR EKKO-EBELN .
SELECT-OPTIONS: S_EKORG FOR EKKO-EKORG .
SELECT-OPTIONS: S_WERKS FOR EKPO-WERKS .
SELECT-OPTIONS: S_BSTYP FOR EKKO-BSTYP .
SELECT-OPTIONS: S_BSART FOR EKKO-BSART .
SELECT-OPTIONS: S_LIFNR FOR EKKO-LIFNR .
SELECT-OPTIONS: S_BEDAT FOR EKKO-BEDAT .
SELECT-OPTIONS: S_EINDT FOR EKET-EINDT .
SELECTION-SCREEN END OF BLOCK B1 .
*----------------------------------------------------------------------*
*--事件
*----------------------------------------------------------------------*
INITIALIZATION .
*如果有不同的选择界面可在一下代码中定义,如不同按钮代表不同的查询界面
AT SELECTION-SCREEN OUTPUT .
*不同权限显示不同界面
AT SELECTION-SCREEN .
*程序执行入口
START-OF-SELECTION .
*调用子程序
PERFORM FRM_GET_DATA .
PERFORM FRM_DISPLAY_DATA TABLES GT_SHOW .
*&---------------------------------------------------------------------*
*& FORM FRM_GET_DATA
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT EKKO~BUKRS
EKKO~EBELN
EKKO~BEDAT
EKKO~LIFNR
LFA1~NAME1
LFA1~TELF1
EKKO~BSART
EKKO~EKGRP
EKPO~MATNR
EKPO~TXZ01
EKPO~NETPR
EKPO~MENGE
EKPO~MEINS
EKPO~MWSKZ
EKPO~LBLKZ
EKPO~EMLIF
EKPO~LGORT
EKPO~WERKS
BUT000~TITLE_LET
EKET~EINDT
MARC~LGFSB
MARA~NORMT
FROM EKKO
INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN
INNER JOIN MARA ON MARA~MATNR = EKPO~MATNR
INNER JOIN LFA1 ON EKKO~LIFNR = LFA1~LIFNR
INNER JOIN BUT000 ON EKKO~LIFNR = BUT000~PARTNER
INNER JOIN EKET ON EKET~EBELN = EKPO~EBELN
AND EKET~EBELP = EKPO~EBELP
INNER JOIN MARC ON MARC~MATNR = EKPO~MATNR
AND MARC~WERKS = EKPO~WERKS
INTO CORRESPONDING FIELDS OF TABLE GT_SHOW
WHERE EKKO~EBELN IN S_EBELN
AND EKKO~BUKRS IN S_BUKRS
AND EKKO~EKORG IN S_EKORG
AND EKPO~WERKS IN S_WERKS
AND EKKO~BSTYP IN S_BSTYP
AND EKKO~BSART IN S_BSART
AND EKKO~LIFNR IN S_LIFNR
AND EKKO~BEDAT IN S_BEDAT
AND EKET~EINDT IN S_EINDT
.
*采购组信息
SELECT *
FROM T024
INTO TABLE @DATA(LT_T024).
SORT LT_T024 BY EKGRP.
*税率
SELECT *
FROM T007S
INTO TABLE @DATA(LT_T007S)
WHERE T007S~SPRAS = @SY-LANGU
AND T007S~KALSM = @GC_KALSM.
SORT LT_T007S BY MWSKZ.
*供应商名称
SELECT LFA1~LIFNR,
LFA1~SORTL
FROM LFA1
INTO TABLE @DATA(LT_LFA1)
FOR ALL ENTRIES IN @GT_SHOW
WHERE LFA1~LIFNR = @GT_SHOW-EMLIF.
SORT LT_LFA1 BY LIFNR.
*仓储地点
SELECT T001L~WERKS,
T001L~LGORT,
T001L~LGOBE
FROM T001L
INTO TABLE @DATA(LT_T001L).
SORT LT_T001L BY WERKS LGORT.
LOOP AT GT_SHOW ASSIGNING FIELD-SYMBOL(<LFS_SHOW>).
<LFS_SHOW>-ZZJZ = <LFS_SHOW>-NETPR * <LFS_SHOW>-MENGE."总价值 = 单价*数量
READ TABLE LT_T024 INTO DATA(LS_T024) WITH KEY EKGRP = <LFS_SHOW>-EKGRP BINARY SEARCH."获取采购组信息(电话号码)
IF SY-SUBRC = 0.
<LFS_SHOW>-EKTEL = LS_T024-EKTEL.
ENDIF.
IF <LFS_SHOW>-LBLKZ = ZIF_BC_CONSTANTS=>GC_X.
READ TABLE LT_LFA1 INTO DATA(LS_LFA1) WITH KEY LIFNR = <LFS_SHOW>-EMLIF BINARY SEARCH. "获取供应商名称
IF SY-SUBRC = 0.
<LFS_SHOW>-ZJHDD = LS_LFA1-SORTL.
ENDIF.
ELSE.
IF <LFS_SHOW>-LGORT IS NOT INITIAL.
READ TABLE LT_T001L INTO DATA(LS_T001L) WITH KEY WERKS = <LFS_SHOW>-WERKS LGORT = <LFS_SHOW>-LGORT BINARY SEARCH."获取库存地点名称
IF SY-SUBRC = 0.
<LFS_SHOW>-ZJHDD = LS_T001L-LGOBE.
ENDIF.
ELSE.
READ TABLE LT_T001L INTO DATA(LS_T001L1) WITH KEY WERKS = <LFS_SHOW>-WERKS LGORT = <LFS_SHOW>-LGFSB BINARY SEARCH.
IF SY-SUBRC = 0.
<LFS_SHOW>-ZJHDD = LS_T001L-LGOBE.
ENDIF.
ENDIF.
ENDIF .
READ TABLE LT_T007S INTO DATA(LS_T007S) WITH KEY MWSKZ = <LFS_SHOW>-MWSKZ BINARY SEARCH. "获取税率
IF SY-SUBRC = 0.
SPLIT LS_T007S-TEXT1 AT TEXT-M05 INTO DATA(LV_MWSKZ1) DATA(LV_MWSKZ2).
<LFS_SHOW>-ZSL = LV_MWSKZ1 && TEXT-M05.
<LFS_SHOW>-ZSLP = LV_MWSKZ1.
ENDIF.
CLEAR: LS_T024,LS_LFA1,LS_T001L,LS_T001L1,LS_T007S.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> GT_SHOW
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA TABLES PT_DATA.
*---------------------------------------------------------------------*
DATA: LT_FIELDCATALOG TYPE LVC_T_FCAT, "显示数据列内表
LT_SORT TYPE LVC_T_SORT,
LS_LAYOUT TYPE LVC_S_LAYO.
PERFORM FRM_SET_LAYOUT CHANGING LS_LAYOUT .
PERFORM FRM_SET_FIELDCAT TABLES LT_FIELDCATALOG .
PERFORM FRM_SHOW_ALV TABLES PT_DATA USING LT_FIELDCATALOG LT_SORT LS_LAYOUT .
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& <-- LS_LAYOUT
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT CHANGING PS_LAYOUT TYPE LVC_S_LAYO .
CLEAR: PS_LAYOUT .
PS_LAYOUT-BOX_FNAME = 'SLBOX'.
PS_LAYOUT-ZEBRA = 'X'.
PS_LAYOUT-SEL_MODE = 'B' ."'B'.
PS_LAYOUT-CWIDTH_OPT = 'X'. "优化列宽
* PS_LAYOUT-CTAB_FNAME = 'CELLCOLOR'.
* PS_LAYOUT-STYLEFNAME = 'CELLSTYLES'.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> LT_FIELDCATALOG
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT TABLES PT_FIELDCATALOG .
DATA:L_POS TYPE I,
L_COL TYPE NUMC2 VALUE '01',
L_FIELD TYPE C LENGTH 10,
L_FIELD_NAME TYPE C LENGTH 30.
DATA: LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV .
FREE : PT_FIELDCATALOG .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'BUKRS' '' 'EKKO' 'BUKRS' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'WERKS' '' 'EKPO' 'WERKS' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'EBELN' '' 'EKKO' 'EBELN' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'BEDAT' '' 'EKKO' 'BEDAT' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'LIFNR' '' 'EKKO' 'LIFNR' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'NAME1' TEXT-002 'LFA1' 'NAME1' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'TITLE_LET' TEXT-003 'BUT000' 'TITLE_LET' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'TELF1' TEXT-004 'LFA1' 'TELF1' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'BSART' '' 'EKKO' 'BSART' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'EKORG' '' 'EKKO' 'EKORG' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'EKGRP' '' 'EKKO' 'EKGRP' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'EKTEL' TEXT-005 'EKKO' 'EKTEL' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'MATNR' '' 'EKPO' 'MATNR' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'TXZ01' '' 'EKPO' 'BISMT' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'BISMT' '' 'EKPO' 'BISMT' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'NETPR' '' 'EKPO' 'NETPR' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'MENGE' '' 'EKPO' 'MENGE' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'MEINS' '' 'EKPO' 'MEINS' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'NORMT' TEXT-007 'MARA' 'NORMT' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'EINDT' '' 'EKET' 'EINDT' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'ZJHDD' TEXT-006 '' '' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'MWSKZ' '' 'EKPO' 'MWSKZ' '' '' '' '' 'X' '' CHANGING L_POS .
PERFORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING 'ZZJZ' TEXT-008 '' '' '' '' '' '' 'X' '' CHANGING L_POS .
ENDFORM .
*&---------------------------------------------------------------------*
*& FORM FRM_ADD_FIELDCAT
*&---------------------------------------------------------------------*
FORM FRM_ADD_FIELDCAT TABLES PT_FIELDCATALOG
USING P1 P2 P3 P4 P5 P6 P7 P8 P9 PA
CHANGING P_POS TYPE I.
DATA: LS_FIELDCATALOG TYPE LVC_S_FCAT.
P_POS = P_POS + 1.
LS_FIELDCATALOG-COL_POS = P_POS.
LS_FIELDCATALOG-FIELDNAME = P1.
LS_FIELDCATALOG-COLTEXT = P2.
LS_FIELDCATALOG-REF_TABLE = P3.
LS_FIELDCATALOG-REF_FIELD = P4.
LS_FIELDCATALOG-EDIT = P5.
LS_FIELDCATALOG-OUTPUTLEN = P6.
LS_FIELDCATALOG-KEY = P7.
LS_FIELDCATALOG-CHECKBOX = P8.
LS_FIELDCATALOG-NO_ZERO = P9 .
LS_FIELDCATALOG-LZERO = ''.
LS_FIELDCATALOG-JUST = PA.
* LS_FIELDCATALOG-DECIMALS_O = 0 .
APPEND LS_FIELDCATALOG TO PT_FIELDCATALOG .
CLEAR LS_FIELDCATALOG.
ENDFORM .
*&---------------------------------------------------------------------*
*& FORM FRM_SHOW_ALV
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> PT_DATA
*& --> LT_FIELDCATALOG
*& --> LT_SORT
*& --> LS_LAYOUT
*&---------------------------------------------------------------------*
FORM FRM_SHOW_ALV TABLES PT_DATA TYPE STANDARD TABLE
USING PT_FIELDCATALOG TYPE LVC_T_FCAT
PT_SORT TYPE LVC_T_SORT
PS_LAYOUT TYPE LVC_S_LAYO .
DATA: LS_VARIANT LIKE DISVARIANT .
LS_VARIANT-REPORT = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'FRM_ALV_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_ALV_USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'
I_SAVE = 'A'
IS_VARIANT = LS_VARIANT
IT_SORT_LVC = PT_SORT[]
* I_GRID_TITLE = GV_TITLE
IS_LAYOUT_LVC = PS_LAYOUT
IT_FIELDCAT_LVC = PT_FIELDCATALOG[]
TABLES
T_OUTTAB = PT_DATA[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
FORM FRM_ALV_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'GUI_ALV'.
ENDFORM.
FORM FRM_ALV_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'. "自动刷新
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
CASE P_UCOMM .
WHEN 'PRINT' .
PERFORM FRM_PRINT_DATA.
WHEN '&IC1'.
WHEN OTHERS .
ENDCASE.
ENDFORM .
*&---------------------------------------------------------------------*
*& FORM FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM FRM_PRINT_DATA .
DATA: L_CONTROLPARA TYPE SSFCTRLOP,
L_COMPOP TYPE SSFCOMPOP,
L_CRESOP TYPE SSFCRESOP,
L_COUNT TYPE I ,
L_INDEX TYPE C LENGTH 10 VALUE '000000'.
DATA : FM_NAME TYPE RS38L_FNAM.
DATA : LV_NUM TYPE P.
LOOP AT GT_SHOW INTO GS_SHOW WHERE SLBOX = 'X'.
MOVE-CORRESPONDING GS_SHOW TO GS_PO_HEAD.
MOVE-CORRESPONDING GS_SHOW TO GS_PO_ITEM.
APPEND GS_PO_HEAD TO GT_PO_HEAD.
APPEND GS_PO_ITEM TO GT_PO_ITEM.
ENDLOOP.
IF GS_PO_HEAD IS INITIAL.
MESSAGE E007(ZBC_MSG001) .
ENDIF.
SORT GT_PO_HEAD BY EBELN.
SORT GT_PO_HEAD BY EBELN.
DELETE ADJACENT DUPLICATES FROM GT_PO_HEAD COMPARING EBELN BEDAT LIFNR.
L_COMPOP-TDDEST = L_CRESOP-TDDEST.
L_COMPOP-TDIMMED = ZIF_BC_CONSTANTS=>GC_X.
L_COMPOP-TDDELETE = ZIF_BC_CONSTANTS=>GC_X.
L_CONTROLPARA-NO_OPEN = ZIF_BC_CONSTANTS=>GC_X.
L_CONTROLPARA-NO_CLOSE = ZIF_BC_CONSTANTS=>GC_X.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = TEXT-M03
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
CONTROL_PARAMETERS = L_CONTROLPARA
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
LOOP AT GT_PO_HEAD INTO GS_PO_HEAD.
L_INDEX = L_INDEX + '000001'.
LOOP AT GT_PO_ITEM INTO GS_PO_ITEM WHERE EBELN = GS_PO_HEAD-EBELN.
L_COUNT = L_COUNT + 1.
GS_PO_ITEM-ZNUM = L_COUNT.
LV_NUM = GS_PO_ITEM-NETPR * GS_PO_ITEM-MENGE.
GS_PO_HEAD-ZHJ = GS_PO_HEAD-ZHJ + LV_NUM.
APPEND GS_PO_ITEM TO GT_PO_ITEMS.
ENDLOOP.
GS_PO_HEAD-ZSE = GS_PO_HEAD-ZSLP * GS_PO_HEAD-ZHJ / 100.
MODIFY GT_PO_HEAD FROM GS_PO_HEAD.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = L_CONTROLPARA
OUTPUT_OPTIONS = L_COMPOP
USER_SETTINGS = 'X'
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
CLEAR: GS_PO_HEAD ,GT_PO_ITEMS.
ENDLOOP.
CLEAR GT_PO_HEAD.
CALL FUNCTION 'SSF_CLOSE'.
ENDFORM.
ABAP开发报表时,大量代码无需手工键入,以上为一个标准的SMARTFORM程序,后续报表/打印功能开发中,套用此模板修改取数表、数据声明及取值逻辑即可。
以上报表实现交货单的打印输出,为某德勤开发顾问报表常用格式,套用该模板,写出了自己的第一张报表,特将源码上传做个纪念。