ABAP错误笔记

  • A+
所属分类:Notes

每次loop结束前必须clear工作区,否则会导致“占位”的请情况,比如上一个工作区的cost center字段有值,下一个记录的该字段没有值,如果上一次loop的时候没有clear,则下次会自动带到新的记录里,导致牛头不对马嘴的事情发生。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:16   其中:访客  16   博主  0

    • ag

      abap rfc函数提示Reference parameters are not allowed with RFC
      原因:输入的传入参数的abap rfc函数至少要有一个pass value(至少应该有一个必选的传入值),即如果importing这一栏有字段,则至少有一个字段勾选了“pass value“,如果没有字段则没有影响!!

        • ag

          @ag 所谓pass value,就是远方调用程序必须要传入该变量,否则就会报错的。

        • ag

          The column name is ambiguous ABAP/4 Open SQL statement.
          原因:使用join查询的时候如果关联查询的多个表中有相同的字段但是没有指定从哪个表去数据就会出现该错误。

          例如:下面的句子就会报错:SELECT
          lfb1~bukrs
          lifnr
          lfa1~name1
          INTO CORRESPONDING FIELDS OF TABLE zvendor_list001
          FROM lfb1
          INNER JOIN lfa1 ON lfa1~lifnr EQ lfb1~lifnr
          WHERE bukrs EQ p_bukrs.

          上面的句子之所有会报错,是因为lifnr这个字段在两个表中都存在,但是没有指定从哪个表取,所以报错。

          改成下面的就可以了:
          SELECT
          lfb1~bukrs
          lfa1~lifnr
          lfa1~name1
          INTO CORRESPONDING FIELDS OF TABLE zvendor_list001
          FROM lfb1
          INNER JOIN lfa1 ON lfa1~lifnr EQ lfb1~lifnr
          WHERE bukrs EQ p_bukrs.

          • ag

            无法通过维护视图往表里插入/删除数据:经查询是因为透明表或者维护视图中有主键没有排在前面。将主键的位置移到前面后问题解决。

            • ag

              通过维护视图维护数据时不显示维护界面,提示“SV065 ‘No entres exist.double click for long text’.”。

              原因:对应的透明表只有一个主键,解决方法:
              Hi

              You cant create a table with out primary keys.

              A table must have atleast 2 keys fields (mandt and any other field) to form a composite primary key.

              and this is the reason why u cannot able to create new entry in your table.

              Regards,

              Sakthi.

              https://archive.sap.com/discussions/thread/1422955

              • ag

                使用last_day_of_month时报“NO_DAY_IN_DATE”,经查询是因为传入的日期不合法,比如传入了20161301或者20160013,原因为前面的数据处理不合理,没有对年月的有效性做限制。

                其次,通过字符串截取的形式获取的日期接收的变量如果是N类型必须定义长度,否则默认长度为1,当月份大于9(一位)的时候将会自动变成0.

                • ag

                  调试loop循环的时候断点要打在loop里面的语句中,而不是loop那一行,否则按F7时无法跳过循环、没有用、会直接跳过函数。

                  • ag

                    如何不小心删了ABAP代码或者FM如何恢复:
                    What if you accidentally delete a custom program/ function module:
                    Program:
                    Go to Tr: SE38
                    Type in your program name same as earlier name-> save and activate the empty program -> go back to the SE 38-> Go to Utilities -> Version management -> Check the recent version than your current one -> Retrieve.
                    Function Module: Tr: SE37
                    Type in your FM name same as your deleted one-> save it to the same function group as before without any code-> come back to the SE37-> Go to Utilities -> Recover your old version.
                    You could also do a remote comparison in your code between two systems. Between development and test system, or test system and production system.
                    This is strictly recommended for transportable objects only.

                    • ag

                      修改后的程序一定要及时传到目标系统,不要等很久之后才传,这样可能导致在你传输之前你自己或者别人已经用其他请求号做了修改,结果你把很久之前的请求给覆盖过去,把程序给还原了。

                      • ag

                        如果你要覆盖整个程序过去,一定要打开该程序的每一个include文件,敲一个空行啥的,激活一下再包含到请求中,直接包含是没有作用的,目标系统上的程序不会发生任何变化。

                        • ag

                          abap怎么把一个内表的全部数据一次追加到另外一个内表:
                          如果要保留目标表的数据:append lines of it_tabA to lt_tabB.
                          如果只是单纯的内表赋值:it_tabB[] = it_tabA[].

                          • ag

                            当通过SE11更改变的结构时,又如主键的变化、小数位长度的变化时需要通过SE14调整数据库。

                            简单的说,如果一个表中已经有数据,但是se11修改了表结构,可以用SE14在保留数据的同时修改表结构。

                            • ag

                              ABAP删除Z表的数据的正确语法(注意要加COMMIT WORK AND WAIT.):

                              DELETE FROM ZMYTABLE.
                              COMMIT WORK AND WAIT.
                              参考:https://archive.sap.com/discussions/thread/253724

                              • ag

                                使用

                                DELETE ADJACENT DUPLICATES FROM itab[] COMPARING fielda fieldb.之前必须进行排序,否则此句子基本上没有任何作用,并且后续如果将盖内表插入数据库、会导致abap dump(数据重复错误!) !

                                参考:

                                SORT LT_ZFKSTO[] BY VKORG VBELN.
                                DELETE ADJACENT DUPLICATES FROM LT_ZFKSTO[] COMPARING VKORG VBELN.

                                • ag

                                  将整个内表往数据库塞:
                                  INSERT ZBW_FKSTO_DEL FROM TABLE LT_ZBW_FKSTO_DEL.

                                  • ag

                                    MOVE-CORRESPONDING LT_BDATA_TEMP[] TO LT_ZBW_FKSTO_DEL[].