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.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)