簡浩任 2019-06-28 17:44 采纳率: 0%
浏览 304
已结题

ABAP ITAB欄位累加減統計問題!!!!

前輩,有一題小型ABAP想提問,想針對mseg-menge(數量去做)累加
想呈現成Excel圖表這樣異動類型321 122是扣掉,101則是加
最後答案想變成Excel這樣,是否請大大前輩們幫忙感謝...
图片说明
图片说明


TABLES : MSEG.
*&--------------------------------------------------------------------
*& selection screen
*&--------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TITLE1.
SELECTION-SCREEN COMMENT /1(50) REM01.
SELECTION-SCREEN END OF BLOCK BK1.

SELECTION-SCREEN BEGIN OF BLOCK BK2 WITH FRAME TITLE TITLE2.
SELECT-OPTIONS DD FOR SY-DATUM NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK BK2.


INITIALIZATION.
REM01 ='20190620 初版製作'.
TITLE1 = '說明區'.
TITLE2 = '選擇區'.
START-OF-SELECTION.

*&--------------------------------------------------------------------
*& Declare Work area
*&--------------------------------------------------------------------
  "ALV used
  DATA IT_ALV TYPE SLIS_FIELDCAT_ALV OCCURS 0 WITH HEADER LINE.
  DATA WA_LAYOUT TYPE SLIS_LAYOUT_ALV.


"資料彙整
  DATA:BEGIN OF IT_MSEG OCCURS 0,
    SEL   TYPE C,
    end   type c,
*    end TYPE string,
    insmk type mseg-insmk, "檢驗否
    budat_mkpf like mseg-budat_mkpf,
    cpudt_mkpf like mseg-cpudt_mkpf,
    cputm_mkpf like mseg-cputm_mkpf,
    lifnr like mseg-lifnr,
    shkzg like mseg-shkzg,
    ebeln like mseg-ebeln,
    ebelp like mseg-ebelp,
    werks like mseg-werks,
    mblnr like mseg-mblnr,
    mjahr like mseg-mjahr,
    zeile like mseg-zeile,
    bwart like mseg-bwart,
    matnr like mseg-matnr,
    menge like mseg-menge,

    test like mseg-menge,

     itm   TYPE i, "NUM
    END OF IT_MSEG.

  DATA:BEGIN OF IT_PO OCCURS 0,
    ebeln like mseg-ebeln,
    ebelp like mseg-ebelp,
    menge like mseg-menge,
    end of it_PO.

"MSEG異動類型
"101 進貨
"102 RE進貨
"122 驗收不良轉退貨
"123 RE驗收不良轉退貨
"321 驗收合格轉庫存
"322 RE驗收合格轉庫存
select * into Corresponding Fields Of it_mseg
  from mseg
  where bwart in ('101','102','321','322','122','123')
  and ebeln <> ''
  and matnr <> '' "資產不列入
  and xauto <> 'X'"系統自動產生
  and MJAHR = '2019' " 年度
  and EBELN IN ('4100009321','4100012899'). "採購單

  if it_mseg-bwart = '102'
    or it_mseg-bwart = '122'
    or it_mseg-bwart = '321'.
    it_mseg-menge = -1 * it_mseg-menge.
  Endif.

  append it_mseg.
Endselect.

loop at it_mseg where bwart = '101' and insmk = ''.
  it_mseg-bwart = '321'.
  it_mseg-menge = -1 * it_mseg-menge.
  append it_mseg.
  endloop.


loop at it_mseg.
  MOVE-CORRESPONDING it_mseg TO it_po.
  collect it_po.
  Endloop.

loop at it_po where menge = 0.
  Delete it_po.
  Endloop.

sort it_mseg by
ebeln Ascending ebelp Ascending
cpudt_mkpf Ascending cputm_mkpf Ascending.

loop at it_mseg.
  read table it_po
  with key ebeln = it_mseg-ebeln ebelp = it_mseg-ebelp.
  if sy-subrc = 0.
    it_mseg-end = 'Y' .

    Endif.
  modify it_mseg Transporting end.
  Endloop.



DATA zharry TYPE mseg-ebeln.

  LOOP AT it_mseg .

    zharry  = it_mseg-ebeln.
    it_mseg-itm = 0.
    READ TABLE it_mseg INDEX sy-tabix - 1 .
    IF it_mseg-ebeln = zharry  .
      it_mseg-itm = it_mseg-itm + 1.
    ELSE.
      it_mseg-itm = 1.
    ENDIF.

    MODIFY it_mseg INDEX sy-tabix + 1  TRANSPORTING itm.
    CLEAR it_mseg.
ENDLOOP.


  LOOP AT it_mseg .
    IF it_mseg-itm = 1 .
      it_mseg-test = it_mseg-menge.
    ELSE.
     it_mseg-test = '' .
    ENDIF .
    MODIFY  it_mseg  TRANSPORTING test .

     CLEAR: it_mseg.
ENDLOOP.



  LOOP AT it_mseg .

ENDLOOP.

*
*DATA: LIN TYPE I, OCC TYPE I.
*
*  loop at it_mseg .
*
*
*     READ TABLE it_mseg WITH KEY EBELN = it_mseg-EBELN  .
*
*
*     it_mseg-test = it_mseg-menge .
*
*
*
*
*
*
*
* MODIFY it_mseg  TRANSPORTING test  .
* CLEAR : it_mseg  .
*
*  Endloop.






*&--------------------------------------------------------------------
*& ALV Area
*&--------------------------------------------------------------------

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME     = SY-REPID
      I_INTERNAL_TABNAME = 'IT_MSEG'
      I_INCLNAME         = SY-REPID
    CHANGING
      CT_FIELDCAT        = IT_ALV[].
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


  WA_LAYOUT-ZEBRA = 'X'.
  WA_LAYOUT-BOX_FIELDNAME = 'SEL'.
  WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  WA_LAYOUT-INFO_FIELDNAME = 'COLOR'.

  LOOP AT IT_ALV.
    CASE IT_ALV-KEY.
      WHEN 'X'.
        IT_ALV-KEY = ''.
    ENDCASE.

    CASE IT_ALV-FIELDNAME.
      WHEN 'SEL'.
        DELETE IT_ALV.
    ENDCASE.

    CASE IT_ALV-FIELDNAME.
      WHEN 'SALK3'.
        IT_ALV-SELTEXT_M = '成本'.
      WHEN 'TEST'.
        IT_ALV-SELTEXT_M = '累加數量'.
      WHEN 'ITM'.
        IT_ALV-SELTEXT_M = '計數'.
    ENDCASE.

    IT_ALV-SELTEXT_L = IT_ALV-SELTEXT_M.
    IT_ALV-SELTEXT_S = IT_ALV-SELTEXT_M.
    IT_ALV-REPTEXT_DDIC = IT_ALV-SELTEXT_M.
    MODIFY IT_ALV TRANSPORTING
    SELTEXT_M SELTEXT_L SELTEXT_S  REPTEXT_DDIC KEY.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
      IS_LAYOUT          = WA_LAYOUT
      IT_FIELDCAT        = IT_ALV[]
      I_SAVE             = 'A'
    TABLES
      T_OUTTAB           = it_mseg.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

*&---------------------------------------------------------------------
*&      Form  top_of_page
*&---------------------------------------------------------------------
 FORM TOP_OF_PAGE.
  DATA :I_HEADER TYPE SLIS_T_LISTHEADER, W_HEADER LIKE LINE OF I_HEADER.

  W_HEADER-TYP = 'S'.
*  CONCATENATE '日期:' DATE INTO W_HEADER-INFO.
*  APPEND  W_HEADER TO I_HEADER.
*  CONCATENATE '工廠:' WERK INTO W_HEADER-INFO.
*  APPEND  W_HEADER TO I_HEADER.
*  CONCATENATE '儲位:' STOK-LOW ' / ' STOK-HIGH INTO W_HEADER-INFO.
*  APPEND  W_HEADER TO I_HEADER.
*  CONCATENATE '品號:' PART-LOW ' / ' PART-HIGH INTO W_HEADER-INFO.
*  APPEND  W_HEADER TO I_HEADER.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = I_HEADER
      I_LOGO             = 'ENJOYSAP_LOGO'.

ENDFORM.                    "top_of_page
  • 写回答

2条回答 默认 最新

  • dabocaiqq 2019-06-29 09:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建