SAP ABAP编程 创建采购订单

FUNCTION zmm_jsd_creatpo.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(JSD) TYPE  ZMM_YS_JSD_HEAD-JSD

*"  EXPORTING

*"     VALUE(E_FLAG) TYPE  CHAR1

*"     VALUE(E_INFO) TYPE  TEXT60

*"     VALUE(EBELN) TYPE  EBELN

*"----------------------------------------------------------------------

*      根据结算单生成采购订单  根据税码、物料组 分成多个行项目

*"----------------------------------------------------------------------

DATA : header  LIKE  bapimepoheader,

headerx LIKE  bapimepoheaderx.

DATA:   it_return      TYPE TABLE OF bapiret2          WITH HEADER LINE,

it_poitem      TYPE TABLE OF bapimepoitem      WITH HEADER LINE,

it_poitemx     TYPE TABLE OF bapimepoitemx     WITH HEADER LINE,

it_poschedule  TYPE TABLE OF bapimeposchedule  WITH HEADER LINE,

it_poschedulex TYPE TABLE OF bapimeposchedulx  WITH HEADER LINE,

it_poaccount   TYPE TABLE OF bapimepoaccount   WITH HEADER LINE,

it_poaccountx  TYPE TABLE OF bapimepoaccountx  WITH HEADER LINE,

it_polimits    TYPE TABLE OF bapiesuhc         WITH HEADER LINE,

it_povalues    TYPE TABLE OF bapiesklc         WITH HEADER LINE,

it_poservice   TYPE TABLE OF bapiesllc         WITH HEADER LINE.

DATA ext_line    TYPE n LENGTH 10.

DATA line_no     TYPE n LENGTH 10.

DATA pckg_no     TYPE n LENGTH 10.

DATA po_item     TYPE n LENGTH 5.      "行项目编号

DATA serial_no   TYPE n LENGTH 2.

DATA short_text  TYPE c LENGTH 40.     "项目短文本

DATA head_zterm  TYPE lfm1-zterm.      "付款条件

DATA: gw_jsd_head LIKE zmm_ys_jsd_head,

gw_jsd_item LIKE zmm_ys_jsd_item,

gt_jsd_item LIKE TABLE OF zmm_ys_jsd_item.

"结算单暂存结构

TYPES: BEGIN OF ty_ys_jsd,

beznk   LIKE zmm_ys_jsd_item-beznk,   "税码

matkl   LIKE asmd-matkl,   "物料组

asnum   LIKE zmm_ys_jsd_item-asnum,   "服务编号

jsd     LIKE zmm_ys_jsd_item-jsd,

jsdhh   LIKE zmm_ys_jsd_item-jsdhh,

qd      LIKE zmm_ys_jsd_item-qd,

zd      LIKE zmm_ys_jsd_item-zd,

smatnr  LIKE zmm_ys_jsd_item-smatnr,

kostl   LIKE zmm_ys_jsd_item-kostl,

shdw    LIKE zmm_ys_jsd_item-shdw,

ctype   LIKE zmm_ys_jsd_item-ctype,

menge   LIKE zmm_ys_jsd_item-menge,

meins   LIKE zmm_ys_jsd_item-meins,

hsdj    LIKE zmm_ys_jsd_item-hsdj,

bhsdj   LIKE zmm_ys_jsd_item-bhsdj,

cbckk   LIKE zmm_ys_jsd_item-cbckk,

se      LIKE zmm_ys_jsd_item-se,

bhsj    LIKE zmm_ys_jsd_item-bhsj,

hsj     LIKE zmm_ys_jsd_item-hsj,

beizhu  LIKE zmm_ys_jsd_item-beizhu.

TYPES: END OF ty_ys_jsd.

DATA: gw_jsd_date TYPE ty_ys_jsd,

gt_jsd_date TYPE TABLE OF ty_ys_jsd.

DATA: g_jsdlx TYPE zmm_ys_jsd_head-jsdlx,  "结算单类型

g_lxms  TYPE zmm_ys_jsdlx-lxms.      "类型描述

e_flag = ‘0‘.

e_info = ‘采购订单创建成功!‘.

CLEAR:gw_jsd_head,gt_jsd_item.

"结算单抬头

SELECT * FROM zmm_ys_jsd_head INTO gw_jsd_head WHERE jsd = jsd.

IF sy-subrc NE 0.

e_flag = ‘1‘.

e_info =  ‘该结算单不存在!‘.

ELSE.

IF gw_jsd_head-ebeln IS NOT INITIAL.

e_flag = ‘2‘.

e_info =  ‘该结算单已经创建采购订单!‘.

ENDIF.

ENDIF.

"取得结算单类型描述

g_jsdlx = gw_jsd_head-jsdlx.

SELECT SINGLE lxms FROM zmm_ys_jsdlx INTO g_lxms WHERE jsdlx EQ g_jsdlx.

"结算单行项目

SELECT * FROM zmm_ys_jsd_item INTO TABLE gt_jsd_item WHERE jsd = jsd.

"根据 供应商 与采购组织 找到付款条件

SELECT SINGLE zterm FROM lfm1 INTO head_zterm WHERE lifnr = gw_jsd_head-lifnr AND ekorg = ‘1000‘.

ENDSELECT.

IF e_flag NE ‘0‘.

RETURN.

ENDIF.

CLEAR:gw_jsd_item, gt_jsd_date.

"数据库数据存入自建结构

LOOP AT gt_jsd_item INTO gw_jsd_item.

CLEAR: gw_jsd_date,gw_jsd_date-matkl.

MOVE-CORRESPONDING gw_jsd_item TO gw_jsd_date.

"根据服务编号取得物料组

SELECT SINGLE matkl FROM  asmd INTO gw_jsd_date-matkl WHERE asnum  EQ gw_jsd_date-asnum.

IF sy-subrc <> 0.

gw_jsd_date-matkl = ‘无物料组‘.

ENDIF.

APPEND gw_jsd_date TO gt_jsd_date.

ENDLOOP.

"根据税码、物料组排序。

SORT gt_jsd_date BY  beznk matkl.

***采购订单抬头

header-comp_code    = ‘1000‘.      "公司代码EKKO-BUKRS

header-doc_type     = ‘YS‘.        "YS(运输服务采购订单)

header-creat_date   = sy-datum .   "创建日期

header-vendor       = gw_jsd_head-lifnr.

header-pmnttrms     = head_zterm.   "付款条件  "0001

header-incoterms2   = jsd.          "国际贸易条件 保存结算单号

header-purch_org    = ‘1000‘.      "采购组织EKKO-EKORG

header-pur_group    = ‘900‘.       "采购组EKKO-EKGRP:900(服务采购)

header-currency     = ‘RMB‘.       "货币代码

header-doc_date     = sy-datum.    "采购凭证日期

headerx-comp_code  = ‘X‘.

headerx-doc_type   = ‘X‘.

headerx-creat_date  = ‘X‘.

headerx-vendor     = ‘X‘.

headerx-langu      = ‘X‘.

headerx-pmnttrms   = ‘X‘ .

headerx-incoterms2  = ‘X‘.

headerx-purch_org  = ‘X‘.

headerx-pur_group  = ‘X‘.

headerx-currency   = ‘X‘.

headerx-doc_date   = ‘X‘.

serial_no  = ‘00‘.            "帐户分配规范序号:服务行

ext_line   = ‘0000000000‘.     "行号

line_no    = ‘0000000001‘.     "内部行编号

po_item    = ‘00000‘.          "行项目号

pckg_no    = ‘0000000000‘.

"行项目,数据集中处理

LOOP AT gt_jsd_date INTO gw_jsd_date.

"服务描述

CLEAR:short_text.

CONCATENATE sy-datum+4(2) ‘月_‘ g_lxms INTO short_text.

"采购订单项目

AT NEW matkl.

pckg_no    = pckg_no + 1.

po_item = po_item + 10.

ext_line   = ‘0000000000‘.

line_no    = ‘0000000001‘.

it_poitem-po_item       = po_item.

it_poitem-short_text    = short_text.       "服务描述

it_poitem-plant         = ‘1000‘.           "工厂EKPO-WERKS

it_poitem-matl_group    = gw_jsd_date-matkl."服务主数据中的物料组

it_poitem-tax_code      = gw_jsd_date-beznk."结算单中服务对应税码

it_poitem-unlimited_dlv = ‘X‘.

it_poitem-item_cat      = ‘D‘.

it_poitem-acctasscat    = ‘X‘.

it_poitem-srv_based_iv    = ‘X‘.

pckg_no = pckg_no + 1.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = pckg_no

IMPORTING

output = pckg_no.

it_poitem-pckg_no = pckg_no.

APPEND it_poitem.

it_poitemx-po_item      = po_item.

it_poitemx-po_itemx     = ‘X‘.

it_poitemx-short_text   = ‘X‘.

it_poitemx-plant        = ‘X‘.

it_poitemx-matl_group   = ‘X‘.

it_poitemx-tax_code     = ‘X‘.

it_poitemx-unlimited_dlv = ‘X‘.

it_poitemx-item_cat     = ‘X‘.

it_poitemx-acctasscat   = ‘X‘.

it_poitemx-pckg_no      = ‘X‘.

it_poitemx-srv_based_iv    = ‘X‘.

APPEND it_poitemx.

"FILL SCHEDULE

it_poschedule-po_item       = po_item.

it_poschedule-del_datcat_ext = ‘D‘.

it_poschedule-delivery_date = sy-datum .

it_poschedule-quantity      = ‘1‘.       "计划数量

*      it_poschedule-sched_line    = ‘0001‘ .

APPEND it_poschedule.

it_poschedulex-po_item        = po_item.

it_poschedulex-po_itemx       = ‘X‘.

it_poschedulex-del_datcat_ext = ‘X‘.

it_poschedulex-delivery_date  = ‘X‘.

it_poschedulex-sched_line     = ‘X‘.

it_poschedulex-sched_linex    = ‘X‘.

it_poschedulex-quantity       = ‘X‘.

APPEND it_poschedulex.

"服务包数据,一个行项目只有一条此数据

it_poservice-pckg_no  = pckg_no.

it_poservice-line_no  = line_no.

it_poservice-ext_line = ext_line.

pckg_no = pckg_no + 1.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = pckg_no

IMPORTING

output = pckg_no.

it_poservice-subpckg_no = pckg_no .

APPEND it_poservice.

ENDAT.

"开始处理服务明细

ext_line = ext_line + 10 .

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = ext_line

IMPORTING

output = ext_line.

line_no = line_no  + 1 .

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = line_no

IMPORTING

output = line_no.

it_poservice-pckg_no      = pckg_no.

it_poservice-line_no      = line_no.

it_poservice-ext_line     = ext_line .

it_poservice-subpckg_no   = ‘0000000000‘.

it_poservice-ext_serv     = gw_jsd_date-jsdhh.   "结算单行号

it_poservice-service      = gw_jsd_date-asnum.   "服务编码

it_poservice-matl_group   = gw_jsd_date-matkl.   "物料组

it_poservice-quantity     = gw_jsd_date-menge.   "数量

it_poservice-base_uom     = gw_jsd_date-meins.   "单位

it_poservice-gr_price     = gw_jsd_date-bhsdj.    "不含税单价

it_poservice-tax_code     = gw_jsd_date-beznk.   "税码

it_poservice-short_text   = gw_jsd_date-beizhu.  "备注

APPEND it_poservice.

CLEAR it_poservice.

"*FILL ACCOUNT VALUE

serial_no =  serial_no + 1 .

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

input  = serial_no

IMPORTING

output = serial_no.

it_povalues-pckg_no       = pckg_no .

it_povalues-line_no       = line_no .

it_povalues-serno_line    = serial_no .

it_povalues-serial_no     = serial_no .

APPEND it_povalues .

CLEAR it_povalues .

"科目成本中心信息,一个行项目只有一条此数据

it_poaccount-po_item    = po_item.

it_poaccount-serial_no  = serial_no.

*    it_poaccount-gl_account = ‘1480000010‘ .

it_poaccount-costcenter = gw_jsd_date-kostl.  "成本中心  ‘1000510000‘."

it_poaccount-co_area    = ‘1000‘.

APPEND it_poaccount .

it_poaccountx-po_item    = po_item.

it_poaccountx-gl_account = ‘X‘ .

it_poaccountx-costcenter = ‘X‘.

it_poaccountx-co_area    = ‘X‘.

APPEND it_poaccountx .

ENDLOOP.

"创建 BAPI

CALL FUNCTION ‘BAPI_PO_CREATE1‘

EXPORTING

poheader          = header

poheaderx         = headerx

IMPORTING

exppurchaseorder  = ebeln

TABLES

return            = it_return[]

poitem            = it_poitem[]

poitemx           = it_poitemx[]

poschedule        = it_poschedule[]

poschedulex       = it_poschedulex[]

poaccount         = it_poaccount[]

poaccountx        = it_poaccountx[]

polimits          = it_polimits[]

poservices        = it_poservice[]

posrvaccessvalues = it_povalues[].

DATA: str TYPE c LENGTH 60.

LOOP AT it_return WHERE type = ‘E‘ .

e_flag = ‘2‘.

*    str = e_info.

CLEAR e_info.

CONCATENATE str it_return-message INTO e_info.

ENDLOOP.

IF e_flag = ‘0‘.

e_info = ‘采购订单创建成功!‘.

CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT‘ .

ENDIF.

ENDFUNCTION.

时间: 2024-10-28 14:29:49

SAP ABAP编程 创建采购订单的相关文章

SAP收货时自动创建采购订单(或106 ,自动建立退货采购订单)

在实际业务中,常常出现到货物料没有订单或订单未批准的现象,按照SAP的标准流程,应该拒绝收货.但在实际业务中,这些物料可能是紧急采购的急件,如不及时处理,将会影响生产计划的安排.对于这种特殊情况,其实SAP有很灵活的处理方式,即由收货自动创建订单.需要说明的是,这种操作方式并不是SAP推荐的,不应在实际业务中大量采用. 具体流程如下: 1.移动类型101已在后台设置为自动创建定单.具体方法是:进入IMG后台,物料管理->库存管理和实际库存->收货->自动创建采购订单,双击进入后,将101

3.11 手工创建采购订单价格控制

3.11.1   业务方案描述 对Oracle标准<采购订单>界面进行手工下达时进行价格控制. 对于手工创建采购的订单,不希望通过输入采购价格,而是需要从一揽子采购协议中直接获取价格.如果没有协议价格,需要取该物料的标准成本. 3.11.2   业务方案逻辑控制 1. 单价取值逻辑: 1) 按照订单上的供应商.供应商地点.物料编码自动查找一揽子采购协议,用创建日期与一揽子采购协议上的日期分段匹配价格. 2) 如果找不到,则取一揽子协议行上的价格. 3)如果取不到,取该物料编码标准成本. 4)如

3.12 批量创建采购订单

3.12.1   业务方案描述 在生成采购订单前,由采购员审核计划结果,根据供应商的供货状况调整供应商供货数量.供货日期. 所有合格供应商都能够通过下单平台批量下达采购订单,尽管供应商没有供货比例,或供货比例为0. 一个集成的界面,清晰的列出MRP/DRP结果,及相关辅助信息.以帮助仓管员调整计划时获得一些决策信息: 1)审核计划结果: 2)指定供应商: 3)调整计划结果: 4)批量生成采购订单: 3.12.2   业务方案逻辑控制(包含三部分) MRP建议补充程序: 1)将ASL中的该物料可供

SAP ABAP编程 弹出按选择对话框函数-&#39;POPUP_TO_CONFIRM&#39;

SAP  中很多时候是需要弹出式对话框的,提醒客户是否要进行某一个操作,我们可以调用CALL FUNCTION 'POPUP_TO_CONFIRM' 下面简单介绍常用的参数. DATA: G_RETURN TYPE C . CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING *                                TITLEBAR                    = '弹出标题' *                        

SAP ABAP编程 采购订单过账

FUNCTION zmm_jsd_post. *"---------------------------------------------------------------------- *"*"Local interface: *"  IMPORTING *"     VALUE(EBELN) TYPE  EKPO-EBELN *"     VALUE(EBELP) TYPE  EKPO-EBELP *"     VALUE(PO

SAP ABAP编程 采购订单过账冲销

DATA: lt_return   TYPE TABLE OF bapiret2 WITH HEADER LINE. DATA: l_err_flag  TYPE c VALUE ''.  "确认操作符 DATA: g_lblni     TYPE lblni.    " 服务输入单条目表号 DATA: g_posting_dat TYPE sy-datum.  "记账日期 DATA: l_string    TYPE string. " 获取采购订单抬头 CLEA

100小时练习配置---创建采购订单后做MIGO时报错

新建了物料,也用该物料创建的PO,但在用PO做MIGO收货的时候报下面的错误: 通过去找该工厂下的科目确定配置发现也不是配置问题.后面看物料主数据的时候才发现是物料会计1页签的评估类没有进行维护,如图: 然后就想通过MM02直接更改,但会报个错误,如下: 这是因为该物料已经做了相应的采购单,如果没有库存或者没有建其他单据的时候可以直接更改,但建了采购单之后要把对应的采购单删除之后才能更改, 下面是各种情况更改对应物料的评估类的解决办法: 若已存在已估价库存,则仅可以如下更改评估分类: a) 将物

SAP ABAP编程SET PARAMETER ID问题 调用屏幕

调用如下语句,查看采购订单信息: SET PARAMETER ID 'BES' FIELD g_ebeln. CALL TRANSACTION 'ME23N'  AND SKIP FIRST SCREEN. 查看采购凭证为g_ebeln的详细信息. ID 'BES' 为屏幕的上输入框的ID,ME23N 为事务代码. 同理其他调用屏幕一样

SAP ABAP编程 维护视图(表格维护生成器)创建事务代码

对于维护视图,除了可以SE54 进入外,还可以创建事物代码,进入指定的表/视图的 维护视图(当然,此视图(表格维护生成器)必须首先存在撒!) 如下: 1.SE93 2.进入后选择如下 3.详细参数如下 4.保存,就完成啦!