*&---------------------------------------------------------------------*
*& Report ZRMM044
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrmm044 MESSAGE-ID 00 NO STANDARD PAGE HEADING..
INCLUDE zrmm044_top.
INCLUDE zrmm044_sel.
INCLUDE zrmm044_f01.
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.
*&---------------------------------------------------------------------*
*& 包含 ZRMM044_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS:slis.
TABLES:sscrfields,icon.
DATA:gt_fieldcat TYPE lvc_t_fcat,
gw_fieldcat TYPE lvc_s_fcat,
gv_repid TYPE sy-repid,
gs_layout TYPE lvc_s_layo.
TYPES:BEGIN OF tty_out,
status TYPE char10,
ebeln TYPE ekko-ebeln, "新采购订单号
bednr TYPE ekpo-bednr, "跟踪编号
ebelp TYPE ekpo-ebelp, "订单行项目
bsart TYPE ekko-bsart, "订单类型
lifnr TYPE ekko-lifnr, "供应商
bedat TYPE ekko-bedat, "凭证日期
ekorg TYPE ekko-ekorg, "采购组织
ekgrp TYPE ekko-ekgrp, "采购组
bukrs TYPE ekko-bukrs, "公司代码
creat_date TYPE datum, "记录的创建日期
created_by TYPE uname, "创建对象的人员名称
zterm TYPE ekko-zterm, "付款条款
inco1 TYPE ekko-inco1, "国际贸易条款
inco2_l TYPE ekko-inco2, "国际贸易条款位置 1
waers TYPE ekko-waers, "币别
kufix TYPE ekko-kufix, "固定汇率
wkurs TYPE ekko-wkurs, "汇率
loekz TYPE ekko-loekz, "删除标识
knttp TYPE ekpo-knttp, "科目分配类别
pstyp TYPE ekpo-pstyp, "项目类别
werks TYPE ekpo-werks, "工厂
matnr TYPE ekpo-matnr, "物料号码
txz01 TYPE ekpo-txz01, "物料描述
matkl TYPE ekpo-matkl, "物料组
menge TYPE ekpo-menge, "数量
meins TYPE ekpo-meins, "订单计量单位
bprme TYPE ekpo-bprme, "订单价格单位(采购)
eindt TYPE eket-eindt, "交货日期
netpr TYPE ekpo-netpr, "净价
peinh TYPE ekpo-peinh, "价格单位
brtwr TYPE ekpo-brtwr, "总金额
retpo TYPE ekpo-retpo, "退货项目
umson TYPE mepo1211-umson, "免费项目
webre TYPE ekpo-webre, "发票基于收货
mwskz TYPE ekpo-mwskz, "税码
sakto TYPE ekpo-sakto, "总账科目
kostl TYPE ekpo-kostl, "成本中心
aufnr1 TYPE char50, "ztmm005-aufnr1, "原CLOUD订单
aufnr TYPE aufnr, "订单
bapi_mtype TYPE bapi_mtype,
bapi_msg TYPE bapi_msg,
sel(1),
END OF tty_out.
TYPES:ty_basic TYPE TABLE OF tty_out.
DATA:gt_out TYPE ty_basic,
gw_out LIKE LINE OF gt_out.
DATA:lth_functxt TYPE smp_dyntxt.
DATA:g_filepath TYPE string.
DATA:t_xlstmp TYPE zsalsmex_tabline OCCURS 0 WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& 包含 ZRMM044_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file LIKE rlgrap-filename MODIF ID p1.
SELECTION-SCREEN:END OF BLOCK b1.
SELECTION-SCREEN:BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS:p1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND UEX,
P2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN SKIP 1 .
PARAMETERS:p_test AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN:END OF BLOCK b2.
SELECTION-SCREEN:FUNCTION KEY 1.
*&---------------------------------------------------------------------*
*& 包含 ZRMM044_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 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,
value014 TYPE string,
value015 TYPE string,
value016 TYPE string,
value017 TYPE string,
value018 TYPE string,
value019 TYPE string,
value020 TYPE string,
value021 TYPE string,
value022 TYPE string,
value023 TYPE string,
value024 TYPE string,
value025 TYPE string,
value026 TYPE string,
value027 TYPE string,
value028 TYPE string,
value029 TYPE string,
value030 TYPE string,
value031 TYPE string,
value032 TYPE string,
value033 TYPE string,
value034 TYPE string,
value035 TYPE string,
value036 TYPE string,
value037 TYPE string,
value038 TYPE string,
value039 TYPE string,
END OF i_upload.
DATA:lv_num TYPE i,
lv_matnr TYPE matnr.
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_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 6
i_end_col = 39
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[].
DELETE i_upload WHERE ( value001 IS INITIAL AND value002 IS INITIAL ).
SELECT * INTO TABLE @DATA(lt_ztmm017) FROM ztmm017.
SELECT * INTO TABLE @DATA(lt_t001) FROM t001 .
SELECT * INTO TABLE @DATA(lt_t024e) FROM t024e.
SELECT * INTO TABLE @DATA(lt_t024) FROM t024.
SELECT * INTO TABLE @DATA(lt_t001w) FROM t001w.
SORT lt_t024e BY ekorg.
SORT lt_t024 BY ekgrp.
SORT lt_t001 BY bukrs.
SORT lt_t001w BY werks.
DEFINE def_append_msg.
IF gw_out-&1 IS INITIAL.
gw_out-status = icon_red_light.
gw_out-bapi_mtype = 'E'.
gw_out-bapi_msg = &2 && '不能为空'.
ENDIF.
END-OF-DEFINITION.
DEFINE def_append_error.
gw_out-status = icon_red_light.
gw_out-bapi_mtype = 'E'.
gw_out-bapi_msg = &1 .
END-OF-DEFINITION.
SELECT o~aufnr , o~cy_seqnr , f~werks INTO TABLE @DATA(lt_afko) FROM afko AS o INNER JOIN aufk AS f ON o~aufnr = f~aufnr.
SPLIT 'NB、DB、ZN、ZNJ、ZNK、ZSTO、ZT、ZU' AT '、' INTO TABLE DATA(lt_bsart) .
LOOP AT i_upload INTO DATA(lw_upload).
gw_out = VALUE #( ebeln = lw_upload-value001
bednr = lw_upload-value002
ebelp = lw_upload-value003
bsart = lw_upload-value004
lifnr = lw_upload-value005
bedat = lw_upload-value006"+0(4) && lw_upload-value006+5(2) && lw_upload-value006+8(2)
ekorg = lw_upload-value007
ekgrp = lw_upload-value008
bukrs = lw_upload-value009
creat_date = lw_upload-value010
created_by = lw_upload-value011
zterm = lw_upload-value012
inco1 = lw_upload-value013
inco2_l = lw_upload-value014
waers = lw_upload-value015
kufix = lw_upload-value016
wkurs = lw_upload-value017
loekz = lw_upload-value018
knttp = lw_upload-value019
pstyp = lw_upload-value020
werks = lw_upload-value021
matnr = lw_upload-value022
txz01 = lw_upload-value023
matkl = lw_upload-value024
menge = lw_upload-value025"+0(4) && lw_upload-value025+5(2) && lw_upload-value025+8(2)
meins = lw_upload-value026
bprme = lw_upload-value027
eindt = lw_upload-value028
netpr = lw_upload-value029
peinh = lw_upload-value030
brtwr = lw_upload-value031
retpo = lw_upload-value032
umson = lw_upload-value033
webre = lw_upload-value034
mwskz = lw_upload-value035
sakto = lw_upload-value036
kostl = lw_upload-value037
aufnr1 = lw_upload-value038
aufnr = lw_upload-value039
).
IF p1 = 'X'.
IF gw_out-bednr IS INITIAL.
def_append_error '创建订单原订单号不能为空'.
ENDIF.
ELSEIF p2 = 'X'.
IF gw_out-ebeln IS INITIAL.
def_append_error '修改订单SAP订单号不能为空'.
ENDIF.
ENDIF.
def_append_msg ebelp '订单行项目'.
def_append_msg bsart '订单类型'.
def_append_msg lifnr '供应商'.
def_append_msg bedat '凭证日期'.
def_append_msg ekorg '采购组织'.
def_append_msg ekgrp '采购组'.
def_append_msg bukrs '公司代码'.
def_append_msg zterm '付款条款'.
def_append_msg waers '币别'.
def_append_msg wkurs '汇率'.
def_append_msg knttp '科目分配类别'.
def_append_msg werks '工厂'.
"def_append_msg matnr '物料号码'.
def_append_msg txz01 '物料描述'.
def_append_msg matkl '物料组'.
def_append_msg menge '数量'.
IF p1 = 'X'.
def_append_msg creat_date '记录的创建日期 '.
def_append_msg created_by '创建对象的人员 '.
ENDIF.
def_append_msg meins '订单计量单位'.
def_append_msg bprme '订单价格单位(采购)'.
def_append_msg eindt '交货日期'.
def_append_msg netpr '净价'.
def_append_msg peinh '价格单位'.
def_append_msg brtwr '总金额'.
def_append_msg webre '发票基于收货'.
def_append_msg mwskz '税码'.
def_append_msg sakto '总账科目'.
def_append_msg aufnr1 '原cloud订单'.
IF gw_out-meins IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gw_out-meins
* LANGUAGE = SY-LANGU
IMPORTING
output = gw_out-meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
ENDIF.
IF gw_out-bprme IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gw_out-bprme
* LANGUAGE = SY-LANGU
IMPORTING
output = gw_out-bprme
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
ENDIF.
gw_out-sakto = |{ gw_out-sakto ALPHA = IN }|.
IF gw_out-sakto = '0050010501' OR gw_out-sakto = '0050010701'.
ELSE.
def_append_error '总账科目只能是0050010501或0050010701'.
ENDIF.
READ TABLE lt_t001w INTO DATA(lw_t001w) WITH KEY werks = gw_out-werks BINARY SEARCH.
IF sy-subrc NE 0.
def_append_error '工厂不存在'.
ENDIF.
READ TABLE lt_t024e INTO DATA(lw_t024e) WITH KEY ekorg = gw_out-ekorg BINARY SEARCH.
IF sy-subrc NE 0.
def_append_error '采购组织不存在'.
ENDIF.
READ TABLE lt_t024 INTO DATA(lw_t024) WITH KEY ekgrp = gw_out-ekgrp BINARY SEARCH.
IF sy-subrc NE 0.
def_append_error '采购组不存在'.
ENDIF.
READ TABLE lt_t001 INTO DATA(lw_t001) WITH KEY bukrs = gw_out-bukrs BINARY SEARCH.
IF sy-subrc NE 0.
def_append_error '公司代码不存在'.
ENDIF.
READ TABLE lt_bsart INTO DATA(lw_bsart) WITH KEY table_line = gw_out-bsart.
IF sy-subrc NE 0.
def_append_error '订单类型不存在'.
ENDIF.
IF gw_out-menge IS INITIAL.
def_append_error '数量不能为空'.
ENDIF.
READ TABLE lt_afko INTO DATA(lw_afko) WITH KEY cy_seqnr = gw_out-aufnr1.
IF sy-subrc NE 0.
def_append_error '旧工单信息不存在'.
ELSE.
gw_out-aufnr = lw_afko-aufnr .
IF lw_afko-werks <> gw_out-werks.
def_append_error '旧工单与批导工厂不一致'.
ENDIF.
ENDIF.
IF p1 = 'X' AND gw_out-bednr IS NOT INITIAL.
READ TABLE lt_ztmm017 INTO DATA(lw_ztmm017) WITH KEY bednr = gw_out-bednr..
IF sy-subrc EQ 0 .
gw_out-status = icon_red_light.
gw_out-bapi_mtype = 'E'.
gw_out-bapi_msg = '旧订单已产生采购订单号码为:' && lw_ztmm017-ebeln.
ENDIF.
ENDIF.
gw_out-retpo = COND #( WHEN gw_out-retpo = '√' THEN 'X' ELSE '').
gw_out-umson = COND #( WHEN gw_out-umson = '√' THEN 'X' ELSE '').
APPEND gw_out TO gt_out.
CLEAR:gw_out.
ENDLOOP.
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
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.
IF p1 = 'X'.
SET TITLEBAR 'TITLE_CREATE'.
ELSE.
SET TITLEBAR 'TITLE_MODFIY'.
ENDIF.
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.
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 '&IC1'.
WHEN '&OPER'.
PERFORM frm_oper_purchase.
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 'STATUS'.
def_modify_fieldcat <fs_filedcat> '状态'.
<fs_filedcat>-icon = 'X'.
WHEN 'SEL'.
<fs_filedcat>-no_out = 'X'.
WHEN 'BAPI_MTYPE'.
def_modify_fieldcat <fs_filedcat> '消息'.
WHEN 'BAPI_MSG'.
def_modify_fieldcat <fs_filedcat> '消息文本'.
WHEN 'AUFNR1'.
def_modify_fieldcat <fs_filedcat> '原CLOUD订单'.
WHEN 'CREAT_DATE'.
def_modify_fieldcat <fs_filedcat> '记录的创建日期 '.
WHEN 'CREATED_BY'.
def_modify_fieldcat <fs_filedcat> '创建对象的人员'.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_temp
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_temp .
DATA:lwk_object LIKE wwwdatatab,
lwk_rc TYPE sy-subrc,
ltd_ft TYPE filetable,
lth_ft TYPE file_table,
lwk_ua TYPE i.
DATA:lwk_fn TYPE rlgrap-filename.
****查询模板
SELECT SINGLE relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF lwk_object
WHERE srtf2 = 0 AND
objid = 'ZRMM044'.
IF sy-subrc <> 0 OR lwk_object-objid = space .
MESSAGE i007 WITH 'ZRMM044'.
STOP.
ENDIF.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
file_filter = cl_gui_frontend_services=>filetype_excel
CHANGING
file_table = ltd_ft
rc = lwk_rc
user_action = lwk_ua
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CHECK lwk_ua = 0.
READ TABLE ltd_ft INTO lth_ft INDEX 1.
lwk_fn = lth_ft-filename.
***下载模板
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lwk_object
destination = lwk_fn
IMPORTING
rc = lwk_rc.
IF lwk_rc <> 0.
MESSAGE i009 WITH 'ZRMM044'..
STOP.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_oper_purchase
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_oper_purchase .
DATA:lt_return LIKE TABLE OF bapiret2,
po_item LIKE TABLE OF bapimepoitem,
po_itemx LIKE TABLE OF bapimepoitemx,
po_account LIKE TABLE OF bapimepoaccount,
po_accountx LIKE TABLE OF bapimepoaccountx,
po_schedule LIKE TABLE OF bapimeposchedule,
po_schedulex LIKE TABLE OF bapimeposchedulx,
po_extensionin LIKE TABLE OF bapiparex WITH HEADER LINE,
po_hdr LIKE bapimepoheader,
po_hdrx LIKE bapimepoheaderx.
DATA:lv_ebeln TYPE ebeln,
lv_ebelp TYPE ekpo-ebelp,
lv_msg TYPE bapi_msg,
lv_type TYPE bapi_mtype.
DATA:where_tab TYPE string.
DATA:lt_out TYPE ty_basic.
DATA:lt_ztmm017 TYPE TABLE OF ztmm017 .
REFRESH:lt_out.
BREAK sapabap.
lt_out[] = gt_out[].
DELETE lt_out WHERE bapi_mtype = 'S'.
DELETE lt_out WHERE bapi_mtype = 'E'.
IF p1 = 'X'.
where_tab = 'BEDNR = GS_OUT-BEDNR' .
ELSEIF p2 = 'X'.
where_tab = 'EBELN = GS_OUT-EBELN' ..
ENDIF.
LOOP AT lt_out INTO DATA(gs_out) GROUP BY ( bednr = gs_out-bednr ebeln = gs_out-ebeln ) .
LOOP AT GROUP gs_out INTO DATA(lw_wa).
IF po_hdr IS INITIAL.
po_hdr = VALUE #( po_number = lw_wa-ebeln
doc_type = lw_wa-bsart
doc_date = lw_wa-bedat
vendor = |{ lw_wa-lifnr ALPHA = IN }|
purch_org = lw_wa-ekorg
pur_group = lw_wa-ekgrp
comp_code = lw_wa-bukrs
pmnttrms = lw_wa-zterm
currency = lw_wa-waers
ex_rate_fx = lw_wa-kufix
"exch_rate = lw_wa-wkurs
"incoterms1 = lw_wa-inco1
"incoterms2 = lw_wa-inco2_l
creat_date = COND #( WHEN p1 = 'X' THEN lw_wa-creat_date ELSE '' )
created_by = COND #( WHEN p1 = 'X' THEN lw_wa-created_by ELSE '' ) ).
po_hdrx = VALUE #( po_number = COND #( WHEN p2 = 'X' THEN 'X' ELSE '' )
doc_type = 'X'
doc_date = 'X'
vendor = 'X'
purch_org = 'X'
pur_group = 'X'
comp_code = 'X'
pmnttrms = 'X'
currency = 'X'
ex_rate_fx = 'X'
"exch_rate = 'X'
"incoterms1 = 'X'
"incoterms2 = 'X'
creat_date = COND #( WHEN p1 = 'X' THEN 'X' ELSE '' )
created_by = COND #( WHEN p1 = 'X' THEN 'X' ELSE '' ) ).
ENDIF.
lv_ebelp = lw_wa-ebelp.
po_item = VALUE #( BASE po_item ( po_item = lv_ebelp
plant = lw_wa-werks
acctasscat = lw_wa-knttp
material = lw_wa-matnr
material_long = lw_wa-matnr
short_text = lw_wa-txz01
matl_group = lw_wa-matkl
quantity = lw_wa-menge
po_unit = lw_wa-meins
orderpr_un = lw_wa-bprme
net_price = lw_wa-netpr
price_unit = lw_wa-peinh
ret_item = lw_wa-retpo
free_item = lw_wa-umson
gr_basediv = lw_wa-webre
tax_code = lw_wa-mwskz
incoterms1 = lw_wa-inco1
incoterms2 = lw_wa-inco2_l
trackingno = lw_wa-bednr
delete_ind = COND #( WHEN lw_wa-loekz IS INITIAL THEN '' ELSE 'L' )
) ) .
po_itemx = VALUE #( BASE po_itemx ( po_item = lv_ebelp
plant = 'X'
acctasscat = 'X'
material = COND #( WHEN lw_wa-matnr IS NOT INITIAL THEN 'X' ELSE '' )
material_long = COND #( WHEN lw_wa-matnr IS NOT INITIAL THEN 'X' ELSE '' )
short_text = 'X'
matl_group = 'X'
quantity = 'X'
po_unit = 'X'
orderpr_un = 'X'
net_price = 'X'
price_unit = 'X'
ret_item = COND #( WHEN lw_wa-retpo IS NOT INITIAL THEN 'X' ELSE '' )
free_item = COND #( WHEN lw_wa-umson IS NOT INITIAL THEN 'X' ELSE '' )
gr_basediv = COND #( WHEN lw_wa-webre IS NOT INITIAL THEN 'X' ELSE '' )
tax_code = 'X'
incoterms1 = COND #( WHEN lw_wa-inco1 IS NOT INITIAL THEN 'X' ELSE '' )
incoterms2 = COND #( WHEN lw_wa-inco2_l IS NOT INITIAL THEN 'X' ELSE '' )
trackingno = 'X'
delete_ind = COND #( WHEN lw_wa-loekz IS NOT INITIAL THEN 'X' ELSE '' )
) ) .
po_schedule = VALUE #( BASE po_schedule ( po_item = lv_ebelp
sched_line = 1
del_datcat_ext = 'D'
delivery_date = lw_wa-eindt ) ) .
po_schedulex = VALUE #( BASE po_schedulex ( po_item = lv_ebelp
sched_line = 1
po_itemx = 'X'
sched_linex = 'X'
del_datcat_ext = 'X'
delivery_date = 'X' ) ) .
po_account = VALUE #( BASE po_account ( po_item = lv_ebelp
serial_no = 1
orderid = |{ lw_wa-aufnr ALPHA = IN WIDTH = 10 }|
gl_account = |{ lw_wa-sakto ALPHA = IN WIDTH = 10 }|
costcenter = |{ lw_wa-kostl ALPHA = IN WIDTH = 10 }| ) ) .
po_accountx = VALUE #( BASE po_accountx ( po_item = lv_ebelp
serial_no = 1
po_itemx = 'X'
serial_nox = 'X'
orderid = 'X'
gl_account = 'X'
costcenter = 'X' ) ) .
ENDLOOP.
IF p1 = 'X' .
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = po_hdr
poheaderx = po_hdrx
testrun = p_test
IMPORTING
exppurchaseorder = lv_ebeln
TABLES
return = lt_return
poitem = po_item
poitemx = po_itemx
poaccount = po_account
poaccountx = po_accountx
poschedule = po_schedule
poschedulex = po_schedulex
extensionin = po_extensionin.
ELSEIF p2 = 'X' .
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = lw_wa-ebeln
poheader = po_hdr
poheaderx = po_hdrx
testrun = p_test
* IMPORTING
* exppurchaseorder = lv_ebeln
TABLES
return = lt_return
poitem = po_item
poitemx = po_itemx
poaccount = po_account
poaccountx = po_accountx
poschedule = po_schedule
poschedulex = po_schedulex
extensionin = po_extensionin.
ENDIF.
PERFORM frm_collect_message TABLES lt_return CHANGING lv_msg lv_type.
IF p1 = 'X'.
IF lv_type = 'S' AND lv_ebeln IS NOT INITIAL.
lt_ztmm017[] = VALUE #( BASE lt_ztmm017 ( bednr = lw_wa-bednr
ebeln = lv_ebeln ) ).
IF lt_ztmm017[] IS NOT INITIAL.
MODIFY ztmm017 FROM TABLE lt_ztmm017[].
IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
ENDIF.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE bednr = lw_wa-bednr .
<fs_out>-ebeln = lv_ebeln.
<fs_out>-bapi_mtype = lv_type.
IF lv_type = 'S'.
<fs_out>-status = icon_green_light.
<fs_out>-bapi_msg = '订单' && lv_ebeln && '创建成功' && lv_msg.
ELSE.
<fs_out>-status = icon_red_light.
<fs_out>-bapi_msg = lv_msg.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT gt_out ASSIGNING <fs_out> WHERE ebeln = lw_wa-ebeln .
<fs_out>-bapi_mtype = lv_type.
IF lv_type = 'S'.
<fs_out>-status = icon_green_light.
<fs_out>-bapi_msg = '订单' && lv_ebeln && '修改成功' .
ELSE.
<fs_out>-status = icon_red_light.
<fs_out>-bapi_msg = lv_msg.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR:po_hdr,po_hdrx,lv_ebeln,lv_msg,lv_type,lv_ebelp.
REFRESH:po_item,po_itemx,po_account,po_accountx,lt_return,po_schedule,po_schedulex,po_extensionin,po_account,po_accountx,lt_ztmm017.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_collect_message
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_RETURN
*& <-- O_RETURN
*& <-- LV_TYPE
*&---------------------------------------------------------------------*
FORM frm_collect_message TABLES pt_ret STRUCTURE bapiret2
CHANGING pv_msg TYPE bapi_msg
pv_flag TYPE bapi_mtype.
DATA:lv_string TYPE string.
IF line_exists( pt_ret[ type = 'E' ] ) OR
line_exists( pt_ret[ type = 'A' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT pt_ret INTO DATA(pw_ret) .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = pw_ret-id
msgnr = pw_ret-number
msgv1 = pw_ret-message_v1
msgv2 = pw_ret-message_v2
msgv3 = pw_ret-message_v3
msgv4 = pw_ret-message_v4
IMPORTING
message_text_output = lv_string.
CONCATENATE pv_msg lv_string INTO pv_msg.
ENDLOOP.
pv_flag = 'E'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
pv_flag = 'S'.
ENDIF.
ENDFORM.