ABAP 基础语法

1、DESCRIBE TABLE itab LINES n. 该语句通过获得内部表的属性,将内部表行数赋值给n,n为I型变量。
2、负号前置
第一种:适用于字符型字段:
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
        CHANGING
          VALUE = gt_table-column5.
第二种:
         SEARCH IT_OUT-LEND FOR '-' .
         IF SY-SUBRC = 0.
           CONCATENATE '-' IT_OUT-LEND INTO IT_OUT-LEND. ”负号提前
           CONDENSE IT_OUT-LEND NO-GAPS. “去掉空格
         ENDIF.
第三种:类型还是金额等数字类型,负号实现前置;

源代码:
FUNCTION CONVERSION_EXIT_Z001_OUTPUT.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: OUTPUT1(20),
      OUTPUT2(20),
      OUTNUM(16) TYPE P DECIMALS 2.
  OUTNUM = INPUT.
  IF INPUT >= 0.
    WRITE OUTNUM TO OUTPUT1.
  ELSE.
    OUTNUM = OUTNUM * ( -1 ).
    WRITE OUTNUM TO OUTPUT1.
    CONCATENATE '-' OUTPUT1 INTO OUTPUT1.
  ENDIF.

CONDENSE OUTPUT1 NO-GAPS.
WRITE OUTPUT1 TO OUTPUT2 RIGHT-JUSTIFIED.
OUTPUT = OUTPUT2.
CLEAR: OUTPUT2.
ENDFUNCTION.
最后,在对应的alv设置fieldcat时针对设置金额等数字类型的字段添加代码:固定写成’ZXXX’形式。

3、SELECTION-SCREEN用法
(1)SELECTION-SCREEN POSITION XX.
这条语句的作用是将该语句后面的第一个Screen element定位在这一行的XX位置,最大值为79。
(2)SELECTION-SCREEN COMMENT XX(Y) TEXT-XXX FOR FIELD XXX.
这条语句的作用是在当前行的指定列位置处输出一段文本,For field则表示文本与某个element 关联,当此语句使用时,可以不必设定屏幕的Text element,系统会自动关联。XX表示位置,Y表示长度,注意,如果长度不足,超常的文字将被截掉。
(3)SELECTION-SCREEN SKIP 1.
跳过一行。

4、指针
LOOP AT TABLE ASSIGNING FIELD SYMBOL (<fs>) 直接更新内表数据
ENDLOOP.

LOOP AT TABLE ASSIGNING <FS> FROM …TO… "行数
ENDLOOP.

 

FIELD-SYMBOLS: <FS>.
DESCRIBE TABLE gt_mseg LINES n.
Do n times.
L_CNT = SY-INDEX.
ASSIGN (L_FIELD) TO <FS>.
if (L_FIELD) is not intinal.
modify gt_alv from gs_alv.

5、alv合计
DATA: BEGIN OF i_data OCCURS 0,
   zlabst LIKE mard-labst,"汇总的良品库存
  maktx  LIKE makt-maktx,"物料描述
   matnr  LIKE afpo-matnr,"物料号
  zpsmng LIKE afpo-psmng,"总的工单数量
  zwemng LIKE afpo-wemng,"总的已交货数量
  zqty   LIKE afpo-psmng,"总的欠单数量
END OF i_data.
DATA: w_data LIKE TABLE OF i_data WITH HEADER LINE.
DATA: w_line LIKE LINE OF i_data. 
根据物料号汇总工单总量/总入库量/总欠工单数
    SORT w_data BY matnr.
* AT END OF 方法:
    LOOP AT w_data INTO w_line.
      AT END OF matnr.
        SUM.
        i_data-matnr = w_line-matnr.
        i_data-maktx = w_line-maktx.
        i_data-zlabst = w_line-zlabst.
        i_data-zpsmng = w_line-zpsmng.
        i_data-zwemng = w_line-zwemng.
        i_data-zqty = w_line-zqty.
        APPEND i_data.
        CLEAR i_data.
        CLEAR w_line.
      ENDAT.
    ENDLOOP.

*collect 方法
  LOOP AT w_data.
    MOVE-CORRESPONDING w_data TO i_data.
    COLLECT i_data.
    CLEAR w_data.
    CLEAR i_data.
  ENDLOOP.
    内表w_data中包含matnr/maktx/zlabst/zpsmng/zwemng/zqty六个字段,其中前两个为非数字字段,后四个为数字字段,需要汇总的字段为最后三个。
6、循环内表
LOOP AT GT_DATA INTO GS_DATA WHERE sel = 'X'. **X大写
ENDLOOP.
7、给自建表创建事务码
创建程序
SET PARAMETER ID 'DTB' FIELD 'ZTMMR011'.
CALL TRANSACTION 'SE16' AND SKIP FIRST SCREEN.
SE93创建事务码(与创建程序事务码同步骤)
8、ALV最后一行合计

 9、READ TABLE 之前必须排序,否则取不到数

READ TABLE 内表 INTO 工作区 WITH KEY 主键字段
SORT 内表 BY 字段
10、选择屏幕添加配置表维护

*===============================================================
*                      Input Selection Screen
*===============================================================
SELECTION-SCREEN: FUNCTION KEY 1.
INITIALIZATION.
  DATA: lv_functxt TYPE smp_dyntxt.
  DATA: lt_exclude TYPE TABLE OF sy-ucomm.
  lv_functxt-icon_id   = icon_intensify.
  lv_functxt-icon_text = '配置表维护'.
  sscrfields-functxt_01 = lv_functxt.
*==============================================================
*                        At Selection Screen
*==============================================================
AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.          "处理按钮命令
    WHEN'FC01'.
      PERFORM frm_call_sm30 USING 'ZTFI0007'.
  ENDCASE.
*&---------------------------------------------------------------------*
*& Form FRM_CALL_SM30
*&---------------------------------------------------------------------*
FORM frm_call_sm30  USING lv_name.
  DATA:gt_dba_sellist TYPE STANDARD TABLE OF vimsellist.
  DATA:gt_tabname TYPE dd02v-tabname ."表名称
  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                         = 'U'
      generate_maint_tool_if_missing = 'X'
      view_name                      = lv_name
    TABLES
      dba_sellist                    = gt_dba_sellist
    EXCEPTIONS
      client_reference               = 1
      foreign_lock                   = 2
      invalid_action                 = 3
      no_clientindependent_auth      = 4
      no_database_function           = 5
      no_editor_function             = 6
      no_show_auth                   = 7
      no_tvdir_entry                 = 8
      no_upd_auth                    = 9
      only_show_allowed              = 10
      system_failure                 = 11
      unknown_field_in_dba_sellist   = 12
      view_not_found                 = 13
      maintenance_prohibited         = 14
      OTHERS                         = 15.

  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

11、计量单位内外码转换(ST转换PC)

调用函数 “CONVERSION_EXIT_CUNIT_OUTPUT

ALV内表显示后计量单位显示为****号,可以将字段类型改为CHAR类型。

 12、ALV过滤器(filter)中的字段长度不匹配

调用REUSE_ALV_GRID_DISPLAY_LVC创建一个ALV,使用过滤器功能对物料字段进行筛选时,发现过滤器(filter)屏幕中的字段长度过短,与物料长度不一致。

 强制在field catalog中指定output长度

 修改后:

 13、ABAP 中前导零问题

*补全前导零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = lv_in
    IMPORTING
      output = lv_in.
*ABAP去除前导零
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      input  = lv_in
    IMPORTING
     output = lv_in.

 

posted @   Camellia_85  阅读(1032)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示