物料預測計劃

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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章