当前位置: 首页 > news >正文

SAP KO22内部订单预算BAPI与BDC

KO22可以为内部订单预先维护预算,以便在后续成本实际产生时进行控制。

使用BAPI进行创建:KBPP_EXTERN_UPDATE_CO

SAP note 625613中对该BAPI的使用方式有详细介绍,使用时可进行参考。

年度预算:e_gjahr传值、e_ges置空;

总预算:e_gjahr置空、e_ges为'X'。

实际使用过程中,发现有一种情况用该BAPI更新不了,即在分配预算之前,该订单就已经产生成本,这种时候前台可以正常保存,但BAPI无法直接更新成功,debug无果后决定使用BDC来进行实现,如果有人知道通过BAPI怎么处理这种情况,可以评论分享下。

DATA:lt_bpak   TYPE bpak_tab,ls_bpak   TYPE bpak,lt_return TYPE bapiret2_t,ls_return TYPE bapiret2."年度预算
ls_bpak-e_objnr = us_item-objnr.
ls_bpak-e_gjahr = us_item-gjahr.
ls_bpak-wert    = us_item-wtjhr.
ls_bpak-twaer   = us_item-twaer.
ls_bpak-e_versn = ''.
APPEND ls_bpak TO lt_bpak.
CLEAR ls_bpak."总预算
ls_bpak-e_objnr = us_item-objnr.
ls_bpak-wert    = us_item-wtges.
ls_bpak-twaer   = us_item-twaer.
ls_bpak-e_ges   = 'X'.
ls_bpak-e_versn = ''.
APPEND ls_bpak TO lt_bpak.
CLEAR ls_bpak.* 预算更新CALL FUNCTION 'KBPP_EXTERN_UPDATE_CO'EXPORTINGi_budget_activity = 'KBUD'
*     I_BUDGET_ACTIV_SUP_RET              = ' '
*     I_BUDGET_DISTRIBUTION_ALLOWED       = ' '
*     I_COMMIT_DATA     = ' '
*     I_DELTA_AMOUNTS   = 'X'
*     I_ROLLUP_DATA     = 'X'
*     I_CHECK_PLAN_DATA = 'X'
*     I_APPLICATION     =i_commit_all      = 'X'
* IMPORTING
*     E_ERRORS_FOUND    =TABLESit_bpak           = lt_bpakit_return         = lt_returnEXCEPTIONSno_update         = 1OTHERS            = 2.

使用BDC进行创建

使用SHDB进行录屏,BDC的使用方法网上太多帖子了,这里只分享下使用BDC过程中碰到的几个问题:

问题1:

在初次登陆系统时,进入该事务代码时,会出现这个弹窗,让用户选择控制范围,输入过之后,后续再次进入该事务代码,这个弹窗就不会出现了,这也是使用BDC时需要注意到的点,这个弹窗也需要录进去,但是程序应该根据什么逻辑来决定是否需要弹窗这段录屏代码呢?

理论上SAP大多数类似的标准功能都是相同的逻辑,都是点选了对应的值之后,使用SET PARAMER ID 'XXX' FIELD VALUE来将用户选择的值保存到SAP SESSION中,后面每次进入事务码时,使用GET PARAMER ID 'XXX' FIELD VALUE来进行获取,如果获取到就不会出现这个弹窗,所以我们在录屏的代码中,加上对应的判断即可。

在弹窗输入框中摁下F1,即可快速找到该字段对应的Parameter ID。

问题2:

使用BDC时,有时候一些前台的报错日志不会返回到messtab中,例如下图这种报错。

解决思路就是在前台点保存之后,/H进行debug,一步一步跟踪看标准代码是怎么进行处理的,以我这个前台报错为例,最终定位到程序在CHECK_ALL子例程中进行所有检查逻辑,在CHECK_LIST中将错误信息进行转换,并且收集到内表 (SAPLSMSG)XMESG[] 中,再以弹窗形式输出,但是前台执行和BDC执行时有些地方有不太一样。

在CHECK_ALL的子例程中,检查发生在函数KBPT_CHECK_BUDGET_PLAN中,前台执行后,如果有错误信息,不会执行446行的E类型消息,但BDC后台调用会执行该语句,E类型的消息会直接终止掉程序,所以后续的CHECK_LIST中收集错误的逻辑就没有办法去执行,程序中自然也无法获取到错误消息。

后来进一步调试,发现消息的收集和显示,是在CHECK_LIST里面的一个函数KBPT_ERROR_LOG中完成,参数MOVE_MESS决定了是否出现弹窗。

所以想要程序中捕获到这个错误信息,就需要在message E 类型语句之前把对应的错误消息收集到,并抛给程序,最终发现只有一个位置可以用来做这件事,就是在SET_ERROR_MARK中做隐式增强来进行数据抛出。

因为后续的message E语句会终止掉internal session,导致调用程序中无法获取到该session中的任何数据,所以只能通过EXPORT TO DATABASE的方式来共享数据。

以上,即可拿到跟前台一样的错误日志数据。

KO22的BDC参考代码:

*&---------------------------------------------------------------------*
*& Form FRM_BDC_CONTRACT_MAINTAIN
*&---------------------------------------------------------------------*
*& Using BDC to create contract
*&---------------------------------------------------------------------*
FORM frm_bdc_contract_maintain USING ut_item TYPE zprfitintordbudget_item_inCHANGING cs_resp TYPE zprbcsrest_out.DATA:lv_kokrs       TYPE tka01-kokrs,lt_index       TYPE STANDARD TABLE OF string,lv_tabix       TYPE n LENGTH 2,lv_year        TYPE n LENGTH 4,lv_bdc_field   TYPE string,lv_bdc_value_i TYPE i,lv_bdc_value_c TYPE string,lv_errmsg      TYPE string,lv_objnr       TYPE bp_objekt.* BDC Error logDATA:lt_mesg  TYPE STANDARD TABLE OF mesg,lt_xmesg TYPE STANDARD TABLE OF smesgx.CONSTANTS:lc_wert1          TYPE string VALUE 'BPDY-WERT1',lc_left_brackets  TYPE char1  VALUE '(',lc_right_brackets TYPE char1  VALUE ')'.* SPA/GPA-Parameter prüfenGET PARAMETER ID 'CAC' FIELD lv_kokrs.lv_year = sy-datlo+0(4) - 1.APPEND 'TOTAL' TO lt_index.DO 5 TIMES.APPEND lv_year TO lt_index.ADD 1 TO lv_year.ENDDO.IF lv_kokrs IS INITIAL.
*   Select Controller AreaPERFORM frm_bdc_dynpro      USING 'SAPLSPO4' '0300'.PERFORM frm_bdc_field       USING 'BDC_CURSOR''SVALD-VALUE(01)'.PERFORM frm_bdc_field       USING 'BDC_OKCODE''=FURT'.PERFORM frm_bdc_field       USING 'SVALD-VALUE(01)''ZDPS'.ENDIF.* Enter OrderREAD TABLE ut_item INTO DATA(us_item) INDEX 1.PERFORM frm_bdc_dynpro      USING 'SAPMKBUD' '0300'.PERFORM frm_bdc_field       USING 'BDC_CURSOR''CODIA-AUFNR'.PERFORM frm_bdc_field       USING 'BDC_OKCODE''/00'.PERFORM frm_bdc_field       USING 'CODIA-AUFNR'us_item-aufnr.PERFORM frm_bdc_dynpro      USING 'SAPLKBPP' '0320'.PERFORM frm_bdc_field       USING 'BDC_CURSOR''BPDY-WERT1(01)'.PERFORM frm_bdc_field       USING 'BDC_OKCODE''=FULL'.* Full amountPERFORM frm_bdc_dynpro      USING 'SAPLKBPP' '0220'.PERFORM frm_bdc_field       USING 'BDC_CURSOR''BPDY-WERT1(03)'.PERFORM frm_bdc_field       USING 'BDC_OKCODE''=POST'.LOOP AT ut_item INTO us_item.READ TABLE lt_index TRANSPORTING NO FIELDSWITH KEY table_line = us_item-gjahr.IF sy-subrc = 0.lv_tabix = sy-tabix.lv_bdc_field = lc_wert1 &&lc_left_brackets &&lv_tabix &&lc_right_brackets.lv_bdc_value_i = us_item-wtjhr.lv_bdc_value_c = lv_bdc_value_i.CONDENSE lv_bdc_value_c NO-GAPS.*     Year valuePERFORM frm_bdc_field USING lv_bdc_fieldlv_bdc_value_c.ENDIF.IF us_item-wtges IS NOT INITIAL..lv_bdc_value_i = us_item-wtges.lv_bdc_value_c = lv_bdc_value_i.CONDENSE lv_bdc_value_c NO-GAPS.*     Total valuePERFORM frm_bdc_field USING 'BPDY-WERT1(01)'lv_bdc_value_c.ENDIF.ENDLOOP.lv_objnr = us_item-objnr.CALL FUNCTION 'ENQUEUE_EBPTR_EX'EXPORTINGobjnr          = lv_objnrEXCEPTIONSforeign_lock   = 1system_failure = 2OTHERS         = 3.IF sy-subrc <> 0.
*   Implement suitable error handling herecs_resp-msgty = 'E'.MESSAGE ID sy-msgidTYPE sy-msgtyNUMBER sy-msgnoWITH sy-msgv1sy-msgv2sy-msgv3sy-msgv4INTO cs_resp-msgtx.RETURN.ELSE.CALL FUNCTION 'DEQUEUE_EBPTR_EX'EXPORTINGobjnr = lv_objnr.ENDIF.TRY.CALL TRANSACTION 'KO22' WITH AUTHORITY-CHECK USING bdcdataMODE   'N'UPDATE 'S'MESSAGES INTO messtab.LOOP AT messtab INTO DATA(ls_messtab) WHERE msgtyp CA 'EAX'.cs_resp-msgty = 'E'.EXIT.ENDLOOP.IF sy-subrc <> 0.cs_resp-msgty = 'S'.MESSAGE ID sy-msgidTYPE sy-msgtyNUMBER sy-msgnoWITH sy-msgv1sy-msgv2sy-msgv3sy-msgv4INTO cs_resp-msgtx.ELSE.IMPORT zprerrlog = lt_xmesg FROM DATABASE indx(pr) ID 'ZPRMEMORY_KO22'.DELETE FROM DATABASE indx(pr) ID 'ZPRMEMORY_KO22'.LOOP AT lt_xmesg INTO DATA(ls_xmesg).MESSAGE ID ls_xmesg-arbgbTYPE 'E'NUMBER ls_xmesg-txtnrWITH ls_xmesg-msgv1ls_xmesg-msgv2ls_xmesg-msgv3ls_xmesg-msgv4INTO lv_errmsg.CONCATENATE cs_resp-msgtx '|' lv_errmsg INTO cs_resp-msgtx.ENDLOOP.cs_resp-msgtx = shift_left( val = cs_resp-msgtx sub = '|' ).ENDIF.CATCH cx_sy_authorization_error INTO DATA(lx_auth_check).
*     Authorization missing for user when executing transactionDATA(lv_auth_check_text) = lx_auth_check->get_text( ).cs_resp-msgty = 'E'.cs_resp-msgtx = lv_auth_check_text.ENDTRY.CLEAR:bdcdata,bdcdata[],messtab,messtab[],lt_mesg.FREE:bdcdata[],messtab[].
ENDFORM.

相关文章:

SAP KO22内部订单预算BAPI与BDC

KO22可以为内部订单预先维护预算&#xff0c;以便在后续成本实际产生时进行控制。 使用BAPI进行创建&#xff1a;KBPP_EXTERN_UPDATE_CO SAP note 625613中对该BAPI的使用方式有详细介绍&#xff0c;使用时可进行参考。 年度预算&#xff1a;e_gjahr传值、e_ges置空&#xff…...

K8S篇之实现利用Prometheus监控pod的实时数据指标

一、监控部署 1、将k8s集群中kube-state-metrics指标进行收集&#xff0c;服务进行部署 1.1 pod性能指标&#xff08;k8s集群组件自动集成&#xff09; k8s组件本身提供组件自身运行的监控指标以及容器相关的监控指标。通过cAdvisor 是一个开源的分析容器资源使用率和性能特性的…...

智能巡检软件怎么选?企业设备管理需要做什么?

在当今竞争激烈的企业运营环境中&#xff0c;巡检管理的重要性不言而喻。然而&#xff0c;许多企业在执行巡检任务时面临着诸多挑战&#xff0c;如员工执行不到位、缺乏有效的人员监管、漏检误检、安全隐患以及数据整理困难等问题。这些问题如果不能得到妥善解决&#xff0c;不…...

【python】Django——连接mysql数据库

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——连接mysql数据库 连接MySQL数据库…...

北京君正客户应用案例:掌静脉3D人脸猫眼视屏智能锁

凯迪仕在今年4月发布了智能锁旗舰新品K70 Pro Max掌静脉3D人脸猫眼视屏智能锁&#xff0c;随即这款新品也成了行业热议的焦点。凯迪仕每次新品都力求突破精益求精&#xff0c;不仅追求科技感、高级感与品质感&#xff0c;而且赋予科技温度&#xff0c;带来人文化的关怀。K70 Pr…...

人工智能+游戏 会带来什么

“人工智能游戏” 写在前面 随着人类生活水平的日益提高&#xff0c;游戏正在为越来越多的人们带去欢乐。同时&#xff0c;作为21世纪新兴科学技术的人工智能&#xff0c;也正在研究人员的努力下不断向前突破。那么&#xff0c;这两列高速前进的“火车”能否接轨并行呢&#…...

人工智能基础_机器学习030_ElasticNet弹性网络_弹性回归的使用---人工智能工作笔记0070

然后我们再来看elastic-net弹性网络,之所以叫弹性是因为,他融合了L1和L2正则,可以看到 他的公式 公式中有L1正则和L2正则两个都在这个公式中 可以看到弹性网络,在很多特征互相联系的时候,非常有用,比如, 相关性,如果数学好,那么物理也好,如果语文好,那么英语也好 这种联系 正…...

Python算法——平衡二叉树(AVL)

Python中的平衡二叉搜索树&#xff08;AVL树&#xff09;算法详解 平衡二叉搜索树&#xff08;AVL树&#xff09;是一种自平衡的二叉搜索树&#xff0c;它通过在插入或删除节点时进行旋转操作来保持树的平衡性。在AVL树中&#xff0c;任何节点的两个子树的高度差&#xff08;平…...

公开可用的API 合集

这是一个开源项目列表&#xff0c;收录了一些公开可用、无需注册或认证即可使用的API接口。 这个项目解决了开发者们在寻找合适的API时遇到的各种困难&#xff0c;如无法快速定位、难以筛选等问题&#xff0c;为他们提供了便捷的一站式查询服务。 项目是“public-apis”&…...

单片机编程原则

多任务编程的概念 方式一&#xff1a;实时操作系统&#xff08;不建议新手使用&#xff09; 方式二 &#xff1a;裸机多任务模型 逻辑多任务的基本原理 把三个任务分别分为一个一个的片段 然后先执行任务一的第一个切片 执行第二个任务的第一个片段 执行第三个任务的第一个片…...

开源短剧付费变现小程序源码系统+在线开通会员+在线充值 带完整的搭建教程

说起微短剧&#xff0c;相信大家都不会陌生。相比传统网剧冗长的剧情&#xff0c;微短剧最大的看点&#xff0c;是时长短、高浓缩&#xff0c;顺应了当下用户娱乐时间碎片化趋势。其故事题材多为赘婿、霸道总裁、穿越、重生等看似夸张、无厘头&#xff0c;但却非常“上头”的虚…...

基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…...

电商平台为什么需要及时部署ssl证书?

电商平台为什么需要及时部署ssl证书&#xff1f; 21世纪以来&#xff0c;互联网技术得到了快速的发展和应用上的普及&#xff0c;为生活、工作、学习都带来了巨大的变化。现代社会中&#xff0c;快节奏的生活让人们的购物方式也发生了极大的转变&#xff0c;逐渐由线下转为了线…...

卡码网语言基础课 | 12. 位置互换

通过本次练习&#xff0c;将要学习到以下C知识点&#xff1a; 位置互换交换变量字符串 题目&#xff1a;给定一个长度为偶数位的字符串&#xff0c;请编程实现字符串的奇偶位互换。 奇偶位互换是指字符串的奇数位和偶数位相互交换位置 即&#xff1a;第一位和第二位交换&…...

用DOM来读取XML时要注意的一些概念

2023年11月15日&#xff0c;周三下午 在 DOM&#xff08;文档对象模型&#xff09;中&#xff0c;有一些重要的概念和术语&#xff1a; 文档对象&#xff08;Document Object&#xff09;&#xff1a;表示整个 XML 文档的根节点&#xff0c;它是 DOM 树的入口点。元素节点&…...

openresty安装配置,执行shell脚本

下载并解压 OpenResty 源代码&#xff1a; bashCopy code wget https://openresty.org/download/openresty-1.19.9.1.tar.gz tar -zxvf openresty-1.19.9.1.tar.gz cd openresty-1.19.9.1 运行 ./configure 并指定安装路径&#xff1a; bashCopy code ./configure --prefix…...

解决Dockerfile中 Could not initialize class sun.awt.X11FontManager错误

Dockerfile中增加命令 RUN yum install dejavu-sans-fonts fontconfig -y如果您使用的是基于Alpine Linux的发行版&#xff0c;可以使用apk命令来安装DejaVu Sans字体和fontconfig工具 RUN apk update RUN apk add ttf-dejavu fontconfig...

Kubernetes(k8s)进阶

文章目录 Kubernetes进阶一、Namespace&#xff08;名称空间&#xff09;1.namespace介绍2.管理namespace查看namespace创建namespaceyaml文件配置namespace 二、Pod&#xff08;最小基本部署单元&#xff09;1.pod介绍2.管理pod创建并运行pod查看pod信息访问pod删除podyaml文件…...

[Vue 配置] Vite + Vue3 项目配置和使用 NProgress

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/mfmsrf9tz98ox3qg 安装 pnpm i nprogress配置 NProgress 其他更多可参考&#xff0c;仓库地址&#xff1a;https://github.com/rstacruz/nprogress 在 src/config/nprogress.js 中进行配置 是否展示右上角圆…...

Android MQTT开发之 Hivemq MQTT Client

使用一个开源库&#xff1a;hivemq-mqtt-client&#xff0c;这是Java生态的一个MQTT客户端框架&#xff0c;需要Java 8&#xff0c;Android上使用的话问题不大&#xff0c;需要一些额外的配置&#xff0c;下面列出了相关的配置&#xff0c;尤其是 packagingOptions&#xff0c;…...

项目文档:基于Multisim的四路带计分系统抢答器设计与仿真

摘要&#xff1a;本项目设计了一个四路带计分系统的智能抢答器&#xff0c;具有声光显示、计时和计分功能。使用Multisim 14.3进行电路设计 与仿真验证。项目简介本项目设计了一个基于Multisim的四路带计分系统智能抢答器&#xff0c;采用74系列数字逻辑芯片实现纯硬件电路设计…...

成本优化秘籍:如何通过模型路由(Model Routing)降低 Agent 推理成本?

成本优化秘籍:如何通过模型路由(Model Routing)降低 Agent 推理成本? 1. 引入与连接:推理成本的"隐形黑洞"与破解之道 1.1 引人入胜的开场:一个真实的成本困境 让我们从一个真实故事开始。今年早些时候,我与一家知名科技创业公司的CTO进行了一次深入交流。…...

黑龙江移远科技,是懂预算、懂场景、更懂服务的专业服务商

很多人误以为移远科技只是简单卖设备的贸易公司&#xff0c;实则不然。依托全品牌货源优势、极致性价比、五星贴心服务、专属方案定制&#xff0c;企业早已从传统销售商&#xff0c;升级为综合性通讯安防解决方案服务商&#xff0c;全方位解决客户采购难、选型难、售后难、预算…...

小小屠龙原始火龙手游官网下载:小小屠龙原始火龙最新官方下载渠道

《小小屠龙原始火龙》又名《赤血火龙单职业》《龙城秘境移动版》&#xff0c;是由安徽游昕联合忆往游戏运营的正版 1.80 火龙复刻 MMORPG 手游。1:1 复刻比奇、盟重土城、祖玛寺庙、赤月峡谷、火龙神殿等经典场景&#xff0c;创新融合战法道三职业核心能力的单职业体系&#xf…...

AI赋能引力波数据分析:WCD深度学习框架从噪声中探测暗物质信号

1. 项目概述&#xff1a;当引力波遇见AI&#xff0c;如何从噪声中“看见”暗物质&#xff1f;在引力波天文学这个前沿领域&#xff0c;我们正面临一个激动人心又充满挑战的时代。自从LIGO首次直接探测到引力波以来&#xff0c;我们不仅“听”到了黑洞并合的宇宙巨响&#xff0c…...

WSL2开发环境部署

系统要求 安装前需要确保设备满足以下条件: 操作系统: Windows 10版本2004(内部版本19041)或Windows 11(按Win R输入winver查看版本)。硬件: 64 位处理器(需要在BIOS中启用虚拟化,Intel VT-x/AMD-V) 至少4GB内存(推荐8GB)。 20GB以上存储空间(建议SSD)。 启用必要功能 …...

图机器学习在农药生态毒性预测中的应用与挑战

1. 项目概述&#xff1a;当图机器学习遇见农药设计农药&#xff0c;这个听起来有些“硬核”的词汇&#xff0c;其实是我们现代农业的基石。从除草剂到杀虫剂&#xff0c;它们守护着全球的粮食安全。但硬币的另一面是&#xff0c;农药的生态毒性问题日益凸显&#xff0c;尤其是对…...

Unity 2D游戏地图制作:从零上手Tile Palette的7个核心工具(附快捷键清单)

Unity 2D游戏地图制作&#xff1a;从零上手Tile Palette的7个核心工具&#xff08;附快捷键清单&#xff09;在独立游戏开发领域&#xff0c;2D游戏因其独特的艺术风格和相对较低的开发门槛&#xff0c;始终保持着旺盛的生命力。无论是复古风格的平台跳跃游戏&#xff0c;还是精…...

《AI推理优化实战:从高延迟高成本到高效低耗,企业级AI落地必备技术》

随着大模型、AI应用规模化落地&#xff0c;行业发展重心已经从“模型训练”全面转向“模型推理”。2026年AI产业的核心痛点不再是模型训练精度不足&#xff0c;而是推理成本过高、响应延迟过长、算力资源浪费。很多企业落地AI应用时&#xff0c;面临大模型推理速度慢、并发量低…...

告别传统地形!用Unreal Engine的Voxel Plugin,5分钟打造一个可实时编辑的无限世界

告别传统地形&#xff01;用Unreal Engine的Voxel Plugin&#xff0c;5分钟打造一个可实时编辑的无限世界在游戏开发领域&#xff0c;地形系统一直是构建虚拟世界的基石。传统的地形编辑方式往往需要开发者手动绘制高度图、调整纹理混合、设置LOD层级&#xff0c;整个过程不仅耗…...