ABAP随笔
分享开发过程中遇到的问题,解决方案
Qunending
学无止境
展开
-
SAP-ABAP-如何根据bom批量获取物料的最顶层料号
思路就是把所有的最底层级算作一个整体for all 取上一层,记录最底层料号和中间料号,然后按照这个逻辑用中间料号for all再找上一层,一层层往上找,最多的只需要for all 层级数,用到的select其实不会很多。查上层的方法就是STPO表输入料号找到BOM单号,MAST根据BOM单号找到上层物料。简单代码DEMO如下。以上代码没考虑工厂问题,每个公司工厂问题可能不同,按照自己公司修改即可。原创 2023-02-06 17:02:27 · 1694 阅读 · 1 评论 -
SAP-ABAP-SQL连表时多个字段连一个问题处理方案
写代码时经常遇到一些两个字段拼接起来取连另外一个表的情况,比如MSEG表物料凭证号+年关联BKPF的AWKEY 字段是mseg~MBLNR + mseg~mjahr =BKPF~AWKEY。这时候普通的连表会提示长度不一致的问题我们可以用下面的方法连表。原创 2023-01-13 16:28:06 · 1578 阅读 · 0 评论 -
SAP-ABAP-FBL1H/FBL3H/FBL5H/FAGLL03H等事务代码远程调用时ALV展示与标准不同时布局问题增强修改
但是如果是程序submit调用这个程序,跳过选择屏幕直接展示报表了话展示的就是另外一种格式的报表,如下图所示,非常的简陋,甚至都不能导出数据来。在展示ALV时会判断是不是submit调用,如果是submit调用的话会按照不同的格式展示,具体代码如下,满足if语句则会设置展示格式参数。ld_display_style=’s' ,如果系统的版本低,根本就没有这些代码,可以考虑打note2636523,是展示布局更加好看。经过研究发现,这一系列的程序,如下图所示事务代码。原创 2022-10-21 11:59:25 · 1514 阅读 · 0 评论 -
SAP-ABAP-创建销售订单BAPI税额修改增强
重点修改ZWST的税额计算的代码是下图,构造好数据之后传隐式增强修改税额数据。原创 2022-09-23 17:05:10 · 2095 阅读 · 0 评论 -
SAP-ABAP-CK40N返回消息标准ALV列表新增字段增强
原始需求是在CK40N的返回消息屏幕添加一个物料描述字段,我觉得这个程序加字段应该是有标准配置的,但是我找不到,只好用增强解决了,本文提供一种给标准报表新增字段的思路,为ALV添加字段不外乎两个步骤,第一步添加fieldcat,使展示时能够展示在屏幕上面,第二部填充新增字段的数据。找到了最终展示的ALV的fieldcat,里面的参考表主要有两个,通过SE11验证,这两个结构都存在,所以无论对哪个结构新增,应该都可以为ALV新增字段,这里我选择了CMIOBJCK1,因为物料编码参考的是这个结构。原创 2022-09-13 16:59:59 · 1354 阅读 · 1 评论 -
SAP-ABAP-SELECT语法SQL语法详解
ABAP中SQL语法详细介绍,包括基础语法和各种聚合函数,如MAX,MIN,AVG,COUNT,SUM,DIV,MOD,CEIL,FLOOR,DIVSION,ROUND,FOR ALL ENTRIES IN.除了各种聚合函数还有字段拆分,连接,子语句查询,字段类型转换,分情况赋值等原创 2022-09-02 10:09:22 · 16515 阅读 · 3 评论 -
SAP-ABAP会计凭证创建BAPI
BAPI调用的代码如下,下面分别介绍几个主要参数 CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = lw_documentheader customercpd = lw_customercpd contractheader = lw_contractheader IMPOR原创 2022-05-20 12:16:06 · 5351 阅读 · 0 评论 -
SAP-ABAP-清账函数BAPI使用POSTING_INTERFACE_CLEARING,应付暂估外币清账程序
本程序使用bapi对应付暂估外币清账程序bapi名称是POSTING_INTERFACE_CLE,用的是全部清账而非部分清账,程序代码如下,使用的是OOALV格式主程序代码*&---------------------------------------------------------------------**& Report ZFIR262*&----------------------------------------------------------原创 2022-05-09 15:16:05 · 4908 阅读 · 1 评论 -
SAP-ABAP-SM30自建表维护如何控制某个字段不可输入,如何自动带出描述,如何校验数据准确性
代码如下,PBO的MODULE后面要加OUTPUT,代码的意思就是循环屏幕参数,当屏幕参数是TXT50这个字段的时候,将INPUT设置为0,改成不可输入。5.首先创建表结构,本文将对下列自建表限制字段TXT50资产描述不可输入,根据公司代码及资产号码自动带出资产描述,校验所填的公司代码及资产号在表ANLA中存在。1.创建表维护生成器2.双击上图中的概述屏幕1,进入屏幕 1的代码。或者事务代码SE80输入刚刚表维护生成器生成的函数组ZTFI231_DIYAN...原创 2022-05-06 17:10:46 · 5178 阅读 · 2 评论 -
SAP-ABAP-文件批导程序通用部分
文章代码实现下图功能,复制可用1.点击按钮模板下载将SMW0中的模板下载至指定位置注意修改代码中的此处,此处是文件在smw0中的代号,及下载后文件名称2.选择屏幕以及F4帮助打开文件路径选择下载路径,反写至选择屏幕以上为代码实现功能,所有带如下,复制可用*&---------------------------------------------------------------------**& Report ZFIR019*&-原创 2022-04-19 12:18:03 · 1062 阅读 · 2 评论 -
SAP-ABAP-后台表数据万能导出程序
利用灵活sql取配置表数据构造动态内表导出至本地及服务器,代码如下*&---------------------------------------------------------------------**& Report ZFIR252*&---------------------------------------------------------------------**& author 李强 Qunending 2022.02.16*&原创 2022-04-11 11:37:08 · 4766 阅读 · 5 评论 -
SAP-ABAP-如何查询function 函数的参数
DATA: lv_FUNCNAME type RS38L_FNAM , lt_import TYPE rsfb_para WITH HEADER LINE, lt_export TYPE rsfb_para WITH HEADER LINE, lt_change TYPE rsfb_para WITH HEADER LINE, lt_tables TYPE rsfb_para WITH HEADER LINE.* Read par...原创 2022-04-07 09:39:28 · 3086 阅读 · 2 评论 -
SAP-ABAP-基础-如何调试程序,debug模式下的一些按钮
1.找程序名1.1通过事物代码找程序名称一般遇到问题都能知道哪个事物代码,已知事务代码可以通过SE93查找对应的程序名称也可以通过事务代码进入程序之后点击 系统-->状态找到对应的程序1.2通过后台表搜索查询名称事务代码SE16N对表TRDIRT限制程序名Z*查询自开发查询,限制标题查询关键字就能查询出哪些程序满足条件,然后再自己一个个排除1.3进入程序包查找事务代码SE80,选择package然后查找Z*可以弹出系统存在的包名称,根据描述及模块双击..原创 2022-03-09 11:40:55 · 7449 阅读 · 1 评论 -
SAP-ABAP-一些很方便的小运算及小函数
A = 3.14B= -3.14151.向上取整CEIL( A ) = 4 .2.向下取整FLOOR( A ) = 3 .3.取绝对值ABS( B ) = 3.1415 .4.字符串长度STRLEN( A ) = 45.除法取整A DIV B = 0 .B DIV A = -1 .6.除法取余A MOD B7.内表行数DATA: LV_LINES TYPE INT4.LV_LINES = LINES( GT_OUT[] ).8.取UUID原创 2022-01-21 11:17:33 · 2400 阅读 · 2 评论 -
SAP-ABAP-财务校验出口,附代码
1.SE38复制RGGBR000到程序ZRGGBR000,include不用复制2.新增出口编号代码如下,注意不要复制UM001那个,那个param不是财务校验的参数。写错了会找不到这个出口。 exits-name = 'Z901'. "matrix validation: exits-param = c_exit_param_none. "complete data used in exit. exits-title = '车型原创 2022-01-20 09:17:32 · 1621 阅读 · 4 评论 -
SAP-ABAP-普通OOALV,OOALV分屏展示,发送邮件excel附件合并单元格,附件带框线,附件居中。
普通OOALV,分三个屏幕的OOALV,带格式的excel附件邮件(合并居中,带框线,规定列宽)原创 2022-01-19 11:59:35 · 3039 阅读 · 2 评论 -
SAP-ABAP-后台导出大批量数据及本地导出数据程序
为了应对审计导出大量凭证的要求,写了此程序来导出bkpf及bseg表数据,此程序分两种导出方式,导出至本地及导出至服务器,因为数据量巨大,所以也支持后台导出至服务器(导出至本地不支持后台执行,sap服务器没办法把文件写到本地)。程序设计的思路:1.创建个自建表,维护两个表中需要导出的字段清单2.取自建表清单数据,构造动态内表3.构造动态取表字段数据4.将动态数据存储至动态内表5.根据自建表取表字段的描述,构造导出结构的表头 6.循...原创 2022-01-04 12:08:11 · 5500 阅读 · 9 评论 -
SAP-ABAP-一般FUNCTION ALV代码示例
*&---------------------------------------------------------------------**& Report ZFIR251*&---------------------------------------------------------------------**& 集成凭证摘要取值*&---------------------------------------------------------.原创 2021-12-17 15:15:09 · 1008 阅读 · 0 评论 -
SAP 奇奇怪怪的表(持续更新)
SAP各种表原创 2020-06-29 11:22:08 · 1416 阅读 · 0 评论 -
SAP-ABAP-搜索帮助,及搜索帮助出口
1.创建搜索帮助2.使用说明2.1选择方法:指定搜索帮助表数据来源2.2对话类型2.2.1根据值集合的对话:如果数据量大于100条就不会直接展示数据,会先展示一个筛选界面2.2.2立即显示值:就是立即展示数据源表中的全部数据2.2.3具有值限制的对话:搜索帮助一开始不会将数据表中的全部数据展示出了,会给个筛选条件2.3输入字段的建议搜索帮助:如果勾选该字段则不需要调用搜索帮助,在输入字段中直接输入与该字段同名的搜索帮助的输入参数的值,系统会根据你输入的内容在下方.原创 2021-11-10 19:06:54 · 5335 阅读 · 0 评论 -
SAP-ABAP-SQL语句中分情况取值CASE WHEN 如何使用
*&---------------------------------------------------------------------**& Report ZLQT_SQL*&---------------------------------------------------------------------**&*&---------------------------------------------------------------...原创 2021-11-02 14:17:59 · 5686 阅读 · 0 评论 -
SAP-ABAP-SQL语句中CAST字段类型转换示例,CONCAT连接示例,SUBSTRING截断示例
本文只针对S/4 HANA 1809 及更高版本有效。话不多说,先上示例代码,然后再慢慢讲解 REPORT ZLQT_CAST. GET TIME STAMP FIELD DATA(timestamp). DELETE FROM demo_expressions. INSERT demo_expressions FROM @( VALUE #( id = 'X' timestamp1 = timestamp ) ). SELECT SINGLE FR原创 2021-10-20 16:31:59 · 6540 阅读 · 0 评论 -
SAP-ABAP-ALV弹出窗口供用户输入,获取输入数据
调用function :POPUP_GET_VALUES可以弹出下图窗口供用户选择并输入数据,效果图如下所示实现代码如下 DATA LV_STGRD TYPE RF05R-STGRD . DATA LV_BUDAT TYPE RF05R-BUDAT . DATA LV_MONAT TYPE RF05R-MONAT . DATA: it_value TYPE TABLE OF sval, wa_value TYPE sval, lv_rtn_.原创 2021-08-24 17:09:26 · 2089 阅读 · 1 评论 -
SAP-ABAP-会计凭证bapi更新BSED表增强
标准的会计凭证bapiBAPI_ACC_DOCUMENT_POST 无法更新票据相关数据想要同时更新票据BSED表相关数据需要按照下列步骤操作1.增强结构新增票据相关字段2.在调用程序bapi时export出数据至内存 DATA: lt_bsed TYPE TABLE OF bsed, ls_bsed TYPE bsed. DATA: lv_umskz_flag TYPE flag. " 用来判断要创建的会计凭证是否有特别总账标识 IF ...原创 2021-08-16 20:34:33 · 3105 阅读 · 2 评论 -
SAP-ABAP-代码扫描
SE38-->RS_ABAP_SOURCE_SCAN运行该程序可以扫描程序中的字符串,从而找到代码在哪使用了原创 2021-08-16 20:27:42 · 1198 阅读 · 0 评论 -
SAP-ABAP-动态创建表结构类的使用
*&---------------------------------------------------------------------**& Report ZLQT_STRUCT*&---------------------------------------------------------------------**&*&--------------------------------------------------------------.转载 2021-08-16 19:57:49 · 1798 阅读 · 1 评论 -
SAP-ABAP-如何根据XML报文动态创建表结构
当有时收到xml报文,但是没法解析时,可用该类按照报文生成特定的内表生成代码如下*&---------------------------------------------------------------------**& Report ZLQT_STRUCT*&---------------------------------------------------------------------**&*&------------------原创 2021-08-16 19:50:24 · 557 阅读 · 0 评论 -
SAP-ABAP-调用HTTP接口请求FUNCTION
为了方便方便调用http类型的接口,我将其进行了封装,只需传入报文及接口地址即可得到接口返回消息,具体如何新建function如下图所示,代码说明可详细看我这篇文章SAP-ABAP-如何用WEBAPI的方式调用外部接口。下面的截图是function的参数FUNCTION zrfc_call_http_request .*"----------------------------------------------------------------------*"*"本地接口:*..原创 2021-08-03 13:56:02 · 4286 阅读 · 6 评论 -
SAP-ABAP-如何打开本地文件
REPORTZLQT.CALLMETHODCL_GUI_FRONTEND_SERVICES=>EXECUTEEXPORTINGAPPLICATION='C:\ProgramFiles\InternetExplorer\iexplore.exe'"打开IE浏览器.调用类CL_GUI_FRONTEND_SERVICES方法EXECUTE输入参数APPLICATION,这个参数是本地文件地址上面的例子是打开ie浏览器也可以打开文件,下面的例子...原创 2021-07-29 16:14:15 · 1199 阅读 · 0 评论 -
SAP-ABAP- 如何查找表,字段有哪些关联表
当我们想查看某个字段的主数据表时,如果无法找到这个字段的清单,我们如何找呢?后台表DD08L存储表与表之间的关系,比如我们想查看所有的移动类型存在哪里,我们只知道移动类型的数据元素是BWART我们如何找移动类型的主数据表呢在表DD08L中字段名字段输入移动类型的数据元素,查询我们就得到一个清单,其中chack table 就是检查表 ,就能找到移动类型的清单了...原创 2021-07-28 14:09:55 · 1752 阅读 · 0 评论 -
SAP-ABAP-如何用WEBAPI的方式调用外部接口
话不多说,先上代码*&---------------------------------------------------------------------**& Report ZWEBAPI_TEST*&*&---------------------------------------------------------------------**&*&*&-----------------------------------原创 2021-07-22 17:56:08 · 3061 阅读 · 3 评论 -
SAP-ABAP-SE14丢失的数据如何恢复
在做项目时有时需要对标准表做增强,增加字段,但是如果增加的字段太长了想要改小,这时sap中SE11是不能直接激活的,需要SE14调整表才能改小,但是使用SE14风险太大了,稍微不注意就会导致被调整的表数据丢失。以VBAP表为例,SE14调整表的逻辑是把数据先复制到临时表QCMVBAP,然后将VBAP整个干掉,然后把新的表结构给VBAP,然后把临时表数据给新的VBAP所以千万注意注意,一定不要看着调整很久没有反应就自己强行断掉程序,这时基本都是在复制数据,你如果强行断掉了程序,那数据可不就是没有了嘛,原创 2021-07-09 16:22:20 · 2608 阅读 · 0 评论 -
SAP-ABAP-如何实时传输物料主数据,供应商主数据,工单,采购订单等信息给外部系统-隐式增强。
想要实时将各种主数据传输给外部系统,肯定是需要在创建和修改主数据后,保存时触发增强,然后调用接口,但是问题就在于基本一二三代增强都很少预留这种增强,在这里用到了第四代增强。为了保证所有的检查点都已经过了,我们的思路是在标准代码里面找到跟新数据库的语句COMMITWORK,在更新完成数据库表之后,但是退出前做增强。这里以生产订单为例。1.根据前台创建生产订单,一步一步跟踪,找到更新数据库语句(这一步是最耗时间的)我找到的生产订单更新数据库语句的代码如下图2.寻找更新后,退出前的隐式增强..原创 2021-07-09 15:48:20 · 3304 阅读 · 8 评论 -
SAP-ABAP-BAPI_GOODSMVT_CREATE创建物料凭证bapi的各种情况如何赋值
前言,对于BAPI_GOODSMVT_CREATE来说,赋值难的地方基本只有两个地方不明确,第一个地方就是import中的GOODSMVT_CODE字段,针对不同的事务代码输入不同的code,具体如下。01 - MB01 - Goods Receipts for Purchase Order02 - MB31 - Goods Receipts for Prod Order03 - MB1A - Goods Issue04 - MB1B - Transfer Posting05 - MB1原创 2021-07-09 15:01:56 · 8596 阅读 · 1 评论 -
SAP-abap-OLE核心代码
OLE定义DATA: stexcl TYPE ole2_object, stwkli TYPE ole2_object, stappl TYPE ole2_object, stwkbk TYPE ole2_object, stacts TYPE ole2_object, stshet TYPE ole2_object, stnush TYPE ole2_object, stnunm TYPE ole2_object,原创 2021-04-20 10:23:22 · 1066 阅读 · 0 评论 -
SAP-ABAP-MIR7增强,当供应商付款条件与主数据上的付款条件不同时不可保存
用户要求:MIR7供应商付款时,若应商付款条件与主数据上的付款条件不同时不可付款。三代增强增强点:MRM_HEADER_CHECK 方法:HEADERDATA_CHECK代码如下,此处使用W警告信息而非E错误的原因是如果检查报错了,E类型会导致无法修改错误的数据,所以此处用W警告,但是还是可以保存成功,所以需要加第二个增强。当TCODE为MIR4显示时不提示错误,免得用户操作麻烦 IF SY-TCODE <> 'MIR4'. SELECT SINGLE .原创 2021-04-14 15:41:11 · 3005 阅读 · 1 评论 -
SAP-ABAP-KO02修改系统状态增强
用户需求:结算内部订单时如果内部订单下有采购订单还没交货完成就结案了,会导致数据有问题,要求在KO02对内部订单做TECO时检查内部订单下的采购订单是否已经交货完成,没有则不允许TECO增强点:二代增强 COOPA_01代码如下IF I_CO_ACTION = '0013' AND I_ACTVT = '02' AND I_AUFK-PHAS1 = 'X'. SELECT EKKN~EBELN , EKKN~EBELP , EKKN~ZE原创 2021-04-14 15:30:08 · 1309 阅读 · 0 评论 -
SAP-ABAP-数据元素部分有效,表部分有效处理方法
在调用bapi修改数据元素,而非上传请求修改数据元素时,可能有修改失败的情况,会导致下图状况或者是表出现部分有效情况,这种时候需要激活数据元素,或者SE14重置表,注意需要在夜深人静没人使用系统时操作,否则会有大量运行时异常产生...原创 2021-04-09 13:58:00 · 604 阅读 · 0 评论 -
SAP-ABAP-OOALV进阶-子屏幕;各种方法示例;
程序目标:VL02N批次拆分操作起来太不友好了,用户想要一个能自动按照库存批次拆分的程序,同时还想要能手动挑选批次拆分的物料批次。先上代码,后附代码解析,按照步骤来复制到本地可以直接运行使用*&---------------------------------------------------------------------**& Report ZSD_R0028*&----------------------------------------------.原创 2021-04-06 17:30:57 · 2254 阅读 · 0 评论 -
SAP-ABAP-如何获取指定月份生产订单状态
首先数据来源是JCDS表,生产订单数据修改表。下列代码的作用是判断工单是不是TECO及REL状态FORM frm_del_not_stat . DATA lv_rel TYPE p . DATA lv_teco TYPE p . DATA lv_subrc like sy-subrc.* DATA: lt_budat LIKE range_c8 OCCURS 0 WITH HEADER LINE.* DATA: lt_jcds LIKE jcds OCCURS 0 WITH原创 2021-03-19 09:08:44 · 710 阅读 · 0 评论