首页 > 其他 > 详细

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

时间:2016-02-17 17:20:11      阅读:261      评论:0      收藏:0      [点我收藏+]

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 ,"客户
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 ,
END OF itab_out.

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

DATA : hs_bwart TYPE HASHED TABLE OF ty_bwart WITH UNIQUE KEY NAME1 WITH HEADER LINE .
DATA : itab_bwart TYPE STANDARD TABLE OF ty_bwart WITH HEADER LINE .

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

DATA: max_count TYPE .

*SELECT-OPTIONS:
*      s_mblnr FOR mseg-mblnr ,
*      s_budat FOR mkpf-budat .
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 .
PARAMETERS: p_sum AS CHECKBOX .

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

IF p_sum ‘X‘.     
PERFORM outdata.
ELSE.     
PERFORM outdata2.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
FORM getdata.
*SELECT werks matnr lgort bwart menge INTO TABLE itab
*    FROM mkpf INNER JOIN mseg ON mkpf~mblnr = mseg~mblnr AND
*          mkpf~mjahr = mseg~mjahr
*    WHERE mkpf~mblnr IN s_mblnr AND
*          mkpf~budat IN s_budat .
*     
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_bwart 
= wa_itab-NAME1 .       
COLLECT hs_bwart.
ENDLOOP.

SORT hs_bwart.       itab_bwart[] 
= hs_bwart[].       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_bwart 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.     
COLLECT itab_out.     
CLEAR itab_out.
ENDLOOP.
ENDFORM" FIXDATA
*&---------------------------------------------------------------------*
*& Form outdata
*&---------------------------------------------------------------------*
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_sum
EXCEPTIONS program_error 
1
OTHERS 2.
ENDFORM" outdata
*---------------------------------------------------------------------*
* FORM fieldcat_init *
*---------------------------------------------------------------------*
FORM fieldcat_init .
PERFORM frm_catlg_set USING:       
‘WERKS‘ ‘WERKS‘ ‘X‘ ,       
‘MATNR‘ ‘MATNR‘ ‘X‘ ,       
‘LGORT‘ ‘LGORT‘ ‘X‘ ,       
‘BWART‘ ‘BWART‘ ‘X‘ ,       
‘MENGE‘ ‘MENGE‘ ‘‘ .
ENDFORM"fieldcat_init
*---------------------------------------------------------------------*
* 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 outdata2.
PERFORM fieldcat_init2 . 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 *
*---------------------------------------------------------------------*
FORM fieldcat_init2 .
DATAc(2TYPE n , txt
(20TYPE .
PERFORM frm_catlg_set USING:            

‘MATNR‘ ‘物料编码‘ ‘X‘ ,       
‘ARKTX‘ ‘物料描述‘ ‘X‘ ,       
‘VRKME‘ ‘单位‘ ‘X‘ .
LOOP AT hs_bwart .
c + 1.
CONCATENATE ‘MENGE‘ INTO txt.
PERFORM frm_catlg_set USING: txt hs_bwart-NAME1 ‘‘ .
ENDLOOP.
PERFORM frm_catlg_set USING‘LINE_SUM‘ ‘数量合计‘ ‘‘ .
ENDFORM"fieldcat_init

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

原文:http://www.cnblogs.com/eagle-dtq/p/5195765.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!