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.