ABAP 内表的行列转换-发货通知单-SLIS

REPORT Z_TEST_COL_TO_ROW.

TYPE-POOLS: slis.
TABLES: VTTP,LIPS,LIKP,KNA1 ,VTTK.
DATA: gd_fieldcat TYPE slis_t_fieldcat_alv.
DATA: sla TYPE slis_layout_alv ,
      ivariant LIKE disvariant,
      i_repid LIKE sy-repid ,
      i_excluding TYPE slis_t_extab.

TYPESBEGIN OF TY_ALL,
      TKNUM LIKE VTTK-TKNUM,"运单号
      VBELN LIKE LIPS-VBELN,"交货单号
      TPLST LIKE VTTK-TPLST ,"装运点
      NAME1 LIKE  KNA1-NAME1 ,"客户
      ERDAT LIKE VTTK-ERDAT ,"创建日期
      TDLNR LIKE VTTK-TDLNR ,"物流公司
      ROUTE LIKE VTTK-ROUTE ,"线路
      DISTZ LIKE VTTK-DISTZ ,"里程
      ADD01 LIKE VTTK-ADD01 ,"车主
      EXTI1 LIKE VTTK-EXTI1 ,"卸货点
      ADD02 LIKE VTTK-ADD02 ,"司机
      BFART LIKE VTTK-BFART ,"车厢类型
      MATNR LIKE LIPS-MATNR,"物料编码
      ARKTX LIKE LIPS-ARKTX,"物料描述
      BRGEW LIKE LIPS-BRGEW,"货物单项目毛重
      LFIMG LIKE LIPS-LFIMG,"单项目数量
      VRKME LIKE  LIPS-VRKME ,"单位
      GEWEI LIKE LIPS-GEWEI,"重量单位
      LGORT LIKE LIPS-LGORT,"库存地点
     BEIZHU(30TYPE C,"备注
END OF TY_ALL.

TYPES:BEGIN OF TY_HEADER,
      TKNUM LIKE VTTK-TKNUM,"运单号
      VBELN LIKE LIPS-VBELN,"交货单号
      NAME1 LIKE  KNA1-NAME1 ,"客户
      TPLST LIKE VTTK-TPLST ,"装运点
      ERDAT LIKE VTTK-ERDAT ,"装运日期
      TDLNR LIKE VTTK-TDLNR ,"物流公司
      ROUTE LIKE VTTK-ROUTE ,"线路
      DISTZ LIKE VTTK-DISTZ ,"里程
      ADD01 LIKE VTTK-ADD01 ,"车主
      EXTI1 LIKE VTTK-EXTI1 ,"卸货点
      ADD02 LIKE VTTK-ADD02 ,"司机
      BFART LIKE VTTK-BFART ,"车厢类型
      TOTAL_BRGEW LIKE LIPS-BRGEW,"一个交货单的总重量
    END OF TY_HEADER.
*单据抬头结束

*单据明细开始
TYPES:BEGIN OF TY_ITEMS,
     TKNUM LIKE VTTK-TKNUM,"运单号
     VBELN LIKE LIPS-VBELN,"交货单号
     NAME1 LIKE  KNA1-NAME1 ,"客户
     MATNR LIKE LIPS-MATNR,"物料编码
     ARKTX LIKE LIPS-ARKTX,"物料描述
     BRGEW LIKE LIPS-BRGEW,"单项目毛重
     GEWEI LIKE LIPS-GEWEI,"重量单位
     LFIMG LIKE LIPS-LFIMG,"单项目数量
     VRKME LIKE  LIPS-VRKME ,"单位
     LGORT LIKE LIPS-LGORT,"库存地点
     BEIZHU(30TYPE C,"备注
    END OF TY_ITEMS.
*单据明细结束

DATA:WA_ALL TYPE TY_ALL,
      GT_ALL TYPE TY_ALL OCCURS 0.

 DATA:WA_HEADER TYPE TY_HEADER,
      GT_HEADER TYPE TY_HEADER OCCURS 0  .

 DATA:WA_ITEMS TYPE TY_ITEMS,
      GT_ITEMS TYPE TY_ITEMS OCCURS 0.

 DATA: GT_HEADER_SHOW TYPE TY_HEADER OCCURS 0.
 DATA: GT_ITEMS_SHOW TYPE TY_ITEMS OCCURS 0.
*定义传入到smartforms的变量开始
DATA:fm_name TYPE rs38l_fnam.
DATA:itemsname(32TYPE c.
DATA:headername(32TYPE c.
*定义传入到smartforms的变量结束


*定义存储ALV向smartforms传入数据的内表开始
DATA:GT_HEADER_TEMP TYPE TY_HEADER OCCURS 0.
DATA:GT_ITEMS_TEMP TYPE TY_ITEMS OCCURS 0.
DATA:GT_ALL_TEMP TYPE TY_ALL OCCURS 0.
*定义存储ALV向smartforms传入数据的内表结束

"控制smartforms参数声明开始
DATA :control_parameters TYPE ssfctrlop.
"控制smartforms参数声明结束

TYPESBEGIN OF ty_sum ,
        MATNR LIKE LIPS-MATNR,"物料编码
        ARKTX LIKE LIPS-ARKTX,"物料描述
        LFIMG LIKE LIPS-LFIMG,"单项目数量
        VRKME LIKE  LIPS-VRKME ,"单位
       NAME1 LIKE  KNA1-NAME1 ,"客户
       BRGEW LIKE LIPS-BRGEW,"单项目毛重
END OF ty_sum.

DATA : itab TYPE  ty_sum OCCURS ."WITH HEADER LINE ."从数据库中取出的数放入的内表
DATA : hs_sum TYPE HASHED TABLE OF ty_sum WITH UNIQUE KEY MATNR ARKTX VRKME NAME1 WITH HEADER LINE .
DATA : itab_sum TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE .

DATABEGIN OF itab_out OCCURS 0,"行列转换后的内表
        MATNR LIKE LIPS-MATNR,"物料编码
        ARKTX LIKE LIPS-ARKTX,"物料描述
        VRKME LIKE  LIPS-VRKME ,"单位
        menge01 TYPE ,
        menge02 TYPE ,
        menge03 TYPE ,
        menge04 TYPE ,
        menge05 TYPE ,
        menge06 TYPE ,
        menge07 TYPE ,
        menge08 TYPE ,
        menge09 TYPE ,
        menge10 TYPE ,
        menge11 TYPE ,
        menge12 TYPE ,
        menge13 TYPE ,
        menge14 TYPE ,
        menge15 TYPE ,
        menge16 TYPE ,
        menge17 TYPE ,
        menge18 TYPE ,
        menge19 TYPE ,
        menge20 TYPE ,
        menge21 TYPE ,
        menge22 TYPE ,
        menge23 TYPE ,
        menge24 TYPE ,
        menge25 TYPE ,
        menge26 TYPE ,
        line_sum TYPE ,
        BRGEW_sum LIKE LIPS-BRGEW,
END OF itab_out.

TYPESBEGIN OF ty_col ,
      NAME1 LIKE  KNA1-NAME1 ,"客户
END OF ty_col.

DATA : hs_col TYPE HASHED TABLE OF ty_col WITH UNIQUE KEY NAME1 WITH HEADER LINE .
DATA : itab_col TYPE STANDARD TABLE OF ty_col WITH HEADER LINE .

FIELD-SYMBOLS: <f_fs1> ,                <f_fs2>
.

DATA: max_count TYPE .


START-OF-SELECTION.
SELECT-OPTIONS: P_ERDAT   FOR VTTK-ERDAT ,                 P_TKNUM   
FOR VTTK-TKNUM ,                 P_TDLNR   
FOR VTTK-TDLNR ,                 P_TPLST   
FOR VTTK-TPLST ,                 P_ERNAM   
FOR VTTK-ERNAM ,                 P_ROUTE   
FOR VTTK-ROUTE .


START-OF-SELECTION.
PERFORM getdata.
PERFORM fixdata.


PERFORM outdata.

*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
FORM getdata.   

SELECT *       
FROM VTTK AS VK       INNER 
JOIN VTTP AS VP         
ON VK~TKNUM = VP~TKNUM       INNER 
JOIN LIPS AS L         
ON L~VBELN = VP~VBELN       INNER 
JOIN LIKP AS LP         
ON LP~VBELN = L~VBELN       INNER 
JOIN KNA1 AS K         
ON K~KUNNR = LP~KUNAG       
INTO CORRESPONDING FIELDS OF TABLE GT_ALL       
WHERE             VK

~TKNUM IN  P_TKNUM AND (             VK
~ERDAT IN  P_ERDAT AND             VK
~TDLNR IN  P_TDLNR AND             VK
~TPLST IN  P_TPLST AND             VK
~ERNAM IN  P_ERNAM AND             VK
~ROUTE IN  P_ROUTE .       
SORT GT_ALL ASCENDING BY TKNUM.       
MOVE-CORRESPONDING GT_ALL TO GT_HEADER_SHOW.       
MOVE-CORRESPONDING GT_ALL TO GT_ITEMS_SHOW.       
DELETE ADJACENT DUPLICATES FROM GT_HEADER_SHOW COMPARING TKNUM  .       
MOVE-CORRESPONDING GT_ALL TO itab.
ENDFORM" GETDATA
*&---------------------------------------------------------------------*
*& Form FIXDATA
*&---------------------------------------------------------------------*
FORM fixdata.
DATAindex LIKE sy-tabix .
DATA:wa_itab TYPE  ty_sum.
LOOP AT itab INTO wa_itab.       hs_sum 
= wa_itab.       
COLLECT hs_sum.             hs_col 
= wa_itab-NAME1 .       
COLLECT hs_col.
ENDLOOP.

SORT hs_col.       itab_col[] 
= hs_col[].       itab_sum[] 
= hs_sum[].
LOOP AT itab_sum.     itab_out
-MATNR = itab_sum-MATNR .     itab_out
-ARKTX = itab_sum-ARKTX .     itab_out
-VRKME = itab_sum-VRKME .     
READ TABLE itab_col WITH KEY NAME1 = itab_sum-NAME1 .     
index = sy-tabix + 3."3这个数字代表有几列是固定不变的     
ASSIGN COMPONENT index OF STRUCTURE itab_out TO <f_fs1>.     <f_fs1> 
= itab_sum-LFIMG.     itab_out
-line_sum = itab_sum-LFIMG.     itab_out
-BRGEW_sum = itab_sum-BRGEW.     
COLLECT itab_out.     
CLEAR itab_out.
ENDLOOP.
ENDFORM" FIXDATA

*---------------------------------------------------------------------*
* FORM frm_catlg_set *
*---------------------------------------------------------------------*
FORM frm_catlg_set USING p_field p_text  p_key.

DATA: ls_fieldcat TYPE slis_fieldcat_alv.       ls_fieldcat
-fieldname = p_field.       ls_fieldcat
-seltext_l = p_text.       ls_fieldcat
-key = p_key.       
IF p_field 'LINE_SUM'.           ls_fieldcat
-emphasize 'C700'.       
ENDIF.
APPEND ls_fieldcat TO gd_fieldcat .
CLEAR ls_fieldcat .
ENDFORM"frm_catlg_set
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield 
TYPE slis_selfield.   
DATA:wa_itab TYPE  ty_sum.
READ TABLE itab INTO wa_itab INDEX rs_selfield-tabindex.
CASE r_ucomm.
WHEN '&IC1'"双击
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE. rs_selfield
-refresh 'X'"自动刷新
ENDFORM"user_com
*---------------------------------------------------------------------*
* FORM outdata2 *
*---------------------------------------------------------------------*
FORM fieldcat_init .
DATAc(2TYPE n , txt
(20TYPE .
PERFORM frm_catlg_set USING:       

'MATNR' '物料编码' 'X' ,       
'ARKTX' '物料描述' 'X' ,       
'VRKME' '单位' 'X' .
LOOP AT hs_col .
c + 1.
CONCATENATE 'MENGE' INTO txt.
PERFORM frm_catlg_set USING: txt hs_col-NAME1 '' .
ENDLOOP.
PERFORM frm_catlg_set USING'LINE_SUM' '数量合计' '' .
PERFORM frm_catlg_set USING'BRGEW_sum' '毛重' '' .


ENDFORM"fieldcat_init

FORM outdata.
PERFORM fieldcat_init . sla
-colwidth_optimize 'X'. sla
-zebra 'X'. i_repid 
= sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING i_callback_program 
= i_repid it_fieldcat 
= gd_fieldcat[] i_save 
'A' is_variant 
= ivariant is_layout 
= sla it_excluding 
= i_excluding i_callback_user_command 
'USER_COMMAND'
TABLES t_outtab 
= itab_out
EXCEPTIONS program_error 
1
OTHERS 2.
ENDFORM" outdata
*---------------------------------------------------------------------*
* FORM fieldcat_init2 *
*---------------------------------------------------------------------*

你可能感兴趣的:(ABAP 内表的行列转换-发货通知单-SLIS)