dynamic_table行转列写入smartforms开发实例(开发笔记)

*&-------------------------------------------------------------------
*& Report zqmr002
*&-------------------------------------------------------------------
*& Author              :  NathanSun
*& Create Date         :  2018-10-16
*& Program Type        :  Report
*& Description         : 
*&-------------------------------------------------------------------

REPORT zqmr002 .

*******数据定义******
*&---------------------------------------------------------------------*
*& 包含               ZQMR002_T001
*&---------------------------------------------------------------------*

TABLES:qals,qave,zpartappend,qapp,qamv,qamr,qase,qpct,qmtt,zqm01.

TYPE-POOLS:slis.

DATA:BEGIN OF ls_alv,
       flag,
       lifnr           TYPE qals-lifnr"供应商
       name1           TYPE lfa1-name1"供应商描述
      sortl            TYPE lfa1-sortl,"简称
       matnr           TYPE qals-matnr"物料号
       prueflos        TYPE qals-prueflos"检验批
       lmengeist       TYPE qals-lmengeist数量 SAP检验批数量
       ktextmat        TYPE qals-ktextmat"物料描述
       werk            TYPE qals-werk "工厂
       lmenge01        TYPE qals-lmenge01"非限制库存
       lmenge04        TYPE qals-lmenge04"已冻结的库存
       zpm             TYPE zpartappend-zpm"品名
       zcz             TYPE zpartappend-zcz"材质
       zgg             TYPE zpartappend-zgg"产品规格

       ppsortkey       TYPE qapp-ppsortkey"检验点
       vorglfnr        TYPE qapp-vorglfnr"节点编号
*       vcode           TYPE qapp-vcode, "使用决策代码
*       vcodegrp        TYPE qapp-vcodegrp, "UD 代码组
       probenr         TYPE qapp-probenr"节点
       probenr1        TYPE qase-probenr"

       " kurztext1   TYPE qpct-kurztext, "代码的短文本 (最多 40 个字符)

       mbewertg        TYPE qamr-mbewertg"检验结果记录 "A=合格 R=不合格

       mittelwert      TYPE qasr-mittelwert"平均值
       mbewertg2       TYPE qasr-mbewertg"检验结果评估 A =合格 R =不合格
       mbewertg3      TYPE qasr-mbewertg"检验结果评估 A =合格 R =不合格
       probenr2        TYPE qasr-probenr"

       mbewertg1       TYPE qase-mbewertg"检验结果评估 A =合格 R =不合格
       stuecknr        TYPE qase-stuecknr"检验结果号
       messwert        TYPE qase-messwert"检验结果
       merknr2         TYPE qase-merknr"检验特性编号
       detailerg       TYPE qase-detailerg"结构号
       messwertni      TYPE qase-messwertni"判断 定性的单值


       vcode           TYPE qave-vcode"使用决策代码
       vcodegrp        TYPE qave-vcodegrp"UD 代码组
        vname         TYPE qave-vname""检验员
       name_text       TYPE user_addrp-name_text"检验员中文

       zmbewertg3(10)  TYPE c "QAMV-STEUERKZ 第一个字符为“X”为定量且含有"+"QASE_MESSWERT QAMV-STEUERKZ 第一个字符为“X”为定量且不含有"+"QAMR_MBEWERTG

       messwert1(10)   TYPE c"检验结果
       zmbewertg(3)    TYPE c"检验结果记录 "A=合格 R=不合格
       zmbewertg1(3)   TYPE c,  "检验结果评估 A =合格 R =不合格
       zmbewertg2(3)   TYPE c,  "检验结果评估 A =合格 R =不合格
       " zmbewertg3(3)   TYPE c,  "检验结果评估 A =合格 R =不合格
       " zmbewertg3(3)   TYPE c,  "检验结果评估 A =合格 R =不合格
       zmittelwert(10TYPE c"平均值

       vdatum          TYPE qave-vdatum检验日期
       kurztext        TYPE qpct-kurztext"缺陷种类 代码的短文本 (最多 40 个字符)



       merknr          TYPE qamv-merknr"检验特性编号
       merknr1         TYPE qamv-merknr"检验特性编号
       kurztext1       TYPE qamv-kurztext"检验特性
       kurztext3       TYPE qamv-kurztext"检验特性
       kurztext4       TYPE qamv-kurztext"检验特性
       sollwert        TYPE qamv-sollwert"基本尺寸
       toleranzob      TYPE qamv-toleranzob"规格上限
       toleranzun      TYPE qamv-toleranzun"规格下限


       zsollwert(10)   TYPE c"基本尺寸
       ztoleranzob(10TYPE c"规格上限
       ztoleranzun(10TYPE c"规格下限

       zsollwert_js   TYPE qsollwertc"基本尺寸
       ztoleranzob_js TYPE qsollwertc"规格上限
       ztoleranzun_js TYPE qsollwertc"规格下限

       pmethode        TYPE qamv-pmethode"检验方法 检测工具
       steuerkz        TYPE qamv-steuerkz,
       "sollwert   TYPE qamv-sollwert, "
       "pmethode   TYPE qamv-pmethode , "检测工具

       kurztext2       TYPE qmtt-kurztext"短文本
       anzfehler       TYPE qmfe-anzfehler "产品数量:  通过qmel-QMNUM
       qmnum           TYPE qmel-qmnum"通知 通过 PRUEFLOS  qmel-QMNUM


       "  zsgc            TYPE p DECIMALS 3, "上公差 QAMV_TOLERANZOBQAMV_SOLLWERT 保留三位小数位
       "zxgc            TYPE p DECIMALS 3, "下公差 QAMV_TOLERANZUNQAMV_SOLLWERT 保留三位小数位
       zxh(4)          TYPE n,
       zxh01(4)        TYPE i,

       zgsm(20)        TYPE c"sf公司名称
       znum(3)         TYPE c VALUE '000'"流水编码
       d_style         TYPE lvc_t_styl,


       zkurztext(100)  TYPE c"sf 页脚 代码与检测工具对照



     END OF ls_alv.


DATA:BEGIN OF gt_qamv OCCURS 0,

*         merknr     TYPE qamv-merknr,
*           kurztext   TYPE qamv-kurztext,
*           pmethode   TYPE qamv-pmethode,
*           sollwert   TYPE qamv-sollwert,
*           toleranzob TYPE qamv-toleranzob,
*           toleranzun TYPE qamv-toleranzun,
*           prueflos   TYPE qamv-prueflos,
*           vorglfnr   TYPE qamv-vorglfnr,
*           verwmerkm  TYPE qamv-verwmerkm,
*


       prueflos   TYPE qamv-prueflos,
       vorglfnr   TYPE qamv-vorglfnr,
       merknr     TYPE qamv-merknr"检验特性编号
       kurztext   TYPE qamv-kurztext"检验特性
       sollwert   TYPE qamv-sollwert"基本尺寸
       toleranzob TYPE qamv-toleranzob"规格上限
       toleranzun TYPE qamv-toleranzun"规格下限
       pmethode   TYPE qamv-pmethode"检验方法 检测工具
       steuerkz   TYPE qamv-steuerkz,
       mbewertg   TYPE qamr-mbewertg"检验结果记录 "A=合格 R=不合格
       mittelwert TYPE qamr-mittelwert"平均值

     END OF gt_qamv.


DATA:BEGIN OF gt_qave OCCURS 0,
      vdatum          TYPE qave-vdatum检验日期
       prueflos       TYPE qave-prueflos,
       vcode           TYPE qave-vcode"使用决策代码
       vcodegrp        TYPE qave-vcodegrp"UD 代码组
  vname         TYPE qave-vname""检验员
END OF gt_qave.


DATA:BEGIN OF gt_zpart OCCURS 0,
       matnr TYPE zpartappend-matnr "物料
       zpm   TYPE zpartappend-zpm"品名
       zcz   TYPE zpartappend-zcz"材质
       zgg   TYPE zpartappend-zgg"产品规格

     END OF gt_zpart.

DATA:BEGIN OF gt_qase OCCURS 0,


       mbewertg       TYPE qase-mbewertg,
       original_input TYPE qase-original_input,
       pruefdatub     TYPE qase-pruefdatub,
       merknr         TYPE qase-merknr,
       detailerg      TYPE qase-detailerg,
       prueflos       TYPE qase-prueflos,
       vorglfnr       TYPE qase-vorglfnr,
       messwert       TYPE qase-messwert,
       probenr        TYPE qase-probenr"2018 01 25ADD 采样号
       stuecknr       TYPE qase-stuecknr"
       erstelldat     TYPE  qase-erstelldat "检验时间
       pruefzeitv     TYPE  qase-pruefzeitv  "检验时间
       messwertni     TYPE qase-messwertni"判断 定性的单值
*       vcode          TYPE  qase-vcode, "使用决策代码
*       vcodegrp       TYPE qase-vcodegrp, "UD 代码组

       "merknr     TYPE qamv-merknr,
       kurztext       TYPE qamv-kurztext,
       pmethode       TYPE qamv-pmethode,
       sollwert       TYPE qamv-sollwert,
       toleranzob     TYPE qamv-toleranzob,
       toleranzun     TYPE qamv-toleranzun,
       "prueflos   TYPE qamv-prueflos,
       "vorglfnr   TYPE qamv-vorglfnr,
       verwmerkm      TYPE qamv-verwmerkm,
       steuerkz       TYPE qamv-steuerkz,
       mittelwert     TYPE qamr-mittelwert"平均值
*       prueflos  TYPE qase-prueflos,
*       vorglfnr  TYPE qase-vorglfnr,
*       messwert  TYPE qase-messwert, "检验结果
*       stuecknr  TYPE qase-stuecknr, "检验结果号
*       "mbewertg   TYPE qamr-mbewertg, "检验结果记录 "A=合格 R=不合格
*       mbewertg1 TYPE qase-mbewertg, "检验结果评估 A =合格 R =不合格
*       merknr    TYPE qase-merknr, "检验特性编号
*       detailerg TYPE qase-detailerg, "结构号
*       mbewertg2 TYPE qasr-mbewertg, "检验结果评估 A =合格 R =不合格




     END OF gt_qase.


DATABEGIN OF gt_qapp OCCURS 0,
      "  prueflos   TYPE qapp-prueflos,
        ppsortkey  TYPE qapp-ppsortkey"检验点
        "vorglfnr   TYPE qapp-vorglfnr, "节点编号
        vcode      TYPE qapp-vcode"使用决策代码
        probenr    TYPE qapp-probenr"节点
        vcodegrp   TYPE qapp-vcodegrp"UD 代码组
        entstehdat TYPE qapp-entstehdat"检验点检验时间
      "  mittelwert TYPE qasr-mittelwert, "平均值
       " mbewertg2  TYPE qasr-mbewertg, "检验结果评估 A =合格 R =不合格
      "  merknr     TYPE qasr-merknr,
        " PROBENR2        type qasr-PROBENR,"



        prueflos   TYPE qamv-prueflos,
       vorglfnr   TYPE qamv-vorglfnr,
       merknr     TYPE qamv-merknr"检验特性编号
       kurztext   TYPE qamv-kurztext"检验特性
       sollwert   TYPE qamv-sollwert"基本尺寸
       toleranzob TYPE qamv-toleranzob"规格上限
       toleranzun TYPE qamv-toleranzun"规格下限
       pmethode   TYPE qamv-pmethode"检验方法 检测工具
       steuerkz   TYPE qamv-steuerkz,
       mbewertg   TYPE qamr-mbewertg"检验结果记录 "A=合格 R=不合格
       mittelwert TYPE qamr-mittelwert"平均值
       sollstpanz  TYPE qamv-sollstpanz,
      END OF gt_qapp.




DATABEGIN OF gt_qasr OCCURS 0,
        prueflos   TYPE qasr-prueflos,
        vorglfnr   TYPE qasr-vorglfnr,
        mittelwert TYPE qasr-mittelwert"平均值
        mbewertg2  TYPE qasr-mbewertg"检验结果评估 A =合格 R =不合格
        merknr     TYPE qasr-merknr,
        probenr    TYPE qasr-probenr,

      END OF gt_qasr.

DATABEGIN OF gt_qamr OCCURS 0,
        prueflos   TYPE qamr-prueflos,
        vorglfnr   TYPE qamr-vorglfnr,
        mittelwert TYPE qamr-mittelwert"平均值
        mbewertg2  TYPE qamr-mbewertg"检验结果评估 A =合格 R =不合格
        merknr     TYPE qamr-merknr,

      END OF gt_qamr.





DATAgt_alv LIKE STANDARD TABLE OF ls_alv,
      gs_alv LIKE ls_alv.


DATAgt_alv1 LIKE STANDARD TABLE OF ls_alv,
      gs_alv1 LIKE ls_alv,
      gt_alv2 LIKE STANDARD TABLE OF ls_alv,
      gs_alv2 LIKE ls_alv,
      gt_alv3 LIKE STANDARD TABLE OF ls_alv,
      gs_alv3 LIKE ls_alv,
      gt_alv4 LIKE STANDARD TABLE OF ls_alv,
      gs_alv4 LIKE ls_alv,
      gt_alv5 LIKE STANDARD TABLE OF ls_alv,
      gs_alv5 LIKE ls_alv,
      gt_alv6 LIKE STANDARD TABLE OF ls_alv,
      gs_alv6 LIKE ls_alv,
      gt_alv7 LIKE STANDARD TABLE OF ls_alv,
      gs_alv7 LIKE ls_alv.







DATA it_fieldcat    TYPE slis_t_fieldcat_alv,
       it_ls_fieldcat TYPE slis_fieldcat_alv,
       it_layout      TYPE slis_layout_alv,
       wa_event       TYPE slis_alv_event,
       it_event       TYPE slis_t_event.

DATA lv_repid  LIKE sy-repid.
DATA lv_pos  TYPE i VALUE 1.
DATA :it_title TYPE lvc_title,
      grid     TYPE REF TO cl_gui_alv_grid.


*
* DATA : gt_disable TYPE lvc_t_styl
*         , gt_enable          TYPE lvc_t_styl.



DATA:
  za1(1TYPE c,
  za2(2TYPE c,
  za3(3TYPE c,
  za4(1TYPE c,
  za5(1TYPE c,
  za6(1TYPE c.


za1 '#'.
za4 'X'.
za6 '+'.


*-------打印需要用的--------

DATAref TYPE REF TO cl_gui_alv_grid.
DATA lv_stable TYPE lvc_s_stbl.   "刷新稳定性

DATA control_parameters TYPE ssfctrlop,
       output_options     TYPE ssfcompop.
DATAjob_output_info TYPE ssfcrescl.



lv_repid sy-repid.

*************复选框 控制 跟行专列打印 使用
DATA gt_disable TYPE lvc_t_styl
       
gt_enable          TYPE lvc_t_styl.


DATA gv_saveok TYPE sy-ucomm,
       gv_okcode TYPE sy-ucomm.

DATA gw_variant TYPE disvariant,
       gv_save    TYPE c.
FIELD-SYMBOLS<f_fs1> ,
               <f_out>     TYPE STANDARD TABLE,
               <f_out_01>  TYPE STANDARD TABLE,
               <f_out_wa>,
               <f_out_wa1>,
               <dyn_field> .
DATAmax_count  TYPE i,
      dy_out     TYPE REF TO data,
      dy_out1    TYPE REF TO data,
      dy_out_wa  TYPE REF TO data,
      dy_out_wa1 TYPE REF TO data,
      xfc        TYPE lvc_s_fcat,
      ifc        TYPE lvc_t_fcat.
DATAc(2)    TYPE n,
      txt(20TYPE c.

DATAwa_layo TYPE lvc_s_layo.
DATAwa_fcat TYPE lvc_s_fcat,
      it_fcat TYPE lvc_t_fcat.






CONSTANTS cns_x         TYPE c VALUE 'X',
            cns_d         TYPE c VALUE 'D',
            cns_a         TYPE c VALUE 'A',
            cns_back(4)   TYPE c VALUE 'BACK',
            cns_cancel(6TYPE c VALUE 'CANCEL',
            cns_exit(4)   TYPE c VALUE 'EXIT'.
*******选择屏幕******
*&---------------------------------------------------------------------*
*& 包含               ZQMR002_S001
*&---------------------------------------------------------------------*


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS :
           p_werk TYPE  qals-werk DEFAULT '1011'."工厂
SELECT-OPTIONS:
           s_matnr FOR  qals-matnr ,"物料编码
           s_lifnr  FOR qals-lifnr,"供应商
           s_prue FOR qals-prueflos,"检验批号
           s_vdat FOR qave-vdatum."检验日期


SELECTION-SCREEN END OF BLOCK b1.
*******数据处理******
*&---------------------------------------------------------------------*
*& 包含               ZQMR002_F001
*&---------------------------------------------------------------------*

FORM frm_get_data.

*******勾选一个alv复选框  相同的检验批复选框勾上
  DATA
   ls_style TYPE lvc_s_styl.

  ls_style-fieldname 'SEL'.
  ls_style-style     cl_gui_alv_grid=>mc_style_disabled.
  ls_style-style2    space       .
  ls_style-style3    space       .
  ls_style-style4    space       .
  ls_style-maxlen    1           .
  APPEND ls_style   TO gt_disable  .

  ls_style-style     cl_gui_alv_grid=>mc_style_enabled.
  APPEND ls_style   TO gt_enable   .
*
******************



  SELECT
       qals~lifnr"供应商
       qals~matnr "物料号
       qals~werk "工厂
       qals~prueflos "检验批
       qals~lmengeist 数量 SAP检验批数量
       qals~ktextmat "物料描述
       qals~lmenge01 "非限制库存
       qals~lmenge04 "已冻结的库存


    FROM qals
    
INTO  CORRESPONDING FIELDS OF TABLE gt_alv
    
WHERE qals~werk p_werk "工厂
         AND qals~matnr   IN s_matnr   "物料编码
         AND qals~lifnr IN s_lifnr"供应商
         AND qals~prueflos IN s_prue"检验批号
         AND qals~herkunft '01'"检查源









  IF gt_alv[] IS  NOT INITIAL.
    SELECT
            qamv~merknr "检验特性编号
            qamv~kurztext "检验特性
            qamv~sollwert "基本尺寸
            qamv~toleranzob"
            qamv~toleranzun
            qamv
~steuerkz
            qamv
~pmethode "检验方法
            qamv~prueflos
            qamv
~vorglfnr

            qapp
~ppsortkey"检验点
            qapp~probenr "节点
            qapp~entstehdat "检验点检验时间
          "


    FROM qamv
    
LEFT JOIN qapp ON qamv~prueflos qapp~prueflos  AND  qamv~vorglfnr qapp~vorglfnr
    
INTO CORRESPONDING FIELDS OF TABLE gt_qapp.


  ENDIF.



  LOOP AT  gt_qapp .  "把检验点为空的数据也输出
    READ TABLE gt_alv INTO gs_alv  WITH  KEY prueflos gt_qapp-prueflos .
    IF sy-subrc 0.
      gs_alv-ppsortkey gt_qapp-ppsortkey.
      gs_alv-vorglfnr gt_qapp-vorglfnr.
      gs_alv-probenr  gt_qapp-probenr.


      gs_alv-merknr   gt_qapp-merknr ."检验特性编号
      gs_alv-kurztext1 =  gt_qapp-kurztext"检验特性
      gs_alv-sollwert =  gt_qapp-sollwert"基本尺寸
      gs_alv-toleranzob =  gt_qapp-toleranzob ."
      gs_alv-toleranzun =  gt_qapp-toleranzun.
      gs_alv-vorglfnr   =  gt_qapp-vorglfnr."检验结果记录 "A=合格 R=不合格
      gs_alv-pmethode  =   gt_qapp-pmethode."检验方法 检测工具
      gs_alv-steuerkz  =   gt_qapp-steuerkz.



      DELETE gt_alv WHERE prueflos gt_qapp-prueflos   AND flag ''.
      gs_alv-flag 'X'.
      APPEND gs_alv TO gt_alv.
    ENDIF.



  ENDLOOP.




  SORT gt_alv BY prueflos vorglfnr ppsortkey merknr probenr.







  IF gt_alv[] IS NOT INITIAL.
    SELECT

           qase~prueflos
           qase
~vorglfnr
           qase
~stuecknr"检验结果号
           qase~messwert"检验结果
           qase~mbewertg "检验结果评估 A =合格 R =不合格
          " qasr~mbewertg AS mbewertg2  "检验结果评估 A =合格 R =不合格
           qase~merknr"检验特性编号
           qase~probenr
           qase
~detailerg"结构号
           qase~stuecknr"检验结果号
           qase~erstelldat "检验时间
           qase~pruefzeitv  "检验时间
           qase~messwertni"判断 定性的单值
        INTO CORRESPONDING FIELDS OF TABLE gt_qase
        
FROM qase
         
FOR ALL ENTRIES IN gt_alv
        
WHERE prueflos  gt_alv-prueflos
         
AND merknr  gt_alv-merknr
         
AND vorglfnr gt_alv-vorglfnr
         
AND probenr gt_alv-probenr.





  ENDIF .










*
  LOOP AT gt_alv INTO gs_alv.

    CLEAR gs_alv-flag.
    MODIFY gt_alv FROM gs_alv.
  ENDLOOP.



  SORT  gt_qase BY prueflos  probenr  merknr detailerg.

  LOOP AT  gt_qase .
    "
    READ TABLE  gt_alv INTO gs_alv WITH KEY prueflos gt_qase-prueflos  merknr  gt_qase-merknr    vorglfnr gt_qase-vorglfnr  probenr gt_qase-probenr.

    IF sy-subrc 0.



      gs_alv-stuecknr  gt_qase-stuecknr."检验结果号
      gs_alv-messwert  =  gt_qase-messwert."检验结果

      gs_alv-detailerg  gt_qase-detailerg."结构号

      gs_alv-stuecknr  =  gt_qase-stuecknr.
      gs_alv-messwertni  gt_qase-messwertni."判断 定性的单值MESSWERTNI."判断 定性的单值
      gs_alv-mbewertg1  gt_qase-mbewertg .""检验结果评估 A =合格 R =不合格








      DELETE gt_alv WHERE prueflos gt_qase-prueflos AND vorglfnr gt_qase-vorglfnr AND merknr  gt_qase-merknr AND probenr =  gt_qase-probenr  AND flag '' ."

      gs_alv-flag 'X'.

      APPEND  gs_alv TO gt_alv  .
    ENDIF.
  ENDLOOP.



















  IF gt_alv[] IS NOT INITIAL.
    SELECT *
    
FROM zpartappend
    
INTO CORRESPONDING FIELDS OF TABLE gt_zpart
    
FOR ALL ENTRIES IN gt_alv
    
WHERE  zpartappend~matnr gt_alv-matnr.


    SELECT prueflos vcodegrp vcode vdatum vname ""检验员

    FROM qave
    
INTO CORRESPONDING FIELDS OF TABLE gt_qave
    
FOR ALL ENTRIES IN gt_alv
    
WHERE  prueflos gt_alv-prueflos
    
AND qave~vdatum IN s_vdat..



    SELECT  "当数据 有多值的时候 就在qasr里面取
        qasr~prueflos
        qasr
~vorglfnr
        qasr
~mittelwert "平均值
        qasr~mbewertg AS  mbewertg2 "检验结果评估 A =合格 R =不合格
        qasr~merknr
        qasr
~probenr
     
FROM   qasr
     
INTO CORRESPONDING FIELDS OF TABLE gt_qasr
     
FOR ALL ENTRIES IN gt_alv
     
WHERE prueflos gt_alv-prueflos
     
AND vorglfnr gt_alv-vorglfnr
     
AND probenr gt_alv-probenr
     
AND merknr gt_alv-merknr.
*


  ENDIF.


  IF gt_qasr[] IS  INITIAL.

    SELECT    "当数据 只有单值的时候 就在qamr里面取
        qamr~prueflos
        qamr
~vorglfnr
        qamr
~mittelwert "平均值
        qamr~mbewertg AS mbewertg2 "检验结果评估 A =合格 R =不合格
        qamr~merknr

      
FROM  qamr
      
INTO CORRESPONDING FIELDS OF TABLE gt_qasr
      
FOR ALL ENTRIES IN gt_alv
      
WHERE prueflos gt_alv-prueflos
      
AND vorglfnr gt_alv-vorglfnr

      
AND merknr gt_alv-merknr.


  ENDIF.






  SORT gt_alv BY prueflos vorglfnr ppsortkey merknr.



  LOOP AT gt_alv INTO gs_alv.
    READ TABLE  gt_zpart WITH KEY matnr gs_alv-matnr.
    IF sy-subrc 0.
      gs_alv-zpm   gt_zpart-zpm ."品名
      gs_alv-zgg =  gt_zpart-zgg"规格
      gs_alv-zcz =  gt_zpart-zcz"材质



    ENDIF.



    READ TABLE  gt_qave WITH KEY prueflos gs_alv-prueflos.
    IF sy-subrc 0.
      gs_alv-vcodegrp   gt_qave-vcodegrp ."
      gs_alv-vcode =  gt_qave-vcode"
      gs_alv-vdatum =  gt_qave-vdatum"
      gs_alv-vname gt_qave-vname""检验员


    ENDIF.


    READ TABLE gt_qasr WITH KEY  prueflos gs_alv-prueflos vorglfnr gs_alv-vorglfnr merknr gs_alv-merknr probenr gs_alv-probenr.
    IF sy-subrc 0.

      gs_alv-mittelwert =   gt_qasr-mittelwert"平均值
      gs_alv-mbewertg2 =  gt_qasr-mbewertg2 .   "检验结果评估 A =合格 R =不合格

*
    ENDIF.


    IF gt_qamr[] IS NOT INITIAL"当数据 只有单值的时候 就在qamr里面取
      READ TABLE gt_qamr WITH KEY  prueflos gs_alv-prueflos vorglfnr gs_alv-vorglfnr merknr gs_alv-merknr .
      IF sy-subrc 0.

        gs_alv-mittelwert =   gt_qamr-mittelwert"平均值
        gs_alv-mbewertg2 =  gt_qamr-mbewertg2 .   "检验结果评估 A =合格 R =不合格


*
      ENDIF.

    ENDIF.





    SELECT SINGLE kurztext  FROM qpct INTO gs_alv-kurztext WHERE codegruppe gs_alv-vcodegrp AND code gs_alv-vcode  ."缺陷种类 代码的短文本 (最多 40 个字符)
    SELECT SINGLE kurztext FROM qmtt  INTO gs_alv-kurztext2 WHERE  pmtnr gs_alv-pmethode." SAP检测方法(工具)代码与检测工具对照通过
    SELECT  SINGLE qmnum    FROM qmel INTO gs_alv-qmnum  WHERE prueflos gs_alv-prueflos .
    SELECT SINGLE anzfehler  FROM qmfe INTO gs_alv-anzfehler WHERE qmnum gs_alv-qmnum"产品数量:
    SELECT SINGLE name1   sortl  FROM lfa1 INTO gs_alv-name1 gs_alv-sortl WHERE lifnr gs_alv-lifnr"供应商描述
    SELECT SINGLE name_text  FROM user_addrp INTO gs_alv-name_text WHERE bname gs_alv-vname ""检验员中文




    SHIFT gs_alv-prueflos  LEFT DELETING LEADING '0'.
    SHIFT gs_alv-ppsortkey  LEFT DELETING LEADING '0'.
    SHIFT gs_alv-merknr  LEFT DELETING LEADING '0'.



*
    IF gs_alv-messwertni <> 'X'."定性的单值 显示 A F
      gs_alv-zmbewertg3 gs_alv-mbewertg1.

    ENDIF.


    CLEAR gs_alv-flag.
    MODIFY gt_alv FROM gs_alv.
  ENDLOOP.





  IF gt_alv[] IS INITIAL.
    MESSAGE '查询的数据不存在,请检查你的查询条件!' TYPE 'I'.
    STOP.
  ENDIF.

ENDFORM.




FORM frm_procees_data.

  DATA lv_zxh(4)     TYPE n.
  DATA lv_zxh_i(4)   TYPE i.
  DATA lv_zxh_01(3)  TYPE n.
  DATA lv_char TYPE char3.

  LOOP AT gt_alv INTO gs_alv.
    CALL FUNCTION 'FLTP_CHAR_CONVERSION'   "基本尺寸 把科学计数法转换成普通数据类型
      EXPORTING
        decim 3
        expon 0
        input gs_alv-messwert
        ivalu 
'X '
        maskn ' '
      IMPORTING
        flstr gs_alv-messwert1.

    CALL FUNCTION 'FLTP_CHAR_CONVERSION'   "基本尺寸 把科学计数法转换成普通数据类型
      EXPORTING
        decim 3
        expon 0
        input gs_alv-sollwert
        ivalu 
'X '
        maskn ' '
      IMPORTING
        flstr gs_alv-zsollwert.

    CALL FUNCTION 'CHAR_FLTP_CONVERSION'
      EXPORTING
        string                   gs_alv-zsollwert
      
IMPORTING
        flstr                    gs_alv-zsollwert_js
      
EXCEPTIONS
        exponent_too_big         1
        exponent_too_small       2
        string_not_fltp          3
        too_many_decim           4
        OTHERS                   5
              .

*    CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION' "把科学计数法显示的数字转换成一般数字
*      EXPORTING
*        i_number_of_digits             = 3
*        i_fltp_value                   = gs_alv-sollwert
**        i_value_not_initial_flag       = 'X'
**       I_SCREEN_FIELDLENGTH           = 16
*      IMPORTING
*        e_char_field                   = gs_alv-zsollwert_js
*              .

    CALL FUNCTION 'FLTP_CHAR_CONVERSION' "把科学计数法转换成普通数据类型
      EXPORTING
        decim 3
        expon 0
        input gs_alv-toleranzob
        ivalu 
'X '
        maskn ' '
      IMPORTING
        flstr gs_alv-ztoleranzob.

    CALL FUNCTION 'CHAR_FLTP_CONVERSION'
      EXPORTING
        string                   gs_alv-ztoleranzob
      
IMPORTING
        flstr                    gs_alv-ztoleranzob_js
      
EXCEPTIONS
        exponent_too_big         1
        exponent_too_small       2
        string_not_fltp          3
        too_many_decim           4
        OTHERS                   5
              .

*    CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION' "把科学计数法显示的数字转换成一般数字
*      EXPORTING
*        i_number_of_digits             = 3
*        i_fltp_value                   = gs_alv-toleranzob
**        i_value_not_initial_flag       = 'X'
**       I_SCREEN_FIELDLENGTH           = 16
*      IMPORTING
*        e_char_field                   = gs_alv-ztoleranzob_js
*         .

    CALL FUNCTION 'FLTP_CHAR_CONVERSION' "把科学计数法转换成普通数据类型
      EXPORTING
        decim 3
        expon 0
        input gs_alv-toleranzun
        ivalu 
'X '
        maskn ' '
      IMPORTING
        flstr gs_alv-ztoleranzun.

    CALL FUNCTION 'CHAR_FLTP_CONVERSION'
      EXPORTING
        string                   gs_alv-ztoleranzun
      
IMPORTING
        flstr                    gs_alv-ztoleranzun_js
      
EXCEPTIONS
        exponent_too_big         1
        exponent_too_small       2
        string_not_fltp          3
        too_many_decim           4
        OTHERS                   5
              .

*    CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION' "把科学计数法显示的数字转换成一般数字
*      EXPORTING
*        i_number_of_digits             = 3
*        i_fltp_value                   = gs_alv-toleranzun
**        i_value_not_initial_flag       = 'X'
**       I_SCREEN_FIELDLENGTH           = 16
*      IMPORTING
*        e_char_field                   = gs_alv-ztoleranzun_js
*         .

    CALL FUNCTION 'FLTP_CHAR_CONVERSION' "把科学计数法转换成普通数据类型
      EXPORTING
        decim 3
        expon 0
        input gs_alv-mittelwert
        ivalu 
'X '
        maskn ' '
      IMPORTING
        flstr gs_alv-zmittelwert.








*************2018 03 08 fs 四个框里面的数据
    CONDENSE gs_alv-steuerkz NO-GAPS.
    za4 gs_alv-steuerkz+0(1).

    SEARCH gs_alv-kurztext1 FOR za1 ." {options}.
    IF sy-subrc 0.
      za2 sy-fdpos 1  .

      za3 gs_alv-kurztext1+za2(2).
    ENDIF.
    IF za3 IS NOT INITIAL." AND gs_alv-za4 = 'X'.
      gs_alv-merknr1 za3.
*    ELSEIF za4 = 'X'.
*      gs_alv-merknr1 = gs_alv-merknr.
    ELSE.
      gs_alv-merknr1 gs_alv-merknr.  "
    ENDIF.





    IF za4 <> 'X' AND gs_alv-steuerkz  CS za6.  非尺寸定性检验特性,则此三栏合并,填检验特性短文本 QAMV-STEUERKZ 第一个字符非“X”且字符中含有“+”QAMV-KURZTEXT
      gs_alv-kurztext3 gs_alv-kurztext .
    ENDIF.



    IF za4 'X'AND gs_alv-steuerkz  CS za6.  "QAMV-STEUERKZ 第一个字符为“X”为定量且含有"+"QASE_MESSWERT

      gs_alv-zmbewertg3  =  gs_alv-messwert1.
    ELSEIF za4 'X'AND gs_alv-steuerkz  NS za6."QAMV-STEUERKZ 第一个字符为“X”为定量且不含有"+"QAMR_MBEWERTG
      gs_alv-zmbewertg3  =  gs_alv-zmittelwert.

    ENDIF.



    IF za4 <> 'X' AND gs_alv-steuerkz  NS za6.
      gs_alv-mbewertg3 gs_alv-mbewertg2.
      gs_alv-kurztext4 gs_alv-kurztext1.
    ENDIF.


    IF gs_alv-mbewertg3 'A'.  "sf 页脚 评判结果
      gs_alv-zmbewertg2 '合格'.
    ELSEIF gs_alv-mbewertg3 'R' .
      gs_alv-zmbewertg2 '不合格'.
    ENDIF.

    MODIFY gt_alv FROM gs_alv.
  ENDLOOP.



********************打印列表 排序列号 序列号错误 会影响 打印排列
  gt_alv3 gt_alv.


  SORT  gt_alv3 BY prueflos  merknr .

  DELETE gt_alv3 WHERE zmbewertg2 IS NOT INITIAL.

  DELETE ADJACENT DUPLICATES FROM gt_alv3 COMPARING prueflos merknr.
  DELETE gt_alv3 WHERE   merknr '0000'.
  " DELETE gt_alv3 WHERE mbewertg = '' and  merknr = ''.
  " DELETE gt_alv3 WHERE DETAILERG = '00000000' and ZMBEWERTG3 = '0.000'.

  LOOP AT gt_alv3 INTO gs_alv3.
    AT NEW prueflos.
      CLEAR lv_zxh.
      CLEAR lv_zxh_i.
    ENDAT.
    lv_zxh lv_zxh + 10.
    lv_zxh_i lv_zxh_i + 1.
    LOOP AT gt_alv INTO gs_alv WHERE prueflos gs_alv3-prueflos AND merknr gs_alv3-merknr ." and vorglfnr = gs_alv3-vorglfnr.
      gs_alv-zxh lv_zxh.
      gs_alv-zxh01 lv_zxh_i.
      MODIFY gt_alv FROM gs_alv.
    ENDLOOP.
  ENDLOOP.


***********************
  SORT gt_alv BY prueflos  ppsortkey merknr detailerg.


  IF s_vdat[]  IS NOT INITIAL.
    DELETE gt_alv WHERE  vdatum NOT IN s_vdat[].
  ENDIF.



ENDFORM.
*******数据显示******
*&---------------------------------------------------------------------*
*& 包含               ZQMR002_V001
*&----


*-----------------------------------------------------------------*
*FORM frm_alv_refresh USING p_soft TYPE char01.
*
*  CHECK grid IS NOT INITIAL .
*  DATA ls_stable TYPE lvc_s_stbl.
*
*  ls_stable-row = 'X'.
*  ls_stable-col = 'X'.
*
*  CALL METHOD grid->refresh_table_display
*    EXPORTING
*      is_stable      = ls_stable
*      i_soft_refresh = p_soft. " Without Sort, Filter, etc.
*  .
*ENDFORM.

*******勾选一个alv复选框  相同的检验批复选框勾上

FORM frm_add_fcat USING value1 value2 value3 value4.
  wa_fcat-fieldname value1.
  wa_fcat-inttype   value2.
  wa_fcat-reptext   value3.
  wa_fcat-intlen    value4.
  APPEND wa_fcat TO it_fcat.
  CLEARwa_fcat.
ENDFORM.

FORM frm_display_data.

  it_layout-colwidth_optimize 'X'.           "自动缩进行
  it_layout-zebra             'X'.           "斑马条纹
   " it_layout-cwidth_opt        = 'X'.
  "it_layout-zebra             = 'X'.
  "it_layout-stylefname        = 'D_STYLE'  .
 " it_layout-box_fieldname = 'FLAG'.
  " it_layout-info_fieldname = 'COLOR'.

  PERFORM get_fieldcat_int.



  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       lv_repid      "传入返回的程序
      i_callback_pf_status_set 'SET_PF'   "
      i_callback_user_command  'USER_COM'
      it_fieldcat              it_fieldcat
      is_layout                
it_layout
      it_events                
it_event
      i_grid_title             
it_title
      i_default                
'X'
      i_save                   'A'
    TABLES
      t_outtab                 gt_alv"输出内表


ENDFORM.


FORM get_fieldcat_int.

***************************   列位置    列字段          列描述      长度       颜色      汇总     主键       复选框    编辑  小数位    不输出0数据
***************************   col_pos  fieldname     seltext_   outputlen    emphasize   sum    key       key1    edit   dcm      no_zero
  PERFORM ls_fieldcat USING   lv_pos   'FLAG'         '复选框'     6        ''       ''     ''       'X'    'X'    ''      ''.
  PERFORM ls_fieldcat USING   lv_pos   'WERK'          '工厂'    4               ''       ''     ''       ''   ''    ''      'X'.

  PERFORM ls_fieldcat USING   lv_pos   'LIFNR'          '供应商'     10             ''       ''     ''       ''   ''    ''      'X'.
   PERFORM ls_fieldcat USING   lv_pos   'NAME1'          '供应商名称'  50             ''       ''     ''       ''   ''    ''      'X'.


  PERFORM ls_fieldcat USING   lv_pos   'MATNR'          '物料号'   12                ''       ''     ''       ''   ''    ''      'X'.
  PERFORM ls_fieldcat USING   lv_pos   'PRUEFLOS'          '检验批'     15             ''       ''     ''       ''   ''    ''      'X'.
  PERFORM ls_fieldcat USING   lv_pos   'KTEXTMAT'          '物料描述'    100               ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos   'ZPM'          '品名'  100                 ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos   'ZGG'          '规格'  100                 ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos   'PPSORTKEY'          '检验点20                 ''       ''     ''       ''   ''    ''      'x'.
  "PERFORM ls_fieldcat USING   lv_pos   'VORGLFNR'          '节点编号' 10                  ''       ''     ''       ''   ''    ''      'x'.
  "PERFORM ls_fieldcat USING   lv_pos   'VCODE'          '使用决策代码'  20                 ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos   'VDATUM '          '检验日期10                  ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos   'MBEWERTG  '          '检验结果记录10                  ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos 'ZMBEWERTG  '          '检验结果记录' 10                  ''       ''     ''       ''   ''    ''      'x'.

 " PERFORM ls_fieldcat USING   lv_pos   'MBEWERTG1 '          'qase检验结果记录1' 10                  ''       ''     ''       ''   ''    ''      'x'.
 "PERFORM ls_fieldcat USING   lv_pos   'MBEWERTG2'          'qasr检验结果记录1' 10                  ''       ''     ''       ''   ''    ''      'x'.

 " PERFORM ls_fieldcat USING   lv_pos   'ZMBEWERTG2  '          '检验结果记录2' 10                  ''       ''     ''       ''   ''    ''      'x'.


 " PERFORM ls_fieldcat USING   lv_pos   'MBEWERTG1 '          'QASE 结果' 10                  ''       ''     ''       ''   ''    ''      'x'.



  PERFORM ls_fieldcat USING   lv_pos   'MERKNR'          '检验特性编号15                 ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos  'KURZTEXT4 '         '检验特性' 12                  ''       ''     ''       ''   ''    ''      'x'.
  "PERFORM ls_fieldcat USING   lv_pos  'SOLLWERT '         '基本尺寸' 12                  ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos  'ZSOLLWERT '         '基本尺寸12                  ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos  'TOLERANZOB '         '规格上限' 12                  ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos  'ZTOLERANZOB '         '规格上限12                  ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos  'TOLERANZUN '         '规格下限' 12                  ''       ''     ''       ''   ''    ''      'x'.
  PERFORM ls_fieldcat USING   lv_pos  'ZTOLERANZUN '         '规格下限12                  ''       ''     ''       ''   ''    ''      'x'.
"  PERFORM ls_fieldcat USING   lv_pos  'MESSWERT1'         '检验方法 检测工具' 12                  ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos  'KURZTEXT2'         '短文本'50                  ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos  ' ANZFEHLER'         '产品数量'50                  ''       ''     ''       ''   ''    ''      'x'.
 " PERFORM ls_fieldcat USING   lv_pos  ' ZSGC'         '上公差'50                  ''       ''     ''       ''   ''    ''      'x'.
 "PERFORM ls_fieldcat USING   lv_pos  'ZMBEWERTG2'         '下公差'50                  ''       ''     ''       ''   ''    ''      'X'.

 " PERFORM ls_fieldcat USING   lv_pos   'MERKNR1'          '检验结果' 10                  ''       ''     ''       ''   ''    ''      'X'.
  " PERFORM ls_fieldcat USING   lv_pos   'ZNUM'          '1111'     10                  ''       ''     ''       ''   ''    ''      'X'.
  " PERFORM ls_fieldcat USING   lv_pos   'DETAILERG'          '2222' 10                  ''       ''     ''       ''   ''    ''      'X'.
  " PERFORM ls_fieldcat USING   lv_pos   'ZMBEWERTG3'          '333' 10                  ''       ''     ''       ''   ''    ''      'X'.

 wa_event-name slis_ev_data_changed .
  wa_event-form 'FRM_DATA_CHANGED'.
  APPEND wa_event TO it_event.



ENDFORM.

FORM ls_fieldcat USING  col_pos  fieldname  seltext   outputlen emphasize do_sum key key1 edit dem no_zero.

  CLEAR :it_ls_fieldcat.

  it_ls_fieldcat-col_pos   col_pos.
  it_ls_fieldcat-fieldname fieldname.
  it_ls_fieldcat-seltext_l it_ls_fieldcat-seltext_s seltext.

  it_ls_fieldcat-outputlen outputlen.
  it_ls_fieldcat-emphasize emphasize.
  it_ls_fieldcat-do_sum    do_sum.
  it_ls_fieldcat-key       key.
  it_ls_fieldcat-checkbox key1.
  it_ls_fieldcat-edit      edit.         "可编辑
  it_ls_fieldcat-decimals_out      dem.  "小数位
  it_ls_fieldcat-no_zero   no_zero.

  APPEND it_ls_fieldcat TO it_fieldcat.
  lv_pos lv_pos + 1.
ENDFORM.                    "ls_fieldcat


FORM  user_com  USING  r_ucomm  LIKE  sy-ucomm
      rs_selfield  
TYPE  slis_selfield  .


  CALL METHOD grid->check_changed_data.
  DATA:it_fidx TYPE lvc_t_fidx WITH HEADER LINE.
  CALL METHOD grid->get_filtered_entries "获取被过滤的行
    IMPORTING
      et_filtered_entries it_fidx[].
  rs_selfield-refresh 'X'.

  CASE r_ucomm.
    WHEN 'PRINT'.
      PERFORM frm_print.
  ENDCASE.
*

ENDFORM.



FORM  set_pf  USING    extab  TYPE  slis_t_extab"调用gui状态
****************
     CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid grid.
  CALL METHOD grid->register_edit_event
    
EXPORTING
      i_event_id cl_gui_alv_grid=>mc_evt_modified.
************  ,,


  SET  PF-STATUS  'STANDARD'.
ENDFORM.




FORM frm_print.
*   *动态内表 行列转换
  DATA wa_head      LIKE zqmr002_head,
         lt_head      LIKE STANDARD TABLE OF zqmr002_head"表头数据结构

         wa_head1     LIKE zqmr002_head,"处理sf 页脚检测结果使用
         lt_head1     LIKE STANDARD TABLE OF zqmr002_head"储存临时数据

         wa_head2     LIKE zqmr002_head,"处理sf 页脚检测结果使用
         lt_head2     LIKE STANDARD TABLE OF zqmr002_head"储存临时数据

         wa_head3     LIKE zqmr002_head,  "处理sf 页脚检测结果使用
         lt_head3     LIKE STANDARD TABLE OF zqmr002_head"储存临时数据

         wa_head4     LIKE zqmr002_head"处理sf 工具对照表 使用
         lt_head4     LIKE STANDARD TABLE OF zqmr002_head"储存临时数据


         wa_head5     LIKE zqmr002_head,   "处理sf 工具对照表 使用
         lt_head5     LIKE STANDARD TABLE OF zqmr002_head"储存临时数据

         wa_head5_c   LIKE zqmr002_head,   "处理sf 工具对照表 使用
         lt_head5_c   LIKE STANDARD TABLE OF zqmr002_head"储存临时数据

         wa_item      LIKE zqmr002_item,
         lt_item      LIKE STANDARD TABLE OF zqmr002_item"表体数据结构
         wa_item_dyn  LIKE zqmr002_item_dyn,
         lt_item_dyn  LIKE STANDARD TABLE OF zqmr002_item_dyn"动态表体数据结构
         wa_item_dyn1 LIKE zqmr002_item_dyn,
         lt_item_dyn1 LIKE STANDARD TABLE OF zqmr002_item_dyn"动态表体数据结构
***********************
         wa_item_dyn2 LIKE zqmr001_item_dyn,   "sf尺寸编码行
         lt_item_dyn2 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构

         wa_item_dyn3 LIKE zqmr001_item_dyn"sf 基本尺寸行
         lt_item_dyn3 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构

         wa_item_dyn4 LIKE zqmr001_item_dyn"sf 上公差行
         lt_item_dyn4 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构

         wa_item_dyn5 LIKE zqmr001_item_dyn"sf 下公差行
         lt_item_dyn5 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构

         wa_item_dyn6 LIKE zqmr001_item_dyn"sf 检测工具行
         lt_item_dyn6 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构

         wa_item_dyn7 LIKE zqmr001_item_dyn"sf 检测工具行
         lt_item_dyn7 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构

         wa_item_dyn8 LIKE zqmr001_item_dyn"sf 检测工具行
         lt_item_dyn8 LIKE STANDARD TABLE OF zqmr001_item_dyn"动态表体数据结构
*******************************

  DATA ztext2(20TYPE c.
  DATAcolname(10),
        n1          TYPE  i,
        n2          TYPE  i,
        index(2).



 DATA lv_zxh(4)     TYPE n.
  DATA lv_zxh_i(4)   TYPE i.
  DATA lv_zxh_01(3)  TYPE n.
  DATA lv_char TYPE char3.





  DATA fm_name TYPE rs38l_fnam.
  DATA xssfctrlop LIKE ssfctrlop.

  DATA :ls_composet_param TYPE ssfcompop,
        w_job_output_info TYPE ssfcrescl.
  DATA option TYPE ssfcresop."SF使用参数

  DATA countn TYPE i VALUE 0.
  DATA countn1 TYPE i VALUE 0.

  DATA znum(3TYPE c,
         zznum(3TYPE c.
  DATABEGIN OF itab0 OCCURS 0,

          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)      TYPE n,              "尺寸编号
          zxh01(10)   TYPE c,
        END OF itab0.


  DATABEGIN OF itab1 OCCURS 0,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)        TYPE n,
          zsollwert(10TYPE c,               "基本尺寸
        END OF itab1.

  DATABEGIN OF itab2 OCCURS 0,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)   TYPE n,
         " zsgc(10) TYPE c,               "上公差
          ztoleranzob(10TYPE c"规格上限

        END OF itab2.

  DATABEGIN OF itab2_u OCCURS 0,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)   TYPE n,
         " zsgc(10) TYPE c,               "上公差
          ztoleranzob(10TYPE c"规格上限

        END OF itab2_u.

  DATABEGIN OF itab3 OCCURS 0,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)   TYPE n,
         " zxgc(10) TYPE c,               "下公差
         ztoleranzun(10TYPE c"规格下限
        END OF itab3.

  DATABEGIN OF itab3_d OCCURS 0,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)   TYPE n,
         " zxgc(10) TYPE c,               "下公差
         ztoleranzun(10TYPE c"规格下限
        END OF itab3_d.

  DATABEGIN OF itab4 OCCURS 0,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)    TYPE n,
          pmethode  TYPE qamv-pmethode,     "工具文本
          kurztext1 TYPE qmtt-kurztext,
        END OF itab4.



  DATABEGIN OF itab5 OCCURS 0,
          xh(8)         TYPE n,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)        TYPE n,
          messwert1(10TYPE c,
          stuecknr(4)   TYPE n"检验单元编号 2018 01 29 gt_main STUECKNR 赋值到内表 因为之前结果顺序错乱
          zzmbewertg2(10TYPE c"2018 03 19
        END OF itab5.

  DATABEGIN OF itab6 OCCURS 0,
          xh(8)       TYPE n,
          zxhdy(4)    TYPE n,              "尺寸编号
          zxh(4)      TYPE n,
          mbewertg    TYPE qase-mbewertg"评估
          stuecknr(4TYPE n"检验单元编号 2018 01 29 gt_main STUECKNR 赋值到内表 因为之前结果顺序错乱
        END OF itab6.







   CLEAR :gt_alv5[].
  LOOP AT gt_alv INTO gs_alv WHERE flag  'X' ."and  prueflos = wa_head-prueflos and ppsortkey = wa_head-ppsortkey . .

    APPEND gs_alv TO gt_alv1.
    APPEND gs_alv TO gt_alv2.
    APPEND gs_alv TO gt_alv5.

    "APPEND gs_alv TO gt_alv3.
   "APPEND gs_alv TO gt_alv7.

*    MOVE-CORRESPONDING gt_alv to gt_alv7.
*      DELETE gt_alv7 WHERE flag  <> 'X' .
  ENDLOOP.




   SORT gt_alv1  BY prueflos merknr.
   SORT gt_alv2  BY prueflos merknr .
   SORT gt_alv5  BY prueflos.

    CLEAR :gt_alv7[] .
    MOVE-CORRESPONDING gt_alv TO gt_alv7.
     DELETE gt_alv7 WHERE flag  <> 'X' .
    DELETE gt_alv7 WHERE zmbewertg2  IS NOT INITIAL .





    DELETE gt_alv5 WHERE zmbewertg2  IS NOT INITIAL .
  "DELETE gt_alv5 WHERE ZMBEWERTG2  is NOT INITIAL .

  " SORT gt_alv7  BY prueflos.




  DELETE ADJACENT DUPLICATES FROM gt_alv1 COMPARING prueflos merknr.
  DELETE ADJACENT DUPLICATES FROM gt_alv2 COMPARING prueflos merknr .
  DELETE ADJACENT DUPLICATES FROM gt_alv5 COMPARING prueflos  .









  DESCRIBE TABLE gt_alv1 LINES n1.  "获取表的行数 存放到n1
  DESCRIBE TABLE gt_alv2 LINES n2.


  CLEARlt_head[] ,wa_head.

  "DELETE gt_alv5 WHERE ZMBEWERTG2  is NOT INITIAL ." ZSOLLWERT = '0.000' and ZTOLERANZOB = '0.000' and ZTOLERANZUN = '0.000' and ZMBEWERTG3 = ''.



  LOOP AT gt_alv5 INTO gs_alv5.
    MOVE-CORRESPONDING gs_alv5  TO wa_head.
    APPEND wa_head TO lt_head.
  ENDLOOP.





*********************开始  sf 脚标需要判断外观是否合格  如果判断数据第一条为空 那么显示不出来 所以把同一个检验批 检验点的数据 存到一个内表 把评判结果为空的数据 删除 留下不为空的数据
CLEAR gs_alv-flag.
DATA :zz1(2TYPE  c."获取内表的行数
DATA:zz2(2TYPE c.

LOOP AT gt_alv INTO gs_alv WHERE flag  'X' AND  prueflos wa_head-prueflos AND ppsortkey wa_head-ppsortkey .  "


    APPEND gs_alv TO gt_alv4.
  ENDLOOP.


*******  处理sf 页脚SAP检测方法(工具)代码与检测工具对照
    LOOP AT gt_alv4 INTO gs_alv4.

    MOVE-CORRESPONDING gs_alv4  TO wa_head4.

    APPEND wa_head4 TO lt_head4.

   ENDLOOP.

   SORT lt_head4[] BY pmethode kurztext2 .
   DELETE ADJACENT DUPLICATES FROM lt_head4 COMPARING pmethode kurztext2.  "去重复的无用数据
*   SORT lt_head4[] BY ztext2 .
*   DELETE ADJACENT DUPLICATES FROM lt_head4[] COMPARING pmethode.  "去重复的无用数据
*
   MOVE-CORRESPONDING lt_head4[] TO lt_head5[].

   CLEAR lt_head5_c[] .
   lt_head5_c[] lt_head5[] .
   SORT lt_head5_c[] BY ztext2 .
   DELETE ADJACENT DUPLICATES FROM lt_head5_c[] COMPARING ztext2 .

   LOOP AT lt_head4 INTO wa_head4.
      LOOP AT  lt_head5 INTO wa_head5  WHERE prueflos wa_head4-prueflos AND ppsortkey wa_head4-ppsortkey .
        zz2 sy-tabix.
        IF sy-subrc 0.
          CONCATENATE wa_head5-pmethode  wa_head5-kurztext2  INTO wa_head5-ztext2  SEPARATED BY'-'"把工具 和描述文本 拼接
            CASE  zz2.
              WHEN '1'.
                    wa_head4-za1 =  wa_head5-ztext2.
              WHEN '2'.
                wa_head4-za2 =  wa_head5-ztext2.
              WHEN '3'.
                wa_head4-za3 =  wa_head5-ztext2.
             WHEN '4'.
                wa_head4-za4 =  wa_head5-ztext2.
             WHEN '5'.
                wa_head4-za5 =  wa_head5-ztext2.
             WHEN '6'.
                wa_head4-za6 =  wa_head5-ztext2.
             WHEN '7'.
                 wa_head4-za7 =  wa_head5-ztext2.
             WHEN '8'.
                 wa_head4-za8 =  wa_head5-ztext2.
             WHEN '9'.
                 wa_head4-za9 =  wa_head5-ztext2.
             WHEN '10'.
                 wa_head4-za10 =  wa_head5-ztext2.
            ENDCASE.

      ENDIF.

       IF wa_head4-za1 '-'.  CLEAR wa_head4-za1.  ENDIF.  "wa_head5-ztext2 赋给某个变量为空时  会填入 / 为了美观 清除等于/的字段
       IF wa_head4-za2 '-'CLEAR wa_head4-za2   .ENDIF.
       IF wa_head4-za3 '-'CLEAR wa_head4-za3   .ENDIF.
       IF wa_head4-za4 '-'CLEAR wa_head4-za4   .ENDIF.
       IF wa_head4-za5 '-'CLEAR wa_head4-za5   .ENDIF.
       IF wa_head4-za6 '-'CLEAR wa_head4-za6   .ENDIF.
       IF wa_head4-za7 '-'CLEAR wa_head4-za7   .ENDIF.
       IF wa_head4-za8 '-'CLEAR wa_head4-za8   .ENDIF.
       IF wa_head4-za9 '-'CLEAR wa_head4-za9   .ENDIF.
       IF wa_head4-za10 '-'CLEAR wa_head4-za10   .ENDIF.


       CONCATENATE wa_head4-za1 wa_head4-za2 wa_head4-za3 wa_head4-za4 wa_head4-za5 wa_head4-za6 wa_head4-za7  wa_head4-za8 wa_head4-za9 wa_head4-za10
       
INTO wa_head4-zkurztext SEPARATED BY ' '.
"把所有的工具 跟文本 拼接到一个字段上面显示
      MODIFY lt_head4 FROM  wa_head4.
     ENDLOOP.

   ENDLOOP.

   DO  zz2 TIMES.  "根据循环的次数 只保留内表里面第一条数据 填充到sf
      DELETE lt_head4 INDEX 2.
   ENDDO.

******** 页脚SAP检测方法(工具)代码与检测工具对照 结束

********   处理 sf 页脚评判 外观等等 合格情况

DELETE gt_alv4  WHERE zmbewertg2 ''"存放脚标评断结果的字段

    LOOP AT gt_alv4 INTO gs_alv4.
    MOVE-CORRESPONDING gs_alv4  TO wa_head1.
    MOVE-CORRESPONDING gs_alv4  TO wa_head2.
    MOVE-CORRESPONDING gs_alv4  TO wa_head3.
    APPEND wa_head1 TO lt_head1.
    APPEND wa_head2 TO lt_head2.
    APPEND wa_head3 TO lt_head3.
    zz1 =  sy-tfill.
    ENDLOOP.


*  MOVE-CORRESPONDING lt_head1 to lt_head2.
*  MOVE-CORRESPONDING lt_head1 to lt_head3.

  DO zz1 TIMES.
     DELETE lt_head1 INDEX 2.
  ENDDO.


  DO TIMES.
   DELETE lt_head2 INDEX 1.
  ENDDO.

   DO zz1 TIMES.
   DELETE lt_head2 INDEX 2.
  ENDDO.


  DO TIMES.
   DELETE lt_head3 INDEX 1.
  ENDDO.

  DO zz1 TIMES.  "目前sf 脚标 评判合格的 目前只预留三个栏位  超过的直接删除了 不显示出来
   DELETE lt_head3 INDEX 2.
  ENDDO.



*************************处理 sf 页脚评判 外观等等 合格情况 结束
*






  LOOP AT lt_head INTO wa_head.
*     CLEAR:<F_OUT_01>,<F_OUT>.

*-----------------------调用smartforms函数打印----------------------*
    AT FIRST.
      xssfctrlop-no_close 'X'.
    ENDAT.
    AT LAST.
      xssfctrlop-no_close ''.
    ENDAT.
    CLEAR lt_item_dyn[]lt_item_dyn1[].
*    CLEAR LT_ITEM_DYN. "清除表头,选择多个数据打印时 一页显示一条数据
*     LOOP AT GT_MAIN_01 INTO GW_MAIN_01 WHERE PRUEFLOS = WA_HEAD-PRUEFLOS  .
    CLEAR itab0[].
    CLEAR itab1[].
    CLEAR itab2[].
    CLEAR itab2_u[].
    CLEAR itab3[].
    CLEAR itab3_d[].
    CLEAR itab4[].
    CLEAR itab5[].
    CLEAR itab6[].

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos   AND ppsortkey wa_head-ppsortkey.
*          ITAB0-MERKNR         = GW_MAIN-MERKNR.
      itab0-zxh            gs_alv7-zxh .
      itab0-zxh01          gs_alv7-zxh01  .      "尺寸编号
      itab0-zxh01          gs_alv7-merknr1  .      "尺寸编号
      itab0-zxhdy          gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab0-zxhdy
        
IMPORTING
          output itab0-zxhdy.

      CONDENSE itab0-zxh01 NO-GAPS.
      APPEND itab0.
    ENDLOOP.


    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos   AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab1-zxh            gs_alv7-zxh .
*          ITAB1-MERKNR         = GW_MAIN-MERKNR.
      itab1-zsollwert      gs_alv7-zsollwert.      "基本尺寸
      itab1-zxhdy          gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab1-zxhdy
        
IMPORTING
          output itab1-zxhdy.

      CONDENSE itab1-zsollwert NO-GAPS.
      APPEND itab1.
    ENDLOOP.

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos   AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab2-zxh            gs_alv7-zxh .
*          ITAB1-MERKNR         = GW_MAIN-MERKNR.
      itab2-ztoleranzob     gs_alv7-ztoleranzob.      "上公差
      itab2-zxhdy           gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab2-zxhdy
        
IMPORTING
          output itab2-zxhdy.

      CONDENSE itab2-ztoleranzob NO-GAPS.
      APPEND itab2.
    ENDLOOP.

*       zsollwert_js(10)   TYPE c, "基本尺寸
*       ztoleranzob_js(10) TYPE c, "规格上限
*       ztoleranzun_js(10) TYPE c, "规格下限

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos   AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab2_u-zxh            gs_alv7-zxh .
*          ITAB1-MERKNR         = GW_MAIN-MERKNR.
      itab2_u-ztoleranzob     gs_alv7-ztoleranzob_js gs_alv7-zsollwert_js.      "上公差
      itab2_u-zxhdy           gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab2_u-zxhdy
        
IMPORTING
          output itab2_u-zxhdy.

      CONDENSE itab2_u-ztoleranzob NO-GAPS.
      APPEND itab2_u.
    ENDLOOP.

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos   AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab3-zxh            gs_alv7-zxh .
*          ITAB1-MERKNR         = GW_MAIN-MERKNR.
      itab3-ztoleranzun      gs_alv7-ztoleranzun .      "下公差
      itab3-zxhdy           gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab3-zxhdy
        
IMPORTING
          output itab3-zxhdy.

      CONDENSE itab3-ztoleranzun NO-GAPS.
      APPEND itab3.
    ENDLOOP.

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos   AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab3_d-zxh            gs_alv7-zxh .
*          ITAB1-MERKNR         = GW_MAIN-MERKNR.
      itab3_d-ztoleranzun     gs_alv7-ztoleranzun_js gs_alv7-zsollwert_js.      "上公差
      itab3_d-zxhdy           gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab3_d-zxhdy
        
IMPORTING
          output itab3_d-zxhdy.

      CONDENSE itab3_d-ztoleranzun NO-GAPS.
      APPEND itab3_d.
    ENDLOOP.

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
*          ITAB4-MERKNR         = GW_MAIN-MERKNR.
      itab4-zxh            gs_alv7-zxh .
      itab4-pmethode       gs_alv7-pmethode.      "工具文本
      itab4-zxhdy          gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab4-zxhdy
        
IMPORTING
          output itab4-zxhdy.

      " itab4-kurztext1      = gs_alv-kurztext1.
      APPEND itab4.
*
    ENDLOOP.

    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos AND ppsortkey wa_head-ppsortkey"2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab5-zxh            gs_alv7-zxh .
      itab5-messwert1      gs_alv7-zmbewertg3." gs_alv-messwert1.  "检验记录结果
      itab5-stuecknr       gs_alv7-stuecknr .""检验单元编号 2018 01 29 gt_main STUECKNR 赋值到内表 因为之前结果顺序错乱
      itab5-zxhdy          gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab5-zxhdy
        
IMPORTING
          output itab5-zxhdy.


     " itab5-zZMBEWERTG2    = gs_alv-ZMBEWERTG2."2018 03 19
      CONDENSE itab5-messwert1 NO-GAPS.
      APPEND itab5.
    ENDLOOP.

   " DELETE itab5 WHERE zZMBEWERTG2 is NOT INITIAL.

    "CLEAR :itab6.
    LOOP AT gt_alv7 INTO gs_alv7 WHERE prueflos wa_head-prueflos AND ppsortkey wa_head-ppsortkey.  "2018 01 29 ADD and ppsortkey = wa_head-ppsortkey
      itab6-zxh            gs_alv7-zxh .
      itab6-mbewertg       gs_alv7-mbewertg1.
      itab6-stuecknr       gs_alv7-stuecknr ."检验单元编号 2018 01 29 gt_main STUECKNR 赋值到内表 因为之前结果顺序错乱
      itab6-zxhdy          gs_alv7-merknr1 .

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  itab6-zxhdy
        
IMPORTING
          output itab6-zxhdy.

      APPEND itab6.
    ENDLOOP.



    DATA n(8TYPE n.
    DATA a(8TYPE n.
    "SORT itab5 BY zxh stuecknr .

    SORT itab5 BY zxhdy.
    SORT itab6 BY zxhdy.

    LOOP AT itab5.
      n n + 1.
      itab5-xh n.

      a itab5-xh"最后一条会变成数据会混乱
      AT END OF zxhdy.
        n 0.

      ENDAT.



      IF itab5-xh '00000000'"防止数据混乱 定义一个变量
        itab5-xh .
      ENDIF.
      MODIFY itab5.
      " CLEAR itab5-xh.
    ENDLOOP.
    "sort itab5 by xh.




    DATA n3(8TYPE n.
    DATA b(8TYPE n.
    "SORT itab6 BY zxh stuecknr.
    LOOP AT itab6.
      n3 n3 + 1.
      itab6-xh n3.


      b itab6-xh.
      AT END OF zxhdy"最后一条会变成数据会混乱
        n3 0.
      ENDAT.



      IF itab6-xh '00000000'.   防止数据混乱 定义一个变量
        itab6-xh b.
      ENDIF.
      MODIFY itab6.
      "CLEAR itab6-xh.
    ENDLOOP.



    SORT itab0 BY zxh .
    SORT itab1 BY zxh .
    SORT itab2 BY zxh .
    SORT itab2_u BY zxh .
    SORT itab3 BY zxh .
    SORT itab3_d BY zxh .
    SORT itab4 BY zxh .
    SORT itab5 BY zxh xh.
    SORT itab6 BY zxh xh.

*    DELETE ADJACENT DUPLICATES FROM itab0 COMPARING zxh.
*    DELETE ADJACENT DUPLICATES FROM itab1 COMPARING zxh.
*    DELETE ADJACENT DUPLICATES FROM itab2 COMPARING zxh.
*    DELETE ADJACENT DUPLICATES FROM itab3 COMPARING zxh.
*    DELETE ADJACENT DUPLICATES FROM itab4 COMPARING zxh.
*









    DATA tmerknr LIKE qamv-merknr OCCURS WITH HEADER LINE.

     LOOP AT itab1.
      tmerknr itab1-zxh.
      COLLECT tmerknr.
    ENDLOOP.




    DATAdy_table TYPE REF TO data,
          dy_wa    TYPE REF TO data,
          it_str   TYPE lvc_t_fcat"Table Type
          wa_str   TYPE lvc_s_fcat"Sturcture

    FIELD-SYMBOLS<dyn_table> TYPE table,
                   <dyn_wa>    TYPE any,
                   <fs>        TYPE any.





    CLEAR c.
    LOOP AT tmerknr.
      1.
      colname tmerknr.
      PERFORM frm_add_fcat USING:
             colname 'C' '描述' '100'.

    ENDLOOP.



    AT FIRST.
      IF dy_out IS INITIAL.
        CALL METHOD cl_alv_table_create=>create_dynamic_table
          
EXPORTING
            it_fieldcatalog it_fcat
          
IMPORTING
            ep_table        dy_out.

        CALL METHOD cl_alv_table_create=>create_dynamic_table
          
EXPORTING
            it_fieldcatalog it_fcat
          
IMPORTING
            ep_table        dy_out1.
      ENDIF.
    ENDAT.

    ASSIGN dy_out->TO <f_out>.
    ASSIGN dy_out1->TO <f_out_01>.
    CREATE DATA dy_out_wa LIKE LINE OF <f_out>.
    CREATE DATA dy_out_wa1 LIKE LINE OF <f_out_01>.
    ASSIGN dy_out_wa->TO <f_out_wa>.
    ASSIGN dy_out_wa1->TO <f_out_wa1>.




    DATA fieldname(20).
    IF <f_out> IS NOT INITIAL .
      LOOP AT <f_out> INTO <f_out_wa> .
        DELETE TABLE <f_out> FROM <f_out_wa> .
      ENDLOOP.
    ENDIF.

    IF <f_out_01> IS NOT INITIAL .
      LOOP AT <f_out_01> INTO <f_out_wa> .
        DELETE TABLE <f_out_01> FROM <f_out_wa> .
      ENDLOOP.
    ENDIF.



    LOOP AT itab0.

*      ASSIGN COMPONENT 'BEZEI' OF STRUCTURE <DYN_WA> TO <FS>.  "分配结构里的销售办事处,用FS字段 指向它
*      <FS> = ITAB8-BEZEI.
      fieldname itab0-zxhdy"这里把日期类型定义为char型,因为用DATS报错。
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>"分配结构的日期,将FS指向它
      <f_fs1> itab0-zxhdy .
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.


    LOOP AT itab1.

*      ASSIGN COMPONENT 'BEZEI' OF STRUCTURE <DYN_WA> TO <FS>.  "分配结构里的销售办事处,用FS字段 指向它
*      <FS> = ITAB8-BEZEI.
      fieldname itab1-zxhdy"这里把日期类型定义为char型,因为用DATS报错。
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>"分配结构的日期,将FS指向它
      <f_fs1> itab1-zsollwert.
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.

    LOOP AT itab2.
      fieldname itab2-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>.
      <f_fs1> itab2-ztoleranzob.
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.

    LOOP AT itab3.
      fieldname itab3-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>.
      <f_fs1> itab3-ztoleranzun.
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.

    LOOP AT itab2_u.
      fieldname itab2_u-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>.
      <f_fs1> itab2_u-ztoleranzob.
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.

    LOOP AT itab3_d.
      fieldname itab3_d-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>.
      <f_fs1> itab3_d-ztoleranzun.
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.

    LOOP AT itab4.
      fieldname itab4-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>.
      <f_fs1> itab4-pmethode.
      AT LAST.
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
      ENDAT.
    ENDLOOP.

    SORT itab5 BY xh .
    LOOP AT itab5.
*      ASSIGN COMPONENT 'XH' OF STRUCTURE <F_OUT_WA> TO <F_OUT_WA>.  "分配结构里的销售办事处,用FS字段 指向它
*      <F_OUT_WA> = ITAB8-BEZEI.
      fieldname itab5-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa> TO <f_fs1>.
      <f_fs1> itab5-messwert1.
      "<f_fs1> = itab5-ZMBEWERTG3.
*      IF ITAB5-MBEWERTG = 'R'.
*         LV_FLAG = 'X'.
*       ENDIF.
      AT END OF xh.
*         IF LV_FLAG = 'X'.
*           <F_OUT_WA>-
        APPEND <f_out_wa> TO <f_out>.
        CLEAR <f_out_wa>.
*          CLEAR LV_FLAG.
      ENDAT.
    ENDLOOP.
    "SORT itab5 BY  xh ."




    SORT itab6 BY xh.
    LOOP AT itab6.
*      ASSIGN COMPONENT 'XH' OF STRUCTURE <F_OUT_WA> TO <F_OUT_WA>.  "分配结构里的销售办事处,用FS字段 指向它
*      <F_OUT_WA> = ITAB8-BEZEI.
      fieldname itab6-zxhdy.
      ASSIGN COMPONENT fieldname OF STRUCTURE <f_out_wa1> TO <f_fs1>.
      <f_fs1> itab6-mbewertg.
      AT END OF xh.
        APPEND <f_out_wa1> TO <f_out_01>.
        CLEAR <f_out_wa1>.
      ENDAT.
    ENDLOOP.
    "SORT itab6 BY  xh ."

     "CLEAR wa_item_dyn.
  " CLEAR   lt_item_dyn.
    LOOP AT <f_out> INTO <f_out_wa> ."条件字段选择不会重复
      CLEAR wa_item_dyn.
      MOVE-CORRESPONDING <f_out_wa> TO wa_item_dyn.

      APPEND wa_item_dyn TO lt_item_dyn.
      CLEAR gs_alv7wa_item_dyn.
    ENDLOOP.

    CLEAR lt_item_dyn1"清除表头,选择多个数据打印时 一页显示一条数据
    LOOP AT <f_out_01> INTO <f_out_wa> ."条件字段选择不会重复
      CLEAR wa_item_dyn1.
      MOVE-CORRESPONDING <f_out_wa> TO wa_item_dyn1.
      APPEND wa_item_dyn1 TO lt_item_dyn1.
      CLEAR gs_alv7wa_item_dyn1.
    ENDLOOP.
    CLEAR  countn.

     LOOP AT lt_item_dyn INTO wa_item_dyn.
      IF sy-tabix 1.
        wa_item_dyn-zzbj '尺寸编号'.
      ELSEIF sy-tabix 2.
        wa_item_dyn-zzbj '基本尺寸'.
      ELSEIF sy-tabix 3.
        wa_item_dyn-zzbj '最大极限值'.
      ELSEIF sy-tabix 4.
        wa_item_dyn-zzbj '最小极限值'.
      ELSEIF sy-tabix 5.
        wa_item_dyn-zzbj '上公差'.
      ELSEIF sy-tabix 6.
        wa_item_dyn-zzbj '下公差'.
      ELSEIF sy-tabix 7.
        wa_item_dyn-zzbj '检测工具'.
        wa_item_dyn-zsfhg '判定'.
      ELSEIF sy-tabix > 7.
        countn countn + 1.
        wa_item_dyn-zzbj countn.
        CONDENSE wa_item_dyn-zzbj NO-GAPS.
      ENDIF.
*      IF WA_ITEM_DYN-PRUEFLOS IS INITIAL.
      wa_item_dyn-prueflos wa_head-prueflos.
*      ENDIF.
      MODIFY lt_item_dyn FROM wa_item_dyn.
    ENDLOOP.



     DATA :z11(1TYPE c VALUE 'R',
           z12(1TYPE c VALUE 'F'.
    CLEAR countn1.
    LOOP AT lt_item_dyn1 INTO wa_item_dyn1.
      countn1 countn1 + 1.
      wa_item_dyn1-zzbj countn1.
*        IF WA_ITEM_DYN1-PRUEFLOS IS INITIAL.
      wa_item_dyn1-prueflos wa_head-prueflos.
*        ENDIF.
      CONDENSE wa_item_dyn1-zzbj NO-GAPS.
*      IF wa_item_dyn1-0010 = 'A' OR wa_item_dyn1-0020 = 'A' OR wa_item_dyn1-0030 = 'A' OR wa_item_dyn1-0040 = 'A' OR wa_item_dyn1-0050 = 'A' OR wa_item_dyn1-0060 = 'A'
*        OR wa_item_dyn1-0070 = 'A' OR wa_item_dyn1-0080 = 'A' OR wa_item_dyn1-0090 = 'A' OR wa_item_dyn1-0100 = 'A' OR wa_item_dyn1-0110 = 'A'.
*        wa_item_dyn1-zsfhg = '合格'.
      IF  wa_item_dyn1-0010 CS z11  OR wa_item_dyn1-0010 CS z12 OR wa_item_dyn1-0020 CS z11  OR wa_item_dyn1-0020 CS z12
         
OR wa_item_dyn1-0030 CS z11  OR wa_item_dyn1-0030 CS z12  OR wa_item_dyn1-0040 CS z11  OR wa_item_dyn1-0040 CS z12
        
OR wa_item_dyn1-0050 CS z11  OR wa_item_dyn1-0050 CS z12   OR wa_item_dyn1-0060 CS z11  OR wa_item_dyn1-0060 CS z12
         
OR wa_item_dyn1-0070 CS z11  OR wa_item_dyn1-0070 CS z12
        
OR wa_item_dyn1-0080 CS z11  OR wa_item_dyn1-0080 CS z12
        
OR wa_item_dyn1-0090 CS z11  OR wa_item_dyn1-0090 CS z12
        
OR wa_item_dyn1-0100 CS z11  OR wa_item_dyn1-0100 CS z12
        
OR wa_item_dyn1-0110 CS z11  OR wa_item_dyn1-0110 CS z12 ."OR wa_item_dyn1-0050 = 'A' OR wa_item_dyn1-0060 = 'A'
*        OR wa_item_dyn1-0070 = 'A' OR wa_item_dyn1-0080 = 'A' OR wa_item_dyn1-0090 = 'A' OR wa_item_dyn1-0100 = 'A' OR wa_item_dyn1-0110 = 'A'.
        wa_item_dyn1-zsfhg '不合格'.
      ELSE.
        wa_item_dyn1-zsfhg '合格'.

*        if wa_item_dyn1-0010 = 'A' OR wa_item_dyn1-0020 = 'A' OR wa_item_dyn1-0030 = 'A' OR wa_item_dyn1-0040 = 'A' OR wa_item_dyn1-0050 = 'A' OR wa_item_dyn1-0060 = 'A'
*        OR wa_item_dyn1-0070 = 'A' OR wa_item_dyn1-0080 = 'A' OR wa_item_dyn1-0090 = 'A' OR wa_item_dyn1-0100 = 'A' OR wa_item_dyn1-0110 = 'A'.
*        wa_item_dyn1-zsfhg = '合格'.
     ENDIF.
      MODIFY lt_item_dyn1 FROM wa_item_dyn1.
    ENDLOOP.


    LOOP AT lt_item_dyn INTO wa_item_dyn.
      READ TABLE lt_item_dyn1 INTO wa_item_dyn1 WITH KEY zzbj wa_item_dyn-zzbj prueflos wa_item_dyn-prueflos.
      IF sy-subrc .
        wa_item_dyn-zsfhg  wa_item_dyn1-zsfhg.
        MODIFY lt_item_dyn FROM wa_item_dyn.
      ENDIF.
    ENDLOOP.

*     DELETE ADJACENT DUPLICATES FROM itab4 COMPARING pmethode.
**      LT_ITEM_DYN_BK  = LT_ITEM_DYN.
*    CLEAR lv_kurztext1.
*    LOOP AT itab4.
*      CONCATENATE itab4-pmethode ':' itab4-kurztext1 ',' lv_kurztext1  INTO lv_kurztext1.
*    ENDLOOP.
*
*    wa_head-kurztext = lv_kurztext1.




*******************************SF 打印 从尺寸编码行 开始  因为都是同一个字段 同时填充会报错 所以每一行定义一个表
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn2[]."第一行
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn3[]."第二行
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn4[]."第三行
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn5[]."第四行
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn6[]."第五行
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn7[]."第五行
    MOVE-CORRESPONDING  lt_item_dyn[] TO lt_item_dyn8[]."第五行

*      IF sy-tabix = 1.
*        wa_item_dyn-zzbj = '尺寸编号'.
*      ELSEIF sy-tabix = 2.
*        wa_item_dyn-zzbj = '基本尺寸'.
*      ELSEIF sy-tabix = 3.
*        wa_item_dyn-zzbj = '最大极限值'.
*      ELSEIF sy-tabix = 4.
*        wa_item_dyn-zzbj = '最小极限值'.
*      ELSEIF sy-tabix = 5.
*        wa_item_dyn-zzbj = '上公差'.
*      ELSEIF sy-tabix = 6.
*        wa_item_dyn-zzbj = '下公差'.
*      ELSEIF sy-tabix = 7.
*        wa_item_dyn-zzbj = '检测工具'.
*        wa_item_dyn-zsfhg = '判定'.

   " DELETE lt_item_dyn2 WHERE 0020 = ''.
*****循环5 把前5次的数据删除
    DO TIMES.
      DELETE lt_item_dyn  INDEX 1  .       "
    ENDDO.


******把第2条开始的数据 删除 尺寸行
    LOOP AT lt_item_dyn2 INTO wa_item_dyn2.

      DELETE lt_item_dyn2  INDEX  2.        "尺寸编号

    ENDLOOP.
*******************************

**********************
    "第二行
    LOOP AT lt_item_dyn3 INTO wa_item_dyn3.

      DELETE lt_item_dyn3  INDEX  3.       "基本尺寸

    ENDLOOP.

    DO TIMES.
      DELETE lt_item_dyn3  INDEX 1  .
    ENDDO.
**********************

**********************
    "第三行
    LOOP AT lt_item_dyn4 INTO wa_item_dyn4"上公差

      DELETE lt_item_dyn4  INDEX  4.

    ENDLOOP.

    DO TIMES.
      DELETE lt_item_dyn4  INDEX 1  .
    ENDDO.
**********************

**********************
    "第四行
    LOOP AT lt_item_dyn5 INTO wa_item_dyn5."下公差

      DELETE lt_item_dyn5 INDEX  5.

    ENDLOOP.

    DO TIMES.
      DELETE lt_item_dyn5  INDEX 1  .
    ENDDO.
**********************
**********************
    "第五行
    LOOP AT lt_item_dyn7 INTO wa_item_dyn7.

      DELETE lt_item_dyn7 INDEX  6.

    ENDLOOP.

    DO TIMES.
      DELETE lt_item_dyn7  INDEX 1  .
    ENDDO.
**********************
**********************
    "第六行
    LOOP AT lt_item_dyn8 INTO wa_item_dyn8.

      DELETE lt_item_dyn8 INDEX  7.

    ENDLOOP.

    DO TIMES.
      DELETE lt_item_dyn8  INDEX 1  .
    ENDDO.
**********************
**********************
    "第七行
    LOOP AT lt_item_dyn6 INTO wa_item_dyn6.

      DELETE lt_item_dyn6 INDEX  8.

    ENDLOOP.

    DO TIMES.
      DELETE lt_item_dyn6  INDEX 1  .
    ENDDO.
**********************
****  2018 03 10 620系统 10000007663
  "DELETE  lt_item_dyn WHERE 0010 = '' and 0020 = '' and 0030 = '' and 0040 = ''and 0050 = ''and 0060 = ''and 0070 = ''and 0080 = ''and 0090 = '' and 0100 = ''.


"  DELETE lt_item_dyn2 WHERE 0020 = ''.


    IF  w_job_output_info-outputdone 'X' OR w_job_output_info-outputdone ''.  "选择打印预览或者打印时 改变流水号 每天从001开始
      "wa_head-znum = '000'.
     SELECT SINGLE znum
      
FROM zqm01
      
INTO wa_head-znum
      
WHERE erdat sy-datum.
      IF sy-subrc 4.
          zqm01-erdat sy-datum.
          zqm01-znum '001'.
          wa_head-znum '001'.
         MODIFY zqm01.
       ELSE.
         wa_head-znum wa_head-znum + 001.
         zqm01-znum wa_head-znum.
         zqm01-erdat sy-datum.
         MODIFY zqm01.
      ENDIF.
    ENDIF.

     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'  "把获取的流水号 加上前导零
          EXPORTING
            input  wa_head-znum
          
IMPORTING
            output wa_head-zznum.


    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           'ZQMSF002_C'  "smartforms 名字
      IMPORTING
        fm_name            fm_name
      
EXCEPTIONS
        no_form            1
        no_function_module 2
        OTHERS             3.

    IF sy-subrc <> .
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

**     *--------------------------打印函数---------------------------------*
    CALL FUNCTION fm_name
      
EXPORTING
        control_parameters xssfctrlop
        wa_head            
wa_head
       wa_head1           
=  wa_head1
**        wa_head2           =  lt_head2
**        wa_head1           =  wa_head1
*       wa_head2           =  wa_head2
*        wa_head3           =  wa_head3
      TABLES
        it_item            lt_item
        lt_head1           
lt_head1
        lt_head2           
lt_head2
        lt_head3           
lt_head3
        lt_head4           
lt_head4
        it_item_dyn        
lt_item_dyn
        it_item_dyn2       
lt_item_dyn2
        it_item_dyn3       
lt_item_dyn3
        it_item_dyn4       
lt_item_dyn4
        it_item_dyn5       
lt_item_dyn5
        it_item_dyn6       
lt_item_dyn6
        it_item_dyn7       
lt_item_dyn7
        it_item_dyn8       
lt_item_dyn8
*       IT_HEAD            = LT_HEAD
      EXCEPTIONS
        formatting-error   1
        internal_error     2
        send_error         3
        user_anceled       4.
    xssfctrlop-no_open 'X'.

    IF sy-subrc <> .
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

  ENDLOOP.
ENDFORM.

FORM frm_data_changed USING r_data_changed TYPE REF TO cl_alv_changed_data_protocol.  "alv界面 同一个检验批 检验点 勾选其中一个 勾选所有相同的数据

  DATAls_modi TYPE lvc_s_modi,
        ls_out  LIKE gt_alv,
        l_exit.

  FIELD-SYMBOLS <fs_main> LIKE gt_alv.

  LOOP AT r_data_changed->mt_good_cells INTO ls_modi .

    CASE ls_modi-fieldname.
      WHEN 'FLAG'.
        READ TABLE gt_alv INTO gs_alv INDEX ls_modi-row_id.
        CHECK sy-subrc   0  .
        LOOP AT gt_alv INTO gs_alv6 WHERE   prueflos gs_alv-prueflos  AND ppsortkey gs_alv-ppsortkey."匹配条件 满足什么条件 就勾选复选框
          CHECK sy-tabix <> ls_modi-row_id.

          IF ls_modi-value 'X'.
            gs_alv6-d_style gt_disable.
            gs_alv6-flag    'X'       .
          ELSE.
            gs_alv6-d_style gt_enable .
            gs_alv6-flag     space     .
          ENDIF.
          MODIFY  gt_alv  FROM gs_alv6.
        ENDLOOP.
        IF sy-subrc 0.
          PERFORM frm_alv_refresh USING 'X'.
        ENDIF.
    ENDCASE.

  ENDLOOP.

ENDFORM.


FORM frm_alv_refresh USING p_soft TYPE char01.

  CHECK grid IS NOT INITIAL .
  DATA ls_stable TYPE lvc_s_stbl.

  ls_stable-row 'X'.
  ls_stable-col 'X'.

  CALL METHOD grid->refresh_table_display
    
EXPORTING
      is_stable      ls_stable
      i_soft_refresh 
p_soft" Without Sort, Filter, etc.
  .
ENDFORM.

INITIALIZATION.

START-OF-SELECTION.

PERFORM frm_get_data.

PERFORM frm_procees_data.

PERFORM frm_display_data.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值