创建PR:
BAPI_REQUISITION_CREATE

BAPI_PR_CREATE                 "Create Enjoy Purchase Requisistion(这是新函数)

BAPI_PR_CHANGE
BAPI_PR_CREATE
BAPI_PR_GETDETAIL

相关函数:

函数组 函数组短文本
功能模块名称 函数模块短文本

MEWF 批准的BAPI
BAPI_REQUISITION_RELEASE 批准采购请求
BAPI_REQUISITION_RELEASE_GEN
BAPI_REQUISITION_RESET_RELEASE 取消请购的下达
BAPI_REQUISITION_RESET_REL_GEN

MEWQ
BAPI_REQUISITION_CHANGE
BAPI_REQUISITION_CREATE
BAPI_REQUISITION_DELETE
BAPI_REQUISITION_GETDETAIL
BAPI_REQUISITION_GETITEMS
BAPI_REQUISITION_GETITEMSREL
BAPI_REQUISITION_GETRELINFO

FUNCTION ZRFC_OA_CREATE_PR.
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(EX_RESULT) TYPE CHAR1
*" VALUE(EX_BANFN) TYPE BANFN
*" TABLES
*" DATA_TAB STRUCTURE ZOA_PR01
*" RETURN STRUCTURE BAPIRET2
*" PR_NEW STRUCTURE ZOA_PR02
*"----------------------------------------------------------------------

DATA: GT_DATA TYPE TABLE OF ZOA_PR01 WITH HEADER LINE .

DATA: PR_ITEM LIKE TABLE OF BAPIEBANC WITH HEADER LINE,
PR_ACCOUNT LIKE TABLE OF BAPIEBKN WITH HEADER LINE,
PR_ITEM_ID LIKE TABLE OF BAPIEBANTX WITH HEADER LINE,
PR_RETURN LIKE TABLE OF BAPIRETURN WITH HEADER LINE,
PR_REL LIKE TABLE OF BAPIMMPARA WITH HEADER LINE.
DATA: L_RETURN LIKE PR_RETURN.
DATA: LV_MESSAGE(255).
DATA: PR_NO TYPE BAPIEBANC-PREQ_NO.
DATA: BNFPO TYPE BNFPO.
DATA: PP_FILE TYPE STRING.

RETURN-MESSAGE = '开始调用接口。创建采购申请'.
RETURN-TYPE = 'I'.
APPEND RETURN.

IF DATA_TAB[] IS INITIAL.
RETURN-MESSAGE = '没有可以处理数据'.
RETURN-TYPE = 'E'.
APPEND RETURN.
ENDIF.

LOOP AT DATA_TAB.

MOVE-CORRESPONDING DATA_TAB TO GT_DATA.

DATA: LINE(10) TYPE C.
DATA: LV_DATE TYPE SY-DATUM.

WRITE SY-TABIX TO LINE.

IF DATA_TAB-MATNR IS INITIAL .
CONCATENATE '行 ' LINE ' 请输入物料编号' INTO RETURN-MESSAGE .
APPEND RETURN.
ELSE.
GT_DATA-MATNR = DATA_TAB-MATNR."物料编号
ENDIF.

IF DATA_TAB-MENGE IS INITIAL.
CONCATENATE '行 ' LINE ' 请输入数量' INTO RETURN-MESSAGE .
APPEND RETURN.
ELSE.
GT_DATA-MENGE = DATA_TAB-MENGE."数量
ENDIF.

IF DATA_TAB-MEINS IS INITIAL.
CONCATENATE '行 ' LINE ' 请输入单位' INTO RETURN-MESSAGE .
APPEND RETURN.
ELSE.
GT_DATA-MEINS = DATA_TAB-MEINS."单位
ENDIF.

* GT_DATA-MEINS = 'PCS'. "强制使用PCS

IF DATA_TAB-EEIND IS INITIAL.
CONCATENATE '行 ' LINE ' 请输入交货时间' INTO RETURN-MESSAGE .
APPEND RETURN.
ELSE.
* CONCATENATE DATA_TAB-EEIND+0(4) DATA_TAB-EEIND+5(2) DATA_TAB-EEIND+8(2) INTO LV_DATE.
** gt_data-eeind = data_tab-value_0005."交货时间
* CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
* EXPORTING
* DATE = LV_DATE
* EXCEPTIONS
* PLAUSIBILITY_CHECK_FAILED = 1
* OTHERS = 2.
* IF SY-SUBRC <> 0.
** WRITE : / '请按格式YYYY-MM-DD 输入正确的日期'.
* CONCATENATE '行 ' LINE ' 请按格式YYYY-MM-DD 输入正确的日期' INTO RETURN-MESSAGE .
* APPEND RETURN.
* ELSEIF SY-SUBRC = 0 .
* GT_DATA-EEIND = LV_DATE.
GT_DATA-EEIND = DATA_TAB-EEIND.
* ENDIF.

ENDIF.
GT_DATA-BSART = DATA_TAB-BSART."'NB'. "凭证类型
GT_DATA-WERKS = DATA_TAB-WERKS ."'1000'. "工厂
COLLECT GT_DATA.
CLEAR GT_DATA.
ENDLOOP.

LOOP AT GT_DATA.
BNFPO = GT_DATA-BNFPO.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = BNFPO
IMPORTING
OUTPUT = BNFPO.

PR_ITEM-PREQ_ITEM = BNFPO. "项目

PR_ITEM-MATERIAL = GT_DATA-MATNR.
PR_ITEM-DOC_TYPE = GT_DATA-BSART. "凭证类型

PR_ITEM-ACCTASSCAT = GT_DATA-KNTTP."科目分配类别
PR_ITEM-SHORT_TEXT = GT_DATA-TXZ01."短文本
PR_ITEM-QUANTITY = GT_DATA-MENGE. "数量
PR_ITEM-UNIT = GT_DATA-MEINS."单位
PR_ITEM-DELIV_DATE = GT_DATA-EEIND. "交货日期
PR_ITEM-MAT_GRP = GT_DATA-MATKL. "物料组
PR_ITEM-PLANT = GT_DATA-WERKS."工厂
PR_ITEM-PUR_GROUP = GT_DATA-EKGRP."采购组
PR_ITEM-PREQ_NAME = GT_DATA-AFNAM."申请者
PR_ITEM-TRACKINGNO = GT_DATA-BEDNR."需求跟踪号
PR_ITEM-C_AMT_BAPI = GT_DATA-PREIS."评估价格
PR_ITEM-CURRENCY = GT_DATA-WAERS."货币码
PR_ITEM-PRICE_UNIT = GT_DATA-PEINH."价格单位
PR_ITEM-MRP_CONTR = GT_DATA-DISPO."MRP控制者
PR_ITEM-TRACKINGNO = GT_DATA-BEDNR."跟踪号
PR_ITEM-STORE_LOC = GT_DATA-LGORT."库存
PR_ITEM-VEND_MAT = GT_DATA-IDNLF." OA : ID

PR_ITEM-GR_IND = 'X'."GR
PR_ITEM-IR_IND = 'X'."IR

APPEND PR_ITEM.
CLEAR PR_ITEM.

pr_account-preq_item = bnfpo. "项目
pr_account-g_l_acct = gt_data-sakto. "总帐科目
pr_account-cost_ctr = gt_data-kostl. "成本中心
* pr_account-asset_no = gt_data-anln1. "资产
* pr_account-order_no = gt_data-aufnr. "订单
* pr_account-co_area = 'BELL'.
APPEND pr_account.
CLEAR pr_account.

PR_REL-PO_REL_IND = 'X'.
PR_REL-REL_IND ='X'.
APPEND PR_REL.
*
* pr_item_id-preq_item = bnfpo."项目
* pr_item_id-text_id = 'B03'.
* pr_item_id-text_line = gt_data-str1."行项目文本-传送文本
* APPEND pr_item_id.
* CLEAR pr_item_id.
*
* pr_item_id-preq_item = bnfpo."项目
* pr_item_id-text_id = 'B07'.
* pr_item_id-text_line = gt_data-str2."行项目文本-预算年度
* APPEND pr_item_id.
* CLEAR pr_item_id.
*
* pr_item_id-preq_item = bnfpo."项目
* pr_item_id-text_id = 'B08'.
* pr_item_id-text_line = gt_data-str3."行项目文本-资产类别
* APPEND pr_item_id.
* CLEAR pr_item_id.
*
* AT END OF BEDNR.
*
*
* ENDAT.
ENDLOOP.

CALL FUNCTION 'BAPI_REQUISITION_CREATE'
EXPORTING
AUTOMATIC_SOURCE = ''
SKIP_ITEMS_WITH_ERROR = ''
IMPORTING
NUMBER = PR_NO
TABLES
REQUISITION_ITEMS = PR_ITEM
REQUISITION_ACCOUNT_ASSIGNMENT = pr_account
RETURN = PR_RETURN.

LOOP AT PR_RETURN .
MOVE-CORRESPONDING PR_RETURN TO RETURN.
APPEND RETURN.
ENDLOOP.
* APPEND LINES OF PR_RETURN TO RETURN.
READ TABLE PR_RETURN WITH KEY TYPE = 'E' .

IF SY-SUBRC = 0.
CLEAR: LV_MESSAGE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT PR_RETURN INTO L_RETURN WHERE TYPE = 'E' .
CONCATENATE LV_MESSAGE L_RETURN-MESSAGE ';'
INTO LV_MESSAGE.
ENDLOOP.
CONCATENATE GT_DATA-BEDNR LV_MESSAGE INTO PR_NEW-TEXT.
APPEND PR_NEW.
CLEAR PR_NEW.
EX_RESULT = 'E'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CONCATENATE PR_NO '创建成功' INTO PR_NEW-TEXT.
PR_NEW-BANFN = PR_NO.
APPEND PR_NEW.
CLEAR PR_NEW.
EX_RESULT = 'S'.
EX_BANFN = PR_NO.
*批准采购申请
WAIT UP TO 5 SECONDS.
PERFORM APPROVE_PR USING PR_NO.
ENDIF.

FREE PR_ITEM.
FREE PR_ACCOUNT.
FREE PR_ITEM_ID.
FREE PR_RETURN.

RETURN-MESSAGE = '结束调用接口。创建采购申请'.
RETURN-TYPE = 'I'.
APPEND RETURN.

ENDFUNCTION.

RFC 在OA中创建PR的更多相关文章

  1. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  2. 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像

    Azure 中的每个虚拟机 (VM) 都是基于定义 Windows 分发和操作系统版本的映像创建的. 映像可以包括预安装的应用程序和配置. Azure 应用商店为最常见的操作系统和应用程序环境提供了许 ...

  3. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  4. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  5. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  6. SAP CRM 在Web UI中创建搜索帮助

    多数情况下,在Web UI为一个特定的字段提供搜索帮助需要在事务SE11中创建搜索帮助. (注:也可以通过在SE24中创建一个类并实现实现IF_BSP_WD_CUSTOM_F4_CALLBACK接口来 ...

  7. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  8. 如何在ARM中创建Express Route

    很早之前就想试试Azure的express route,但是一直没有找到合适的机会,正好有个客户需要上express route,所以最近先自己研究研究,防止在做poc的时候耗费更多时间,本次场景我们 ...

  9. 在powerdesigner中创建物理数据模型

    物理数据模型(PDM)是以常用的DBMS(数据库管理系统)理论为基础,将CDM/LDM中所建立的现实世界模型生成相应的DBMS的SQL语言脚本.PDM叙述数据库的物理实现,是对真实数据库的描述 PDM ...

随机推荐

  1. 剑指Offer(书):替换空格

    题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析:通常来说,这样的题有两种方式 ...

  2. 南阳理工 58 最少步数 (DFS)

    描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0, ...

  3. LeetCode01--寻找两个有序数组的中位数

    ''' 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nu ...

  4. SpringCloud源码地址

    SpringCloud实战源代码 https://github.com/springcloud/spring-cloud-code.git

  5. 【转】Quartz.NET

    原文链接:http://www.cnblogs.com/tommyli/archive/2009/02/09/1386644.html Quartz.NET是一个开源的作业调度框架,是OpenSymp ...

  6. python3--算法基础:二维数组转90度

    python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, ...

  7. python022 Python3 面向对象

    Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触 ...

  8. hdu 4539

    #include<stdio.h> #include<string.h> ]; int s]; int main() { int i,j,n,m; int ch; while( ...

  9. Shell脚本的编写,sed的使用以及一些正则表达式

    Shell脚本的简单编写以及sed的使用 标签(空格分隔): 博客文章 前一阵子为了批量修改Web审计规则,故编写了一个Shell脚本,顺便使用了下sed,顺便把正则表达式也重新学习一遍,感觉还是需要 ...

  10. 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...