ALV SCRIPTFROM 内容比较全的一个例子

REPORT  ZQM_PRT04.

*----------------------------------------------------------------------*
* TABLES                                                               *
*----------------------------------------------------------------------*
TABLES:
  qals,PLKOD.
type-pools: slis.
DATA: it_alv         TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA gt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat TYPE lvc_s_fcat .
DATA: g_status_set   TYPE slis_formname,
      g_layout       TYPE slis_layout_alv,           " alv layout
      g_sort         TYPE slis_t_sortinfo_alv,       " ALV sort table
      g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
      g_events       TYPE slis_t_event.
*ALV相关声明
TYPE-POOLS: slis.
DATA: wcl_container TYPE REF TO cl_gui_custom_container, "一个容器
      wcl_alv TYPE REF TO cl_gui_alv_grid. "一个ALV对象
DATA gs_layout TYPE lvc_s_layo .
*data:count type i.

data:BEGIN OF gt_output OCCURS 100,
  WERK  like QALS-WERK,         "工厂
  NAME1 LIKE T001W-NAME1,       "名称
  MTYPE(10type C,             "报告单类型
  KTEXTLOS LIKE QALS-KTEXTLOS,  "编号
  MATNR like QALS-MATNR,        "物料
  MAKTX LIKE MAKT-MAKTX,        "物料名称
  LOSMENGE LIKE QALS-LOSMENGE,  "检验批数量
  LMENGE01 like QALS-LMENGE01,  "合格数量
  MENGENEINH LIKE QALS-MENGENEINH, "单位
  PRUEFLOS LIKE QALS-PRUEFLOS,  "检验批
  CHARG LIKE  QALS-CHARG,       "批次
  HSDAT LIKE MCHA-HSDAT,        "生产日期
  PASTRTERM LIKE QALS-PASTRTERM,"检验日期
  PAENDTERM LIKE QALS-PAENDTERM,"报告日期,检验结束日期
  KTEXT LIKE PLKOD-KTEXT,       "执行标准
  VBEWERTUNG LIKE QAVE-VBEWERTUNG, "使用决策
****特性
  MERKNR LIKE QAMV-MERKNR,      "检验特性编号
  VERWMERKM LIKE QAMV-VERWMERKM,  "项目编号
  KURZTEXT LIKE QAMV-KURZTEXT,  "项目名称
  AUSWMENGE1 LIKE QAMV-AUSWMENGE1, "检验标准编码
  MBEWERTG LIKE QAMR-MBEWERTG,  "结果类型
  CODE1 LIKE QAMR-CODE1,        "代码组
  JYJG LIKE QPCT-KURZTEXT,  "结果
  JYBZ LIKE QPCT-KURZTEXT,
  JYJLL(40TYPE C,
  PLAUSIOBEN like qpmk-PLAUSIOBEN, "上限
  PLAUSIUNTE like qpmk-PLAUSIUNTE, "下限
  STELLEN LIKE PLMW-STELLEN,
  uu(8type decimals 4,
  pp(8type DECIMALS 4,
  tt(8type DECIMALS 4,
  MASSEINHSW like qpmk-MASSEINHSW, "单位
  MSEHT LIKE T006A-MSEHT,
  VCODE like qave-VCODE,
  VCODEGRP like qave-VCODEGRP,
****
  JYJL(50TYPE C,              "检验结论
  VNAME LIKE QAVE-VNAME,        "签发人
***材料单
  type(10type C,             "报告单类型
  LIFNR like QALS-LIFNR,       "供应商代码
  LIFNRNAME LIKE lfa1-NAME1,   "供应商名称
  LICHN LIKE QALS-LICHN,       "供应商批次
*  CHARG LIKE QALS-CHARG,       "系统批次
  QFR(13TYPE C,
  JYR(13TYPE C,
  FHR(13TYPE C,
  MTART LIKE MARA-MTART,       "物料类型
  JYYJ(40TYPE C,             "检验依据
end of gt_output.
data: BEGIN OF gt_out3 OCCURS 100,
  PRUEFLOS LIKE QALS-PRUEFLOS,  "检验批
   type(10type C,             "报告单类型
END OF gt_out3.
data:BEGIN OF gt_display OCCURS 100,
  temp1(40type c,
  temp2(40type c,
  temp3(40type c,
  temp4(40type c,
  temp5(40type c,
END OF gt_display.
data:BEGIN OF gt_temp,
  temp1(40type c,
  temp2(40type c,
  temp3(40type c,
  temp4(40type c,
  temp5(40type c,
END OF gt_temp.
data:gt_play LIKE TABLE OF gt_temp.
DATA:gt_out1 like TABLE OF gt_output WITH HEADER LINE.
DATA:gt_out2 like TABLE OF gt_output WITH HEADER LINE.
DATA: form_name(20).
DATA: COUNT(10TYPE C.
data: t_temp type i.
data: t_amount(13type c.
****************************备注变量生命
DATA: l_mandt LIKE stxh-mandt,
            l_tdobject LIKE stxh-tdobject,
            l_tdname LIKE thead-tdname, "stxh-tdobject,
            l_tdid LIKE stxh-tdid,
            l_tdspras LIKE thead-tdspras. "stxh-TDSPRAS.

DATA i_tline LIKE tline OCCURS WITH HEADER LINE.
DATA: l-text(1000TYPE c,
      l-totali TYPE VALUE -1,
      l-total TYPE c.
DATA:tdname TYPE STXH-tdname.
data:t_len type I.
data:uu(12type c,pp(12type c,tt(12type c,kk(12type c,mm(17type c.
data:t_jybz LIKE QPCT-KURZTEXT.
data:t_code like QPCT-CODE.
data:t_jyjl like QPCT-KURZTEXT.
DATA: ok_code LIKE sy-ucomm.
DATA ls_stable TYPE lvc_s_stbl.
data:my_options like ITCPO.
data:t_type(1type c.
data:t_p(1type c.
data:t_i type i.
data:t_ii type i.
data:t_jybz1(18type c.
data:t_jybz2(18type c.
data:t_jybz3(18type c.
data:t_jyjg1(18type c.
data:t_jyjg2(18type c.
data:t_jyjg3(18type c.
data:t_jyxm1(10type c,
      t_jyxm2(10type c,
      t_jyxm3(10type c,
      t_jyxm4(10type c.
data:t_c type i.
data:t_pzr(10TYPE c,t_fhr(10TYPE c,t_jyr(10TYPE c.
data:t_jyjl1(40type c,t_jyjl2(40type c.
data:t_row type i.
data:t_name1(16type c,t_name2(16type c,t_name3(18type c,t_name4(18type c,t_name(50type c,t_name5(16type c.
data:t_jyyj1(12type c,t_jyyj2(12type c,t_jyyj3(12type c,t_jyyj4(12type c,
     t_jybzz1(12type c,t_jybzz2(12type c,t_jybzz3(12type c,t_jybzz4(12type c,
     t_jyjgg1(12type c,t_jyjgg2(12type c,t_jyjgg3(12type c,t_jyjgg4(12type c.
*data:t_amount(13) type c.
DATA: G_CHAR(12TYPE C.
DATA: t_kk(8type decimals 4.
*****************************
*----------------------------------------------------------------------*
* INTERNAL TABLES AND WORK AREAS                                       *
*----------------------------------------------------------------------*


*----------------------------------------------------------------------*
* GLOBAL VARIABLES                                                     *
*----------------------------------------------------------------------*


*----------------------------------------------------------------------*
* PARAMETERS AND SELECT-OPTIONS                                        *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
  P_WERKS  FOR qals-werk OBLIGATORY,
  P_PRUEF FOR QALS-PRUEFLOS OBLIGATORY.
*  P_MATNR  FOR QALS-MATNR OBLIGATORY.
SELECTION-SCREEN END OF BLOCK rad1.

************************************************************************
* MAIN PROCESS                                                         *
************************************************************************
*----------------------------------------------------------------------*
* INITIALIZATION                                                       *
*----------------------------------------------------------------------*
*INITIALIZATION.


**----------------------------------------------------------------------
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
*****取数
PERFORM  get_data.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET TITLEBAR 'BAR1'.
  SET PF-STATUS 'ZQM_PRT04'.
***呈现
  PERFORM display_data.
ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CASE ok_code.

    WHEN 'EXIT'.

      LEAVE PROGRAM.

    WHEN 'BACK'.

      LEAVE TO SCREEN 0.

    WHEN 'FPRINT'."打印
      PERFORM FPRINT.

    WHEN OTHERS.

  ENDCASE.
  CLEAR ok_code.



ENDMODULE.                 " USER_COMMAND_0100  INPUT
*
*AT USER-COMMAND .
*  CASE sy-ucomm .
*    WHEN 'FPRINT' .
**form print .
*      PERFORM FORM_PRINT.
*    WHEN 'EXIT' OR 'BACK' .
*      LEAVE TO SCREEN 0 .
*  ENDCASE .
*  CLEAR sy-ucomm .
*END-OF-SELECTION.

FORM get_data.
  SELECT QALS~WERK
    MARC~BESKZ AS MTYPE
    QALS~KTEXTLOS
    QALS~MATNR
    QALS~LOSMENGE
    QALS~LMENGE01
    QALS~MENGENEINH
    QALS~PRUEFLOS
    QALS~CHARG
    MCH1~HSDAT
    QAVE~VCODE
    QAVE~VCODEGRP
    QALS~PASTRTERM
    QALS~PAENDTERM
*    PLKOD~KTEXT
    QAVE~VBEWERTUNG
    QAVE~VNAME
    QAMV~MERKNR
    QAMV~VERWMERKM
    QAMV~KURZTEXT
    QAMV~AUSWMENGE1
    QAMR~MBEWERTG
    QAMR~CODE1
    QPCT~KURZTEXT AS JYJG
    MARC~BESKZ AS TYPE
    QALS~LIFNR
    QALS~LICHN
    MARA~MTART
  INTO CORRESPONDING FIELDS OF TABLE GT_OUT1
  FROM QALS
  JOIN MARC ON QALS~WERK MARC~WERKS AND QALS~MATNR MARC~MATNR
  JOIN MARA ON QALS~MATNR MARA~MATNR
  LEFT JOIN MCH1 ON QALS~MATNR MCH1~MATNR AND QALS~CHARG MCH1~CHARG
  JOIN QAVE ON QALS~PRUEFLOS QAVE~PRUEFLOS
  JOIN QAMV ON QALS~PRUEFLOS QAMV~PRUEFLOS
  JOIN QAMR ON QALS~PRUEFLOS QAMR~PRUEFLOS AND QAMV~MERKNR QAMR~MERKNR
  JOIN QPCT ON QAMV~AUSWMENGE1 QPCT~CODEGRUPPE AND QAMR~CODE1 QPCT~CODE
*  JOIN PLKOD ON QALS~PLNTY = PLKOD~PLNTY AND QALS~PLNNR = PLKOD~PLNNR AND QALS~PLNAL = PLKOD~PLNAL AND QALS~ZAEHL = PLKOD~ZAEHL
  WHERE QALS~WERK IN P_WERKS AND
*     QALS~MATNR IN P_MATNR AND
     QALS~PRUEFLOS IN P_PRUEF AND
     QAVE~VBEWERTUNG <> ''.

  SELECT QALS~WERK
    MARC~BESKZ AS MTYPE
    QALS~KTEXTLOS
    QALS~MATNR
    QALS~LOSMENGE
    QALS~LMENGE01
    QALS~MENGENEINH
    QALS~PRUEFLOS
    QALS~CHARG
    MCH1~HSDAT
    QAVE~VCODE
    QAVE~VCODEGRP
    QALS~PASTRTERM
    QALS~PAENDTERM
*    PLKOD~KTEXT
    QAVE~VBEWERTUNG
    QAVE~VNAME
    QAMV~MERKNR
    QAMV~VERWMERKM
    QAMV~KURZTEXT
    QAMV~AUSWMENGE1
    QAMR~MBEWERTG
    QAMR~CODE1
*    QPCT~KURZTEXT AS JYJG
    QAMR~ORIGINAL_INPUT AS JYJG
    QPMK~PLAUSIUNTE
    QPMK~PLAUSIOBEN
    QPMK~PLAUSIUNTE as uu
    QPMK~PLAUSIOBEN as pp
    QPMK~MASSEINHSW
    MARC~BESKZ AS TYPE
    QALS~LIFNR
    QALS~LICHN
    MARA~MTART
  INTO CORRESPONDING FIELDS OF TABLE GT_OUT2
  FROM QALS
  JOIN MARC ON QALS~WERK MARC~WERKS AND QALS~MATNR MARC~MATNR
  JOIN MARA ON QALS~MATNR MARA~MATNR
  LEFT JOIN MCH1 ON QALS~MATNR MCH1~MATNR AND QALS~CHARG MCH1~CHARG
  JOIN QAVE ON QALS~PRUEFLOS QAVE~PRUEFLOS
  JOIN QAMV ON QALS~PRUEFLOS QAMV~PRUEFLOS
  JOIN QAMR ON QALS~PRUEFLOS QAMR~PRUEFLOS AND QAMV~MERKNR QAMR~MERKNR
  JOIN QPMK ON QAMV~VERWMERKM QPMK~MKMNR AND QAMV~QPMK_WERKS QPMK~ZAEHLER AND QAMV~MKVERSION QPMK~VERSION
*  JOIN QPCT ON QAMV~AUSWMENGE1 = QPCT~CODEGRUPPE AND QAMR~CODE1 = QPCT~CODE
*  JOIN PLKOD ON QALS~PLNTY = PLKOD~PLNTY AND QALS~PLNNR = PLKOD~PLNNR AND QALS~PLNAL = PLKOD~PLNAL AND QALS~ZAEHL = PLKOD~ZAEHL
  WHERE QALS~WERK IN P_WERKS AND
*     QALS~MATNR IN P_MATNR AND
     QALS~PRUEFLOS IN P_PRUEF AND
     QAVE~VBEWERTUNG <> '' AND
    QAMV~AUSWMENGE1 ''.


  loop at gt_out1.
    append gt_out1 to gt_output.
    CLEAR:gt_out1.
  endloop.
  loop at gt_out2.
    append gt_out2 to gt_output.
    CLEAR:gt_out2.
  endloop.
  t_temp 0.
  LOOP AT GT_OUTPUT.
    PERFORM GET_TEXT.
    if gt_output-mtype 'E'.
      t_p gt_output-type.
      GT_OUTPUT-MTYPE '产成品检验报告单'.
    ELSE.
      t_p gt_output-type.
      GT_OUTPUT-MTYPE '材料检验报告单'.
    ENDIF.
    if gt_output-type 'E'.
      select SINGLE QPCT~KURZTEXT
      into t_jyjl
      from QPCT
      WHERE QPCT~CODEGRUPPE GT_OUTPUT-VCODEGRP AND
        QPCT~CODE GT_OUTPUT-VCODE.
*      CONCATENATE '结论:"' t_jyjl '";  ' gt_output-jyjl into gt_display-temp2.
*      CONDENSE:gt_display-temp2.
      if gt_output-vbewertung 'A'.
*        CONCATENATE '结论:"' t_jyjl '";  符合 ' GT_OUTPUT-KTEXT ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONCATENATE '符合 ' GT_OUTPUT-KTEXT ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONDENSE:GT_OUTPUT-JYJL.

      else.
*        CONCATENATE '结论:"' t_jyjl '";  不符合 ' GT_OUTPUT-KTEXT ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONCATENATE '不符合 ' GT_OUTPUT-KTEXT ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONDENSE:GT_OUTPUT-JYJL.
      ENDIF.
    else.
      select SINGLE QPCT~KURZTEXT
      into t_jyjl
      from QPCT
      WHERE QPCT~CODEGRUPPE GT_OUTPUT-VCODEGRP AND
        QPCT~CODE GT_OUTPUT-VCODE.
*      CONCATENATE '结论:"' t_jyjl '";  ' gt_output-jyjl into gt_display-temp2.
*      CONDENSE:gt_display-temp2.
      if gt_output-vbewertung 'A'.
*        CONCATENATE '结论:"' t_jyjl '";  符合 ' GT_OUTPUT-KTEXT ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONCATENATE '符合 ' GT_OUTPUT-JYJL ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONDENSE:GT_OUTPUT-JYJL.

      else.
*        CONCATENATE '结论:"' t_jyjl '";  不符合 ' GT_OUTPUT-KTEXT ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONCATENATE '不符合 ' GT_OUTPUT-JYJL ' 标准要求。' INTO GT_OUTPUT-JYJL.
        CONDENSE:GT_OUTPUT-JYJL.
      ENDIF.

**** 增加取检验依据数据
      select SINGLE TXZ01 INTO gt_output-jyyj
      from ZQM_INSP_BASIS
      where WERKS GT_OUTPUT-WERK and
            MATNR GT_OUTPUT-MATNR.
    endif.

*****  取物料描述
    select single makt~MAKTX
    INTO GT_OUTPUT-MAKTX
    from makt
    where MATNR GT_OUTPUT-MATNR and
      SPRAS 1.

***** 取工厂名称
    select single t001w~NAME1
    INTO GT_OUTPUT-NAME1
    from t001w
    where WERKS GT_OUTPUT-WERK.
****  取供应商账户名称
    select SINGLE lfa1~NAME1
    into GT_OUTPUT-LIFNRNAME
    from lfa1
    where LIFNR GT_OUTPUT-LIFNR.

    t_amount gt_output-LOSMENGE.
    IF GT_OUTPUT-MBEWERTG 'A'.
      GT_OUTPUT-JYJLL '合格'.
    ELSE.
      GT_OUTPUT-JYJLL '不合格'.
    endif.
****检验标准
    SEARCH gt_output-VERWMERKM for 'XJQL' ABBREVIATED.
    IF SY-SUBRC 0.
      IF GT_OUTPUT-MBEWERTG 'A'.
        T_LEN STRLENGT_OUTPUT-JYJG ).
        T_LEN T_LEN 3.
        SEARCH GT_OUTPUT-JYJG FOR '符合' ABBREVIATED  .
        IF sy-subrc 0.
          GT_OUTPUT-JYBZ GT_OUTPUT-JYJG+3(t_len).
          t_temp t_temp + 1.
        else.
          t_temp 0.
        endif.
        if t_temp 0.
          T_LEN STRLENGT_OUTPUT-JYJG ).
          T_LEN T_LEN 4.
          SEARCH GT_OUTPUT-JYJG FOR '不符合' ABBREVIATED  .
          IF sy-subrc 0.
            GT_OUTPUT-JYBZ GT_OUTPUT-JYJG+4(t_len).
            t_temp t_temp + 1.
          else.
            t_temp 0.
          endif.
        endif.
        if t_temp  0.
          GT_OUTPUT-JYBZ GT_OUTPUT-JYJG.
        endif.
      else.
        t_code gt_output-code1.
        t_code t_code 1.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            INPUT  t_code
          IMPORTING
            OUTPUT t_code.
        select SINGLE QPCT~KURZTEXT
        into t_jybz
        from qpct
        where QPCT~CODEGRUPPE gt_output-AUSWMENGE1 and
              QPCT~CODE t_code.
        IF SY-SUBRC <> 0.
          t_jybz ''.
        endif.
        T_LEN STRLENt_jybz ).
        T_LEN T_LEN 3.
        SEARCH t_jybz FOR '符合' ABBREVIATED  .
        IF sy-subrc 0.
          GT_OUTPUT-JYBZ t_jybz+3(t_len).
          t_temp t_temp + 1.
        else.
          t_temp 0.
        endif.
        if t_temp 0.
          T_LEN STRLENt_jybz ).
          T_LEN T_LEN 4.
          SEARCH t_jybz FOR '不符合' ABBREVIATED  .
          IF sy-subrc 0.
            GT_OUTPUT-JYBZ t_jybz+4(t_len).
            t_temp t_temp + 1.
          else.
            t_temp 0.
          endif.
        endif.
        if t_temp  0.
          GT_OUTPUT-JYBZ t_jybz.
        endif.
      endif.

    ELSE.
*****取上下限标准
      select SINGLE PLMW~PLAUSIUNTE PLMW~PLAUSIOBEN PLMW~SOLLWERT PLMW~STELLEN
      INTO (gt_output-uu,gt_output-pp,gt_output-tt,gt_output-STELLEN)
      FROM PLMW
      JOIN PLMK ON PLMK~PLNTY PLMW~PLNTY AND PLMK~PLNNR PLMW~PLNNR AND PLMK~PLNKN PLMW~PLNKN AND
        PLMK~KZEINSTELL PLMW~KZEINSTELL AND PLMK~MERKNR PLMW~MERKNR
      WHERE PLMW~MATNR GT_OUTPUT-MATNR AND
            PLMW~WERKS GT_OUTPUT-WERK AND
            PLMK~VERWMERKM gt_output-VERWMERKM.


      SELECT SINGLE MSEHT
      INTO GT_OUTPUT-MSEHT
      FROM T006A
      WHERE SPRAS AND
        MSEHI gt_output-MASSEINHSW.
      IF gt_output-uu 0.
        if gt_output-pp 0.
          gt_output-jybz ''.
        else.
          pp gt_output-pp.
           PERFORM SET_NUM  USING PP GT_OUTPUT-STELLEN.
            PP G_CHAR.
            CLEAR:G_CHAR.
          CONCATENATE '≤ ' pp GT_OUTPUT-MSEHT INTO GT_OUTPUT-JYBZ.
          CONDENSE:gt_output-jybz.
        endif.
      ELSE.
        if gt_output-pp 0.
          uu gt_output-uu.
          PERFORM SET_NUM  USING UU GT_OUTPUT-STELLEN.
            UU G_CHAR.
            CLEAR:G_CHAR.
          CONCATENATE '≥ ' uu GT_OUTPUT-MSEHT INTO GT_OUTPUT-JYBZ.
          CONDENSE:gt_output-jybz.
        else.
          if gt_output-tt 0.
            uu gt_output-uu.
             PERFORM SET_NUM  USING UU GT_OUTPUT-STELLEN.
            UU G_CHAR.
            CLEAR:G_CHAR.
            pp gt_output-pp.
             PERFORM SET_NUM  USING PP GT_OUTPUT-STELLEN.
            PP G_CHAR.
            CLEAR:G_CHAR.
            CONCATENATE uu ' - ' pp GT_OUTPUT-MSEHT INTO GT_OUTPUT-JYBZ.
            CONDENSE:gt_output-jybz.
          else.
            tt gt_output-tt.
            t_kk gt_output-pp gt_output-tt.
            kk t_kk.
            PERFORM SET_NUM  USING TT GT_OUTPUT-STELLEN.
            TT G_CHAR.
            CLEAR:G_CHAR.
             PERFORM SET_NUM  USING KK GT_OUTPUT-STELLEN.
             KK G_CHAR.
            CLEAR:G_CHAR.
            CONCATENATE tt ' ± ' kk GT_OUTPUT-MSEHT INTO GT_OUTPUT-JYBZ.
            CONDENSE:gt_output-jybz.
          endif.
        endif.
      ENDIF.

    ENDIF.
    MODIFY GT_OUTPUT.
    CLEAR:GT_OUTPUT.
  ENDLOOP.
****取出对应检验批次
  loop at gt_output.
    gt_out3-PRUEFLOS gt_output-PRUEFLOS.
    gt_out3-type gt_output-type.
    append gt_out3.
    CLEAR:gt_output.
  ENDLOOP.
  sort gt_out3 by PRUEFLOS.
  DELETE ADJACENT DUPLICATES FROM gt_out3 COMPARING ALL FIELDS.
  loop at gt_out3.
    READ TABLE gt_output with key PRUEFLOS gt_out3-PRUEFLOS.
    IF sy-tabix >= 1.
      if gt_output-type 'E'.  "产成品
***   第一行放公司
        gt_display-temp2 gt_output-NAME1.
        append gt_display.
        CLEAR:gt_display.
***   第二行放报告单类别
        gt_display-temp2 gt_output-mtype.
        APPEND gt_display.
        CLEAR:gt_display.
***   第三行放编号
        CONCATENATE '编号:' gt_output-KTEXTLOS INTO gt_display-temp1.
        CONDENSE:gt_display-temp1.
        APPEND gt_display.
        CLEAR:gt_display.
***   第四行放产品名称、数量
        gt_display-temp1 '产品名称'.
        CONCATENATE gt_output-matnr '/' gt_output-MAKTX into gt_display-temp2.
        CONDENSE:gt_display-temp2.
*        gt_display-temp2 = gt_output-MAKTX.
        gt_display-temp3 '数量'.
*        IF GT_OUTPUT-vbewertung = 'A'.
*          mm = gt_output-LOSMENGE.
*        else.
          if gt_output-LMENGE01 0.
            mm gt_output-LOSMENGE.
          else.
            mm gt_output-LMENGE01.
          endif.

*        endif.
        CONCATENATE mm ' ' gt_output-MENGENEINH INTO gt_display-temp4.
        APPEND gt_display.
        CLEAR:gt_display.
***   第五行放检验批
        gt_display-temp1 '检验批'.
        gt_display-temp2 gt_output-PRUEFLOS.
        APPEND gt_display.
        CLEAR:gt_display.
***   第六行放批号,日期
        gt_display-temp1 '生产批号'.
        gt_display-temp2 gt_output-CHARG.
        gt_display-temp3 '生产日期'.
        if gt_output-hsdat '00000000'.
          gt_display-temp4 ''.
        else.
          gt_display-temp4 gt_output-hsdat.
        endif.
        APPEND gt_display.
        CLEAR:gt_display.
***   第七行放检验日期、报告日期
        gt_display-temp1 '检验日期'.
        gt_display-temp2 gt_output-PASTRTERM.
        gt_display-temp3 '报告日期'.
        gt_display-temp4 gt_output-PAENDTERM.
        APPEND gt_display.
        CLEAR:gt_display.
***   第八行放执行标准
        gt_display-temp1 '执行标准'.
        gt_display-temp2 gt_output-KTEXT.
        APPEND gt_display.
        CLEAR:gt_display.
***   第九行放标题
        gt_display-temp1 '检验项目'.
        gt_display-temp2 '检验标准'.
        gt_display-temp3 '检验结果'.
        gt_display-temp4 '结论'.
        APPEND gt_display.
        CLEAR:gt_display.
****  第十行开始放明细
        loop at gt_output where PRUEFLOS gt_out3-PRUEFLOS.
          gt_display-temp1 gt_output-KURZTEXT.
          gt_display-temp2 gt_output-jybz.
          gt_display-temp3 gt_output-jyjg.
          gt_display-temp4 gt_output-jyjll.
          APPEND gt_display.
          CLEAR:gt_display.
        endloop.
*  **  最后放尾页
        gt_display-temp1 '检验结论'.
        gt_display-temp2 gt_output-jyjl.
        APPEND gt_display.
        CLEAR:gt_display.
**** 自建表取数
****签字人取法
        select SINGLE pzuser fhuser jyuser
        into (gt_display-temp1,gt_display-temp3,gt_display-temp4)
        from zqm_jy_user
        where werks gt_output-werk and
              mtype 'A' and
              stdate <= gt_output-PAENDTERM and
              endate >= gt_output-PAENDTERM.
        gt_display-temp2 ''.
        CONCATENATE '签发人:' gt_display-temp1 into gt_display-temp1.
        CONCATENATE '复核人:' gt_display-temp3 into gt_display-temp3.
        CONCATENATE '检验人:'  gt_display-temp4 into gt_display-temp4.
*  **  检验人

        APPEND gt_display.
        CLEAR:gt_display.
      ELSE."原材料
***   第一行放公司
        gt_display-temp2 gt_output-NAME1.
        append gt_display.
        CLEAR:gt_display.
***   第二行放报告单类别
        gt_display-temp2 gt_output-mtype.
        APPEND gt_display.
        CLEAR:gt_display.
***   第三行放编号
        CONCATENATE '编号:' gt_output-KTEXTLOS INTO gt_display-temp1.
        CONDENSE:gt_display-temp1.
        APPEND gt_display.
        CLEAR:gt_display.
***   第四行放产品名称、数量
        gt_display-temp1 '产品名称'.
        CONCATENATE gt_output-matnr '/' gt_output-MAKTX into gt_display-temp2.
        CONDENSE:gt_display-temp2.
*        gt_display-temp2 = gt_output-MAKTX.
        gt_display-temp3 '数量'.
*        IF GT_OUTPUT-vbewertung = 'A'.
*          mm = gt_output-LOSMENGE.
*        else.
          if gt_output-LMENGE01 0.
            mm gt_output-LOSMENGE.
          else.
            mm gt_output-LMENGE01.
          endif.
*        endif.
        CONCATENATE mm ' ' gt_output-MENGENEINH INTO gt_display-temp4.
        APPEND gt_display.
        CLEAR:gt_display.

***   第五行放供应商,日期
        gt_display-temp1 '供应商'.
        CONCATENATE gt_output-LIFNR '/' gt_output-LIFNRNAME INTO gt_display-temp2.
        CONDENSE:gt_display-temp2.
        gt_display-temp3 '生产日期'.
        if gt_output-hsdat '00000000'.
          gt_display-temp4 ''.
        else.
          gt_display-temp4 gt_output-hsdat.
        endif.
        APPEND gt_display.
        CLEAR:gt_display.
***   第六行放供应商批次、系统批次
        gt_display-temp1 '检验批'.
        gt_display-temp2 gt_output-PRUEFLOS."gt_output-LICHN.
        gt_display-temp3 '批次'.
        gt_display-temp4 gt_output-CHARG.
        APPEND gt_display.
        CLEAR:gt_display.
***   第七行放检验日期、报告日期
        gt_display-temp1 '检验日期'.
        gt_display-temp2 gt_output-PASTRTERM.
        gt_display-temp3 '报告日期'.
        gt_display-temp4 gt_output-PAENDTERM.
        APPEND gt_display.
        CLEAR:gt_display.
***   第八行放执行标准
*      gt_display-temp1 = '执行标准'.
*      gt_display-temp2 = gt_output-KTEXT.
*      APPEND gt_display.
*      CLEAR:gt_display.
***   第九行放标题
        gt_display-temp1 '检验项目'.
        gt_display-temp2 '检验依据'.
        gt_display-temp3 '检验标准'.
        gt_display-temp4 '检验结果'.
        gt_display-temp5 '检验结论'.
        APPEND gt_display.
        CLEAR:gt_display.
****  第十行开始放明细
        loop at gt_output where PRUEFLOS gt_out3-PRUEFLOS.
          gt_display-temp1 gt_output-KURZTEXT.
          gt_display-temp2 gt_output-jyyj.
          gt_display-temp3 gt_output-jybz.
          gt_display-temp4 gt_output-jyjg.
          gt_display-temp5 gt_output-jyjll.
          APPEND gt_display.
          CLEAR:gt_display.
        endloop.
*  **  最后放尾页
        gt_display-temp1 '检验结论'.
        select SINGLE QPCT~KURZTEXT
        into t_jyjl
        from QPCT
        WHERE QPCT~CODEGRUPPE GT_OUTPUT-VCODEGRP AND
          QPCT~CODE GT_OUTPUT-VCODE.
*        CONCATENATE '结论:"' t_jyjl '";  ' gt_output-jyjl into gt_display-temp2.
*        CONDENSE:gt_display-temp2.
         gt_display-temp2 gt_output-jyjl.
*      if gt_output-VBEWERTUNG = 'A'.
*        CONCATENATE gt_output-jyjl '  结论合格' into gt_display-temp2.
*        CONDENSE:gt_display-temp2.
**      gt_display-temp2 = '合格'.
*      else.
*        CONCATENATE gt_output-jyjl '  结论不合格' into gt_display-temp2.
*        CONDENSE:gt_display-temp2.
**       gt_display-temp2 = '不合格'.
*      endif.
*      gt_display-temp2 = gt_output-jyjl.
        APPEND gt_display.
        CLEAR:gt_display.
**** 自建表取数
****签字人取法
        if gt_output-MTART 'ROH'.
        select SINGLE pzuser fhuser jyuser
        into (gt_display-temp1,gt_display-temp3,gt_display-temp4)
        from zqm_jy_user
        where werks gt_output-werk and
              mtype 'B' and
              stdate <= gt_output-PAENDTERM and
              endate >= gt_output-PAENDTERM.
        endif.
        if gt_output-MTART 'VERP'.
        select SINGLE pzuser fhuser jyuser
        into (gt_display-temp1,gt_display-temp3,gt_display-temp4)
        from zqm_jy_user
        where werks gt_output-werk and
              mtype 'C' and
              stdate <= gt_output-PAENDTERM and
              endate >= gt_output-PAENDTERM.
        endif.
        gt_display-temp2 ''.
        CONCATENATE '批准人:' gt_display-temp1 into gt_display-temp1.
        CONCATENATE '复核人:' gt_display-temp3 into gt_display-temp3.
        CONCATENATE '检验人:'  gt_display-temp4 into gt_display-temp4.
*  **  检验人
        APPEND gt_display.
        CLEAR:gt_display.
      ENDIF.
    endif.
  ENDLOOP.

  loop at gt_display.
    append gt_display to gt_play.
    CLEAR:gt_display.
  ENDLOOP.

***
if gt_output[] is INITIAL.

else.
CALL SCREEN 100.
endif.
*  LOOP AT GT_OUTPUT.

*    PERFORM FORM_PRINT.
*  ENDLOOP.
ENDFORM.

FORM FORM_PRINT .
  DATA: lld_flag.
  DATA: tkd_flag.

  DATA: index TYPE i.

  CLEAR lld_flag.
  CLEAR tkd_flag.
  index 0.
  count 0.
  if t_p 'E'.
    form_name 'ZQM_PRT041'.
  ELSE.
    form_name 'ZQM_PRT042'.
  ENDIF.

  IF lld_flag is INITIAL.
    lld_flag 'X'.
    PERFORM open_form.
  ENDIF.

ENDFORM.                    " FORM_PRINT
*&---------------------------------------------------------------------*
*&      Form  OPEN_FORM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OPEN_FORM .
*  my_options-TDDEST = 'WAHAHA_PRT'. "打印设备
  my_options-TDIMMED 'X'.
  my_options-TDDELETE 'X'.
  CALL FUNCTION 'OPEN_FORM'
      EXPORTING
        form   form_name
      OPTIONS  my_options
      EXCEPTIONS
        OTHERS 1.
  if sy-subrc <> 0 .
    t_type 'X'.
  else.
    t_type ''.
  endif.
ENDFORM.                    " OPEN_FORM
*&---------------------------------------------------------------------*
*&      Form  PRINT_LLD_HEAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRINT_LLD_HEAD .
*CALL FUNCTION 'WRITE_FORM'
*    EXPORTING
*      element = 'LLD'
*      window  = 'TITLE'.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'LLD'
      window  'HEAD'.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'ITEM_HEAD1'
      window  'HEAD1'.

*  CALL FUNCTION 'WRITE_FORM'
*    EXPORTING
*      element = 'LLD_HEAD1'
*      window  = 'HEAD1'.
ENDFORM.                    " PRINT_LLD_HEAD
*&---------------------------------------------------------------------*
*&      Form  PRINT_LLD_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRINT_LLD_ITEM .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'ITEM_BODY'
      window  'MAIN'

        FUNCTION 'APPEND'
        TYPE     'BODY'.

ENDFORM.                    " PRINT_LLD_ITEM

FORM PRINT_LLD_ITEM2 .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'ITEM_BODY2'
      window  'MAIN2'

*        FUNCTION = 'APPEND'
        TYPE     'BODY'.

ENDFORM.                    " PRINT_LLD_ITEM

FORM PRINT_LLD_BODY .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'LLD_BODY'
      window  'MAIN'.
ENDFORM.                    " PRINT_LLD_ITEM

FORM PRINT_TKD_BODY .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TKD_BODY'
      window  'MAIN'

        FUNCTION 'APPEND'
        TYPE     'BODY'.
ENDFORM.                    " PRINT_LLD_ITEM
FORM PRINT_TKD_BODY2 .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TKD_BODY'
      window  'MAIN2'

*        FUNCTION = 'APPEND'
        TYPE     'BODY'.
ENDFORM.                    " PRINT_LLD_ITEM
FORM PRINT_TKD_BODY_D .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TKD_BODY'
      window  'MAIN'
      function 'DELETE'.
ENDFORM.                    " PRINT_LLD_ITEM
FORM PRINT_TKD_BODY_OTHER.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TKD_BODY'
      window  'MAIN'.
ENDFORM.                    " PRINT_LLD_ITEM

FORM PRINT_BOTTOM .
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'LLD'
      window  'MAIN'.
ENDFORM.                    " PRINT_LLD_ITEM

FORM NEXT_PAGE.
  CALL FUNCTION 'CONTROL_FORM'
          EXPORTING
            COMMAND 'NEW-PAGE'.
ENDFORM.

FORM PRINT_HEAD.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'ITEM_HEAD1'
      window  'HEAD1'.
ENDFORM.

FORM PRINT_HEAD2.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'ITEM_HEAD2'
      window  'HEAD2'.
ENDFORM.

FORM PRINT_TPP_BODY.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TPP_BODY'
      window  'MAIN'.
ENDFORM.
FORM PRINT_TJY_BT.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TJY_BT'
      window  'MAIN'.
ENDFORM.
FORM PRINT_TJYH_BT.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TJYH_BT'
      window  'MAIN'.
ENDFORM.
FORM PRINT_TPD_BODY.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'TPD_BODY'
      window  'MAIN'.
ENDFORM.
FORM PRINT_PIC_BODY.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'PIC_BODY'
      window  'MAIN'.
ENDFORM.
FORM PRINT_PIC2_BODY.
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element 'PIC2_BODY'
      window  'MAIN'.
ENDFORM.

FORM GET_TEXT.
  CONCATENATE sy-mandt GT_OUTPUT-PRUEFLOS 'L' INTO tdname.
  SELECT SINGLE mandt tdobject tdname tdid tdspras
   INTO  (l_mandt,l_tdobject,l_tdname,l_tdid,l_tdspras)
   FROM stxh
   CLIENT SPECIFIED
   WHERE  mandt sy-mandt
          AND tdid 'QAVE'
          AND tdname tdname.
  if sy-subrc 0.
   CALL FUNCTION 'READ_TEXT'
     EXPORTING
       client                        sy-mandt
       id                            l_tdid
       language                      l_tdspras
       name                          l_tdname
       object                        l_tdobject
*     ARCHIVE_HANDLE                = 0
*     LOCAL_CAT                     = ' '
*   IMPORTING
*     HEADER                        =
     TABLES
       lines                         i_tline
    EXCEPTIONS
      id                            1
      language                      2
      name                          3
      not_found                     4
      object                        5
      reference_check               6
      wrong_access_to_archive       7
      OTHERS                        8.

     LOOP AT i_tline.
       IF sy-tabix 1.
         if gt_output-type 'E'.
           GT_OUTPUT-KTEXT i_tline-tdline.
         else.
           GT_OUTPUT-JYJL i_tline-tdline.
         endif.
       ENDIF.
     ENDLOOP.
   endif.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM display_data.
  IF gt_display[] is INITIAL.
    return.
  ENDIF.
*  sort gt_display by PRUEFLOS MERKNR.
*  PERFORM display_alv TABLES gt_display USING '检验报告单'.

*-----如果窗口还没有创建ALV对象则创建它
  IF  wcl_container IS INITIAL .
    CREATE OBJECT: wcl_container "建立容器对象
     EXPORTING
       container_name 'ALV_CONTAINER'. "容器对象的名字
    CREATE OBJECT wcl_alv  "建立ALV对象
      EXPORTING
        i_parent wcl_container. "ALV对象所在的容器

    PERFORM build_fieldcat.
*-----设置布局
    PERFORM prepare_layout CHANGING gs_layout .

*-----显示alv
    CALL METHOD wcl_alv->set_table_for_first_display
      EXPORTING
        is_layout                     gs_layout  "传入布局设置
*       it_toolbar_excluding          = gt_exclude  "传入按钮设置
      CHANGING
        it_outtab                     gt_play  "传入内表
        it_fieldcatalog               gt_fieldcat  "传入表头
*       it_sort                       = gt_sort  "传入排序标准
*       it_filter                     = s_line
      EXCEPTIONS
        invalid_parameter_combination 1
        program_error                 2
        too_many_lines                3
        OTHERS                        4.
  ELSE .

*----刷新alv
    CALL METHOD wcl_alv->refresh_table_display
      EXPORTING
        is_stable ls_stable "这个是稳定刷新属性,作用是再次刷新表格的时候滚动条停留在当前位置不动
      EXCEPTIONS
        finished  1
        OTHERS    2.
    IF sy-subrc <> 0.
*--异常处理
    ENDIF.
  ENDIF .
ENDFORM.                    "DISPLAY_DATA

FORM build_fieldcat.

  REFRESH it_alv.
  PERFORM alv_append USING 'TEMP1' '' .
  PERFORM alv_append USING 'TEMP2' '' .

  PERFORM alv_append USING 'TEMP3' '' .

  PERFORM alv_append USING 'TEMP4' '' .
  PERFORM alv_append USING 'TEMP5' '' .

ENDFORM.                    " file_upload

FORM alv_append  USING fieldname seltext_l.
  CLEAR ls_fcat.
  ls_fcat-fieldname fieldname.
  ls_fcat-coltext seltext_l.
  ls_fcat-seltext seltext_l.
  APPEND ls_fcat TO gt_fieldcat.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  PREPARE_LAYOUT  ALV格式
*&---------------------------------------------------------------------*
FORM prepare_layout  CHANGING gs_layout TYPE lvc_s_layo.
  gs_layout-zebra 'X' .   "隔行变色
  gs_layout-cwidth_opt 'X'.  "自动调整行宽
  gs_layout-sel_mode 'A'.
ENDFORM.                    " PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FPRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FPRINT .
  LOOP AT GT_OUT3.
    t_p ''.
    count 0.
    t_i 0.
    t_ii 0.
    t_row 0.
    LOOP AT GT_OUTPUT WHERE PRUEFLOS GT_OUT3-PRUEFLOS.
      if t_p ''.
        t_p gt_output-type.
      ENDIF.
      if gt_output-hsdat '00000000'.
        gt_output-hsdat ''.
      endif.
      if gt_output-LMENGE01 0.
        t_amount gt_output-LOSMENGE.
      else.
        t_amount gt_output-LMENGE01.
      endif.
      modify gt_output.
      CLEAR:gt_output.
      t_i t_i + 1.
      t_row t_row + 1.
    ENDLOOP.
*** 判断有多少页
    if t_i <= 4.
      t_ii 1.
    elseif t_i <= 12.
      t_ii 2.
    elseif t_i <= 20.
      t_ii 3.
    elseif t_i <= 28.
      t_ii 4.
    elseif t_i <= 36.
      t_ii 5.
    endif.
****
*    t_ii = 2."测试用
*    t_row = 5.

    read table gt_output WITH KEY PRUEFLOS GT_OUT3-PRUEFLOS.
**** 表尾检测人
      if gt_output-type 'E'.
        select SINGLE pzuser fhuser jyuser
        into (t_pzr,t_fhr,t_jyr)
        from zqm_jy_user
        where werks gt_output-werk and
              mtype 'A' and
              stdate <= gt_output-PAENDTERM and
              endate >= gt_output-PAENDTERM.
      else.
****签字人
       if gt_output-MTART 'ROH'.
        select SINGLE pzuser fhuser jyuser
        into (t_pzr,t_fhr,t_jyr)
        from zqm_jy_user
        where werks gt_output-werk and
              mtype 'B' and
              stdate <= gt_output-PAENDTERM and
              endate >= gt_output-PAENDTERM.
        endif.
        if gt_output-MTART 'VERP'.
        select SINGLE pzuser fhuser jyuser
        into (t_pzr,t_fhr,t_jyr)
        from zqm_jy_user
        where werks gt_output-werk and
              mtype 'C' and
              stdate <= gt_output-PAENDTERM and
              endate >= gt_output-PAENDTERM.
        endif.
      endif.
    PERFORM FORM_PRINT.
    IF sy-subrc <> 0.
      WRITE: 'Error in OPEN_FORM'(001).
      exit.
    ENDIF.

    t_i 0.
    LOOP AT GT_OUTPUT WHERE PRUEFLOS GT_OUT3-PRUEFLOS.
      t_i t_i + 1.
****产品名称
      CONCATENATE GT_OUTPUT-MATNR '/' GT_OUTPUT-MAKTX INTO T_NAME.
      t_c 16.
      t_len STRLENT_NAME ).
      t_len t_len t_c.
      t_name1 T_NAME+0(16).
      IF T_LEN > 0.
          if t_len <= 16.
            t_name2 T_NAME+16(t_len).
            CLEAR:t_name5.
          else.
            if t_len <= 32.
            t_name2 T_NAME+16(16).
            t_len t_len t_c.
            if t_len > 0.
              t_name5 T_NAME+32(t_len).
            else.
              CLEAR:t_name5.
            endif.
            else.
              t_name2 T_NAME+16(16).
              t_len t_len t_c.
              t_name5 T_NAME+32(t_len).
            endif.
          endif.

      ELSE.
        CLEAR:t_name2.
        CLEAR:t_name5.
      ENDIF.
****供应商名称
      CONCATENATE GT_OUTPUT-LIFNR '/' GT_OUTPUT-LIFNRNAME INTO T_NAME.
      t_c 18.
      t_len STRLENT_NAME ).
      t_len t_len t_c.
      t_name3 T_NAME+0(18).
      IF T_LEN > 0.
          t_name4 T_NAME+18(t_len).

      ELSE.
        CLEAR:t_name4.
      ENDIF.
**截取项目名称
      t_c 10.
      t_len STRLENGT_OUTPUT-KURZTEXT ).
      t_len t_len t_c.
      t_jyxm1 GT_OUTPUT-KURZTEXT+0(10).
      IF T_LEN > 0.
          if t_len <= 10.
          t_jyxm2 GT_OUTPUT-KURZTEXT+10(t_len).
          CLEAR:t_jyxm3.
          CLEAR:t_jyxm4.
        else.
          if t_len <= 20.
            t_jyxm2 GT_OUTPUT-KURZTEXT+10(10).
            t_len t_len t_c.
            if t_len > 0.
              t_jyxm3 GT_OUTPUT-KURZTEXT+20(t_len).
            else.
              CLEAR:t_jyxm3.
            endif.
            CLEAR:t_jyxm4.
          else.
            t_jyxm2 GT_OUTPUT-KURZTEXT+10(10).
            t_len t_len t_c.
            t_jyxm3 GT_OUTPUT-KURZTEXT+20(10).
            t_len t_len t_c.
            if t_len > 0.
              t_jyxm4 GT_OUTPUT-KURZTEXT+30(t_len).
            else.
              CLEAR:t_jyxm4.
            endif.
          endif.
        endif.
      ELSE.
        CLEAR:t_jyxm2.
        CLEAR:t_jyxm3.
        CLEAR:t_jyxm4.
      ENDIF.
***截取结果
*截取标准
****产成品
    if gt_output-type 'E'.
      t_c 18.
      t_len STRLENGT_OUTPUT-JYBZ ).
      t_len t_len t_c.
      t_jybz1 GT_OUTPUT-JYBZ+0(18).
      IF T_LEN > 0.
        if t_len <= 18.
          t_jybz2 GT_OUTPUT-JYBZ+18(t_len).
          CLEAR:t_jybz3.
        else.
          t_jybz2 GT_OUTPUT-JYBZ+18(18).
          t_len t_len t_c.
          if t_len > 0.
            t_jybz3 GT_OUTPUT-JYBZ+36(t_len).
          else.
            CLEAR:t_jybz3.
          endif.
        endif.
      ELSE.
        CLEAR:t_jybz2.
        CLEAR:t_jybz3.
      ENDIF.
    else.
****原材料
      t_c 12.
      t_len STRLENGT_OUTPUT-JYBZ ).
      t_len t_len t_c.
      t_jybzz1 GT_OUTPUT-JYBZ+0(12).
      IF T_LEN > 0.
        if t_len <= 12.
          t_jybzz2 GT_OUTPUT-JYBZ+12(t_len).
          CLEAR:t_jybzz3.
          CLEAR:t_jybzz4.
        else.
          if t_len <= 24.
            t_jybzz2 GT_OUTPUT-JYBZ+12(12).
            t_len t_len t_c.
            if t_len > 0.
              t_jybzz3 GT_OUTPUT-JYBZ+24(t_len).
            else.
              CLEAR:t_jybzz3.
            endif.
            CLEAR:t_jybzz4.
          else.
            t_jybzz2 GT_OUTPUT-JYBZ+12(12).
            t_len t_len t_c.
            t_jybzz3 GT_OUTPUT-JYBZ+24(12).
            t_len t_len t_c.
            if t_len > 0.
              t_jybzz4 GT_OUTPUT-JYBZ+36(t_len).
            else.
              CLEAR:t_jybzz4.
            endif.
          endif.
        endif.
      ELSE.
        CLEAR:t_jybzz2.
        CLEAR:t_jybzz3.
        CLEAR:t_jybzz4.
      ENDIF.

**** 增加取依据数据
      t_c 12.
      t_len STRLENGT_OUTPUT-JYYJ ).
      t_len t_len t_c.
      t_jyyj1 GT_OUTPUT-JYYJ+0(12).
      IF T_LEN > 0.
        if t_len <= 12.
          t_jyyj2 GT_OUTPUT-JYYJ+12(t_len).
          CLEAR:t_jyyj3.
          CLEAR:t_jyyj4.
        else.
          if t_len <= 24.
            t_jyyj2 GT_OUTPUT-JYYJ+12(12).
            t_len t_len t_c.
            if t_len > 0.
              t_jyyj3 GT_OUTPUT-JYYJ+24(t_len).
            else.
              CLEAR:t_jyyj3.
            endif.
            CLEAR:t_jyyj4.
          else.
            t_jyyj2 GT_OUTPUT-JYYJ+12(12).
            t_len t_len t_c.
            t_jyyj3 GT_OUTPUT-JYYJ+24(12).
            t_len t_len t_c.
            if t_len > 0.
              t_jyyj4 GT_OUTPUT-JYYJ+36(t_len).
            else.
              CLEAR:t_jyyj4.
            endif.
          endif.
        endif.
      ELSE.
        CLEAR:t_jyyj2.
        CLEAR:t_jyyj3.
        CLEAR:t_jyyj4.
      ENDIF.
    endif.
***截取结果
***产成品
    if gt_output-type 'E'.
      t_c 17.
      t_len STRLENGT_OUTPUT-JYJG ).
      t_len t_len t_c.
      t_jyjg1 GT_OUTPUT-JYJG+0(17).
      IF T_LEN > 0.
        if t_len <= 17.
          t_jyjg2 GT_OUTPUT-JYJG+17(t_len).
          CLEAR:t_jyjg3.
        else.
          t_jyjg2 GT_OUTPUT-JYJG+17(17).
          t_len t_len t_c.
         if t_len > 0.
          t_jyjg3 GT_OUTPUT-JYJG+34(t_len).
         else.
           CLEAR:t_jyjg3.
         endif.
        endif.
      ELSE.
        CLEAR:t_jyjg2.
        CLEAR:t_jyjg3.
      ENDIF.
    else.
***原材料
      t_c 12.
      t_len STRLENGT_OUTPUT-JYJG ).
      t_len t_len t_c.
      t_jyjgg1 GT_OUTPUT-JYJG+0(12).
      IF T_LEN > 0.
        if t_len <= 24.
            t_jyjgg2 GT_OUTPUT-JYJG+12(12).
            t_len t_len t_c.
            if t_len > 0.
              t_jyjgg3 GT_OUTPUT-JYJG+24(t_len).
            else.
              CLEAR:t_jyjgg3.
            endif.
            CLEAR:t_jyjgg4.
          else.
            t_jyjgg2 GT_OUTPUT-JYJG+12(12).
            t_len t_len t_c.
            t_jyjgg3 GT_OUTPUT-JYJG+24(12).
            t_len t_len t_c.
            if t_len > 0.
              t_jyjgg4 GT_OUTPUT-JYJG+36(t_len).
            else.
              CLEAR:t_jyjgg4.
            endif.
          endif.
      ELSE.
        CLEAR:t_jyjgg2.
        CLEAR:t_jyjgg3.
        CLEAR:t_jyjgg4.
      ENDIF.
    endif.
    if t_jyjgg1 ''.
      t_jyjgg1 '            '.
    endif.
    if t_jyjgg2 ''.
      t_jyjgg2 '            '.
    endif.
    if t_jyjgg3 ''.
      t_jyjgg3 '            '.
    endif.
    if t_jyjgg4 ''.
      t_jyjgg4 '            '.
    endif.
****检验结论
      t_c 40.
      t_len STRLENGT_OUTPUT-JYJL ).
      t_len t_len t_c.
      t_jyjl1 GT_OUTPUT-JYJL+0(40).
      IF T_LEN > 0.
          t_jyjl2 GT_OUTPUT-JYJl+40(t_len).
      ELSE.
        CLEAR:t_jyjl2.
      ENDIF.

****打开第一个page
      IF t_i 1.
        CALL FUNCTION 'START_FORM'
        EXPORTING
          form form_name
          startpage 'PAGE1'
        EXCEPTIONS
          OTHERS    1.
        IF sy-subrc <> 0.
          WRITE: 'Error in START_FORM PAGE1'.
          exit.
        ENDIF.
          PERFORM print_lld_head.
        IF sy-subrc <> 0.
          WRITE: 'Error in HEAD'(001).
          exit.
        ENDIF.
      endif.
**** 第一页放的下
      if t_ii 1.
*        if t_i <= 4. "测试用
        count count 18.
        if t_type <> 'X'.
          PERFORM PRINT_LLD_ITEM.
          PERFORM PRINT_TKD_BODY.
        ENDIF.
        if t_row <= and t_i t_row.
          count count 110.
*          count = count + 80
          PERFORM PRINT_TPP_BODY.
          PERFORM PRINT_TPD_BODY.
          if gt_output-WERK '2589'.
            PERFORM PRINT_PIC2_BODY. "测试用
          else.
            PERFORM PRINT_PIC_BODY. "测试用
          endif.
*          count = count + 40.
*          PERFORM PRINT_TJY_BT.
          PERFORM PRINT_TJYH_BT.
        endif.
*        endif.
      endif.
      if t_ii 2.
*        if t_i <= 5."测试用
        if t_i <= 8.
           count count 18.
            PERFORM PRINT_LLD_ITEM.
            IF sy-subrc <> 0.
              WRITE: 'Error in HEAD1'(001).
              exit.
            ENDIF.
            PERFORM PRINT_TKD_BODY.
            IF sy-subrc <> 0.
              WRITE: 'Error in HEAD1'(001).
              exit.
            ENDIF.
            if t_i >= 5.
              if t_i t_row.
                count 0.
                CALL FUNCTION 'END_FORM'.
                CALL FUNCTION 'START_FORM'
                EXPORTING
                  form form_name
                  startpage 'PAGE2'
                EXCEPTIONS
                  FORM 1
                  FORMAT 2
                  UNENDED 3
                  UNOPENED 4
                  UNUSED 5
                  SPOOL_ERROR 6
                  CODEPAGE 7
                  OTHERS 8.

                IF sy-subrc <> 0.
                    WRITE: 'Error in START_FROM PAGE2'(001).
                    exit.
                ENDIF.
                PERFORM PRINT_HEAD2.
*                count = count + 18.
*                PERFORM PRINT_LLD_ITEM2.
*                IF sy-subrc <> 0.
*                    WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
*                    exit.
*                ENDIF.
               endif.
*                count = count + 18.
*                PERFORM PRINT_LLD_ITEM.
*                IF sy-subrc <> 0.
*                    WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
*                    exit.
*                ENDIF.
*                PERFORM PRINT_TKD_BODY.
*                count = count + 18.
                if t_i t_row.
                  count count 92.
                  PERFORM PRINT_TPP_BODY.
                  PERFORM PRINT_TPD_BODY.
                  if gt_output-WERK '2589'.
                    PERFORM PRINT_PIC2_BODY. "测试用
                  else.
                    PERFORM PRINT_PIC_BODY. "测试用
                  endif.
*                  count = count + 70.
*                  PERFORM PRINT_TJY_BT.
                  PERFORM PRINT_TJYH_BT.
                endif.
            endif.
        elseif t_i <= 12."t_i = 9.
          if t_i 9.
          count 0.
          CALL FUNCTION 'END_FORM'.
          CALL FUNCTION 'START_FORM'
          EXPORTING
            form form_name
            startpage 'PAGE2'
          EXCEPTIONS
            FORM 1
            FORMAT 2
            UNENDED 3
            UNOPENED 4
            UNUSED 5
            SPOOL_ERROR 6
            CODEPAGE 7
            OTHERS 8.

          IF sy-subrc <> 0.
              WRITE: 'Error in START_FROM PAGE2'(001).
              exit.
          ENDIF.
          PERFORM PRINT_HEAD2.
*          count = count + 18.
*          PERFORM PRINT_LLD_ITEM2.
*          IF sy-subrc <> 0.
*              WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
*              exit.
*          ENDIF.
         endif.
*          count = count + 18.
          PERFORM PRINT_LLD_ITEM.
          IF sy-subrc <> 0.
              WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
              exit.
          ENDIF.
          PERFORM PRINT_TKD_BODY.
          count count 18.
          if t_i t_row.
            count count 92.
            PERFORM PRINT_TPP_BODY.
            PERFORM PRINT_TPD_BODY.
            if gt_output-WERK '2589'.
              PERFORM PRINT_PIC2_BODY. "测试用
            else.
              PERFORM PRINT_PIC_BODY. "测试用
            endif.
*            count = count + 70.
*            PERFORM PRINT_TJY_BT.
            PERFORM PRINT_TJYH_BT.
          endif.
*          ENDIF.
*          PERFORM PRINT_TKD_BODY2.
        elseif t_i <= 20.
          if t_i 17.
          count 0.
          CALL FUNCTION 'END_FORM'.
          CALL FUNCTION 'START_FORM'
          EXPORTING
            form form_name
            startpage 'PAGE3'
          EXCEPTIONS
            FORM 1
            FORMAT 2
            UNENDED 3
            UNOPENED 4
            UNUSED 5
            SPOOL_ERROR 6
            CODEPAGE 7
            OTHERS 8.

          IF sy-subrc <> 0.
              WRITE: 'Error in START_FROM PAGE2'(001).
              exit.
          ENDIF.
          PERFORM PRINT_HEAD2.
*          count = count + 18.
*          PERFORM PRINT_LLD_ITEM2.
*          IF sy-subrc <> 0.
*              WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
*              exit.
*          ENDIF.
         endif.
*          count = count + 18.
          PERFORM PRINT_LLD_ITEM.
          IF sy-subrc <> 0.
              WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
              exit.
          ENDIF.
          PERFORM PRINT_TKD_BODY.
          count count 18.
          if t_i t_row.
            count count 92.
            PERFORM PRINT_TPP_BODY.
            PERFORM PRINT_TPD_BODY.
            if gt_output-WERK '2589'.
             PERFORM PRINT_PIC2_BODY. "测试用
            else.
              PERFORM PRINT_PIC_BODY. "测试用
            endif.
*            count = count + 70.
*            PERFORM PRINT_TJY_BT.
            PERFORM PRINT_TJYH_BT.
          endif.
        endif.
*        endif.
      elseif t_ii 3.
        if t_i <= 8.
           count count 18.
            PERFORM PRINT_LLD_ITEM.
            IF sy-subrc <> 0.
              WRITE: 'Error in HEAD1'(001).
              exit.
            ENDIF.
            PERFORM PRINT_TKD_BODY.
            IF sy-subrc <> 0.
              WRITE: 'Error in HEAD1'(001).
              exit.
            ENDIF.
        elseif t_i <= 20."t_i = 9.
          if t_i 9.
          count 0.
          CALL FUNCTION 'END_FORM'.
          CALL FUNCTION 'START_FORM'
          EXPORTING
            form form_name
            startpage 'PAGE2'
          EXCEPTIONS
            FORM 1
            FORMAT 2
            UNENDED 3
            UNOPENED 4
            UNUSED 5
            SPOOL_ERROR 6
            CODEPAGE 7
            OTHERS 8.

          IF sy-subrc <> 0.
              WRITE: 'Error in START_FROM PAGE2'(001).
              exit.
          ENDIF.
          PERFORM PRINT_HEAD2.
*          count = count + 18.
*          PERFORM PRINT_LLD_ITEM2.
*          IF sy-subrc <> 0.
*              WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
*              exit.
*          ENDIF.
         endif.
         if t_i >= 12 and t_i <= 16.
*          count = count + 18.
            PERFORM PRINT_LLD_ITEM.
            IF sy-subrc <> 0.
                WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
                exit.
            ENDIF.
            PERFORM PRINT_TKD_BODY.
            count count 18.
            if t_i t_row.
              count 0.
              CALL FUNCTION 'END_FORM'.
              CALL FUNCTION 'START_FORM'
              EXPORTING
                form form_name
                startpage 'PAGE3'
              EXCEPTIONS
                FORM 1
                FORMAT 2
                UNENDED 3
                UNOPENED 4
                UNUSED 5
                SPOOL_ERROR 6
                CODEPAGE 7
                OTHERS 8.

              IF sy-subrc <> 0.
                  WRITE: 'Error in START_FROM PAGE2'(001).
                  exit.
              ENDIF.
              PERFORM PRINT_HEAD2.
            endif.
          else.
            if t_i 17.
              count 0.
              CALL FUNCTION 'END_FORM'.
              CALL FUNCTION 'START_FORM'
              EXPORTING
                form form_name
                startpage 'PAGE3'
              EXCEPTIONS
                FORM 1
                FORMAT 2
                UNENDED 3
                UNOPENED 4
                UNUSED 5
                SPOOL_ERROR 6
                CODEPAGE 7
                OTHERS 8.

              IF sy-subrc <> 0.
                  WRITE: 'Error in START_FROM PAGE2'(001).
                  exit.
              ENDIF.
              PERFORM PRINT_HEAD2.
            endif.
            PERFORM PRINT_LLD_ITEM.
            IF sy-subrc <> 0.
                WRITE: 'Error in LLD_ITEM2 PAGE2'(001).
                exit.
            ENDIF.
            PERFORM PRINT_TKD_BODY.
            count count 18.
          endif.

          if t_i t_row.
            count count 92.
            PERFORM PRINT_TPP_BODY.
            PERFORM PRINT_TPD_BODY.
            if gt_output-WERK '2589'.
              PERFORM PRINT_PIC2_BODY. "测试用
            else.
              PERFORM PRINT_PIC_BODY. "测试用
            endif.
*            count = count + 70.
*            PERFORM PRINT_TJY_BT.
            PERFORM PRINT_TJYH_BT.
          endif.
*          ENDIF.
*          PERFORM PRINT_TKD_BODY2.
        endif.
      endif.

*      if t_i <= 4.   "放的下尾页
*        count = count + 18.
*        if t_type <> 'X'.
*          PERFORM PRINT_LLD_ITEM.
*          PERFORM PRINT_TKD_BODY.
*        ENDIF.
*      elseif t_i <= 8."尾页放第二页
*        count = count + 18.
*        if t_type <> 'X'.
*          PERFORM PRINT_LLD_ITEM.
*          PERFORM PRINT_TKD_BODY.
*        ENDIF.
*      elseif t_i <= 12."第二页放的下尾页
*         if t_ii <= 8.
*           count = count + 18.
*          if t_type <> 'X'.
*            PERFORM PRINT_LLD_ITEM.
*            PERFORM PRINT_TKD_BODY.
*          ENDIF.
*         else.
*           call FUNCTION 'END_FORM'.
*          CALL FUNCTION 'START_FORM'
*          EXPORTING
*            startpage = 'PAGE2'
*          EXCEPTIONS
*            OTHERS    = 1.
**          call FUNCTION 'END_FORM'.
**           PERFORM NEXT_PAGE.
*           PERFORM PRINT_HEAD2.
**           PERFORM PRINT_TKD_BODY.
*         endif.
*      elseif t_i <= 15. "尾页放第三页
*
*      endif.

    ENDLOOP.
*    PERFORM PRINT_TPP_BODY.
*    PERFORM PRINT_TPD_BODY.
*    PERFORM PRINT_TJY_BT.
*    PERFORM PRINT_TJYH_BT.
    CALL FUNCTION 'END_FORM'.
    if t_type <> 'X'.
     CALL FUNCTION 'CLOSE_FORM'.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " FPRINT
***小数位截取
FORM SET_NUM USING P_CHAR P_NUM.
  DATA: P_LEN TYPE I.
  DATA: P_TEMP TYPE I.
  DATA: P_BEN(12TYPE C.
  DATA: P_AF(4TYPE C.
  DATA: P_AF_TEMP(1TYPE C.
  DATA: P_I TYPE I.
  DATA: P_C TYPE I.
  P_LEN STRLENP_CHAR ).
  P_TEMP P_LEN 4.
  P_BEN P_CHAR+0(P_TEMP).
  P_AF P_CHAR+P_TEMP(4).
  P_I 0.
  G_CHAR P_BEN.
  P_C P_NUM.
  WHILE P_C > 0.
    P_AF_TEMP P_AF+P_I(1).
    CONCATENATE G_CHAR P_AF_TEMP INTO G_CHAR.
    CONDENSE:G_CHAR.
    P_I P_I + 1.
    P_C P_C 1.
  ENDWHILE.
  CLEAR:P_LEN,P_TEMP,P_BEN,P_AF,P_AF_TEMP,P_I,P_C.
ENDFORM.

原文地址:https://www.cnblogs.com/rockyzjut/p/3170839.html