ABAP小计

本文介绍了ABAP编程中的一些实用技巧和常见问题的解决方案,包括权限检查、限制屏幕选择行数、ALV导出XLS问题、借/贷符号处理、删除号码范围、内表操作、自建界面搜索帮助以及如何处理负号前移等问题。同时,文章还提到了BOM展开、选择屏幕空行、删除内表重复行的方法以及调用交易代码的多种方式。此外,还包括一些SAP系统中的特定函数和搜索帮助的设置。
摘要由CSDN通过智能技术生成

1.         关于权限检查

用在at selection-screen之后

工厂权限检查对象:M_MATE_WRK

一般格式:

  AUTHORITY-CHECK OBJECT 'F_KNA1_BUK'

                  ID 'BUKRS' FIELD p_bukrs.

  IF sy-subrc <> 0.

    MESSAGE e068(zfi) WITH p_bukrs.

    STOP.

  ENDIF.

 

2.         关于屏幕只能选中一行的程序

自动生成程序有问题

FIELD XXX-mark

   MODULE citab2_mark ON REQUEST.

只要mark有改变即会进入MODULE,选另外一行时有两次循环

分别为选中的一行,和之前选中的一行

解决方法:避免进入之前选中一行的循环

 

3.         关于ALV中导出XLS的问题

当一行的总长度超过1024时,XLS将分两行显示

只要有一行超过,所有的行都分两行显示

 

4.         /  S/H   +/-

  SHKZG

 

5.         SNRO 删除号码范围

必需把号码当前值置为零才能删除或者修改

 

6.         内表当前行 != 维护界面当前行

 内表当前行 = 维护界面当前行 + 维护界面-top_line - 1

 

7.         自建界面搜索帮助

*---ADD BY DEV19---*

PROCESS ON VALUE-REQUEST.

  FIELD t_mm504-lifnr MODULE help_lifnr.

*---END BY DEV19---*

MODULE help_lifnr INPUT.

  DATA: BEGIN OF h_tab OCCURS 0,

          werks LIKE t001w-werks,

          matnr LIKE mara-matnr,

          ekorg LIKE eine-ekorg,

          lifnr LIKE lfa1-lifnr,

          name1 LIKE lfa1-name1,

        END OF h_tab.

 

  DATA: l_repid  LIKE sy-repid,

        l_dynnr LIKE sy-dynnr.

 

  l_repid  = sy-repid.

  l_dynnr = sy-dynnr.

 

 

  GET CURSOR LINE lin.

  p_lin = tc_mm504-top_line + lin - 1.

  READ TABLE t_mm504 INDEX p_lin.

 

  CLEAR h_tab.

  REFRESH h_tab.

 

*---取标准信息记录---*

  CLEAR h_tab.

  SELECT

      ewerk

      matnr

      eiorg

      lifnr

      name1

    INTO (h_tab-werks,

          h_tab-matnr,

          h_tab-ekorg,

          h_tab-lifnr,

          h_tab-name1)

    FROM zm_kredm

    WHERE ewerk = p_werks

      AND matnr = t_mm504-matnr.

 

    APPEND h_tab.

    CLEAR h_tab.

  ENDSELECT.

*---取自建信息记录---*

  CLEAR h_tab.

  SELECT

      a~werks

      a~matnr

      a~ekorg

      a~lifnr

      b~name1

    INTO (h_tab-werks,

          h_tab-matnr,

          h_tab-ekorg,

          h_tab-lifnr,

          h_tab-name1)

    FROM zmm_bj18 AS a

    INNER JOIN lfa1 AS b ON b~lifnr = a~lifnr

    WHERE a~werks = p_werks

      AND a~matnr = t_mm504-matnr

      AND a~zflag = 'Y'.

 

    APPEND h_tab.

    CLEAR h_tab.

  ENDSELECT.

 

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

    EXPORTING

      retfield        = 'LIFNR'

      dynpprog        = l_repid

      dynpnr          = l_dynnr

      dynprofield     = 'T_MM504-LIFNR'

      value_org       = 'S'

    TABLES

      value_tab       = h_tab

    EXCEPTIONS

      parameter_error = 1

      no_values_found = 2

      OTHERS          = 3.

ENDMODULE.                 " help_lifnr  INPUT

 

8.         修改或者新建自建表时,把所有的数据元素和域都重新激活一遍

  如果要参考某个数据元素,最好用系统表字段,如要用自建表字段,务必确定此表已经传输

 

9.         关于负号前移

第一種:

 

PERFORM change_qty USING l_srqty CHANGING it_inv-srqty.

FORM change_qty USING p_qty CHANGING p_qty1.

p_qty1 = p_qty.

SHIFT p_qty1 LEFT DELETING LEADING ' '.

SHIFT p_qty1 UP TO '-' LEFT CIRCULAR.

CONDENSE p_qty1 NO-GAPS.

ENDFORM. " change_qty

第二種:

 

目的:将字符串尾的负号放在字符串首

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'

CHANGING

value = itab-amunt.

 

第一种适合write

第二种适合alv

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值