前輩,有一題小型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