TABLES:marc,mard.
**************************************************
TYPE-POOLS truxs.
DATA: xlstab TYPE truxs_t_text_data,
f_size TYPE i .
**********************************************
DATA: d_ref TYPE REF TO data,
d_ref2 TYPE REF TO data ,
i_alv_cat TYPE TABLE OF lvc_s_fcat,
ls_alv_cat LIKE LINE OF i_alv_cat.
FIELD-SYMBOLS : <f_fs> TYPE table,
<f_fs1> TYPE table.
DATA:dy_line TYPE REF TO data.
FIELD-SYMBOLS:<dyn_wa>,<dyn_field>.
************************************************
TYPE-POOLS slis.
DATA: myrepid LIKE sy-repid. "REPORT NAME
DATA: allfields TYPE slis_t_fieldcat_alv.
DATA: wa_allfields TYPE LINE OF slis_t_fieldcat_alv.
DATA : f2code LIKE sy-ucomm VALUE '&ETA',
layout TYPE slis_layout_alv .
CLEAR wa_allfields.
DATA: gt_events TYPE slis_t_event.
DATA:fieldname(30) TYPE c.
***********************************************
DATA zmseg LIKE TABLE OF mseg WITH HEADER LINE.
DATA:BEGIN OF atab OCCURS 0,
matnr LIKE mseg-matnr,
bwart LIKE mseg-bwart,
menge LIKE mseg-menge,
END OF atab.
DATA wa_atab LIKE LINE OF atab.
DATA:BEGIN OF zfield OCCURS 0,
field(9) TYPE c,
END OF zfield.
DATA:BEGIN OF itb_input OCCURS 0,
werks LIKE marc-werks,
matnr LIKE marc-matnr,
stlal LIKE mast-stlal,
menge LIKE mseg-menge,
andat LIKE mast-andat,
matnr2 LIKE mast-matnr, "程序邏輯使用,不作爲輸入字段
END OF itb_input.
DATA:BEGIN OF itb_output OCCURS 0,
ztext(40) TYPE c,
idnrk LIKE stpox-idnrk,
werks LIKE stpox-werks,
mtart LIKE stpox-mtart,
plifz(3) type c,
ojtxp LIKE stpox-ojtxp,
mnglg LIKE stpox-menge,
mmein LIKE stpox-mmein,
matnr LIKE mara-matnr,
ekgrp LIKE stpox-ekgrp,
andat LIKE mast-andat,
labst LIKE mard-labst,
sumng LIKE stpox-mnglg,
menge LIKE stpox-menge,
END OF itb_output.
DATA:zstpox LIKE TABLE OF stpox WITH HEADER LINE..
DATA hl_input LIKE LINE OF itb_input.
DATA hl_output LIKE TABLE OF itb_output WITH HEADER LINE.
DATA buf LIKE TABLE OF itb_output WITH HEADER LINE.
DATA:BEGIN OF itb_err OCCURS 0,
error TYPE string,
END OF itb_err.
SELECTION-SCREEN BEGIN OF BLOCK blk1
WITH FRAME TITLE text-001.
PARAMETERS: filename LIKE rlgrap-filename OBLIGATORY .
SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN BEGIN OF BLOCK blk2
WITH FRAME TITLE text-002.
SELECT-OPTIONS:lgort FOR mard-lgort.
SELECTION-SCREEN END OF BLOCK blk2.
SELECTION-SCREEN BEGIN OF BLOCK blk3
WITH FRAME TITLE text-003.
PARAMETERS:p_sum TYPE c DEFAULT '2' OBLIGATORY .
SELECTION-SCREEN COMMENT 40(10) t_sum.
PARAMETERS:p_all TYPE c DEFAULT '1' OBLIGATORY .
SELECTION-SCREEN COMMENT 40(10) t_all.
PARAMETERS:p_mul TYPE c DEFAULT '2' OBLIGATORY .
SELECTION-SCREEN COMMENT 40(10) t_mul.
SELECTION-SCREEN END OF BLOCK blk3.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_sum.
PERFORM valuegetsum.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_all.
PERFORM valuegetall.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_mul.
PERFORM valuegetmul.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
PERFORM get_pc_filename.
AT SELECTION-SCREEN OUTPUT.
IF p_sum = '1'.
t_sum = '彙總'.
ELSEIF p_sum = '2'..
t_sum = '不彙總'.
ENDIF.
IF p_all = '1'.
t_all = '計劃模式'.
ELSEIF p_all = '2'.
t_all = 'BOM模式'.
ENDIF.
IF p_mul = '1'.
t_mul = '單層'.
ELSEIF p_mul = '2'.
t_mul = '多層'.
ENDIF.
START-OF-SELECTION.
PERFORM upload_file TABLES itb_input.
PERFORM getdata.
IF itb_err[] IS INITIAL.
PERFORM initialitab.
PERFORM convertitab.
PERFORM outputitab.
ELSE.
LOOP AT itb_err.
WRITE / itb_err-error.
ENDLOOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form valuegetsum
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM valuegetsum.
DATA:BEGIN OF zline OCCURS 0,
line(10) TYPE c,
END OF zline.
DATA: zcon LIKE TABLE OF help_value WITH HEADER LINE.
zline-line = '1'.
APPEND zline.
zline-line = '彙總'.
APPEND zline.
zline-line = '2'.
APPEND zline.
zline-line = '不彙總'.
APPEND zline.
zcon-tabname = 'RM61X'.
zcon-fieldname = 'PLMOD'.
zcon-selectflag = 'X'.
APPEND zcon.
zcon-tabname = 'RM61X'.
zcon-fieldname = 'PLMTX'.
zcon-selectflag = ''.
APPEND zcon.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
* EXPORTING
* CUCOL = 0
* CUROW = 0
* DISPLAY = ' '
* FIELDNAME = ' '
* TABNAME = ' '
* NO_MARKING_OF_CHECKVALUE = ' '
* TITLE_IN_VALUES_LIST = ' '
* TITEL = ' '
* SHOW_ALL_VALUES_AT_FIRST_TIME = ' '
* NO_CONVERSION = ' '
IMPORTING
select_value = p_sum
TABLES
fields = zcon
valuetab = zline
EXCEPTIONS
field_not_in_ddic = 1
more_then_one_selectfield = 2
no_selectfield = 3
OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "valuegetsum
*&---------------------------------------------------------------------*
*& Form valuegetall
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM valuegetall.
DATA:BEGIN OF zline OCCURS 0,
line(10) TYPE c,
END OF zline.
DATA: zcon LIKE TABLE OF help_value WITH HEADER LINE.
zline-line = '1'.
APPEND zline.
zline-line = '計劃模式'.
APPEND zline.
zline-line = '2'.
APPEND zline.
zline-line = 'BOM模式'.
APPEND zline.
zcon-tabname = 'RM61X'.
zcon-fieldname = 'PLMOD'.
zcon-selectflag = 'X'.
APPEND zcon.
zcon-tabname = 'RM61X'.
zcon-fieldname = 'PLMTX'.
zcon-selectflag = ''.
APPEND zcon.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
* EXPORTING
* CUCOL = 0
* CUROW = 0
* DISPLAY = ' '
* FIELDNAME = ' '
* TABNAME = ' '
* NO_MARKING_OF_CHECKVALUE = ' '
* TITLE_IN_VALUES_LIST = ' '
* TITEL = ' '
* SHOW_ALL_VALUES_AT_FIRST_TIME = ' '
* NO_CONVERSION = ' '
IMPORTING
select_value = p_all
TABLES
fields = zcon
valuetab = zline
* EXCEPTIONS
* FIELD_NOT_IN_DDIC = 1
* MORE_THEN_ONE_SELECTFIELD = 2
* NO_SELECTFIELD = 3
* OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "valuegetall
*&---------------------------------------------------------------------*
*& Form valuegetmul
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM valuegetmul.
DATA:BEGIN OF zline OCCURS 0,
line(10) TYPE c,
END OF zline.
DATA: zcon LIKE TABLE OF help_value WITH HEADER LINE.
zline-line = '1'.
APPEND zline.
zline-line = '單層'.
APPEND zline.
zline-line = '2'.
APPEND zline.
zline-line = '多層'.
APPEND zline.
zcon-tabname = 'RM61X'.
zcon-fieldname = 'PLMOD'.
zcon-selectflag = 'X'.
APPEND zcon.
zcon-tabname = 'RM61X'.
zcon-fieldname = 'PLMTX'.
zcon-selectflag = ''.
APPEND zcon.
CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
* EXPORTING
* CUCOL = 0
* CUROW = 0
* DISPLAY = ' '
* FIELDNAME = ' '
* TABNAME = ' '
* NO_MARKING_OF_CHECKVALUE = ' '
* TITLE_IN_VALUES_LIST = ' '
* TITEL = ' '
* SHOW_ALL_VALUES_AT_FIRST_TIME = ' '
* NO_CONVERSION = ' '
IMPORTING
select_value = p_mul
TABLES
fields = zcon
valuetab = zline
* EXCEPTIONS
* FIELD_NOT_IN_DDIC = 1
* MORE_THEN_ONE_SELECTFIELD = 2
* NO_SELECTFIELD = 3
* OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "valuegetmul
*&---------------------------------------------------------------------*
*& Form getdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM getdata.
DATA error TYPE string.
LOOP AT itb_input.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = itb_input-matnr
IMPORTING
output = itb_input-matnr.
MODIFY itb_input INDEX sy-tabix.
ENDLOOP.
DATA zmehrs TYPE c.
IF p_mul = '1'.
zmehrs = ''.
ELSE.
zmehrs = 'X'.
ENDIF.
IF p_all = '2'.
LOOP AT itb_input.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
* FTREL = ' '
* ALEKZ = ' '
* ALTVO = ' '
* AUFSW = ' '
* AUMGB = ' '
* AUMNG = 0
* AUSKZ = ' '
* AMIND = ' '
* BAGRP = ' '
* BEIKZ = ' '
* BESSL = ' '
* BGIXO = ' '
* BREMS = ' '
capid = 'PP01'
* CHLST = ' '
* COSPR = ' '
* CUOBJ = 000000000000000
* CUOVS = 0
* CUOLS = ' '
datuv = sy-datum
* DELNL = ' '
* DRLDT = ' '
* EHNDL = ' '
emeng = itb_input-menge
* ERSKZ = ' '
* ERSSL = ' '
* FBSTP = ' '
* KNFBA = ' '
* KSBVO = ' '
* MBWLS = ' '
* MKTLS = 'X'
* MDMPS = ' '
mehrs = zmehrs
* MKMAT = ' '
* MMAPS = ' '
* SALWW = ' '
* SPLWW = ' '
* MMORY = ' '
mtnrv = itb_input-matnr
* NLINK = ' '
* POSTP = ' '
* RNDKZ = ' '
* RVREL = ' '
* SANFR = ' '
* SANIN = ' '
* SANKA = ' '
* SANKO = ' '
* SANVS = ' '
* SCHGT = ' '
* STKKZ = ' '
stlal = itb_input-stlal
stlan = '1'
* STPST = 0
* SVWVO = 'X'
werks = itb_input-werks
* NORVL = ' '
* MDNOT = ' '
* PANOT = ' '
* QVERW = ' '
* VERID = ' '
* VRSVO = 'X'
* IMPORTING
* TOPMAT =
* DSTST =
TABLES
stb = zstpox
* MATCAT =
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
CONCATENATE 'BOM' itb_input-matnr itb_input-werks itb_input-stlal '展開出錯' INTO error SEPARATED BY ' '.
itb_err-error = error.
APPEND itb_err.
ENDIF.
LOOP AT zstpox.
MOVE-CORRESPONDING zstpox TO itb_output.
itb_output-andat = itb_input-andat.
itb_output-matnr = itb_input-matnr.
CONCATENATE itb_output-idnrk itb_output-werks itb_output-matnr INTO itb_output-ztext.
SELECT SINGLE * FROM marc WHERE matnr = zstpox-idnrk AND werks = zstpox-werks.
itb_output-plifz = marc-plifz.
APPEND itb_output.
ENDLOOP.
ENDLOOP.
ENDIF.
IF p_all = '1'.
LOOP AT itb_input.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
* FTREL = ' '
* ALEKZ = ' '
* ALTVO = ' '
* AUFSW = ' '
* AUMGB = ' '
* AUMNG = 0
* AUSKZ = ' '
* AMIND = ' '
* BAGRP = ' '
* BEIKZ = ' '
* BESSL = ' '
* BGIXO = ' '
* BREMS = ' '
capid = 'PP01'
* CHLST = ' '
* COSPR = ' '
* CUOBJ = 000000000000000
* CUOVS = 0
* CUOLS = ' '
datuv = sy-datum
* DELNL = ' '
* DRLDT = ' '
* EHNDL = ' '
emeng = itb_input-menge
* ERSKZ = ' '
* ERSSL = ' '
* FBSTP = ' '
* KNFBA = ' '
* KSBVO = ' '
* MBWLS = ' '
* MKTLS = 'X'
* MDMPS = ' '
* mehrs = zmehrs
* MKMAT = ' '
* MMAPS = ' '
* SALWW = ' '
* SPLWW = ' '
* MMORY = ' '
mtnrv = itb_input-matnr
* NLINK = ' '
* POSTP = ' '
* RNDKZ = ' '
* RVREL = ' '
* SANFR = ' '
* SANIN = ' '
* SANKA = ' '
* SANKO = ' '
* SANVS = ' '
* SCHGT = ' '
* STKKZ = ' '
stlal = itb_input-stlal
stlan = '1'
* STPST = 0
* SVWVO = 'X'
werks = itb_input-werks
* NORVL = ' '
* MDNOT = ' '
* PANOT = ' '
* QVERW = ' '
* VERID = ' '
* VRSVO = 'X'
* IMPORTING
* TOPMAT =
* DSTST =
TABLES
stb = zstpox
* MATCAT =
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
CONCATENATE 'BOM' itb_input-matnr itb_input-werks itb_input-stlal '展開出錯' INTO error SEPARATED BY ' '.
itb_err-error = error.
APPEND itb_err.
ENDIF.
LOOP AT zstpox.
IF p_mul = '1'.
SELECT SINGLE * FROM marc WHERE matnr = zstpox-idnrk AND werks = zstpox-werks.
IF marc-beskz = 'F' AND marc-sobsl = ''.
MOVE-CORRESPONDING zstpox TO itb_output.
itb_output-andat = itb_input-andat.
IF itb_input-matnr2 IS INITIAL.
itb_output-matnr = itb_input-matnr.
ELSE.
itb_output-matnr = itb_input-matnr2.
ENDIF.
CONCATENATE itb_output-idnrk itb_output-werks itb_output-matnr INTO itb_output-ztext.
itb_output-plifz = marc-plifz.
APPEND itb_output.
ENDIF.
ELSE.
SELECT SINGLE * FROM marc WHERE matnr = zstpox-idnrk AND werks = zstpox-werks.
IF marc-beskz = 'F' OR ( marc-beskz = 'X' AND zstpox-xtlnr IS INITIAL ).
MOVE-CORRESPONDING zstpox TO itb_output.
itb_output-andat = itb_input-andat.
IF itb_input-matnr2 IS INITIAL.
itb_output-matnr = itb_input-matnr.
ELSE.
itb_output-matnr = itb_input-matnr2.
ENDIF.
CONCATENATE itb_output-idnrk itb_output-werks itb_output-matnr INTO itb_output-ztext.
itb_output-plifz = marc-plifz.
APPEND itb_output.
ENDIF.
IF marc-beskz = 'E' OR marc-beskz = 'X' OR ( marc-beskz = 'F' AND marc-sobsl = '30' ) OR ( marc-beskz = 'F' AND marc-sobsl = '40' ).
hl_input-werks = zstpox-werks.
IF marc-sobsl = '40'.
SELECT SINGLE wrk02 INTO hl_input-werks FROM t460a WHERE werks = zstpox-werks AND sobsl = '40'.
ENDIF.
hl_input-matnr = zstpox-idnrk.
hl_input-stlal = zstpox-stlal.
hl_input-menge = zstpox-mnglg.
hl_input-andat = itb_input-andat.
IF itb_input-matnr2 IS INITIAL.
hl_input-matnr2 = itb_input-matnr.
ELSE.
hl_input-matnr2 = itb_input-matnr2.
ENDIF.
IF zstpox-xtlnr IS INITIAL.
CLEAR hl_input.
ELSE.
APPEND hl_input TO itb_input.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
IF p_sum = '1'.
LOOP AT itb_output INTO buf.
CLEAR buf-matnr.
CLEAR buf-menge.
CONCATENATE buf-idnrk buf-werks buf-matnr INTO buf-ztext.
COLLECT buf.
ENDLOOP.
itb_output[] = buf[].
ELSE.
buf[] = itb_output[].
ENDIF.
SORT buf BY andat.
DELETE ADJACENT DUPLICATES FROM buf COMPARING andat.
LOOP AT buf.
CONCATENATE 'F' buf-andat INTO zfield-field.
APPEND zfield.
ENDLOOP.
LOOP AT itb_output.
itb_output-menge = itb_output-menge / 1000.
SELECT SUM( labst ) INTO itb_output-labst
FROM mard
WHERE matnr = itb_output-idnrk
AND werks = itb_output-werks
AND lgort IN lgort.
SELECT SINGLE ekgrp INTO itb_output-ekgrp
FROM marc
WHERE matnr = itb_output-idnrk
AND werks = itb_output-werks.
MODIFY itb_output INDEX sy-tabix.
ENDLOOP.
ENDFORM. "getdata
*&---------------------------------------------------------------------*
*& Form initialitab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM initialitab.
ls_alv_cat-fieldname = 'IDNRK'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'IDNRK'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'WERKS'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'WERKS'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'OJTXP'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'OJTXP'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'MTART'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'MTART'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'PLIFZ'.
ls_alv_cat-ref_table = 'MARC'.
ls_alv_cat-ref_field = 'PLIFZ'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'EKGRP'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'EKGRP'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'MMEIN'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'MMEIN'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'MATNR'.
ls_alv_cat-ref_table = 'MARA'.
ls_alv_cat-ref_field = 'MATNR'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'LABST'.
ls_alv_cat-ref_table = 'MARD'.
ls_alv_cat-ref_field = 'LABST'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'SUMNG'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'MNGLG'.
APPEND ls_alv_cat TO i_alv_cat.
ls_alv_cat-fieldname = 'MENGE'.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'MENGE'.
APPEND ls_alv_cat TO i_alv_cat.
LOOP AT zfield .
ls_alv_cat-fieldname = zfield-field.
ls_alv_cat-ref_table = 'STPOX'.
ls_alv_cat-ref_field = 'MNGLG'.
APPEND ls_alv_cat TO i_alv_cat.
ENDLOOP.
* internal table build
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = i_alv_cat
IMPORTING
ep_table = d_ref.
ASSIGN d_ref->* TO <f_fs>.
CREATE DATA dy_line LIKE LINE OF <f_fs>.
ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM. "initializationitab
*&---------------------------------------------------------------------*
*& Form convertitab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM convertitab.
DATA:sum LIKE stpox-mnglg.
SORT itb_output BY ztext.
LOOP AT itb_output.
MOVE-CORRESPONDING itb_output TO hl_output.
AT NEW ztext.
CLEAR sum.
fieldname = 'IDNRK'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-idnrk.
fieldname = 'WERKS'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-werks.
.
fieldname = 'MTART'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-mtart.
fieldname = 'PLIFZ'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-plifz.
fieldname = 'OJTXP'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-ojtxp.
fieldname = 'EKGRP'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-ekgrp.
fieldname = 'MMEIN'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = hl_output-mmein
* LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
output = hl_output-mmein
* SHORT_TEXT =
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
<dyn_field> = hl_output-mmein.
fieldname = 'MATNR'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-matnr.
fieldname = 'LABST'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-labst.
fieldname = 'MENGE'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-menge.
ENDAT.
CONCATENATE 'F' itb_output-andat INTO fieldname.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = hl_output-mnglg.
sum = sum + hl_output-mnglg.
AT END OF ztext.
fieldname = 'SUMNG'.
ASSIGN COMPONENT fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = sum.
APPEND <dyn_wa> TO <f_fs>.
CLEAR <dyn_wa>.
ENDAT.
ENDLOOP.
ENDFORM. "convertitab
*&---------------------------------------------------------------------*
*& Form outputitab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM outputitab.
wa_allfields-fieldname = 'IDNRK'.
wa_allfields-seltext_l = '物料號'.
wa_allfields-no_zero = 'X'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'OJTXP'.
wa_allfields-seltext_l = '物料描述'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'MTART'.
wa_allfields-seltext_l = '物料類型'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'WERKS'.
wa_allfields-seltext_l = '工廠'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'EKGRP'.
wa_allfields-seltext_l = '採購組'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'PLIFZ'.
wa_allfields-seltext_l = '計劃交貨時間'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'MMEIN'.
wa_allfields-seltext_l = '單位'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'MATNR'.
wa_allfields-seltext_l = '機型'.
wa_allfields-no_zero = 'X'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'MENGE'.
wa_allfields-seltext_l = '單機用量'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'LABST'.
wa_allfields-seltext_l = '庫存量'.
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
wa_allfields-fieldname = 'SUMNG'.
wa_allfields-seltext_l = '總需求量'.
APPEND wa_allfields TO allfields.
LOOP AT zfield.
wa_allfields-fieldname = zfield-field.
wa_allfields-seltext_l = zfield-field+1(8).
APPEND wa_allfields TO allfields.
CLEAR wa_allfields.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = layout
i_save = 'X'
it_fieldcat = allfields
it_events = gt_events
TABLES
t_outtab = <f_fs> "輸出內表
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "outputitab
*&---------------------------------------------------------------------*
*& Form upload_file
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FTAB text
*----------------------------------------------------------------------*
FORM upload_file TABLES ftab.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 0
text = '轉換Ing。。'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = xlstab
i_filename = filename
TABLES
i_tab_converted_data = ftab
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE '轉換Excel表有錯誤發生!' TYPE 'E' .
ENDIF.
ENDFORM. " UPLOAD_FILE
*&--------------------------------------------------------------------*
*& Form get_pc_filename
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM get_pc_filename.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* def_filename = PAY_FILE
* DEF_PATH = ' '
* mask = ',*.XLS ,*.XLS.'
mode = '0'
title = 'Get the import file name'
IMPORTING
filename = filename
* RC =
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE 'ERROR' TYPE 'E' .
ENDIF.
ENDFORM. " GET_PC_FILENAME