之前封装过一个更新订单的函数,正好按照这个函数做批导:CRM函数CRM_ORDER_MAINTAIN封装 - ^ω^SAP傻X^o^ - 博客园
设想的就是excel导入的第一行是函数对应结构的字段名,然后根据字段名把后面各行数据用指针对到对应的结构字段中。(item没写,因为麻烦)
随便写写的初版,后面看看能不能用上,如果有其他的需求看看要不要改改。。。
(这是CRM订单的更新,如果ECC有类型需求,可以写个通用的函数来创建订单,然后再对通用的函数(直接原函数也行)做类似操作。。。至于为什么不直接调函数,因为CRM的订单更新巨麻烦。。。)
REPORT zcrm_order_update_fc. "根据ZCRM_ORDER_MAINTAIN_BK的参数名称,对应批导第一行字段匹配到对应的结构中 "第一列固定订单号,方便确定订单的相关信息,其他信息位置不限 "因为需要解析第一行内容,需要批导的时候就明确总列数,方便按数量去对应 "没用行项目信息,如果需要可以先将抬头和项目数据都存内表,然后按抬头内表循环处理 DATA:gt_head TYPE TABLE OF zcrm_maintain_h, gw_head LIKE LINE OF gt_head, gt_headx TYPE TABLE OF zcrm_maintain_hx, gw_headx LIKE LINE OF gt_headx, gt_item TYPE TABLE OF zcrm_maintain_i, lt_item TYPE TABLE OF zcrm_maintain_i, gw_item LIKE LINE OF gt_item, gt_itemx TYPE TABLE OF zcrm_maintain_ix, gw_itemx LIKE LINE OF gt_itemx. PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY. PARAMETERS: p_col TYPE i OBLIGATORY."excel导入的列数量,为后面计算字段名做准备 PARAMETERS: p_line TYPE i OBLIGATORY."excel导入的行数量,为了excel函数更准确 *$*$******************************************************************** *$*$ AT SELECTION-SCREEN * *$*$******************************************************************** AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. CALL FUNCTION 'WS_FILENAME_GET' "GET FILE NAME EXPORTING * DEF_FILENAME = ' ' * DEF_PATH = ' ' mask = ',*.* ,*.*.' mode = '0' title = text-h10 IMPORTING filename = p_file * RC = EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc <> 0. * MESSAGE E016 WITH P_PATH. ENDIF. ************************************************************************ * START-OF-SELECTION * ************************************************************************ START-OF-SELECTION. PERFORM frm_upload_data. PERFORM frm_process_data. *&---------------------------------------------------------------------* *& Form FRM_UPLOAD_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_upload_data . DATA:lt_tab TYPE TABLE OF zalsmex_tabline, ls_tab TYPE zalsmex_tabline, wt_tab TYPE TABLE OF zalsmex_tabline, ws_tab TYPE zalsmex_tabline, v_msg TYPE string, v_typ TYPE string. DATA:p_start TYPE i. FIELD-SYMBOLS:<fs> TYPE any, <fsx> TYPE any. CALL FUNCTION 'ZEXCEL_UPLOAD' EXPORTING filename = p_file i_begin_col = '1' i_begin_row = '1' i_end_col = p_col i_end_row = p_line TABLES intern = lt_tab EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. "固定列名内表 LOOP AT lt_tab INTO ls_tab FROM 1 TO p_col. APPEND ls_tab TO wt_tab. ENDLOOP. p_start = p_col + 1. LOOP AT lt_tab INTO ls_tab FROM p_start."循环excel表格 AT NEW row."新行开始,清空函数参数 CLEAR:gw_head,gw_headx. ENDAT. READ TABLE wt_tab INTO ws_tab WITH KEY col = ls_tab-col."读取字段名称对应的列 IF sy-subrc = 0. ASSIGN COMPONENT ws_tab-value OF STRUCTURE gw_head TO <fs>."将对应字段指定到结构 IF sy-subrc = 0 AND ls_tab-value IS NOT INITIAL. <fs> = ls_tab-value."将excel值给对应结构字段 ENDIF. ASSIGN COMPONENT ws_tab-value OF STRUCTURE gw_headx TO <fsx>."将对应字段指定到结构 IF sy-subrc = 0 AND ls_tab-value IS NOT INITIAL. <fsx> = 'X'."将字段更新标记X ENDIF. ENDIF. AT END OF row."行结束,调用函数更新 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = gw_head-object_id IMPORTING output = gw_head-object_id. SELECT SINGLE guid sales_org process_type INTO (gw_head-guid,gw_head-sales_org,gw_head-order_type) FROM zhsb_order_index WHERE object_id = gw_head-object_id. CALL FUNCTION 'ZCRM_ORDER_MAINTAIN_BK' EXPORTING head = gw_head headx = gw_headx IMPORTING error_type = v_typ error_log = v_msg * OBJECT_O = * TABLES * ITEM = * ITEMX = * PARTNER = * PARTNERX = * PRICE = * PRICEX = * TEXT = . ENDAT. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_PROCESS_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_process_data . ENDFORM.
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
浙公网安备 33010602011771号