ABAP 一般采购申请创建、服务类型采购申请创建BAPI_REQUISITION_CREATE

news2024/10/3 2:17:29

前言

此文的示例同时可创建一般采购申请或服务采购申请,当采购类型为Z007时,触发服务采购申请相关字段填写

正文

创建服务类型采购申请的时候参数间互相绑定很绕,看了这篇博客才理明白,有兴趣的可以阅读原文

https://wiki.scn.sap.com/wiki/display/ABAP/BAPI_REQUISITION_CREATE?original_fqdn=wiki.sdn.sap.com

下面就尝试解释一下服务类型采购订单的参数对应关系

  • requisition_items: preq_item和pckg_no将采购申请行项目和服务抬头互相绑定
  • requisition_account_assignment: serial_no固定填入1即可
  • requisition_service: pckg_no中同时有抬头和行项目,奇数代表服务抬头,偶数代表服务行项目;line_no代表抬头和行项目的流水号,同一个服务的抬头和行项目共享顺序流水;subpckg_no只有服务抬头需要填写,填入行项目的pckg_no;ext_line代表在前台显示时的流水号,默认10开始
  • requisition_srv_accass_values:此处填入上一步服务行项目的值,pckg_no和line_no填入上一步服务行项目的值;serial_no和serno_line固定填入1即可
    在这里插入图片描述
    ps_head结构如下
    在这里插入图片描述
    在这里插入图片描述采购申请创建bapi如下
*&---------------------------------------------------------------------*
*& Form frm_create_pr
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_pr USING    ps_head     TYPE  zmms035
                   CHANGING ps_retinfo  TYPE  zmms037.

  DATA: lv_subrc   TYPE i,
        lv_str     TYPE string,
*        lv_wbs_elem TYPE bapiebkn-wbs_elem.
*        lv_ext_line TYPE esll-extrow,
        lv_line_no TYPE esll-introw,
        lv_pckg_no TYPE esll-packno VALUE '0000000001'.

  DATA: lt_req_items      TYPE TABLE OF bapiebanc,
        ls_req_items      TYPE bapiebanc,
        lt_req_acc_assign TYPE TABLE OF bapiebkn,
        ls_req_acc_assign TYPE bapiebkn,
        lt_req_services   TYPE TABLE OF bapiesllc,
        ls_req_services   TYPE bapiesllc,
        lt_req_srv_acc    TYPE TABLE OF bapiesklc,
        ls_req_srv_acc    TYPE bapiesklc,
        lt_req_item_text  TYPE TABLE OF bapiebantx,
        ls_req_item_text  TYPE bapiebantx,
        lt_line           TYPE TABLE OF /scmb/bif_delvry_map_shipto,
        lt_return         TYPE TABLE OF bapireturn,
        ls_return         TYPE bapireturn.

*--创建采购申请
  LOOP AT ps_head-item INTO DATA(ls_item).

*----抬头数据
    ls_req_items-doc_type = ps_head-bsart.  " 采购申请凭证类型

*----行项目数据
    ls_req_items-preq_item  = |{ ls_item-bnfpo ALPHA = IN }|. " 采购申请项目编号
    ls_req_items-acctasscat = ls_item-knttp.  " 科目分配类别
    ls_req_items-item_cat   = ls_item-pstyp.  " 项目类别
    ls_req_items-material   = ls_item-matnr.  " 物料编号
    ls_req_items-short_text = ls_item-txz01.  " 短文本
    ls_req_items-quantity   = ls_item-menge.  " 申请数量
    ls_req_items-unit       = ls_item-meins.  " 计量单位
    ls_req_items-deliv_date = ls_item-lfdat.  " 项目交货日期
    ls_req_items-mat_grp    = ls_item-matkl.  " 物料组
    ls_req_items-plant      = ls_item-werks.  " 工厂
    ls_req_items-store_loc  = ls_item-lgort.  " 库存地点
    ls_req_items-pur_group  = ls_item-ekgrp.  " 采购组
    ls_req_items-preq_name  = ls_item-afnam.  " 需求人
    IF ps_head-bsart = 'Z007'.
      ls_req_items-pckg_no = lv_pckg_no.
    ENDIF.
    APPEND ls_req_items TO lt_req_items.

*----行项目账户数据(每个行项目有且仅有一条)
    ls_req_acc_assign-preq_item = |{ ls_item-bnfpo ALPHA = IN }|.  " 采购申请项目编号
    ls_req_acc_assign-serial_no = '01'. " 帐户分配的顺序编号
    ls_req_acc_assign-asset_no  = ls_item-anln1.  " 资产
    ls_req_acc_assign-cost_ctr  = ls_item-kostl.  " 成本中心
    ls_req_acc_assign-order_no  = ls_item-aufnr.  " 订单号
    ls_req_acc_assign-wbs_elem_e  = ls_item-ps_psp_pnr.  " WBS 元素
    ls_req_acc_assign-g_l_acct  = ls_item-sakto.  " 总账科目
    IF ps_head-bsart = 'Z007'.
      ls_req_acc_assign-serial_no = '01'.
    ENDIF.
    APPEND ls_req_acc_assign TO lt_req_acc_assign.

*----行项目长文本
    lv_str = ls_item-ztext01.  " 长文本-项目文本
    TRY.
        cl_bcs_convert=>string_to_tab(
          EXPORTING
            iv_string = lv_str
          IMPORTING
            et_ctab = lt_line ).
      CATCH cx_bcs.
    ENDTRY.
    LOOP AT lt_line INTO DATA(ls_line).
      ls_req_item_text-preq_item = |{ ls_item-bnfpo ALPHA = IN }|.  " 采购申请项目编号
      ls_req_item_text-text_id   = 'B01'.   " 文本标识-项目文本
      ls_req_item_text-text_form = '*'.     " 文本格式
      ls_req_item_text-text_line = ls_line-note. " 文本行

      APPEND ls_req_item_text TO lt_req_item_text.
    ENDLOOP.

*----服务类型采购申请
    IF ps_head-bsart = 'Z007'.

      " 初始化行号
*      lv_ext_line = '0000000000'.
      lv_line_no  = '0000000001'.

      " 服务类型抬头包
      ls_req_services = VALUE #( pckg_no = lv_pckg_no        " 包号
                                 line_no = lv_line_no        " 内部行号
                                 subpckg_no = lv_pckg_no + 1 " 子包编号
                                  ).
      APPEND ls_req_services TO lt_req_services.

      " 服务类型行项目包
      LOOP AT ls_item-service INTO DATA(ls_service).
        " 递增行号
        lv_line_no = lv_line_no + 1.
*        lv_ext_line = lv_ext_line + 10.

        " 行项目
        ls_req_services = VALUE #( pckg_no    = lv_pckg_no + 1     " 包号
                                   line_no    = lv_line_no         " 内部行号
                                   ext_line   = ls_service-extrow  " 外部行号
                                   service    = ls_service-srvpos  " 服务编号
                                   short_text = ls_service-ktext1  " 服务文本
                                   quantity   = ls_service-menge   " 数量
                                   base_uom   = ls_service-meins   " 单位
                                   gr_price   = ls_service-brtwr   " 总价格
                                   ).
        IF ls_service-meins IS INITIAL.
          ls_req_services-base_uom = 'LE'.  " 默认外码AU,内码LE
        ENDIF.
        APPEND ls_req_services TO lt_req_services.

        " 行项目
        ls_req_srv_acc  = VALUE #( pckg_no    = lv_pckg_no + 1
                                   line_no    = lv_line_no
                                   serial_no  = '01'
                                   serno_line = '01'
                                   ).
        APPEND ls_req_srv_acc TO lt_req_srv_acc.

      ENDLOOP.
    ENDIF.

    lv_pckg_no = lv_pckg_no + 2.

  ENDLOOP.

  "采购申请创建
  CALL FUNCTION 'BAPI_REQUISITION_CREATE'
    IMPORTING
      number                         = ps_retinfo-banfn
    TABLES
      requisition_items              = lt_req_items
      requisition_account_assignment = lt_req_acc_assign
      requisition_services           = lt_req_services
      requisition_srv_accass_values  = lt_req_srv_acc
      requisition_item_text          = lt_req_item_text
      return                         = lt_return.

*----返回消息处理
  lv_subrc = sy-subrc.
  LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.
    ps_retinfo-code     = gc_e.
    ps_retinfo-message  = ps_retinfo-message && ls_return-message.
  ENDLOOP.
  IF sy-subrc = 0 OR lv_subrc NE 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.
    WAIT UP TO '0.5' SECONDS.
    
  ENDIF.

  IF ps_retinfo-code IS INITIAL.
    ps_retinfo-code = gc_s.
    ps_retinfo-message = TEXT-m10 && ps_retinfo-message.  " 创建成功
  ELSE.
    ps_retinfo-message = TEXT-m11 && ps_retinfo-message.  " 创建失败
  ENDIF.

ENDFORM.

服务类型的的采购申请在行项目中,还有服务的行项目
在这里插入图片描述
在se16n当中服务类型的采购申请的行项目,是通过eban-packno = esll-packno关联的,在esll表中同时存储了服务的抬头和行项目,服务抬头项目字段中有一个sub_packno的字段,用于关联服务行项目的packno
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion插件:StyleSelectorXL 之七十七种绘画风格任君选择

本文给大家分享一个应用于 SDXL 的新插件&#xff1a;StyleSelectorXL。通过在UI界面上简单的选择&#xff0c;我们就可以生成多种多样的风格图片&#xff0c;如动漫、水彩、平面、3D、线稿、涂鸦、剪纸、朋克、童话等等。 基本介绍 用过 SDXL 的同学&#xff0c;应该能切身感…

算法leetcode|79. 单词搜索(rust重拳出击)

文章目录 79. 单词搜索&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;进阶&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 79. 单词搜索&#xff1a; …

提高设计效率,你还需要掌握FeatureManager这些小窍门

FeatureManager 设计树使多种选择和过滤器操作变得更为方便&#xff0c;并在处理模型时提供对多个文件夹和有用工具的访问。 FeatureManager 设计树和图形区域为动态链接。可在任一窗格中选择特征、草图、工程视图和构造几何线。 您可以分割 FeatureManager 设计树&#xff0c;…

力扣每日一题---2594. 修车的最少时间

文章目录 思路解题方法复杂度Code 思路 请注意&#xff0c;能力值越低&#xff0c;修车越快&#xff0c;应该翻译成「排名」&#xff0c;排名越靠前&#xff0c;修车越快。&#xff09;根据题意可以知道r * n * n < t 的&#xff0c;所以可以利用数学知识进行改变公式&#…

灰度变换与空间滤波

灰度变换与空间滤波 背景知识 空间域指包含图像像素的平面&#xff0c;灰度变换与空间滤波均在空间域进行&#xff0c;即直接在图像像素上操作&#xff0c;表示为 g ( x , y ) T [ f ( x , y ) ] g(x,y)T[f(x,y)] g(x,y)T[f(x,y)] &#xff0c;其中 T T T 是在点 ( x , y…

【SWT】 使 ScrolledComposite 中内容动态变化后依然可以滚动

引言&#xff1a; 在用户界面设计中&#xff0c;有时需要在有限的空间内显示大量内容。如果内容超过可视区域的大小&#xff0c;滚动功能可以帮助用户滚动并查看所有内容。本文将介绍如何使用 Eclipse SWT 库中的 ScrolledComposite 控件来实现在滚动区域中显示可滚动的标签。 …

Discuz论坛帖子标题随机高亮颜色,拒绝千篇一律!

DZ论坛帖子标题默认是没有高亮、加粗效果的&#xff0c;如果是要实现某篇帖子标题高亮、加粗&#xff0c;站长或是版主可以点开这篇帖子&#xff0c;在发帖的下方可以看到精华、高亮、图章、置顶等操作&#xff0c;然后点击高亮&#xff0c;可以选择高亮颜色&#xff0c;是否加…

直播预告 | 博睿学院 Bonree ONE接入zabbix数据源提高可观测运维能力

Zabbix是业界覆盖面非常普遍的监控工具。本课程将介绍目前公有云的基础监控体系的构建思路&#xff0c;讲述One产品对接Zabbix数据的必要性与可观测性赋能效果。 课程中会分享数据接入的过程&#xff0c;重点讲解zabbix工作机制&#xff0c;深入分析zabbix数据库表结构&#x…

TCP IP网络编程(四) 基于TCP的服务器端、客户端

文章目录 理解TCP、UDPTCP/IP协议栈链路层IP层TCP/UDP层应用层 实现基于TCP的服务器端、客户端TCP服务器端的默认函数调用顺序进入等待连接请求状态受理客户端连接请求TCP客户端的默认函数调用顺序基于TCP的服务器端、客户端函数调用关系 实现迭代服务器端、客户端实现迭代服务…

算法通关村第十六关:青铜挑战-滑动窗口其实很简单

青铜挑战-滑动窗口其实很简单 1. 滑动窗口基本思想 数组引入双指针的背景&#xff1a; 很多算法会大量移动数组中的元素&#xff0c;频繁移动元素会导致执行效率低下或者超时&#xff0c;使用两个变量能比较好的解决很多相关问题 数组双指针&#xff0c;之前介绍过 对撞型 和…

无涯教程-JavaScript - COMPLEX函数

描述 COMPLEX函数将实系数和虚系数转换为x yi或x yj形式的复数。 语法 COMPLEX (real_num, i_num, [suffix])争论 Argument描述Required/Optionalreal_numThe real coefficient of the complex number. Requiredi_numThe imaginary coefficient of the complex number.Re…

Java基础知识点汇总

一、Java基础知识点整体框架 详细知识点见链接资源&#xff0c;注&#xff1a;框架是用Xmind App完成&#xff0c;查看需下载。 二、基础知识各部分概况 2.1 认识Java 2.2 数据类型和变量 2.3 运算符 2.4 程序逻辑控制 2.5 方法的使用 2.6 数组的定义和使用 2.7 类和对象 2.8 …

Python入门学习14(面向对象)

一、内置方法 二、封装 1. 封装的概念是指&#xff1f; 将现实世界事物在类中描述为属性和方法&#xff0c;即为封装。 2. 什么是私有成员&#xff1f;为什么需要私有成员&#xff1f; 现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时…

跑出创新加速度,AI基础软件成AIGC产业发展加速器

2023年中国国际服务贸易交易会&#xff08;以下简称“服贸会”&#xff09;受世界瞩目正在火热进行&#xff0c;9月4日&#xff0c;服贸会专题论坛之“2023中国AIGC创新发展论坛” 在大会期间成功举办&#xff0c;九章云极DataCanvas公司副总裁周晓凌受邀出席论坛&#xff0c;并…

【计算机视觉项目实战】中文场景识别

✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 👨‍💻面向对象: 本篇前言知识主要介绍深度学习知识,全面总结知知识…

SW的stp文件转成CAD格式文件学习笔记

SW的stp文件转成CAD格式文件 如图一个STP文件&#xff0c;右上角标注是什么文件呢 另存为零件图&#xff0c;即另存为part 如图所示 用solidworks打开另存为的零件图&#xff0c;点击是&#xff0c;会识别特征 . 直接默认点对勾 之后会出现可编辑的零件图 另存为CA…

JVM调优记录

因为大量数据备份&#xff1b;导致在备份过程出现堆溢出的情况 当前情况 总内存&#xff1a;7.92G 已使用&#xff1a;3.7G jvm总内存最大&#xff1a;3.06G jvm非堆内存&#xff1a;最大1.23G&#xff0c;使用<170M jvm堆内存&#xff1a;最大1.83G 计算 如果预留2G扩展…

【教程】安防监控/视频存储/视频汇聚平台EasyCVR接入智能分析网关V4的操作步骤

TSINGSEE青犀AI边缘计算网关硬件 —— 智能分析网关目前有5个版本&#xff1a;V1、V2、V3、V4、V5&#xff0c;每个版本都能实现对监控视频的智能识别和分析&#xff0c;支持抓拍、记录、告警等&#xff0c;每个版本在算法模型及性能配置上略有不同。硬件可实现的AI检测包括&am…

深入理解联邦学习——联邦学习的分类

分类目录&#xff1a;《深入理解联邦学习》总目录 在实际中&#xff0c;孤岛数据具有不同分布特点&#xff0c;根据这些特点&#xff0c;我们可以提出相对应的联邦学习方案。下面&#xff0c;我们将以孤岛数据的分布特点为依据对联邦学习进行分类。 考虑有多个数据拥有方&…