• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
^ω^SAp傻X^o^
博客园    首页    新随笔    联系   管理    订阅  订阅
最近顾问问了两次有没有批量更新XXX的程序,突然来了灵感

之前封装过一个更新订单的函数,正好按照这个函数做批导: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里,以后还怎么百度呢^_^
posted on 2025-09-09 14:39  ^ω^SAP傻X^o^  阅读(15)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3