付款凭证列印

       经过了一系列的大餐,就不能再少了SmartForm的应用咯。当然这个例子还包括了include,和去前导零 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

先来看看ZFI006

REPORT  ZFI006.
TABLES: BSEG,BKPF,SKAT,LFA1,VBSEGS .
TYPE-POOLS: SLIS.

INCLUDE ZFI006TOP.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
  S_BUKRS FOR BKPF-BUKRS Default 5000,          "CoCode
  S_BELNR FOR BKPF-BELNR OBLIGATORY,            "FI Doc
  S_GJAHR FOR BKPF-GJAHR ,                      "Fiscal Year
  S_BLART FOR BKPF-BLART no-display,            "Doc Type
  S_BLDAT FOR BKPF-BLDAT no-display,            "Doc Date
  S_BUDAT FOR BKPF-BUDAT.                       "Posting Date
SELECTION-SCREEN END OF BLOCK b1.

INCLUDE ZFI006F00.
INCLUDE ZFI006F01.

INITIALIZATION.

AT SELECTION-SCREEN OUTPUT.

START-OF-SELECTION.
    PERFORM GET_BSEG.
    PERFORM PROCESS_DATA.
    PERFORM CAL_DATA.
    PERFORM EVENTS_BUILD.
    PERFORM LAYOUT_BUILD.
    PERFORM FIELDS_BUILD.
    PERFORM DISPLAY_DATA.
END-OF-SELECTION.

TOP-OF-PAGE.

AT USER-COMMAND.

AT LINE-SELECTION.

再来看它所包括的ZFI006Top(主要是定义数据

*&---------------------------------------------------------------------*
*&  包括                ZFI006TOP
*&---------------------------------------------------------------------*
DATA:
      I_FIELDCAT_ALV    TYPE SLIS_T_FIELDCAT_ALV,
      I_FIELDCAT        TYPE SLIS_FIELDCAT_ALV,
      I_LAYOUT          TYPE SLIS_LAYOUT_ALV,
      I_EVENTS          TYPE SLIS_T_EVENT,
      W_EVENTS          LIKE LINE OF I_EVENTS,
      I_LIST_COMMENTS   TYPE SLIS_T_LISTHEADER,
      W_LIST_COMMENTS   LIKE LINE OF I_LIST_COMMENTS,
      W_REPID           LIKE SY-REPID.

DATA: G_STATUS TYPE SLIS_FORMNAME VALUE 'STANDARD_02'.        "加工具栏
DATA: BEGIN OF I_BKPF OCCURS 0,
         BUKRS LIKE BKPF-BUKRS,  "CoCode
         BELNR LIKE BKPF-BELNR,  "FI Doc
         GJAHR LIKE BKPF-GJAHR,  "Fiscal Year
         BLART LIKE BKPF-BLART,  "Doc Type
         BLDAT LIKE BKPF-BLDAT,  "Doc Date
         BUDAT LIKE BKPF-BUDAT,  "Posting Date
         BKTXT LIKE BKPF-BKTXT,  "抬头文本
         TCODE LIKE BKPF-TCODE,  "Transaction Code
         AWKEY LIKE BKPF-AWKEY,  "Reference Doc
         BSTAT LIKE BKPF-BSTAT,  "Document Status
         USNAM LIKE BKPF-USNAM,
         WAERS LIKE BKPF-WAERS,  "币别
         XBLNR LIKE BKPF-XBLNR,  "参照号
      END OF I_BKPF.
DATA: BEGIN OF I_BSEG OCCURS 0,
         BUKRS   LIKE BKPF-BUKRS,
         BELNR   LIKE BKPF-BELNR,     "
         GJAHR   LIKE BKPF-GJAHR,
         BUZEI   LIKE BSEG-BUZEI,
         SHKZG   LIKE BSEG-SHKZG,     "借/贷
         PSWSL   LIKE BSEG-PSWSL,
         WRBTR   LIKE BSEG-WRBTR,     "本位币金额
         PSWBT   LIKE BSEG-PSWBT,
         SAKNR   LIKE BSEG-SAKNR,     "总帐科目
         HKONT   LIKE BSEG-HKONT,     "会计科目
         BSCHL   LIKE BSEG-BSCHL,
         LIFNR   LIKE BSEG-LIFNR,
         UMSKZ   LIKE BSEG-UMSKZ,
         SGTXT   LIKE BSEG-SGTXT,     "摘要
         ZUONR   LIKE BSEG-ZUONR,     "分配号码
         NAME1   LIKE LFA1-NAME1,
         TXT20   LIKE SKAT-TXT20,     "会计科目名称
      END OF I_BSEG.
DATA: BEGIN OF T_SKAT OCCURS 0,
      SAKNR LIKE SKAT-SAKNR,
      TXT20 LIKE SKAT-TXT20,
      END OF T_SKAT.
DATA W_LEN TYPE I.
*
DATA: BEGIN OF T_DATA OCCURS 0,
         BUKRS   LIKE BKPF-BUKRS,
         BELNR   LIKE BKPF-BELNR,
         GJAHR   LIKE BKPF-GJAHR,
         BLART   LIKE BKPF-BLART,
         BLDAT   LIKE BKPF-BLDAT,
         BUDAT   LIKE BKPF-BUDAT,
         TCODE   LIKE BKPF-TCODE,
         AWKEY   LIKE BKPF-AWKEY,
         BSTAT   LIKE BKPF-BSTAT,
         USNAM   LIKE BKPF-USNAM,
         WAERS   LIKE BKPF-WAERS,     "币别
         XBLNR   LIKE BKPF-XBLNR,     "参照号
         BUZEI   LIKE BSEG-BUZEI,
         SHKZG   LIKE BSEG-SHKZG,
         PSWSL   LIKE BSEG-PSWSL,
         WRBTR   LIKE BSEG-WRBTR,
         PSWBT   LIKE BSEG-PSWBT,
         SAKNR   LIKE BSEG-SAKNR,
         HKONT   LIKE BSEG-HKONT,
         BSCHL   LIKE BSEG-BSCHL,
         LIFNR   LIKE BSEG-LIFNR,
         UMSKZ   LIKE BSEG-UMSKZ,
         SGTXT   LIKE BSEG-SGTXT,
         NAME1   LIKE LFA1-NAME1,
         TXT20   LIKE SKAT-TXT20,
         BKTXT   LIKE BKPF-BKTXT,
         ZUONR   LIKE BSEG-ZUONR,     "分配号码
         BOX(1),
      END OF T_DATA.

DATA:  BEGIN OF ZITAB OCCURS 0.
        INCLUDE STRUCTURE ZMDOC_A.
DATA:  END OF ZITAB.
DATA:  W_ZITAB LIKE LINE OF ZITAB.
DATA:  I_ZITAB LIKE ZITAB OCCURS 0 WITH HEADER LINE.

DATA: W_LOOP TYPE SY-TABIX.
DATA: NN TYPE I.
DATA: RCOUNT TYPE I.
DATA  SCOUNT(8).
DATA  LSTR(20).
DATA: P_CLASS(4).
DATA: DIFF   TYPE I.
DATA: DIFT   TYPE I.
DATA: FNAME(30) VALUE 'ZFI06_SMARTFORM'.
DATA: FM_NAME TYPE  RS38L_FNAM.
DATA: S1(8),S2(5),S3(8).
DATA: LABNOTE(30).
DATA: _BELNR TYPE BKPF-BELNR,    "付款凭证号
      WRBTR1 LIKE BSEG-WRBTR,    "合计贷方金额
      WRBTR2 LIKE BSEG-WRBTR,    "合计借方金额
      WAERS1 LIKE BKPF-WAERS,    "币别
      XBLNR1 LIKE BKPF-XBLNR.    "分配号
DATA: HDATE   TYPE SY-DATUM.
DATA: P1(255).
DATA: CMP TYPE I.
DATA: P_NUM TYPE I.

紧跟着就来欣赏一下ZFI006F00跟ZFI006F01
ZFI006F00
*&---------------------------------------------------------------------*
*&  包括                ZFI006F00
*&---------------------------------------------------------------------*
*-----------------------------------------------------------------------
*    FORM PF_STATUS_SET   加工具栏
*-----------------------------------------------------------------------
FORM STANDARD_02 USING  EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STD' EXCLUDING EXTAB.
ENDFORM.                    "STANDARD_02
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM DISPLAY_DATA .
*  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'           "用户触发事件
      I_CALLBACK_PF_STATUS_SET = G_STATUS                          "调用用户事件和按钮事件
      I_CALLBACK_PROGRAM       = W_REPID                  "当前程序
      IS_LAYOUT                = I_LAYOUT                 "子函数layout_build填充的格式定义
      IT_FIELDCAT              = I_FIELDCAT_ALV[]         "子函数fields填充的各列
      IT_EVENTS                = I_EVENTS[]
      I_SAVE                   = 'A'                      "保存变式
    TABLES
      T_OUTTAB                 = T_DATA.                  "T_DATA. "假设数据都在itab内表中
ENDFORM.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_BUILD
*&---------------------------------------------------------------------*
FORM LAYOUT_BUILD .
*  i_layout-detail_popup        = 'X'.        "弹出详细信息窗口
*  i-layout-no_vline            = 'X'.        "设置列间隔线
  I_LAYOUT-INFO_FIELDNAME       = 'COLOR'.    "颜色值
*  I_LAYOUT-COLWIDTH_OPTIMIZE    = 'X'.       "优化列宽选项
  I_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
  I_LAYOUT-DETAIL_TITLEBAR      = '会计报表'.
  I_LAYOUT-NO_COLHEAD           =' '.
  W_REPID = SY-REPID.
ENDFORM.                    " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&      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  WITH KEY NAME = 'END_OF_LIST'  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.
* 页跳转
  READ TABLE I_EVENTS WITH KEY NAME = 'USER_COMMAND'   INTO W_EVENTS.
  IF SY-SUBRC = 0.
    MOVE 'USER_COMMAND' 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.
*  DATA: DEP(20),
*        SDATE(50).
*  CONCATENATE '部          门:' DEPNAME INTO DEP.
*  CONCATENATE '方          式:' P1 INTO SDATE.
*
*  CLEAR: I_LIST_COMMENTS.
*  W_LIST_COMMENTS-TYP = 'S'.
*  W_LIST_COMMENTS-KEY = ''.
*  W_LIST_COMMENTS-INFO = DEP.
*  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_END_OF_LIST_GRID = 'X'.

ENDFORM.                    "ALV_END_OF_LIST
*&--------------------------------------------------------------------*
*&      Form  ALV_END_OF_LIST
*&--------------------------------------------------------------------*
FORM ALV_END_OF_LIST.
  CLEAR: I_LIST_COMMENTS.
  W_LIST_COMMENTS-TYP = 'H'.
  W_LIST_COMMENTS-KEY = ''.
  W_LIST_COMMENTS-INFO = LSTR.
  APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
  CLEAR W_LIST_COMMENTS.

  W_LIST_COMMENTS-TYP = 'S'.
  W_LIST_COMMENTS-KEY = ''.
  W_LIST_COMMENTS-INFO = '    报表开发者:IT部--Jasson.Lee          开发日期:2011/06/02'.
  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_END_OF_LIST_GRID = 'X'.

ENDFORM.                    "ALV_END_OF_LIST
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
FORM USER_COMMAND  USING I_UCOMM LIKE SY-UCOMM
                         SELFIELD TYPE SLIS_SELFIELD.
  CLEAR T_DATA.
  READ TABLE T_DATA INDEX SELFIELD-TABINDEX.
  CASE I_UCOMM.
    WHEN '&IC1'.
      CASE SELFIELD-SEL_TAB_FIELD.
        WHEN 'T_DATA-BELNR'.
          SET PARAMETER ID 'BLN' FIELD T_DATA-BELNR.
          SET PARAMETER ID 'BUK' FIELD T_DATA-BUKRS.
          SET PARAMETER ID 'GJR' FIELD T_DATA-GJAHR.
          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
      ENDCASE.
    WHEN '&PRT'.
      PERFORM GET_ZITAB.
      PERFORM PRINT_FROM.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "callback_ucomm
*&---------------------------------------------------------------------*
*&      Form  GET_BSEG
*&---------------------------------------------------------------------*
FORM GET_BSEG .

  SELECT BUKRS BELNR GJAHR BLART BLDAT BUDAT BKTXT TCODE AWKEY BSTAT USNAM WAERS XBLNR
    INTO TABLE I_BKPF
  FROM BKPF
    WHERE BUKRS IN S_BUKRS AND BELNR IN S_BELNR AND BLDAT IN S_BLDAT
      AND GJAHR IN S_GJAHR AND BLART IN S_BLART AND BUDAT IN S_BUDAT.

  IF I_BKPF[] IS INITIAL.
    MESSAGE I000(ZMSG) WITH '没找到对应的数据,请更改查询条件'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  SELECT BUKRS BELNR GJAHR BUZEI SHKZG PSWSL WRBTR PSWBT SAKNR HKONT BSCHL LIFNR UMSKZ SGTXT ZUONR
    INTO TABLE I_BSEG
  FROM BSEG
  FOR ALL ENTRIES IN I_BKPF
  WHERE BUKRS = I_BKPF-BUKRS AND BELNR = I_BKPF-BELNR AND GJAHR = I_BKPF-GJAHR.

  SELECT BUKRS BELNR GJAHR BUZEI SHKZG  WRBTR SAKNR SAKNR AS HKONT BSCHL SGTXT ZUONR
    INTO CORRESPONDING FIELDS OF TABLE I_BSEG
  FROM VBSEGS "BSEG
  FOR ALL ENTRIES IN I_BKPF
  WHERE BUKRS = I_BKPF-BUKRS AND BELNR = I_BKPF-BELNR AND GJAHR = I_BKPF-GJAHR.

ENDFORM.                    " GET_MSEG
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
FORM PROCESS_DATA .
  DATA: _NAME1 LIKE LFA1-NAME1.
  DATA: _TXT20 LIKE SKAT-TXT20.
  SORT I_BSEG BY BUKRS GJAHR BELNR.
  SORT I_BKPF BY BUKRS GJAHR BELNR.
  LOOP AT I_BSEG.
    W_LOOP = SY-TABIX.
    CLEAR I_BKPF.
    READ TABLE I_BKPF WITH KEY BUKRS = I_BSEG-BUKRS BELNR = I_BSEG-BELNR GJAHR = I_BSEG-GJAHR BINARY SEARCH.
    IF SY-SUBRC = 0.
      T_DATA-BLART = I_BKPF-BLART.
      T_DATA-BLDAT = I_BKPF-BLDAT.
      T_DATA-BUDAT = I_BKPF-BUDAT.
      T_DATA-TCODE = I_BKPF-TCODE.
      T_DATA-AWKEY = I_BKPF-AWKEY.
      T_DATA-BSTAT = I_BKPF-BSTAT.
      T_DATA-USNAM = I_BKPF-USNAM.
      T_DATA-BKTXT = I_BKPF-BKTXT.
      T_DATA-WAERS = I_BKPF-WAERS.
      T_DATA-XBLNR = I_BKPF-XBLNR.
      MODIFY I_BSEG INDEX W_LOOP.
    ENDIF.
    T_DATA-BUKRS = I_BSEG-BUKRS.
    T_DATA-BELNR = I_BSEG-BELNR.
    T_DATA-GJAHR = I_BSEG-GJAHR.
    T_DATA-BUZEI = I_BSEG-BUZEI.
    T_DATA-SHKZG = I_BSEG-SHKZG.
    T_DATA-PSWSL = I_BSEG-PSWSL.
    IF I_BSEG-SHKZG = 'H'.
      T_DATA-WRBTR = I_BSEG-WRBTR * ( -1 ).
    ELSE.
      T_DATA-WRBTR = I_BSEG-WRBTR.
    ENDIF.
    T_DATA-PSWBT = I_BSEG-PSWBT.
    T_DATA-SAKNR = I_BSEG-SAKNR.
    T_DATA-HKONT = I_BSEG-HKONT.
    T_DATA-BSCHL = I_BSEG-BSCHL.
    T_DATA-LIFNR = I_BSEG-LIFNR.
    T_DATA-UMSKZ = I_BSEG-UMSKZ.
    T_DATA-SGTXT = I_BSEG-SGTXT.
    T_DATA-ZUONR = I_BSEG-ZUONR.
    T_DATA-NAME1 = I_BSEG-NAME1.
    T_DATA-TXT20 = I_BSEG-TXT20.
*供应商
    _NAME1 = ''.
    SELECT NAME1 INTO _NAME1 FROM LFA1 WHERE LIFNR = I_BSEG-LIFNR.
      IF _NAME1 <> ''.
        T_DATA-NAME1 = _NAME1.
      ENDIF.
    ENDSELECT.
*科目名称
    _TXT20 = ''.
    SELECT TXT20 INTO _TXT20 FROM SKAT WHERE SAKNR = T_DATA-HKONT AND SPRAS = SY-LANGU AND KTOPL = 'INT'.
      IF _TXT20 <> ''.
        T_DATA-TXT20 = _TXT20.
      ENDIF.
    ENDSELECT.
    APPEND T_DATA.
    SY-TABIX = W_LOOP + 1.
  ENDLOOP.
ENDFORM.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  CAL_DATA
*&---------------------------------------------------------------------*
FORM CAL_DATA .
  DESCRIBE TABLE T_DATA LINES RCOUNT.
  SCOUNT = RCOUNT.
  CONCATENATE '要打印的付款凭证数:' SCOUNT INTO LSTR.
  IF T_DATA[] IS INITIAL.
    MESSAGE I000(ZMSG) WITH '没找到对应的查询数据,请更改查询条件.'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.                    " CAL_DATA
*&---------------------------------------------------------------------*
*&      Form  GET_ZITAB
*&---------------------------------------------------------------------*
FORM GET_ZITAB .
  DATA:  OUTPUT1(10) TYPE C.
  LABNOTE = ''.
  _BELNR =
  WRBTR1 = 0.
  WRBTR2 = 0.
  WAERS1 = ''.    "币别
  XBLNR1 = ''.    "分配号
  CLEAR ZITAB[].
  SORT T_DATA BY BELNR BUZEI .
  CLEAR ZITAB[].
  LOOP AT T_DATA WHERE BOX = 'X'.
    W_LOOP = SY-TABIX.
    _BELNR = T_DATA-BELNR.
    WAERS1 = T_DATA-WAERS.    "币别
    XBLNR1 = T_DATA-XBLNR.    "分配号

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = T_DATA-HKONT
      IMPORTING
        OUTPUT = OUTPUT1.

    IF OUTPUT1+0(3) = '113'.
      CONCATENATE T_DATA-TXT20 ' ('OUTPUT1 ')' INTO LABNOTE. "银行名称
    ENDIF.
    ZITAB-WERKS = T_DATA-BUKRS.         "公司
    ZITAB-AUFNR = T_DATA-BELNR.         "付款凭证单号
    ZITAB-LDDAT = T_DATA-BUDAT.         "过帐日期
    ZITAB-PAKTX = T_DATA-SGTXT+0(39).   "摘要
    ZITAB-PATNR = T_DATA-ZUONR.         "分配号码
    IF T_DATA-SHKZG = 'S'.
      ZITAB-SID = 'DR'.                 "借
      ZITAB-MBLNR  = T_DATA-WRBTR.      "贷方金额
      ZITAB-EBELN  = ''.
      WRBTR1 = WRBTR1 + T_DATA-WRBTR.
    ELSE.
      ZITAB-SID = 'CR'.                 "贷
      ZITAB-MBLNR  = ''.
      ZITAB-EBELN  = T_DATA-WRBTR * ( -1 ). "贷方金额
      WRBTR2 = WRBTR2 + T_DATA-WRBTR * ( -1 ).
    ENDIF.
    IF T_DATA-LIFNR = ''.
      CONCATENATE T_DATA-TXT20  ' ('OUTPUT1 ')' INTO ZITAB-MAKTX. "会计科目名称
    ELSE.
      CONCATENATE T_DATA-NAME1  ' ('OUTPUT1 ')' INTO ZITAB-MAKTX. "会计科目名称
    ENDIF.
    APPEND ZITAB.
    SY-TABIX = W_LOOP.
  ENDLOOP.

ENDFORM.                    " GET_ZITAB
*&---------------------------------------------------------------------*
*&      Form  PRINT_FROM
*&---------------------------------------------------------------------*
FORM PRINT_FROM .

  DATA: LS_CONTROL_PARAM   TYPE  SSFCTRLOP .
  DATA: LS_COMPOSER_PARAM  TYPE  SSFCOMPOP .
  DATA: OUTOPT             TYPE  SSFCRESOP.
  DATA: I_JOB_OUTPUT_INFO  TYPE  SSFCRESCL.

  LS_CONTROL_PARAM-LANGU = '1'.
  LS_CONTROL_PARAM-NO_OPEN  = 'X'.
  LS_CONTROL_PARAM-NO_CLOSE = 'X'.

  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      CONTROL_PARAMETERS = LS_CONTROL_PARAM
      OUTPUT_OPTIONS     = LS_COMPOSER_PARAM
    IMPORTING
      JOB_OUTPUT_OPTIONS = OUTOPT
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.
* 根据SmartForm 名称获得Form的 Function Name
  FNAME = 'ZFI06_SMARTFORM'.               "列印格式
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
     EXPORTING
       FORMNAME                 =  FNAME
*      VARIANT                  = ' '
*      DIRECT_CALL              = ' '
    IMPORTING
       FM_NAME                   = FM_NAME
    EXCEPTIONS
       NO_FORM                  = 1
       NO_FUNCTION_MODULE       = 2
       OTHERS                   = 3 .
  IF SY-SUBRC <> 0.
    MESSAGE 'Call SSF_FUNCTION_MODULE_NAME Error' TYPE 'E'.
  ENDIF.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*  LOOP AT ZITAB INTO W_ZITAB.
*    MOVE-CORRESPONDING W_ZITAB TO I_ZITAB.
  CALL FUNCTION FM_NAME
    EXPORTING
      CONTROL_PARAMETERS = LS_CONTROL_PARAM
      OUTPUT_OPTIONS     = LS_COMPOSER_PARAM
      PARA1              = _BELNR
      PARA2              = LABNOTE
      PARA3              = WRBTR1
      PARA4              = WRBTR2
      PARA5              = WAERS1
      PARA6              = XBLNR1
    TABLES
      ZITAB              = ZITAB
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.
  IF SY-SUBRC <> 0.
    MESSAGE 'Call SmartForms Error' TYPE 'E'.
  ENDIF.
  IF OUTOPT-TDPREVIEW = 'X'.
*      EXIT.                   "是否全部预览
  ENDIF.
*    CLEAR I_ZITAB[].
*  ENDLOOP.

  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      JOB_OUTPUT_INFO  = I_JOB_OUTPUT_INFO
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " PRINT_FROM


ZFI006F01的code也出来吧:

*&---------------------------------------------------------------------*
*&  包括                ZFI006F01
*&---------------------------------------------------------------------*
FORM FIELDS_BUILD .

  DATA TMP_POS TYPE I.
  REFRESH I_FIELDCAT_ALV.
  CLEAR   I_FIELDCAT.

  TMP_POS = 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BOX'.
  I_FIELDCAT-REPTEXT_DDIC = '主项'.
  I_FIELDCAT-KEY = 'X'.
  I_FIELDCAT-OUTPUTLEN = '4'.
  I_FIELDCAT-INPUT = 'X'.
  I_FIELDCAT-CHECKBOX = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BUKRS'.
  I_FIELDCAT-SELTEXT_L = '公司'.
  I_FIELDCAT-OUTPUTLEN = 6.
  I_FIELDCAT-NO_ZERO   = 'X'.
  I_FIELDCAT-KEY       = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BELNR'.
  I_FIELDCAT-SELTEXT_L = '付款凭证号'.
  I_FIELDCAT-OUTPUTLEN = 10.
  I_FIELDCAT-NO_ZERO   = 'X'.
  I_FIELDCAT-KEY       = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BUZEI'.
  I_FIELDCAT-SELTEXT_L = '行项目'.
  I_FIELDCAT-OUTPUTLEN = 6.
  I_FIELDCAT-NO_ZERO   = 'X'.
  I_FIELDCAT-KEY       = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BUDAT'.
  I_FIELDCAT-SELTEXT_L = '过帐日期'.
  I_FIELDCAT-OUTPUTLEN = 8.
  I_FIELDCAT-NO_ZERO   = 'X'.
  I_FIELDCAT-KEY       = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'XBLNR'.
  I_FIELDCAT-SELTEXT_L = '参照'.
  I_FIELDCAT-OUTPUTLEN = 16.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'UMSKZ'.
  I_FIELDCAT-SELTEXT_L = '科目类型'.
  I_FIELDCAT-OUTPUTLEN = 8.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.
*
*  TMP_POS = TMP_POS + 1.
*  I_FIELDCAT-COL_POS = TMP_POS.
*  I_FIELDCAT-FIELDNAME = 'SAKNR'.
*  I_FIELDCAT-SELTEXT_L = '科目编号'.
*  I_FIELDCAT-OUTPUTLEN = 8.
*  I_FIELDCAT-NO_ZERO   = 'X'.
*  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
*  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'HKONT'.
  I_FIELDCAT-SELTEXT_L = '科目编号'.
  I_FIELDCAT-OUTPUTLEN = 8.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'TXT20'.
  I_FIELDCAT-SELTEXT_L = '科目名称'.
  I_FIELDCAT-OUTPUTLEN = 20.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'SGTXT'.
  I_FIELDCAT-SELTEXT_L = '会计摘要'.
  I_FIELDCAT-OUTPUTLEN = 30.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'SHKZG'.
  I_FIELDCAT-SELTEXT_L = '借/贷'.
  I_FIELDCAT-OUTPUTLEN = 8.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'WRBTR'.
  I_FIELDCAT-SELTEXT_L = '金额'.
  I_FIELDCAT-OUTPUTLEN = 12.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'WAERS'.
  I_FIELDCAT-SELTEXT_L = '币别'.
  I_FIELDCAT-OUTPUTLEN = 4.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'LIFNR'.
  I_FIELDCAT-SELTEXT_L = '供应商'.
  I_FIELDCAT-OUTPUTLEN = 10.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'NAME1'.
  I_FIELDCAT-SELTEXT_L = '供应商名称'.
  I_FIELDCAT-OUTPUTLEN = 20.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BKTXT'.
  I_FIELDCAT-SELTEXT_L = '抬头文本'.
  I_FIELDCAT-OUTPUTLEN = 30.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'ZUONR'.
  I_FIELDCAT-SELTEXT_L = '分配号码'.
  I_FIELDCAT-OUTPUTLEN = 8.
  I_FIELDCAT-NO_ZERO   = 'X'.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'USNAM'.
  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



  当然SmartForm就得先在Tcode:SMARTFORMS下建立相应的,有不熟悉的童鞋可以参考:

        Smart Form 系列教程
        http://blog.csdn.net/jiali765/article/details/7204118

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值