计划订单批导

该博客介绍了一个SAP程序,用于批量导入计划订单。通过用户选择的Excel文件,程序首先读取文件,然后对数据进行处理,如字段转大写和格式转换。接着,使用BAPI_PLANNEDORDER_CREATE创建计划订单,处理过程中记录并显示可能出现的错误。最后,如果所有步骤都成功,将提交工作并显示成功消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TYPE-POOLS truxs.
DATA: xlstab TYPE truxs_t_text_data,
      f_size TYPE i .
PARAMETERS: filename LIKE rlgrap-filename .
DATA header TYPE bapiplaf_i1.
DATA error TYPE bapireturn1.
DATA:BEGIN OF itb_input OCCURS 0,
       plannedorder_num LIKE bapiplaf_i1-plannedorder_num,
       pldord_profile LIKE bapiplaf_i1-pldord_profile,
       material LIKE bapiplaf_i1-material,
       total_plord_qty LIKE bapiplaf_i1-total_plord_qty,
       plan_plant LIKE bapiplaf_i1-plan_plant,
       prod_plant LIKE bapiplaf_i1-prod_plant,
       order_start_date LIKE bapiplaf_i1-order_start_date,
       version LIKE bapiplaf_i1-version,
END OF itb_input.
DATA:BEGIN OF itb_err OCCURS 0.
        INCLUDE STRUCTURE bapireturn1.
DATA:END OF itb_err.
DATA flag TYPE i.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
  PERFORM get_pc_filename.


START-OF-SELECTION.
  PERFORM upload_file TABLES itb_input.
  LOOP AT itb_input.
    CALL FUNCTION 'AIPC_CONVERT_TO_UPPERCASE'
      EXPORTING
        i_input        = itb_input-plannedorder_num
*     I_LANGU        = SY-LANGU
     IMPORTING
       e_output       = itb_input-plannedorder_num
              .
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = itb_input-material
      IMPORTING
        output = itb_input-material.
    MOVE-CORRESPONDING itb_input TO header.
    header-firming_ind = 'X'.
    CALL FUNCTION 'BAPI_PLANNEDORDER_CREATE'
    EXPORTING
      headerdata                  = header
   IMPORTING
     return                      = error
*   PLANNEDORDER                =
*   CREATEDHEADERDATA           =
*   CAPACITYHEADERDATA1         =
*   CAPACITYHEADERDATA2         =
*   CAPACITYHEADERDATA3         =
* TABLES
*   COMPONENTSDATA              =
*   CREATEDCOMPONENTSDATA       =
*   CAPACITYDATA1               =
*   CAPACITYDATA2               =
*   CAPACITYDATA3               =
            .
    MOVE-CORRESPONDING error TO itb_err.
    APPEND itb_err.
  ENDLOOP.
  flag = 0.
  LOOP AT itb_err.
    IF itb_err-number NE '010'.
      flag = 1.
    ENDIF.
  ENDLOOP.
  LOOP AT itb_err.
    WRITE: / itb_err-message.
  ENDLOOP.

END-OF-SELECTION.
  IF flag = 0.
    SET PF-STATUS 'COMMAND'.
  ENDIF.

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN '&RUN'.
      IF flag = 0.
        COMMIT WORK.
        MESSAGE  '计划批导成功!' TYPE 'I'.
        SET PF-STATUS 'DEFAULT' IMMEDIATELY .


      ELSE.
        MESSAGE  '批导失败!请核查错误!' TYPE 'E'.


      ENDIF.
    WHEN '&CAN'.
      EXIT.
  ENDCASE.

*&---------------------------------------------------------------------*
*&      Form  upload_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FTAB       text
*----------------------------------------------------------------------*
FORM upload_file TABLES ftab.


  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 0
      text       = '转换Ing。。'.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_tab_raw_data       = xlstab
      i_filename           = filename
    TABLES
      i_tab_converted_data = ftab
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE '转换Excel表有错误发生!' TYPE 'E' .
  ENDIF.
ENDFORM.                    " UPLOAD_FILE
*&--------------------------------------------------------------------*
*&      Form  get_pc_filename
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM get_pc_filename.
  CALL FUNCTION 'WS_FILENAME_GET'
      EXPORTING
*         def_filename     = PAY_FILE
*         DEF_PATH         = ' '
*          mask             = ',*.XLS ,*.XLS.'
          mode             = '0'
          title            = 'Get the import file name'
     IMPORTING
          filename         = filename
*         RC               =
     EXCEPTIONS
          inv_winsys       = 1
          no_batch         = 2
          selection_cancel = 3
          selection_error  = 4
          OTHERS           = 5.
  IF sy-subrc <> 0.
*    MESSAGE 'ERROR' TYPE 'E' .
  ENDIF.
ENDFORM.                    " GET_PC_FILENAME 

### ABAP 中未清采购计划入的方法 在处理ABAP环境中未清采购计划入时,可以采用类似于销售订单和交货单处理的方式。具体来说,可以通过编写自定义ABAP程序来读取外部文件中的数据并将其转换为内部表结构,随后利用标准API接口或BAPI函数完成实际业务操作。 #### 数据准备阶段 首先需要准备好待上传的数据源文件,通常该文件会包含如下字段信息: - 需求数量 (Required Quantity) - 到期日期 (Due Date) 这些信息应当按照既定格式保存在一个CSV或者Excel文档里以便后续加载至SAP系统内。 #### 编写ABAP代码实现功能逻辑 下面是一个简单的ABAP代码框架用于展示如何实施这一过程: ```abap REPORT zbatch_import_purchasing. TABLES: ekko, eban. DATA: lt_file_data TYPE TABLE OF string, ls_wa TYPE string, lv_line TYPE string, it_ekpo LIKE STANDARD TABLE OF ekpo OCCURS 0 WITH HEADER LINE. START-OF-SELECTION. " Load data from file into internal table CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = '/path/to/your/file.csv' " Specify your path here IMPORTING filelength = DATA(lv_length) CHANGING data_tab = lt_file_data[] EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE 'Error loading file.' TYPE 'E'. ENDIF. LOOP AT lt_file_data INTO ls_wa. SPLIT ls_wa AT ',' INTO CORRESPONDING FIELDS OF wa_ekpo. APPEND wa_ekpo TO it_ekpo. ENDLOOP. " Call BAPI to create purchase requisitions LOOP AT it_ekpo INTO wa_ekpo. CLEAR: ekko, eban. ekko~ebeln = ... " Set unique identifier as needed eban~matnr = wa_ekpo-matnr. eban~werks = ... eban~menge = wa_ekpo-menge. eban~eindt = wa_ekpo-eindt. PERFORM call_bapi_create_purchase_requisition USING ekko eban. ENDLOOP. FORM call_bapi_create_purchase_requisition USING p_ekko p_eban. DATA: lr_return TYPE REF TO cx_root. TRY. CALL FUNCTION 'BAPI_REQUISITION_CREATEFROMDAT2' EXPORTING purchreq_header_in = p_ekko purchreq_item_in = p_eban IMPORTING return = DATA(lr_return). CHECK lr_return IS NOT INITIAL AND lr_return-type EQ 'E'. WRITE:/ 'Failed creating PR:', lr_return-message. CATCH cx_root INTO lr_return. WRITE:/ 'Unexpected error occurred during creation of Purchase Requisition.' ENDTRY. ENDFORM. ``` 此段代码展示了基本流程:先是从指定位置读入CSV格式的数据记录;接着解析每一行内容填充到相应的事务对象中;最后调用`BAPI_REQUISITION_CREATEFROMDAT2`这个官方提供的应用程序编程接口去真正意义上提交新的采购申请[^2]。 值得注意的是,在真实项目实践中还需要考虑更多细节问题比如错误处理机制的设计、性能优化措施以及与其他模块间可能存在的交互影响等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值