REPORT  z_create_po.

DATA:BEGIN OF gt_data OCCURS 0,
          bsart TYPE string,"采购凭证类型
          lifnr  TYPE string,"供应商帐户号
          ekorg TYPE string,"采购组织
          ekgrp TYPE string,"采购组
          bukrs TYPE string,"公司代码
          ihrez  TYPE string,"您的参考
          ebelp  TYPE string,"采购凭证的项目编号
          knttp TYPE string,"科目分配类别
          matnr TYPE string,"商品代码
*          txz01 TYPE string,"短文本
          menge TYPE string,"采购订单数量
          meins TYPE string,"采购订单的计量单位
          eeind TYPE string,"交货日期W
          netpr TYPE string,"净价
          waers TYPE string,"货币 W
          matkl TYPE string,"物料组
          werks TYPE string,"工厂
          bednr TYPE string,"需求跟踪号
          afnam TYPE string,"需求者/请求者姓名
          mwskz TYPE string,"销售税代码
          sakto TYPE string,"总帐科目
          kostl TYPE string,"成本中心
          anln1 TYPE string,"资产
          aufnr TYPE string,"订单
          str1   TYPE string,"行项目文本-来自采购申请项目详细清单
          str2   TYPE string,"行项目文本-规格型号
          str3   TYPE string,"行项目文本-RFQ Reference
          bstae TYPE string,"确认控制
        END OF gt_data.

DATA: BEGIN OF gt_out OCCURS 0,
            text(255),
          END OF gt_out.

DATA:  poheader  LIKE TABLE OF bapimepoheader  WITH HEADER LINE ,
           poheaderx LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,
           return       LIKE TABLE OF bapiret2  WITH HEADER LINE,
           poitem    LIKE TABLE OF bapimepoitem WITH HEADER LINE,
           poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE,
           poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE,
           poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
           poaccount LIKE TABLE OF bapimepoaccount WITH HEADER LINE,
           poaccountx LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
           pocond LIKE TABLE OF bapimepocond WITH HEADER LINE,
           pocondx LIKE TABLE OF bapimepocondx WITH HEADER LINE,

potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE.

DATA: epo LIKE bapimepoheader-po_number.

DATA: l_return LIKE return.
DATA: lv_message(255).

CONSTANTS: con VALUE 'X'.

DATA: pp_file TYPE string.

DATA: lifnr TYPE elifn.
DATA: netpr TYPE bprei.
DATA: bstae TYPE bstae.
DATA: matnr TYPE matnr.
DATA: waers TYPE waers.

PARAMETERS:p_file(128) .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM get_file.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM create_po.
  PERFORM write_out.

*&---------------------------------------------------------------------*

FORM get_file .
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = p_file
      mask             = ',*.txt,*.TXT.'
      mode             = 'O'
      title            = 'File Name'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  pp_file = p_file.
ENDFORM.                    " GET_FILE
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*

FORM get_data .
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                      = pp_file
     filetype                      = 'ASC'
     has_field_separator           = 'X'
*   HEADER_LENGTH                 = 0
     read_by_line                  = 'X'
*   DAT_MODE                      = ' '
*   CODEPAGE                      = ' '
*   IGNORE_CERR                   = ABAP_TRUE
*   REPLACEMENT                   = '#'
*   CHECK_BOM                     = ' '
*   VIRUS_SCAN_PROFILE            =
*   NO_AUTH_CHECK                 = ' '
* IMPORTING
*   FILELENGTH                    =
*   HEADER                        =
    TABLES
      data_tab                      = gt_data
   EXCEPTIONS
     file_open_error               = 1
     file_read_error               = 2
     no_batch                      = 3
     gui_refuse_filetransfer       = 4
     invalid_type                  = 5
     no_authority                  = 6
     unknown_error                 = 7
     bad_data_format               = 8
     header_not_allowed            = 9
     separator_not_allowed         = 10
     header_too_long               = 11
     unknown_dp_error              = 12
     access_denied                 = 13
     dp_out_of_memory              = 14
     disk_full                     = 15
     dp_timeout                    = 16
     OTHERS                        = 17
            .
  IF sy-subrc <> 0.
    CASE sy-subrc.
      WHEN 1.MESSAGE 'FILE_OPEN_ERROR ' TYPE 'E'.
      WHEN 2.MESSAGE 'FILE_READ_ERROR ' TYPE 'E'.
      WHEN 3.MESSAGE 'NO_BATCH' TYPE 'E'.
      WHEN 4.MESSAGE 'GUI_REFUSE_FILETRANSFER  ' TYPE 'E'.
      WHEN 5.MESSAGE 'INVALID_TYPE ' TYPE 'E'.
      WHEN 6.MESSAGE ' NO_AUTHORITY' TYPE 'E'.
      WHEN 7.MESSAGE 'UNKNOWN_ERROR' TYPE 'E'.
      WHEN 8.MESSAGE 'BAD_DATA_FORMAT ' TYPE 'E'.
      WHEN 9.MESSAGE 'HEADER_NOT_ALLOWED' TYPE 'E'.
      WHEN 10.MESSAGE 'SEPARATOR_NOT_ALLOWED' TYPE 'E'.
      WHEN 11.MESSAGE 'HEADER_TOO_LONG ' TYPE 'E'.
      WHEN 12.MESSAGE 'UNKNOWN_DP_ERROR' TYPE 'E'.
      WHEN 13.MESSAGE ' ACCESS_DENIED ' TYPE 'E'.
      WHEN 14.MESSAGE 'DP_OUT_OF_MEMORY ' TYPE 'E'.
      WHEN 15.MESSAGE 'DISK_FULL  ' TYPE 'E'.
      WHEN 16.MESSAGE 'DP_TIMEOUT' TYPE 'E'.
      WHEN 17.MESSAGE ' OTHERS  ' TYPE 'E'.
      WHEN OTHERS.
    ENDCASE.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_PO
*&---------------------------------------------------------------------*

FORM create_po .
  LOOP AT gt_data.
    CLEAR waers.
    waers = gt_data-waers.
    AT NEW  ihrez.
      CLEAR lifnr.
      lifnr = gt_data-lifnr.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = lifnr
        IMPORTING
          output = lifnr.

poheader-doc_type    = gt_data-bsart.
      poheader-vendor       = lifnr.
      poheader-purch_org  = gt_data-ekorg.
      poheader-pur_group  = gt_data-ekgrp.
      poheader-comp_code = gt_data-bukrs.
      poheader-ref_1          = gt_data-ihrez.
      poheader-doc_date   = sy-datum.
      poheader-langu         =  sy-langu.
      poheader-currency = waers."货币

poheaderx-doc_type    = con.
      poheaderx-vendor       = con.
      poheaderx-purch_org  = con.
      poheaderx-pur_group  = con.
      poheaderx-comp_code = con.
      poheaderx-ref_1          = con.
      poheaderx-doc_date   = con.
      poheaderx-langu         =  con.
      poheaderx-currency = con."货币

ENDAT.

CLEAR netpr.
    netpr = gt_data-netpr.

CLEAR bstae.
    bstae = gt_data-bstae.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = bstae
      IMPORTING
        output = bstae.

CLEAR matnr.
    matnr = gt_data-matnr.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = matnr
      IMPORTING
        output = matnr.

poitem-po_item =  gt_data-ebelp. "采购凭证的项目编号
    poitem-acctasscat = gt_data-knttp."科目分配类别
    poitem-material = matnr."商品代码
*    poitem-short_text = gt_data-txz01."短文本
    poitem-quantity = gt_data-menge."采购订单数量
    poitem-po_unit = gt_data-meins ."采购订单的计量单位
    poitem-net_price = netpr."净价
    poitem-matl_group = gt_data-matkl."物料组
    poitem-plant = gt_data-werks. "工厂
    poitem-trackingno =  gt_data-bednr."需求跟踪号
    poitem-preq_name = gt_data-afnam."需求者/请求者姓名
    poitem-tax_code = gt_data-mwskz."销售税代码
    poitem-conf_ctrl = bstae."确认控制代码
    APPEND poitem.
    CLEAR poitem.

poitemx-po_item =  gt_data-ebelp. "采购凭证的项目编号
    poitemx-acctasscat = con ."科目分配类别
    poitemx-material = con."商品代码
*    poitemx-short_text = con."短文本
    poitemx-quantity = con."采购订单数量
    poitemx-po_unit = con ."采购订单的计量单位
    poitemx-net_price = con."净价
    poitemx-matl_group = con."物料组
    poitemx-plant = con."工厂
    poitemx-trackingno = con."需求跟踪号
    poitemx-preq_name = con."需求者/请求者姓名
    poitemx-tax_code = con."销售税代码
    poitemx-conf_ctrl = con."确认控制代码
    poitemx-ret_item = con."退货项目
    APPEND poitemx.
    CLEAR poitemx.

poschedule-po_item =   gt_data-ebelp. "采购凭证的项目编号
    poschedule-sched_line =  gt_data-ebelp. "采购凭证的项目编号
    poschedule-del_datcat_ext = 'D'."交货日期的类别
    poschedule-delivery_date = gt_data-eeind."交货日期
    poschedule-quantity  = gt_data-menge."采购订单数量
    APPEND poschedule.
    CLEAR poschedule.

poschedulex-po_item =  gt_data-ebelp. "采购凭证的项目编号
    poschedulex-sched_line =  gt_data-ebelp. "采购凭证的项目编号
    poschedulex-del_datcat_ext = con."交货日期的类别
    poschedulex-delivery_date = con."交货日期
    poschedulex-quantity  = con."采购订单数量
    APPEND poschedulex.
    CLEAR poschedulex.

poaccount-po_item =   gt_data-ebelp. "采购凭证的项目编号
    poaccount-gl_account = gt_data-sakto."总帐科目
    poaccount-costcenter = gt_data-kostl."成本中心
    poaccount-asset_no = gt_data-anln1."主资产号
    poaccount-orderid = gt_data-aufnr."订单号
    poaccount-co_area = 'BELL'."成本控制
    APPEND poaccount.
    CLEAR  poaccount.

poaccountx-po_item =  gt_data-ebelp. "采购凭证的项目编号
    poaccountx-gl_account = con."总帐科目
    poaccountx-costcenter = con."成本中心
    poaccountx-asset_no = con."主资产号
    poaccountx-orderid = con."订单号
    poaccountx-co_area = con."成本控制
    APPEND poaccountx.
    CLEAR  poaccountx.

potextitem-po_item =  gt_data-ebelp. "采购凭证的项目编号
    potextitem-text_id = 'F03'."来自采购申请项目详细清单
    potextitem-text_line = gt_data-str1."行项目文本-来自采购申请项目详细清单
    APPEND  potextitem.
    CLEAR  potextitem.

potextitem-po_item =  gt_data-ebelp. "采购凭证的项目编号
    potextitem-text_id = 'F04'." 规格/型号
    potextitem-text_line = gt_data-str2."行项目文本-规格型号
    APPEND  potextitem.
    CLEAR  potextitem.

potextitem-po_item =  gt_data-ebelp. "采购凭证的项目编号
    potextitem-text_id = 'F09'."  RFQ Reference
    potextitem-text_line = gt_data-str3."行项目文本- RFQ Reference
    APPEND  potextitem.
    CLEAR  potextitem.

AT END OF ihrez.
      CALL FUNCTION 'BAPI_PO_CREATE1'
       EXPORTING
         poheader                     =  poheader
         poheaderx                    =  poheaderx
*      POADDRVENDOR                 =
*      TESTRUN                      =
*      MEMORY_UNCOMPLETE            =
*      MEMORY_COMPLETE              =
*      POEXPIMPHEADER               =
*      POEXPIMPHEADERX              =
*      VERSIONS                     =
*      NO_MESSAGING                 =
*      NO_MESSAGE_REQ               =
*      NO_AUTHORITY                 =
*      NO_PRICE_FROM_PO             =
      IMPORTING
        exppurchaseorder             = epo
*      EXPHEADER                    =
*      EXPPOEXPIMPHEADER            =
      TABLES
        return                       =  return
        poitem                       =  poitem
        poitemx                     =  poitemx
*      POADDRDELIVERY               =
        poschedule                   = poschedule
        poschedulex                 = poschedulex
        poaccount                    =  poaccount
*      POACCOUNTPROFITSEGMENT       =
        poaccountx                   = poaccountx
*      POCONDHEADER                 =
*      POCONDHEADERX                =
*      POCOND                       =
*      POCONDX                      =
*      POLIMITS                     =
*      POCONTRACTLIMITS             =
*      POSERVICES                   =
*      POSRVACCESSVALUES            =
*      POSERVICESTEXT               =
*      EXTENSIONIN                  =
*      EXTENSIONOUT                 =
*      POEXPIMPITEM                 =
*      POEXPIMPITEMX                =
*      POTEXTHEADER                 =
        potextitem                   =  potextitem
*      ALLVERSIONS                  =
*      POPARTNER                    =
*      POCOMPONENTS                 =
*      POCOMPONENTSX                =
*      POSHIPPING                   =
*      POSHIPPINGX                  =
*      POSHIPPINGEXP                =
             .
      LOOP AT return WHERE type = 'E' OR type = 'A'.
      ENDLOOP.
      IF sy-subrc = 0.
        CLEAR: lv_message.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        LOOP AT return INTO l_return WHERE type = 'E' .
          CONCATENATE lv_message l_return-message ';'
            INTO lv_message.
        ENDLOOP.
        CONCATENATE gt_data-ihrez lv_message INTO gt_out-text.
        APPEND gt_out.
        CLEAR gt_out.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        CONCATENATE epo '创建成功' INTO gt_out-text.
        APPEND gt_out.
        CLEAR gt_out.
      ENDIF.
      REFRESH: poitem,poitemx,poschedule,poschedulex,
                     poaccount,poaccountx,potextitem ,
                     poheader,poheaderx,return.
      CLEAR:   poitem,poitemx,poschedule,poschedulex,
                     poaccount,poaccountx,potextitem ,
                      poheader,poheaderx,return.

ENDAT.
  ENDLOOP.

ENDFORM.                    " CREATE_PO
*&---------------------------------------------------------------------*
*&      Form  WRITE_OUT
*&---------------------------------------------------------------------*
FORM write_out .
  LOOP AT gt_out.
    WRITE: / gt_out-text.
  ENDLOOP.
ENDFORM.                    "write_out

*本文转载于美女ABAP Elaine的博客,导入数据列中用tab分隔,因无法链接附件,只能以如下方式给出测试数据:(字段列请参照以上程序中内表 gt_data)
ZNB 200009 H001 H11 ZH08  1  100009 10 EA 20100815  RMB R0101 D005   J1 
ZNB 200009 H001 H11 ZH08  2  100008 20 EA 20100815  RMB R0102 D005   J1
ZNB 200009 H001 H11 ZH08  3  100009 20 EA 20100915  RMB R0101 D006   J1

根据BAPI_PO_CREATE1创建采购订单相关推荐

  1. SAP BAPI BAPI_PO_CREATE1创建采购订单

    使用BAPI: BAPI_PO_CREATE1创建采购订单,默认情况下行项目是自动编号的. 代码示例: DATA:lt_poheader LIKE TABLE OF bapimepoheader WI ...

  2. SAP RETAIL 基于分配表创建采购订单的时候按工厂拆分?

    SAP RETAIL 基于分配表创建采购订单的时候按工厂拆分? 1, 使用事务代码WA01创建好了一个分配表13. 这个ITEM里的Z_NM_SITEGRP包含了三个门店(NM01/NM02/NM03 ...

  3. 029# Adempiere采购模组-从采购申请创建采购订单

    2019独角兽企业重金招聘Python工程师标准>>> 在Adempiere系统的采购模组中,采购申请可因仓库库存补充而手动建立,也可由系统生产流程中的物料需求计划,在计算生产计划所 ...

  4. SAP收货时自动创建采购订单

        在实际业务中,常常出现到货物料没有订单或订单未批准的现象,按照SAP的标准流程,应该拒绝收货.但在实际业务中,这些物料可能是紧急采购的急件,如不及时处理,将会影响生产计划的安排.对于这种特殊情 ...

  5. SAP License:MM根据收货自动创建采购订单

    在实际业务中,常常出现到货物料没有订单或订单未批准的现象,按照SAP的标准流程,应该拒绝收货.但在实际业务中,这些物料可能是紧急采购的急件,如不及时处理,将会影响生产计划的安排.对于这种特殊情况,其实 ...

  6. SAP 必须参照采购申请创建采购订单的配置方法

    有很多企业要求,采购订单必须参照采购申请来创建,这个配置的方法其实非常简单, 首先要创建一个采购员的功能权限. 后台路径:SPRO->IMG->物料管理->采购->权限管理-& ...

  7. SAP MM——采购业务模块流程 创建采购订单基础流程

    在创建一个采购流程之前,我们首先需要创建物料主数据和供应商主数据,再由两者构成信息记录,这样在创建采购申请或者采购订单时,可以直接关联信息记录获取相关数据,例如自动带出条件记录.税率等信息.不同公司间 ...

  8. 采购申请创建采购订单的时候报错“对于总帐帐户*在公司码*中无直接记帐能被做”处理方法

    问题: 在进行采购申请创建采购订单的时候报错提示如图 查询原因及解决方法: 是因为所使用的会计科目被勾选了自动过账,把自动过账勾选取消掉即可. FS00更改总账科目

  9. oracle 批量下单,3.12批量创建采购订单

    3.12.1   业务方案描述 在生成采购订单前,由采购员审核计划结果,根据供应商的供货状况调整供应商供货数量.供货日期. 所有合格供应商都能够通过下单平台批量下达采购订单,尽管供应商没有供货比例,或 ...

最新文章

  1. python基础知识~ 函数详解2
  2. 如何比较对比两张图片差异(判断是不是同一张)== all
  3. python环境配置与pytorch下载
  4. [JavaWeb-MySQL]数据库的备份和还原
  5. 我目前的主要研究方向
  6. django实现上传文件并保存
  7. Java中判断字符串是否为数字
  8. 无人驾驶是好,但晕车咋办?
  9. 【车道线检测与寻迹】2月13日 CV导论+数字图像处理与opencv实践+canny边缘检测
  10. ShipConstructor 2006 v1.00 1CD(加拿大船舶建造软件)
  11. 如何找一个程序员做男朋友?
  12. vlfeat python
  13. 电动自行车的2020:红利、分化、意外、质疑
  14. Unity Shader Graph 制作 Fade 淡入淡出效果
  15. AWS - Auto Scaling 介绍
  16. sql prompt 不能用
  17. MySQL数据库表结构的设计
  18. 一劳永逸去除Word文档修订和批注帮助(转)
  19. OpenSSL s_client
  20. Layuimini一个适合懒人的开源代码-相关使用

热门文章

  1. WPF获取当前用户控件的父级窗体
  2. MD5和SHA加密实现
  3. 关于Unity中水和雾的使用
  4. Swift3字符串转换为其他数据类型
  5. SQLite3的数据类型转载()
  6. 金泰联限量稳定虚拟主机赞助计划
  7. 自定义AlertDialog 问自己的单选item
  8. 用自定义的RoundImageView来实现圆形图片(可加边框)
  9. .net程序员转战android第一篇---环境部署
  10. 离别 也许就是一辈子了