*&---------------------------------------------------------------------*
*& Report ZPPR0047
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zppr0047.
TABLES:sscrfields,icon,rlgrap.
DATA:gt_fieldcat TYPE lvc_t_fcat,
gw_fieldcat TYPE lvc_s_fcat,
gv_repid TYPE sy-repid,
gs_layout TYPE lvc_s_layo,
gt_sort TYPE lvc_t_sort,
gw_sort TYPE lvc_s_sort.
TYPES:BEGIN OF tys_out,
zgdbs TYPE numc5,
matnr TYPE matnr,
maktx TYPE maktx,
werks TYPE werks_d,
lgort TYPE lgort_d,
pwerk TYPE co_pwerk,
gamng TYPE menge_d,
gltrp TYPE afko-gltrp,
gstrp TYPE afko-gstrp,
posnr TYPE posnr,
idnrk TYPE matnr,
idnrk_txt TYPE maktx,
menge TYPE menge_d,
werks_zj TYPE werks_d,
lgort_zj TYPE lgort_d,
bapi_mtype TYPE bapi_mtype,
bapi_msg TYPE bapi_msg,
aufnr TYPE aufnr,
sel(1),
END OF tys_out.
DATA:gt_out TYPE TABLE OF tys_out,
gw_out LIKE LINE OF gt_out.
TYPES:BEGIN OF tys_item,
idnrk TYPE matnr,
idnrk_txt TYPE maktx,
menge TYPE menge_d,
werks_zj TYPE werks_d,
lgort_zj TYPE lgort_d,
END OF tys_item.
DATA:ty_item TYPE tys_item.
DATA:lth_functxt TYPE smp_dyntxt.
DATA:g_filepath TYPE string.
DATA:t_xlstmp TYPE zsalsmex_tabline OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_auart TYPE aufk-auart DEFAULT 'ZP01' OBLIGATORY.
PARAMETERS:p_file LIKE rlgrap-filename MODIF ID p1.
SELECTION-SCREEN:END OF BLOCK b1.
SELECTION-SCREEN FUNCTION KEY 1.
INITIALIZATION .
CLEAR lth_functxt.
lth_functxt-icon_id = icon_export.
lth_functxt-icon_text = '下载模板'.
lth_functxt-quickinfo = '下载模板'.
sscrfields-functxt_01 = lth_functxt.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
PERFORM frm_download_temp.
WHEN OTHERS.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.
START-OF-SELECTION.
PERFORM frm_upload_data.
PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*& Form frm_download_temp
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_temp .
DATA:lv_mtype TYPE bapi_mtype,
lv_msg TYPE bapi_msg.
CALL METHOD zcl_excel=>download_template( EXPORTING i_objid = 'ZPPR0047' i_dec = '批导工单组件' IMPORTING e_type = lv_mtype e_message = lv_msg ).
IF lv_mtype IS NOT INITIAL.
MESSAGE lv_msg TYPE lv_mtype.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
DATA:g_repid TYPE sy-repid.
g_repid = sy-repid.
"g_layout-zebra = 'X' .
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-box_fname = 'SEL'.
CLEAR gt_fieldcat[].
PERFORM frm_generate_field_catalogu.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF'
i_callback_user_command = 'USER_COM'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
it_sort_lvc = gt_sort
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
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.
*&---------------------------------------------------------------------*
*& Form SET_PF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_pf USING extab TYPE slis_t_extab.
SET TITLEBAR 'TITLE'.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "SET_PF
*&---------------------------------------------------------------------*
*& Form user_com
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM user_com USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
DATA: gd_repid LIKE sy-repid,
ref_grid TYPE REF TO cl_gui_alv_grid.
DATA:lv_answer.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data.
ENDIF.
CASE r_ucomm.
WHEN '&BACK' OR '&EXIT' OR '&EXIT'.
LEAVE TO SCREEN 0.
WHEN '&CREATE'.
READ TABLE gt_out INTO DATA(lw_out) WITH KEY sel = 'X'.
IF sy-subrc NE 0.
MESSAGE '请选择需要操作的数据' TYPE 'E'.
ENDIF.
READ TABLE gt_out INTO lw_out WITH KEY sel = 'X' bapi_mtype = 'E'.
IF sy-subrc EQ 0.
MESSAGE '有错误数据请检查' TYPE 'E'.
ENDIF.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
textline1 = '确认是否创建'
titel = '提示'
cancel_display = ''
IMPORTING
answer = lv_answer.
IF lv_answer = 'J'.
PERFORM frm_create_po.
ENDIF.
WHEN '&IC1'.
READ TABLE gt_out INTO lw_out INDEX rs_selfield-tabindex.
IF rs_selfield-fieldname = 'AUFNR'.
SET PARAMETER ID 'ANR' FIELD lw_out-aufnr .
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
ENDIF .
WHEN OTHERS.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM. "USER_COM
*&---------------------------------------------------------------------*
*& Form FRM_GENERATE_FIELD_CATALOGU
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_generate_field_catalogu.
DEFINE def_modify_fieldcat.
&1-scrtext_l = &2.
&1-scrtext_m = &2.
&1-reptext = &2.
&1-scrtext_s = &2.
END-OF-DEFINITION.
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(salv_table)
CHANGING t_table = gt_out ).
gt_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = salv_table->get_columns( )
r_aggregations = salv_table->get_aggregations( ) ).
CATCH cx_root.
ENDTRY.
LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_filedcat>).
CASE <fs_filedcat>-fieldname.
WHEN 'SEL'.
<fs_filedcat>-no_out = 'X'.
WHEN 'ZGDBS'.
def_modify_fieldcat <fs_filedcat> '工单序号'.
WHEN 'MATNR'.
def_modify_fieldcat <fs_filedcat> '生产目标物料'.
WHEN 'MAKTX'.
def_modify_fieldcat <fs_filedcat> '生产目标物料描述'.
WHEN 'WERKS'.
def_modify_fieldcat <fs_filedcat> '生产工厂'.
WHEN 'LGORT'.
def_modify_fieldcat <fs_filedcat> '收货存储地点'.
WHEN 'PWERK'.
def_modify_fieldcat <fs_filedcat> '计划工厂'.
WHEN 'GAMNG'.
def_modify_fieldcat <fs_filedcat> '生产数量'.
WHEN 'POSNR'.
def_modify_fieldcat <fs_filedcat> '组件序号'.
WHEN 'IDNRK'.
def_modify_fieldcat <fs_filedcat> '组件物料'.
WHEN 'IDNRK_TXT'.
def_modify_fieldcat <fs_filedcat> '组件物料描述'.
WHEN 'MENGE'.
def_modify_fieldcat <fs_filedcat> '组件数量'.
WHEN 'WERKS_ZJ'.
def_modify_fieldcat <fs_filedcat> '组件生产工厂'.
WHEN 'LGORT_ZJ'.
def_modify_fieldcat <fs_filedcat> '组件存储地点'.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_po
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_po.
DATA:ls_orderdata TYPE bapi_pp_order_create,
ls_return TYPE bapiret2,
lv_order_number TYPE aufnr.
DATA:lv_msg TYPE bapi_msg,
lv_mtype TYPE bapi_mtype.
DATA:lt_item TYPE TABLE OF tys_item.
DATA(lt_out) = gt_out[].
BREAK yangtao.
LOOP AT lt_out INTO DATA(ls_out) GROUP BY ( zgdbs = ls_out-zgdbs
matnr = ls_out-matnr
maktx = ls_out-maktx
werks = ls_out-werks
pwerk = ls_out-pwerk
lgort = ls_out-lgort
gamng = ls_out-gamng
gltrp = ls_out-gltrp
gstrp = ls_out-gstrp
size = GROUP SIZE
index = GROUP INDEX )
ASCENDING ASSIGNING FIELD-SYMBOL(<fs_group>).
" 创建生产订单
CLEAR:ls_orderdata,lv_order_number,ls_return,lv_msg,lv_mtype.
REFRESH lt_item.
ls_orderdata-material = <fs_group>-matnr.
ls_orderdata-plant = <fs_group>-werks.
ls_orderdata-planning_plant = <fs_group>-pwerk.
ls_orderdata-order_type = p_auart.
ls_orderdata-quantity = <fs_group>-gamng.
ls_orderdata-storage_location = <fs_group>-lgort.
ls_orderdata-basic_start_date = <fs_group>-gstrp.
ls_orderdata-basic_end_date = <fs_group>-gltrp.
CALL FUNCTION 'BAPI_PRODORD_CREATE'
EXPORTING
orderdata = ls_orderdata
IMPORTING
return = ls_return
order_number = lv_order_number.
IF ls_return-type = 'E'.
lv_mtype = 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_return-id
msgnr = ls_return-number
msgv1 = ls_return-message_v1
msgv2 = ls_return-message_v2
msgv3 = ls_return-message_v3
msgv4 = ls_return-message_v4
IMPORTING
message_text_output = lv_msg.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
DO 10 TIMES.
SELECT COUNT(*)
FROM aufk
WHERE aufnr = lv_order_number.
IF sy-subrc = 0.
EXIT.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
IF lv_mtype = 'E'.
PERFORM frm_set_value USING lv_order_number <fs_group>-zgdbs lv_mtype lv_msg.
CONTINUE.
ENDIF.
LOOP AT GROUP <fs_group> ASSIGNING FIELD-SYMBOL(<ls_group>).
lt_item[] = VALUE #( BASE lt_item ( idnrk = <ls_group>-idnrk
menge = <ls_group>-menge
werks_zj = <ls_group>-werks_zj
lgort_zj = <ls_group>-lgort_zj ) ).
ENDLOOP.
* 由于生产订单创建时自动生成组件,需要先清空组件
PERFORM frm_delete_components USING lv_order_number CHANGING lv_mtype lv_msg.
IF lv_mtype = 'E'.
PERFORM frm_set_value USING lv_order_number <fs_group>-zgdbs lv_mtype lv_msg.
CONTINUE.
ENDIF.
* 添加需要的组件
PERFORM frm_add_components TABLES lt_item USING lv_order_number CHANGING lv_mtype lv_msg.
PERFORM frm_set_value USING lv_order_number <fs_group>-zgdbs lv_mtype lv_msg.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_delete_components
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_delete_components USING pv_order_number TYPE aufnr
CHANGING pv_mtype TYPE bapi_mtype
pv_msg TYPE bapi_msg.
DATA: lt_resbkeys TYPE coxt_t_resbdel,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2,
lv_error TYPE flag,
ls_bapireturn TYPE coxt_bapireturn.
SELECT rsnum, rspos INTO TABLE @DATA(lt_resb)
FROM resb
WHERE aufnr = @pv_order_number.
IF sy-subrc EQ 0.
lt_resbkeys = CORRESPONDING #( lt_resb ).
ENDIF.
IF NOT lt_resbkeys[] IS INITIAL.
CALL FUNCTION 'CO_XT_COMPONENTS_DELETE'
EXPORTING
it_resbkeys_to_delete = lt_resbkeys
IMPORTING
e_error_occurred = lv_error
TABLES
ct_bapireturn = lt_return
EXCEPTIONS
delete_failed = 1
OTHERS = 2.
IF lv_error = space.
CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
IMPORTING
es_bapireturn = ls_bapireturn
e_error_occurred = lv_error.
IF ( ls_bapireturn-type = 'S' OR
ls_bapireturn-type = 'W' OR
ls_bapireturn-type = 'I' ) OR
ls_bapireturn IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.
pv_mtype = 'S'.
pv_msg = '删除成功'.
ELSE.
pv_mtype = 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_bapireturn-id
msgnr = ls_bapireturn-number
msgv1 = ls_bapireturn-message_v1
msgv2 = ls_bapireturn-message_v2
msgv3 = ls_bapireturn-message_v3
msgv4 = ls_bapireturn-message_v4
IMPORTING
message_text_output = pv_msg.
ENDIF.
ELSE.
CLEAR lv_error.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc = 0.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_return-id
msgnr = ls_return-number
msgv1 = ls_return-message_v1
msgv2 = ls_return-message_v2
msgv3 = ls_return-message_v3
msgv4 = ls_return-message_v4
IMPORTING
message_text_output = pv_msg.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_add_components
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_add_components TABLES pt_table STRUCTURE ty_item
USING pv_order_number TYPE aufnr
CHANGING pv_mtype TYPE bapi_mtype
pv_msg TYPE bapi_msg.
DATA: ls_requ TYPE coxt_s_quantity,
ls_storage TYPE coxt_s_storage_location,
ls_storagex TYPE coxt_s_storage_locationx,
ls_return TYPE coxt_bapireturn,
lt_return TYPE coxt_t_bapireturn,
lv_msg TYPE string,
lv_tabix TYPE sy-tabix,
lv_postp TYPE postp,
lv_operation TYPE co_aplzl,
lv_sequence TYPE plnfolge,
lv_material TYPE matnr,
lv_positionno TYPE positionno,
lv_error TYPE flag.
TYPES: BEGIN OF ty_resb_bt.
INCLUDE TYPE resbb.
TYPES: indold LIKE sy-tabix,
no_req_upd LIKE sy-datar,
END OF ty_resb_bt.
TYPES: lt_resb_bt TYPE TABLE OF ty_resb_bt.
FIELD-SYMBOLS: <ft_resb_bt> TYPE lt_resb_bt,
<fs_resb_bt> TYPE ty_resb_bt.
SELECT SINGLE aufnr, aufpl
INTO @DATA(ls_afko)
FROM afko
WHERE aufnr = @pv_order_number.
IF sy-subrc EQ 0.
SELECT SINGLE aufpl, aplzl, plnfl
INTO @DATA(ls_afvc)
FROM afvc
WHERE aufpl = @ls_afko-aufpl.
IF sy-subrc EQ 0.
lv_operation = ls_afvc-aplzl.
lv_sequence = ls_afvc-plnfl.
ENDIF.
ENDIF.
IF pt_table[] IS NOT INITIAL.
SELECT matnr,meins
FROM mara
INTO TABLE @DATA(lt_mara)
FOR ALL ENTRIES IN @pt_table
WHERE matnr = @pt_table-idnrk.
SORT lt_mara BY matnr.
ENDIF.
LOOP AT pt_table INTO DATA(lw_table).
lv_tabix = sy-tabix.
CLEAR: ls_requ,ls_storage,ls_storagex.
ls_requ-quantity = lw_table-menge.
lv_material = lw_table-idnrk.
READ TABLE lt_mara INTO DATA(lw_mara) WITH KEY matnr = lv_material BINARY SEARCH.
IF sy-subrc EQ 0.
ls_requ-uom = lw_mara-meins.
ENDIF.
ls_storage-werks = lw_table-werks_zj.
ls_storage-lgort = lw_table-lgort_zj.
ls_storagex-werks = 'X'.
ls_storagex-lgort = 'X'.
lv_positionno = sy-tabix * 10.
lv_postp = 'L'.
CALL FUNCTION 'CO_XT_COMPONENT_ADD'
EXPORTING
is_order_key = pv_order_number
i_material = lv_material
is_requ_quan = ls_requ
i_operation = lv_operation
i_sequence = lv_sequence
is_storage_location = ls_storage
is_storage_locationx = ls_storagex
i_postp = lv_postp
i_posno = lv_positionno
IMPORTING
es_bapireturn = ls_return
e_error_occurred = lv_error.
IF lv_error IS NOT INITIAL.
EXIT.
ENDIF.
ENDLOOP.
IF lv_error = space.
CLEAR: lv_tabix,
ls_return.
ASSIGN ('(SAPLCOBC)RESB_BT[]') TO <ft_resb_bt>.
LOOP AT <ft_resb_bt> ASSIGNING <fs_resb_bt>.
lv_tabix = sy-tabix * 10.
<fs_resb_bt>-posnr = lv_tabix.
CLEAR lv_tabix.
ENDLOOP.
CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
IMPORTING
es_bapireturn = ls_return
e_error_occurred = lv_error.
IF ( ls_return-type = 'S' OR
ls_return-type = 'W' OR
ls_return-type = 'I' ) OR
ls_return IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.
pv_mtype = 'S'.
pv_msg = '创建成功' .
ELSE.
CLEAR: lv_error.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IF ls_return-type = 'E'.
pv_mtype = 'E'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_return-id
msgnr = ls_return-number
msgv1 = ls_return-message_v1
msgv2 = ls_return-message_v2
msgv3 = ls_return-message_v3
msgv4 = ls_return-message_v4
IMPORTING
message_text_output = pv_msg.
ENDIF.
ENDIF.
ELSE.
CLEAR: lv_error.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IF ls_return-type = 'E'.
pv_mtype = 'E'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_return-id
msgnr = ls_return-number
msgv1 = ls_return-message_v1
msgv2 = ls_return-message_v2
msgv3 = ls_return-message_v3
msgv4 = ls_return-message_v4
IMPORTING
message_text_output = pv_msg.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
DATA:BEGIN OF i_upload OCCURS 10,
value001 TYPE string, "工单序号
value002 TYPE string, "生产目标物料
value003 TYPE string, "生产工厂
value004 TYPE string, "收货存储地点
value005 TYPE string, "计划工厂
value006 TYPE string, "生产数量
value007 TYPE string, "开始时间
value008 TYPE string, "结束时间
value009 TYPE string, "组件序号
value010 TYPE string, "组件物料
value011 TYPE string, "组件数量
value012 TYPE string, "组件生产工厂
value013 TYPE string, "组件库存地点
END OF i_upload.
DATA:lv_num TYPE i.
DATA:v_gt_data_row TYPE int2,
v_gt_data_col TYPE int2.
DATA:v_indet(3) TYPE n,
v_field(20) TYPE c.
FIELD-SYMBOLS: <fs> TYPE any,<gs>.
REFRESH t_xlstmp.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLEX'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 16
i_end_row = 65536
TABLES
intern = t_xlstmp
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc NE 0 .
MESSAGE s003(msgnr) WITH '读取文件失败,请检查Excel数据文件!'.
STOP.
ENDIF.
LOOP AT t_xlstmp.
TRANSLATE t_xlstmp-value TO UPPER CASE.
AT NEW row.
CLEAR:t_xlstmp.
ENDAT.
ASSIGN COMPONENT t_xlstmp-col OF STRUCTURE i_upload TO <fs>.
<fs> = t_xlstmp-value.
AT END OF row.
APPEND i_upload.
CLEAR:i_upload.
ENDAT .
ENDLOOP.
" APPEND i_upload.
CLEAR: i_upload,t_xlstmp,t_xlstmp[].
DATA:lv_matnr TYPE matnr,
lv_idnrk TYPE matnr,
lv_werks TYPE werks_d,
lv_werks_zj TYPE werks_d,
lv_mtype TYPE bapi_mtype,
lv_msg TYPE bapi_msg.
LOOP AT i_upload INTO DATA(lw_upload).
CLEAR:lv_matnr,
lv_werks,
lv_werks_zj,
lv_mtype,
lv_msg .
lv_matnr = lw_upload-value002.
lv_werks = lw_upload-value003.
lv_idnrk = lw_upload-value010.
lv_werks_zj = lw_upload-value012.
SELECT COUNT(*) FROM marc WHERE matnr = lv_matnr AND werks = lv_werks.
IF sy-subrc NE 0.
lv_mtype = 'E'.
lv_msg = '生产物料在该工厂下不存在'.
ENDIF.
SELECT COUNT(*) FROM marc WHERE matnr = lv_idnrk AND werks = lv_werks_zj.
IF sy-subrc NE 0.
lv_mtype = 'E'.
lv_msg = '组件物料在该工厂下不存在'.
ENDIF.
gt_out[] = VALUE #( BASE gt_out ( zgdbs = lw_upload-value001 "工单序号
matnr = lw_upload-value002 "生产目标物料
werks = lw_upload-value003 "生产工厂
lgort = lw_upload-value004 "收货存储地点
pwerk = lw_upload-value005 "计划工厂
gamng = lw_upload-value006 "生产数量
gltrp = lw_upload-value007 "开始时间
gstrp = lw_upload-value008 "结束时间
posnr = lw_upload-value009 "组件序号
idnrk = lw_upload-value010 "组件物料
menge = lw_upload-value011 "组件数量
werks_zj = lw_upload-value012 "组件生产工厂
lgort_zj = lw_upload-value013 "组件库存地点
bapi_mtype = lv_mtype
bapi_msg = lv_msg
) ).
ENDLOOP.
IF gt_out[] IS NOT INITIAL.
SELECT matnr,maktx
FROM makt
INTO TABLE @DATA(lt_makt_top)
FOR ALL ENTRIES IN @gt_out
WHERE matnr = @gt_out-matnr AND
spras = @sy-langu.
SORT lt_makt_top BY matnr.
SELECT matnr AS idnrk,
maktx AS idnrk_txt
FROM makt
INTO TABLE @DATA(lt_makt_idnrk)
FOR ALL ENTRIES IN @gt_out
WHERE matnr = @gt_out-idnrk AND
spras = @sy-langu.
SORT lt_makt_idnrk BY idnrk.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
READ TABLE lt_makt_top INTO DATA(lw_makt_top) WITH KEY matnr = <fs_out>-matnr BINARY SEARCH.
IF sy-subrc EQ 0.
<fs_out>-maktx = lw_makt_top-maktx.
ENDIF.
READ TABLE lt_makt_idnrk INTO DATA(lw_makt_idnrk) WITH KEY idnrk = <fs_out>-idnrk BINARY SEARCH.
IF sy-subrc EQ 0.
<fs_out>-idnrk_txt = lw_makt_idnrk-idnrk_txt.
ENDIF.
ENDLOOP.
ENDIF.
SORT gt_out BY matnr werks lgort.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_value
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> <FS_GROUP>_ZGDBS
*& --> LV_MTYPE
*& --> LV_MSG
*&---------------------------------------------------------------------*
FORM frm_set_value USING pv_aufnr TYPE aufnr
pv_zgdbs TYPE numc5
pv_mtype TYPE bapi_mtype
pv_msg TYPE bapi_msg.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE zgdbs = pv_zgdbs.
<fs_out>-aufnr = pv_aufnr.
<fs_out>-bapi_mtype = pv_mtype.
<fs_out>-bapi_msg = pv_msg.
ENDLOOP.
ENDFORM.