*&---------------------------------------------------------------------*
*& REPORT ZPP_BOM_BATCH_QUERY
*&
*& REPORTNAME :BOM批量反查
*&---------------------------------------------------------------------*
*& CREATED BY : LIUXINYUAN
*& CREATED DATE : 2016-03-01
*&---------------------------------------------------------------------*
REPORT zpp_bom_batch_query.
TYPE-POOLS: slis.
TYPE-POOLS: icon.
TABLES:t001w,bseg,stpo,stas,mara,makt.
TYPE-POOLS : tpit.
DATA ls_bseg TYPE bseg. " WITH HEADER LINE.
DATA it_buztab TYPE tpit_t_buztab WITH HEADER LINE.
DATA errtab TYPE tpit_t_errdoc WITH HEADER LINE.
DATA it_fldtab TYPE tpit_t_fname WITH HEADER LINE.
DATA it_tab TYPE truxs_t_text_data.
DATA: BEGIN OF itab OCCURS 0,
werks LIKE t001w-werks, "工厂
idnrk LIKE stpo-idnrk, "组件编号
maktx LIKE makt-maktx, "组件描述
END OF itab.
DATA: BEGIN OF lt_itab OCCURS 0,
werks LIKE t001w-werks, "工厂
idnrk LIKE stpo-idnrk, "组件编号
maktx LIKE makt-maktx, "组件描述
matnr LIKE mara-matnr, "父项编号
maktx1 LIKE makt-maktx, "父项描述
tdlnr( 200), "替代料编号
END OF lt_itab.
DATA : BEGIN OF itmatnr OCCURS 200,
idnrk LIKE stpo-idnrk,
END OF itmatnr.
DATA : BEGIN OF alttab OCCURS 200,
matnr LIKE mast-matnr,
menge LIKE stpo-menge,
END OF alttab.
DATA : BEGIN OF top_code OCCURS 100,
matnr( 18),
maktx( 40),
meins( 3),
menge LIKE stpo-menge,
matkl( 9),
wrkst( 14),
END OF top_code.
DATA : BEGIN OF makr OCCURS 10,
maker( 7),
idnlf( 22),
END OF makr.
DATA : BEGIN OF usedtab OCCURS 100.
INCLUDE STRUCTURE stpov.
DATA : END OF usedtab.
DATA : BEGIN OF equicat OCCURS 100.
INCLUDE STRUCTURE cscequi.
DATA : END OF equicat.
DATA : BEGIN OF kndcat OCCURS 100.
INCLUDE STRUCTURE cscknd.
DATA : END OF kndcat.
DATA : BEGIN OF matcat OCCURS 100.
INCLUDE STRUCTURE cscmat.
DATA : END OF matcat.
DATA : BEGIN OF stdcat OCCURS 100.
INCLUDE STRUCTURE cscstd.
DATA : END OF stdcat.
DATA : BEGIN OF tplcat OCCURS 100.
INCLUDE STRUCTURE csctpl.
DATA : END OF tplcat.
DATA : top_cnt( 5) TYPE n,
m_cnt( 5) TYPE n,
lin( 5) TYPE n,
line_cnt( 5) TYPE n.
**ALV
DATA:gt_event_exit TYPE slis_t_event_exit.
DATA:gs_event_exit TYPE slis_event_exit.
DATA:gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
DATA:gc_glay TYPE lvc_s_glay.
DATA:gs_layout TYPE lvc_s_layo, "SLIS_LAYOUT_ALV,
wk_repid LIKE sy-repid.
DATA:gs_grid TYPE lvc_s_glay.
DATA:tem_grid TYPE REF TO cl_gui_alv_grid.
DATA:gt_events TYPE slis_t_event.
DATA:gs_events LIKE LINE OF gt_events.
*DATA: RESULT LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA: result LIKE bseg OCCURS 0 WITH HEADER LINE.
DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA:variant LIKE disvariant.
DATA lt_bseg LIKE TABLE OF bseg WITH HEADER LINE.
DATA:itstpo TYPE TABLE OF stpo WITH HEADER LINE,
ttstpo TYPE TABLE OF stpo WITH HEADER LINE,
itstko TYPE TABLE OF stko WITH HEADER LINE,
itmast TYPE TABLE OF mast WITH HEADER LINE.
PARAMETER p_file LIKE rlgrap-filename DEFAULT 'C:\'.
AT SELECTION- SCREEN ON VALUE-REQUEST FOR p_file. "类似上传附件时的那个浏览按钮
******************初始屏幕结束**********************************************************************
******************批量导入的BAPI**********************************************************************
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = p_file
mask = text- 001
mode = 'O'
IMPORTING
filename = p_file
EXCEPTIONS
selection_cancel = 0.
START- OF-SELECTION.
CLEAR:itab,result.
CLEAR:itab[],result[].
*excel 数据导入
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_tab
i_filename = p_file
TABLES
i_tab_converted_data = itab
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
DELETE itab INDEX 1.
ENDIF.
REFRESH lt_itab.
CLEAR lt_itab.
LOOP AT itab.
REFRESH usedtab.
CLEAR usedtab.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = '99991231'
datuv = sy-datum
matnr = itab-idnrk
werks = itab-werks
TABLES
wultb = usedtab
equicat = equicat
kndcat = kndcat
matcat = matcat
stdcat = stdcat
tplcat = tplcat
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
OTHERS = 6.
LOOP AT usedtab WHERE stlan = '1' AND stlst = '1'.
lt_itab-werks = usedtab-werks.
lt_itab-idnrk = usedtab-idnrk.
SELECT SINGLE
maktx
INTO lt_itab-maktx
FROM makt
WHERE matnr = lt_itab-idnrk
AND spras = sy-langu.
lt_itab-matnr = usedtab-matnr.
SELECT SINGLE
maktx
INTO lt_itab-maktx1
FROM makt
WHERE matnr = lt_itab-matnr
AND spras = sy-langu.
IF usedtab-alpgr <> ''.
REFRESH itmatnr.
CLEAR itmatnr.
SELECT idnrk INTO TABLE itmatnr
FROM stpo
WHERE stlnr = usedtab-stlnr
AND idnrk <> usedtab-idnrk
AND alpgr = usedtab-alpgr.
IF itmatnr[] IS NOT INITIAL.
SORT itmatnr BY idnrk.
DELETE ADJACENT DUPLICATES FROM itmatnr.
LOOP AT itmatnr.
IF lt_itab-tdlnr = ''.
lt_itab-tdlnr = itmatnr-idnrk.
ELSE.
CONCATENATE lt_itab-tdlnr ',' itmatnr-idnrk INTO lt_itab-tdlnr.
ENDIF.
ENDLOOP.
APPEND lt_itab.
CLEAR lt_itab.
ELSE.
APPEND lt_itab.
CLEAR lt_itab.
ENDIF.
ELSE.
APPEND lt_itab.
CLEAR lt_itab.
ENDIF.
ENDLOOP.
ENDLOOP.
SORT lt_itab BY werks idnrk matnr tdlnr DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_itab COMPARING werks idnrk matnr. " TDLNR.
PERFORM frm_display.
*&---------------------------------------------------------------------*
*& FORM DISPLAY_DATA
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM frm_display .
REFRESH gt_fieldcat.
CLEAR gt_fieldcat.
REFRESH gt_events.
CLEAR gt_events.
CLEAR gs_layout.
CLEAR gs_grid.
DEFINE fill_alv.
clear gt_fieldcat.
gt_fieldcat-fieldname = & 1.
gt_fieldcat-scrtext_m = & 2 .
gt_fieldcat-outputlen = & 3.
if gt_fieldcat-fieldname <> 'SHLV'.
gt_fieldcat-decimals_o = & 4.
endif.
append gt_fieldcat.
END- OF- DEFINITION.
fill_alv 'WERKS' '工厂 ' '12' ''.
fill_alv 'IDNRK' '组件编号 ' '18' ''.
fill_alv 'MAKTX' '组件描述 ' '40' ''.
fill_alv 'MATNR' '父项编号 ' '18' ''.
fill_alv 'MAKTX1' '父项描述 ' '40' ''.
fill_alv 'TDLNR' '替代料编号 ' '60' ''.
gs_layout-stylefname = 'FSTYLE'.
gs_layout-zebra = 'X'.
* GS_LAYOUT-CWIDTH_OPT = 'X'.
* GS_LAYOUT-BOX_FNAME = 'CHK'.
gs_grid-edt_cll_cb = 'X'.
* **************定义事件FORM名称*********************
gs_events-name = 'CALLER_EXIT'.
gs_events- form = 'CALLER_EXIT'.
APPEND gs_events TO gt_events.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'SET_PF'
it_fieldcat_lvc = gt_fieldcat[]
i_grid_settings = gs_grid
is_layout_lvc = gs_layout
i_save = 'X'
* IT_EVENTS = GT_EVENTS
TABLES
t_outtab = lt_itab.
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& FORM STANDARD_FULLSCREEN
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM set_pf USING rt_extab TYPE slis_t_extab.
DATA: BEGIN OF ex_tab OCCURS 0,
fcode LIKE sy-ucomm,
END OF ex_tab.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "SET_STATUS
*& REPORT ZPP_BOM_BATCH_QUERY
*&
*& REPORTNAME :BOM批量反查
*&---------------------------------------------------------------------*
*& CREATED BY : LIUXINYUAN
*& CREATED DATE : 2016-03-01
*&---------------------------------------------------------------------*
REPORT zpp_bom_batch_query.
TYPE-POOLS: slis.
TYPE-POOLS: icon.
TABLES:t001w,bseg,stpo,stas,mara,makt.
TYPE-POOLS : tpit.
DATA ls_bseg TYPE bseg. " WITH HEADER LINE.
DATA it_buztab TYPE tpit_t_buztab WITH HEADER LINE.
DATA errtab TYPE tpit_t_errdoc WITH HEADER LINE.
DATA it_fldtab TYPE tpit_t_fname WITH HEADER LINE.
DATA it_tab TYPE truxs_t_text_data.
DATA: BEGIN OF itab OCCURS 0,
werks LIKE t001w-werks, "工厂
idnrk LIKE stpo-idnrk, "组件编号
maktx LIKE makt-maktx, "组件描述
END OF itab.
DATA: BEGIN OF lt_itab OCCURS 0,
werks LIKE t001w-werks, "工厂
idnrk LIKE stpo-idnrk, "组件编号
maktx LIKE makt-maktx, "组件描述
matnr LIKE mara-matnr, "父项编号
maktx1 LIKE makt-maktx, "父项描述
tdlnr( 200), "替代料编号
END OF lt_itab.
DATA : BEGIN OF itmatnr OCCURS 200,
idnrk LIKE stpo-idnrk,
END OF itmatnr.
DATA : BEGIN OF alttab OCCURS 200,
matnr LIKE mast-matnr,
menge LIKE stpo-menge,
END OF alttab.
DATA : BEGIN OF top_code OCCURS 100,
matnr( 18),
maktx( 40),
meins( 3),
menge LIKE stpo-menge,
matkl( 9),
wrkst( 14),
END OF top_code.
DATA : BEGIN OF makr OCCURS 10,
maker( 7),
idnlf( 22),
END OF makr.
DATA : BEGIN OF usedtab OCCURS 100.
INCLUDE STRUCTURE stpov.
DATA : END OF usedtab.
DATA : BEGIN OF equicat OCCURS 100.
INCLUDE STRUCTURE cscequi.
DATA : END OF equicat.
DATA : BEGIN OF kndcat OCCURS 100.
INCLUDE STRUCTURE cscknd.
DATA : END OF kndcat.
DATA : BEGIN OF matcat OCCURS 100.
INCLUDE STRUCTURE cscmat.
DATA : END OF matcat.
DATA : BEGIN OF stdcat OCCURS 100.
INCLUDE STRUCTURE cscstd.
DATA : END OF stdcat.
DATA : BEGIN OF tplcat OCCURS 100.
INCLUDE STRUCTURE csctpl.
DATA : END OF tplcat.
DATA : top_cnt( 5) TYPE n,
m_cnt( 5) TYPE n,
lin( 5) TYPE n,
line_cnt( 5) TYPE n.
**ALV
DATA:gt_event_exit TYPE slis_t_event_exit.
DATA:gs_event_exit TYPE slis_event_exit.
DATA:gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
DATA:gc_glay TYPE lvc_s_glay.
DATA:gs_layout TYPE lvc_s_layo, "SLIS_LAYOUT_ALV,
wk_repid LIKE sy-repid.
DATA:gs_grid TYPE lvc_s_glay.
DATA:tem_grid TYPE REF TO cl_gui_alv_grid.
DATA:gt_events TYPE slis_t_event.
DATA:gs_events LIKE LINE OF gt_events.
*DATA: RESULT LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA: result LIKE bseg OCCURS 0 WITH HEADER LINE.
DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA:variant LIKE disvariant.
DATA lt_bseg LIKE TABLE OF bseg WITH HEADER LINE.
DATA:itstpo TYPE TABLE OF stpo WITH HEADER LINE,
ttstpo TYPE TABLE OF stpo WITH HEADER LINE,
itstko TYPE TABLE OF stko WITH HEADER LINE,
itmast TYPE TABLE OF mast WITH HEADER LINE.
PARAMETER p_file LIKE rlgrap-filename DEFAULT 'C:\'.
AT SELECTION- SCREEN ON VALUE-REQUEST FOR p_file. "类似上传附件时的那个浏览按钮
******************初始屏幕结束**********************************************************************
******************批量导入的BAPI**********************************************************************
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = space
def_path = p_file
mask = text- 001
mode = 'O'
IMPORTING
filename = p_file
EXCEPTIONS
selection_cancel = 0.
START- OF-SELECTION.
CLEAR:itab,result.
CLEAR:itab[],result[].
*excel 数据导入
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_tab
i_filename = p_file
TABLES
i_tab_converted_data = itab
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
DELETE itab INDEX 1.
ENDIF.
REFRESH lt_itab.
CLEAR lt_itab.
LOOP AT itab.
REFRESH usedtab.
CLEAR usedtab.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = '99991231'
datuv = sy-datum
matnr = itab-idnrk
werks = itab-werks
TABLES
wultb = usedtab
equicat = equicat
kndcat = kndcat
matcat = matcat
stdcat = stdcat
tplcat = tplcat
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
OTHERS = 6.
LOOP AT usedtab WHERE stlan = '1' AND stlst = '1'.
lt_itab-werks = usedtab-werks.
lt_itab-idnrk = usedtab-idnrk.
SELECT SINGLE
maktx
INTO lt_itab-maktx
FROM makt
WHERE matnr = lt_itab-idnrk
AND spras = sy-langu.
lt_itab-matnr = usedtab-matnr.
SELECT SINGLE
maktx
INTO lt_itab-maktx1
FROM makt
WHERE matnr = lt_itab-matnr
AND spras = sy-langu.
IF usedtab-alpgr <> ''.
REFRESH itmatnr.
CLEAR itmatnr.
SELECT idnrk INTO TABLE itmatnr
FROM stpo
WHERE stlnr = usedtab-stlnr
AND idnrk <> usedtab-idnrk
AND alpgr = usedtab-alpgr.
IF itmatnr[] IS NOT INITIAL.
SORT itmatnr BY idnrk.
DELETE ADJACENT DUPLICATES FROM itmatnr.
LOOP AT itmatnr.
IF lt_itab-tdlnr = ''.
lt_itab-tdlnr = itmatnr-idnrk.
ELSE.
CONCATENATE lt_itab-tdlnr ',' itmatnr-idnrk INTO lt_itab-tdlnr.
ENDIF.
ENDLOOP.
APPEND lt_itab.
CLEAR lt_itab.
ELSE.
APPEND lt_itab.
CLEAR lt_itab.
ENDIF.
ELSE.
APPEND lt_itab.
CLEAR lt_itab.
ENDIF.
ENDLOOP.
ENDLOOP.
SORT lt_itab BY werks idnrk matnr tdlnr DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_itab COMPARING werks idnrk matnr. " TDLNR.
PERFORM frm_display.
*&---------------------------------------------------------------------*
*& FORM DISPLAY_DATA
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM frm_display .
REFRESH gt_fieldcat.
CLEAR gt_fieldcat.
REFRESH gt_events.
CLEAR gt_events.
CLEAR gs_layout.
CLEAR gs_grid.
DEFINE fill_alv.
clear gt_fieldcat.
gt_fieldcat-fieldname = & 1.
gt_fieldcat-scrtext_m = & 2 .
gt_fieldcat-outputlen = & 3.
if gt_fieldcat-fieldname <> 'SHLV'.
gt_fieldcat-decimals_o = & 4.
endif.
append gt_fieldcat.
END- OF- DEFINITION.
fill_alv 'WERKS' '工厂 ' '12' ''.
fill_alv 'IDNRK' '组件编号 ' '18' ''.
fill_alv 'MAKTX' '组件描述 ' '40' ''.
fill_alv 'MATNR' '父项编号 ' '18' ''.
fill_alv 'MAKTX1' '父项描述 ' '40' ''.
fill_alv 'TDLNR' '替代料编号 ' '60' ''.
gs_layout-stylefname = 'FSTYLE'.
gs_layout-zebra = 'X'.
* GS_LAYOUT-CWIDTH_OPT = 'X'.
* GS_LAYOUT-BOX_FNAME = 'CHK'.
gs_grid-edt_cll_cb = 'X'.
* **************定义事件FORM名称*********************
gs_events-name = 'CALLER_EXIT'.
gs_events- form = 'CALLER_EXIT'.
APPEND gs_events TO gt_events.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'SET_PF'
it_fieldcat_lvc = gt_fieldcat[]
i_grid_settings = gs_grid
is_layout_lvc = gs_layout
i_save = 'X'
* IT_EVENTS = GT_EVENTS
TABLES
t_outtab = lt_itab.
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& FORM STANDARD_FULLSCREEN
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM set_pf USING rt_extab TYPE slis_t_extab.
DATA: BEGIN OF ex_tab OCCURS 0,
fcode LIKE sy-ucomm,
END OF ex_tab.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "SET_STATUS