SAP
文章平均质量分 56
风花月阳
这个作者很懒,什么都没留下…
展开
-
ABAP快速读取动态内表
当读取大数据量内表时,用where条件性能超低,尤其是动态内表,连where字段名都不知道。请尝试以下方法提高程序性能。原创 2022-11-16 10:43:29 · 645 阅读 · 1 评论 -
ABAP 汇总数据为何不用COLLECT
经常看到有人根据关键字段汇总数据到另一个内表时,会先判断关键字段是否存在,存在则修改,否则添加,比如下面:这种写法不是不可以,但是为什么不用COLLECT语句更明了呢,有人说COLLECT语句性能不好,那就用事实来说明。在30万行数据情况下,事实说明两种写法运行时间不是一个级别,用COLLECT 明显比第一种写快3秒左右。然而需要汇总的数据内表推荐使用hash内表,效果更佳,如下:通过比较第三种写比第二种写法略胜一丢丢,可以忽略。但如果后续要根据关键字从已汇总的内表数据中读取出数据,.原创 2021-08-27 09:56:13 · 572 阅读 · 1 评论 -
ABAP 给数据表写修改记录
在调用BAPI时,一般会自动写数据表的修改记录,但有些简单的逻辑,不需要使用BAPI实现,直接使用SQL语句修改数据表时,为了方便查找字段的修改记录可以以下方法实现。DATA: OBJECTID TYPE CDHDR-OBJECTID,TCODE TYPE CDHDR-TCODE,PLANNED_CHANGE_NUMBER TYPE CDHDR-PLANCHNGNR,UTIME TYPE .原创 2021-08-05 13:47:06 · 867 阅读 · 0 评论 -
使用SAP Commit Work时犯的错误
在一次批量使用BAPI的功能开发时,在CALL BAPI之后,一般都会判断是否成功,如果成功则执行语句 COMMIT WORK AND WAIT,否则执行语句ROLLBACK WORK,比如:LOOP AT ITAB.CALL FUNCITON ‘BAPI_XXX_XXX’.IF SY-SUBRC = 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF."不管以上成功与否,接下来都要更新自定义表的某些数据perform update_xxxx.原创 2021-07-23 10:36:28 · 2067 阅读 · 0 评论 -
通过Function找SMOD增强
有时即使实现了出口Funciton,还要通过SMOD去激活增强.因此需要通过Function找SMOD增强.原创 2021-01-04 15:48:34 · 158 阅读 · 0 评论 -
CONVERT_TO_LOCAL_CURRENCY货币转换问题
货币金额转换时,输入金额字段和输出金额字段的小数位必须一致,否则导致转换的金额被放大或缩小。测试:声明输入金额字段与输出金额字段小数位都为2,100USD = 708.83CNY,正确。以下小数位变化,导致转换结果错误。...原创 2020-07-02 20:09:09 · 1795 阅读 · 0 评论 -
SAP ABAP 内表导出EXCEL 新方法
ABAP 内表导出EXCEL可以用OLE方法,也可以用SAP已有的函数:RH_START_EXCEL_WITH_DATA,GUI_DOWNLOAD,还可以:dataGT_HEADER TYPE LVC_T_FCAT."需要导出EXCEL的标题data:r_result_datatypereftocl_salv_ex_result_data_table....原创 2020-01-16 10:16:58 · 4281 阅读 · 0 评论 -
ABAP 调用Function 处理 E 类型消息问题
有时在function中会用到调用标准程序中的某form,但form中的消息是直接以Message方式显示在前端。如MESSAGEE007(QA)WITHL_USER-NAME_TEXTQALS-PRUEFLOS.比如写了一个function :ZMES_INSPLOT_DECISION 调用 QA11中的formauto_ud,再在程序中调用 function :ZMES_INSP...原创 2020-01-10 10:34:30 · 1965 阅读 · 0 评论 -
SAP QA11 检验决策并过帐 BAPI
在对检验批做决策时可以使用BAPI:BAPI_INSPLOT_SETUSAGEDECISION。此BAPI其实也可以过帐,但不能针对不同的类型过帐,比如有部分数量进入非限制库存,有部分数量进入冻结库存,有部分数量要退货等,只能是一次性对所有数量进行非限制库存过帐。BAPI调用如下:DATAud_dataLIKEbapi2045ud.DATA:ud_return_dataLIK...原创 2020-01-08 16:27:56 · 9775 阅读 · 1 评论 -
BAPI_MATERIAL_SAVEREPLICA扩展字段注意
BAPI_MATERIAL_SAVEREPLICA中需要对物料主数据比如MARA的附加结构进行维护时,需要使用BAPI的扩展结构。经过调试BAPI发现包含文件L1001MASSUEBF01处理扩展字段时语句如下:传入的结构名有两个cust_maraLIKEt133d-routnVALUE'BAPI_TE_E1MARA',cust_mara2LIKEt133d...原创 2019-11-08 15:57:41 · 5044 阅读 · 0 评论 -
ABAP 不要以为会JOIN就显得SQL语句很高明
最近用户用一个报表查看采购订单的修改记录,结果运行了30分钟还没出来,选择条件如下: 而查看其源代码,是这样写的SQL语句:用EKKO的EBELN关联CDHDR的objectid,还join EKPO,join MARA可想而知数据量有多大。此语句系统应该会先找CDHDR中所有 objectid与 EKKO的所有采购订单EBELN匹配,找出的结果再排除在修改日期在201...原创 2019-09-10 09:26:01 · 708 阅读 · 0 评论 -
ABAP 显示增强与隐式增强
ABAP 增强有显式和隐式两种:USEREXIT,BADI,ENHANCEMENT-POINT,属于显式增强,这类增强分布在SAP 源代码的各个地方。我们一进入TCODE SE37 ,SE38 在SAP源代码中可以直接查看得到,如: 而隐式增强一般在每个form或function或method的第一行和form或function或method的最后一行,需要如下操作...原创 2019-08-02 11:28:19 · 7704 阅读 · 0 评论 -
ABAP 为什么我的程序能一眨眼就运行出来
最近业务顾问让我在一个报表上增字段,在我不了解此报表逻辑情况下,只好先运行此报表看看结果是什么样子的。谁知道运行了N久,我实等得不耐烦了,只好强行停止运行。作为ABAP开发多年,我一直强调,凡事性能差的开发都是耍流氓。于是SE38进行看源代码,到底里面写了些啥。 首先从代码的结构布局上来看就不怎的。ABAP程序员有一个惯例,即先写一个取数的form:PERFORMfrm_get...原创 2019-08-04 12:00:10 · 413 阅读 · 0 评论 -
SAP ALV 选择模式
ALV多种选择模式,适应不同用户需求,比如用户想选择某个区域的数据进行复制,此时就要用到单元格区域选择。ALV有以下几种选择模式:A:if_salv_c_selection_mode=>row_column.多行多列选择。有选择块,通过前面的选择块选择行,但不可以选择单元格区域。B:if_salv_c_selection_mode=>single.单...原创 2019-06-28 08:51:01 · 9769 阅读 · 1 评论 -
FOR ALL ENTRIES IN 语句真的会排除重复数据吗
ABAP OPEN SQL "FOR ALL ENTRIES IN " 语句从数据库取数时,会根据select 查询的字段排除重复项,(注意:不是根据内表字段排除重复项)。比如:"取出会计凭证DATAlt_belLIKESTANDARDTABLEOFgs_bel."如果在SELECT 里指定了搜索字段,以下语句查询字段中没有BUZEI,即会计凭证项目字段,则查询结果会自动根...原创 2019-05-31 11:11:43 · 1784 阅读 · 0 评论 -
为内表动态添加字段
有时内表部分字段是明确的,部分字段需要在运行时动态添加。 1.先把明确固定的字段声明一个结构,注意字段参照数据元素,或数据字典中的字段。如: DATA:BEGIN OF gs_main1, werks LIKE marc-werks, matnr LIKE mara-matnr, matne LI...原创 2019-05-08 14:21:30 · 2091 阅读 · 0 评论 -
物料BOM修改的函数 CSAI_BOM_MAINTAIN的BUG
曾经用CSAI_BOM_MAINTAIN 修改BOM,当BOM项目存在长文本需要写入,且BOM项目很多时,发现此函数修改完成后,长文本内容对应的BOM项目与我们实际传入的错位了。(也许是我们传值有错误?如果是请联系微信) 例如:我们需要BOM项目40项的长文本内容是T1……,第50项目需要删除,项目60的长文本内容是T2……,项目70的长文本为 T3……,此时发现调用函...原创 2019-03-02 17:39:37 · 2229 阅读 · 0 评论 -
SAP ABAP 语句性能对比
获取内表部分字段 从一个内表抽取部分字段到另一个内表,要求字段名相同。方法一:循环添加;方法二:MOVE-CORRESPONDINGITAB1[]TOITAB2[]DATA:BEGINOFGS_OUT,EBELNLIKEEKPO-EBELN,EBELPLIKEEKPO-EBELP,MATNRLIKEEKPO-MATNR,M...原创 2019-03-02 14:52:06 · 887 阅读 · 0 评论 -
关于ABAP BINARY SEARCH搜索不到值问题
第1次读取不到的原因是with key 后面字段没有按排序字段顺序,matnr 字段放在werks 字段前面,修改字段顺序后成功读取。 另外,如果gt_matn内表字段过多时,需要binary search字段应放在前面,否则也可能读取不到,如果sy-subrc = 8 ,则是因为内表没有排序,如果sy-subrc = 4,则是因为根据条件没有找到值。...原创 2019-03-05 10:51:25 · 1138 阅读 · 0 评论