BOM输出

REPORT bom.

TABLES : vbap, stpo, mast, tc04, makt ,stpox .

TYPE-POOLS: slis.
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF fieldcat,
event_exit TYPE slis_t_event_exit,
event_exit_ln LIKE LINE OF event_exit,
sortcat TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat,
eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat.

DATA: gt_list_top_of_page TYPE slis_t_listheader.
DATA: gc_formname_top_of_page TYPE slis_formname
VALUE 'ALV_TOP_OF_PAGE'.
DATA : ps_layout TYPE slis_layout_alv.
DATA: bom_itab LIKE TABLE OF stpox WITH HEADER LINE.
*DATA: itab LIKE TABLE OF zst_pp_0001 WITH HEADER LINE.



DATA:BEGIN OF tp OCCURS 0,
box TYPE char1,
matnr LIKE mast-matnr,
stlnr LIKE mast-stlnr,
stlal LIKE mast-stlal,
END OF tp.
DATA:BEGIN OF tpidnrk OCCURS 0,
matnr LIKE mast-matnr,
stlal LIKE mast-stlal,
END OF tpidnrk.
DATA : BEGIN OF itab OCCURS 0, "定#一##表(明#)
matnr LIKE mast-matnr,
matnp LIKE mast-matnr,
stlnr LIKE mast-stlnr,
maktx LIKE makt-maktx,
maktx2 LIKE makt-maktx,
idnrp LIKE stpo-idnrk,
stlkn LIKE stpo-stlkn,
idnrk LIKE stpo-idnrk,
menge LIKE stpo-menge,
meins LIKE stpo-meins,
z_index(3) TYPE c,
END OF itab.

DATA : i_mat LIKE TABLE OF tp WITH HEADER LINE.
DATA : no TYPE i.
DATA: wa_stlal LIKE mast-stlal.

SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECT-OPTIONS: s_matnr FOR vbap-matnr MEMORY ID 4.
PARAMETERS : p_werks LIKE aufk-werks
OBLIGATORY MEMORY ID 1.
PARAMETERS : p_capid LIKE tc04-capid DEFAULT 'PP01'.
SELECTION-SCREEN : END OF BLOCK b1.

INITIALIZATION.
  t1 = '選擇條件'.

START-OF-SELECTION.
  SELECT matnr stlnr stlal
  FROM mast INTO (tp-matnr,tp-stlnr,tp-stlal)
  WHERE matnr IN s_matnr
  AND werks EQ p_werks.

    APPEND tp.
    CLEAR tp.
  ENDSELECT.

  LOOP AT tp.
    PERFORM cs_bom_expl_mat_v2 USING tp-matnr
    p_capid
    p_werks
    tp-stlal.

    no = 0.
    LOOP AT bom_itab WHERE stufe = 1.
      no = no + 1.
      itab-z_index = no.
      itab-matnr = tp-matnr.
      SELECT SINGLE maktx INTO itab-maktx
      FROM makt
      WHERE matnr = tp-matnr.

      MOVE-CORRESPONDING bom_itab TO itab.
      tpidnrk-matnr = itab-idnrk.
      tpidnrk-stlal = tp-stlal.
      SELECT SINGLE maktx INTO itab-maktx2
      FROM makt
      WHERE matnr = itab-idnrk.
* AND spras = '1'.

* SELECT SINGLE zeinr bismt
* INTO (itab-zeinr,itab-bismt)
* FROM mara
* WHERE matnr = itab-idnrk.
      IF itab-matnr+0(1) <> '0'.
        itab-matnp = itab-matnr.
      ELSEIF itab-matnr+0(1) = '0'.
        itab-matnp = itab-matnr+1(10) .
      ENDIF.
      itab-idnrp = itab-idnrk.
      APPEND itab.
      APPEND tpidnrk.
      CLEAR tpidnrk.
      CLEAR itab.
      CLEAR bom_itab.

    ENDLOOP.
  ENDLOOP.




END-OF-SELECTION.
  LOOP AT tpidnrk .
    SELECT SINGLE * FROM mast
    WHERE matnr EQ tpidnrk-matnr.
    IF sy-subrc = 0.
      PERFORM cs_bom_expl_mat_v2 USING tpidnrk-matnr
      p_capid
      p_werks
      tpidnrk-stlal.

      no = 0.
      DELETE tpidnrk.
      LOOP AT bom_itab WHERE stufe = 1.
        no = no + 1.
        itab-z_index = no.
        itab-matnr = tpidnrk-matnr.
        SELECT SINGLE maktx INTO itab-maktx
        FROM makt
        WHERE matnr = tpidnrk-matnr.

        MOVE-CORRESPONDING bom_itab TO itab.
        tpidnrk-matnr = itab-idnrk.
        SELECT SINGLE maktx INTO itab-maktx2
        FROM makt
        WHERE matnr = itab-idnrk.
* AND spras = '1'.

* SELECT SINGLE zeinr bismt
* INTO (itab-zeinr,itab-bismt)
* FROM mara
* WHERE matnr = itab-idnrk.
        IF itab-matnr+0(1) <> '0'.
          itab-matnp = itab-matnr.
        ELSEIF itab-matnr+0(1) = '0'.
          itab-matnp = itab-matnr+1(10) .
        ENDIF.
        itab-idnrp = itab-idnrk.
        APPEND itab.
        APPEND tpidnrk.
        CLEAR tpidnrk.
        CLEAR itab.
        CLEAR bom_itab.

      ENDLOOP.
    ENDIF.

* APPEND tpidnrk.

  ENDLOOP.

  REFRESH gt_list_top_of_page[].
  PERFORM e04_comment_build .
  CLEAR fieldcat.
  REFRESH fieldcat.
  PERFORM build_fieldcat.
  PERFORM build_eventcat.
  PERFORM alv_display.

*&--------------------------------------------------------------------*
*& Form e04_comment_build
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM e04_comment_build.

  DATA : list_line LIKE LINE OF gt_list_top_of_page.
  list_line-typ = 'H'.
  list_line-key = ''.
  list_line-info = '物料清單(BOM)明細'.
  APPEND list_line TO gt_list_top_of_page.
  CLEAR list_line.
  list_line-typ = 'S'.
  list_line-key = '工厂'.
  list_line-info = p_werks.
  APPEND list_line TO gt_list_top_of_page.
  CLEAR list_line.

  list_line-typ = 'H'.
  list_line-key = ''.
  list_line-info = ''.
  APPEND list_line TO gt_list_top_of_page.

ENDFORM. " e04_comment_build


*&--------------------------------------------------------------------*
*& Form build_eventcat
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM build_eventcat.
  DATA : ls_event TYPE slis_alv_event.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = eventcat.

  READ TABLE eventcat
  WITH KEY name = slis_ev_top_of_page
  INTO ls_event.
  IF sy-subrc = 0.
    MOVE gc_formname_top_of_page TO ls_event-form.
    APPEND ls_event TO eventcat.
  ENDIF.

ENDFORM. " build_eventcat
*&----------------------------------------------------
*& Form alv_display
* text
*-----------------------------------------------------
* --〉 p1 text
* 〈 -- p2 text
*-----------------------------------------------------
FORM alv_display.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
  i_callback_program = 'ZWT_PP05'
* I_CALLBACK_USER_COMMAND = 'COMMAND_EXECUTE'
  is_layout = ps_layout
  it_fieldcat = fieldcat
  i_save = 'A'
  it_events = eventcat
  TABLES
  t_outtab = itab
  EXCEPTIONS
  program_error = 1
  OTHERS = 2.

ENDFORM. " alv_display

*&--------------------------------------------------------------------*
*& Form alv_top_of_page
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM alv_top_of_page.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = gt_list_top_of_page.
ENDFORM. "alv_top_of_page

*-----------------------------------------------------
* FORM build_fieldcat
*-----------------------------------------------------
* ........
*-----------------------------------------------------
FORM build_fieldcat.
  DATA : col_pos TYPE i VALUE 0.

  ps_layout-get_selinfos = 'X'.
  ps_layout-colwidth_optimize = 'X'.
  ps_layout-detail_popup = 'X'.
*PS_LAYOUT-BOX_FIELDNAME = 'FLAG'.
  ps_layout-no_keyfix = ''.
*PS_LAYOUT-KEY_HOTSPOT = 'X'.
  ps_layout-colwidth_optimize = 'X'.


  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'Z_INDEX'.
  fieldcat_ln-fieldname = 'Z_INDEX'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = '序號'.
  fieldcat_ln-seltext_l = '序號'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = '序號'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'MATNR'.
  fieldcat_ln-fieldname = 'MATNR'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = '產品編號'.
  fieldcat_ln-seltext_l = '產品編號'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = '產品編號'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'MAKTX'.
  fieldcat_ln-fieldname = 'MAKTX'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = '產品描述'.
  fieldcat_ln-seltext_l = '產品描述'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = '產品描述'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'IDNRP'.
  fieldcat_ln-fieldname = 'IDNRP'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = 'BOM物料編號'.
  fieldcat_ln-seltext_l = 'BOM物料編號'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = 'BOM物料編號'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'MAKTX2'.
  fieldcat_ln-fieldname = 'MAKTX2'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = 'BOM物料描述'.
  fieldcat_ln-seltext_l = 'BOM物料描述'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = 'BOM物料描述'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'MEINS'.
  fieldcat_ln-fieldname = 'MEINS'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = '單位'.
  fieldcat_ln-seltext_l = '單位'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = '單位'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

  ADD 1 TO col_pos.
* fieldcat_ln-ref_tabname = 'ITAB8'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = 'MENGE'.
  fieldcat_ln-fieldname = 'MENGE'.
  fieldcat_ln-key = 'X'.
  fieldcat_ln-seltext_s = '數量'.
  fieldcat_ln-seltext_l = '數量'.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = '數量'.
  fieldcat_ln-col_pos = col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

ENDFORM. "build_fieldcat

*-----------------------------------------------------
* FORM BUILD_FIELDCAT_SUB
*-----------------------------------------------------
* ........
*-----------------------------------------------------
* --〉 VALUE(P_COL_POS)
* --〉 VALUE(P_FIELDNAME)
* --〉 VALUE(P_SELTEXT)
*-----------------------------------------------------
FORM build_fieldcat_sub USING value(p_col_pos)
value(p_fieldname)
value(p_seltext).
* ADD 1 TO COL_POS.
* fieldcat_ln-ref_tabname = 'ZST_PP_0001'.
  fieldcat_ln-tabname = 'ITAB'.
  fieldcat_ln-ref_fieldname = p_fieldname.
  fieldcat_ln-fieldname = p_fieldname.
* FIELDCAT_LN-KEY = 'X'.
  fieldcat_ln-seltext_s = p_seltext.
  fieldcat_ln-seltext_l = p_seltext.
  fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic =
  p_seltext.
  fieldcat_ln-col_pos = p_col_pos.
  APPEND fieldcat_ln TO fieldcat.
  CLEAR fieldcat_ln.

ENDFORM. " BUILD_FIELDCAT_SUB

*-----------------------------------------------------
* FORM CS_BOM_EXPL_MAT_V2
* ........
* --〉 MATNR
* --〉 CAPID
* --〉 WERKS
*-----------------------------------------------------
FORM cs_bom_expl_mat_v2 USING matnr LIKE afpo-matnr
capid LIKE tc04-capid
werks LIKE ekpo-werks
stlal LIKE mast-stlal.
  CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
  EXPORTING
  aumng = 0
  capid = capid
  datuv = sy-datum
  mehrs = 'X'
  mtnrv = matnr
  stlal = stlal
  stlan = '1'
  werks = werks

  TABLES
  stb = bom_itab
* 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
  .
ENDFORM. "CS_BOM_EXPL_MAT_V2
posted @ 2008-10-24 20:47  elegant  阅读(934)  评论(1编辑  收藏  举报