ABAP 技術小結

qiujun發表於2008-03-26

自從作了外部顧問,好久沒有發文章上來了,感覺水平有所下降,天天都是在敢任務,也沒注意過程式的效能。今天上來發些實用的東東,認為有用的就看看吧。

DATA: it_po LIKE it_alv OCCURS 0 WITH HEADER LINE.
********************************************************************************************
TSTC SAP 事務程式碼表
********************************************************************************************
CENTERED
********************************************************************************************
合併請求的方法: 選中請求點選選單上的實用程式->重新組織->合併請求
********************************************************************************************
FIELD-SYMBOLS: TYPE I.
DATA: I1 TYPE I, I2 TYPE I.
ASSIGN I1 TO .
I2 = .
********************************************************************************************
* Range to be deleted: 450 .. 550
DELETE ITAB FROM 450 TO 550.
********************************************************************************************
I = 250.
INSERT LINES OF ITAB1 INTO ITAB2
INDEX I.
********************************************************************************************
APPEND LINES OF ITAB1 TO ITAB2.
將ITAB1中的資料一一對應到ITAB2中,兩個內表可以結構不同,不用放在LOOP中
********************************************************************************************
LOOP AT ITAB1 INTO WA.
COLLECT WA INTO ITAB2.
ENDLOOP.
SORT ITAB2 BY K.
********************************************************************************************
READ TABLE ITAB INTO WA
WITH KEY K = 'X'.
********************************************************************************************
APPEND WA TO ITAB.
********************************************************************************************
UPDATE SFLIGHT
SET SEATSOCC = SEATSOCC - 1.
********************************************************************************************
DATA: MAX_MSGNR type t100-msgnr.
SELECT MAX( MSGNR ) FROM T100 INTO max_msgnr
WHERE SPRSL = 'D' AND
ARBGB = '00'.
********************************************************************************************
讀工藝路線的text
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'AVOT'
language = sy-langu
name = lc_tdname
object = 'AUFK'
TABLES
lines = it_tline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
********************************************************************************************
CDHDR table 更改憑證抬頭 主資料有更改的記錄 透過OBJECTID link
********************************************************************************************
DATA it_tab TYPE STANDARD TABLE OF mara WITH HEADER LINE.
********************************************************************************************
WRITE l_count TO it_tail-line_items_number LEFT-JUSTIFIED.
********************************************************************************************
SY-DBCNT DB operations, number of table lines processed ZSDR00033F01
********************************************************************************************
AND vbuk~vbtyp = 'J' "DN
AND vbuk~wbstk = 'C' "PGI finished
********************************************************************************************
Dir Path:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_patch.
PERFORM get_download_path CHANGING p_patch.

FORM get_download_path CHANGING p_file LIKE rlgrap-filename.
DATA: l_path TYPE string.
DATA: l_len TYPE i.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Select Your Folder'
CHANGING
selected_folder = l_path
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
MOVE l_path TO p_file.
l_len = STRLEN( l_path ).
IF l_len > 3.
CONCATENATE p_file '' INTO p_file.
ENDIF.
ENDFORM. " get_download_path
********************************************************************************************
FORM format_data. ZIMR00047F01 格式轉換 從內表到檔案
LOOP AT it_strloc.
PERFORM fields_to_line_by_indicator
USING it_tloc-f1 it_strloc c_indicator.
APPEND it_tloc.
ENDLOOP.
ENDFORM. "format_data

FORM fields_to_line_by_indicator USING p_line
p_tab
p_seperator.
DATA: l_line TYPE string.
FIELD-SYMBOLS: .
CLEAR: p_line.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE p_tab TO .
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF sy-index = 1.
p_line = .
ELSE.
l_line = .
CONDENSE l_line.
CONCATENATE p_line p_seperator l_line INTO p_line.
ENDIF.
ENDDO.
ENDFORM. "fields_to_line_by_indicator
********************************************************************************************
*&Get Standard Cost FROM mbew
********************************************************************************************
write時將'-'號提前
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.
********************************************************************************************
CONCATENATE sy-datum(4) '-' sy-datum+4(2) '-' sy-datum+6(2) INTO it_stock-date.
********************************************************************************************
IF it_itab-zzalc IS NOT INITIAL.
DO 12 TIMES.
l_num = sy-index - 1.
ASSIGN it_itab-zzalc+l_num(1) TO .
CONCATENATE l_text cl_abap_char_utilities=>horizontal_tab INTO l_text.
ENDDO.
SPLIT l_text AT cl_abap_char_utilities=>horizontal_tab
INTO it_itab-digit1
it_itab-digit2
it_itab-digit3
it_itab-digit4
it_itab-digit5
it_itab-digit6
it_itab-digit7
it_itab-digit8
it_itab-digit9
it_itab-digit10
it_itab-digit11
it_itab-digit12.
ENDIF.
********************************************************************************************
PERFORM get_standard_price_from_mbew
SELECT SINGLE w~bwkey t~waers
INTO (t001w-bwkey,p_waers)
FROM t001w AS w INNER JOIN t001k AS k ON w~bwkey = k~bwkey
INNER JOIN t001 AS t ON k~bukrs = t~bukrs
WHERE w~werks = p_werks.
SELECT SINGLE stprs peinh
INTO (p_netpr,p_peinh)
FROM mbew
WHERE matnr = p_matnr
AND bwkey = t001w-bwkey.
********************************************************************************************
PARAMETERS p_pwd(30) TYPE c LOWER CASE DEFAULT 'sapuser' OBLIGATORY,
LOOP AT SCREEN.
IF screen-name = 'P_PWD'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
輸出時讓password顯示為******
********************************************************************************************
UPDATE zimpiccma0002
SET stats = '1' numla = g_lastnum
WHERE gjahr = p_gjahr
AND verso = p_verso
AND werks = p_werks.
********************************************************************************************
DD_DOMA_GET or DDIF_DOMA_GET 取 domain的FN
DD07V 取 domain的table
********************************************************************************************
check 是否是NUM型
CALL FUNCTION 'CATS_NUMERIC_INPUT_CHECK'
********************************************************************************************
CALL FUNCTION 'CY_IS_INTEGER'
EXPORTING
string_to_be_checked = it_tab-new
EXCEPTIONS
not_an_integer = 01.
IF sy-subrc <> 0.
CONCATENATE 'In-house production must be integer' '.'
********************************************************************************************
LOOP AT it_table2 WHERE belnr = it_wa-lfbnr
AND buzei = it_wa-lfpos.
IF l_shkzg = 'H'.
it_table2-mengr = it_table2-mengr - it_wa-menge.
ELSE.
it_table2-mengr = it_table2-mengr + it_wa-menge.
ENDIF.
MODIFY it_table2.
CLEAR it_table2.
ENDLOOP.
********************************************************************************************
CONCATENATE it_header-line ',' cl_abap_char_utilities=>newline INTO it_header-line. 換行
********************************************************************************************
FORM get_tab_char .
DATA l_string(1024).
CALL FUNCTION 'STPU1_HEX_TO_CHAR'
EXPORTING
hex_string = 'X9'
IMPORTING
char_string = l_string.
g_tab = l_string.
ENDFORM. " get_tab_char
********************************************************************************************
RANGES r_lgort FOR ekpo-lgort. ZSDR00036
SELECT sign opti AS option low high
INTO CORRESPONDING FIELDS OF TABLE r_lgort
FROM tvarvc
WHERE name = 'MM__RT_PRCODE'.

*&avoid show dump when range fields 'sign' and 'option' is intial
DELETE r_lgort WHERE sign IS INITIAL OR option IS INITIAL.
********************************************************************************************
WRITE l_temp TO p_fdate USING EDIT MASK ' ____/__/__'.

AND VBTYP NOT IN ('N','S').
********************************************************************************************
DATA: l_datum(8) TYPE c.
l_datum = sy-datum. "ES 070301
l_datum+6(2) = '01'.
********************************************************************************************
call Function 'KD_GET_FILENAME_ON_F4' 上傳檔案控制檔案型別
msak = '*.xls'
********************************************************************************************
check全形or半形的方法
第一種方法
SJIS_DBC_TO_SBC 全形轉半形
SJIS_SBC_TO_DBC 半形轉換為全形
設定 import
all =x
text = 文字
全形-〉半形,返回值 1
全形-〉全形 返回值0
第二種方法
REPORT ZZXIAOXIN0999.
DATA: last_ascii_zf(2) TYPE x value '00FF'. "unicode MIT
DATA: last_ascii_en(2) TYPE x value 'A100'. "unicode MIT
data char(33) type c.
data: point(2) type x.
char = 'ssss'.
point = cl_abap_conv_out_ce=>uccp( char ).
if point <= last_ascii_zf.
else.
write 'double byte char'.
endif.
********************************************************************************************
table T247 Month name and short text
********************************************************************************************
SELECT DISTINCT bukrs
INTO TABLE lt_bukrs
FROM t001
WHERE bukrs IN s_bukrs.
加上[DISTINCT]會自動去除重複的記錄 ZFIR00025
********************************************************************************************
***** 1: 補零 2. 去零
call function 'CONVERSION_EXIT_ALPHA_INPUT'
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
********************************************************************************************
IF w_infor-datab NOT BETWEEN l_minus_datab AND l_plus_datab.
DAY_IN_WEEK 求今天星期幾
********************************************************************************************
IF it_zppasbuma0001[] IS NOT INITIAL. ZPPE0002 出資料
no_update = 'X'.
EXPORT it_zppasbuma0001[] TO MEMORY ID 'ZPPASBUMA0001'.
SUBMIT zppr00067 AND RETURN.
FREE MEMORY ID 'ZPPASBUMA0001'.
ENDIF.

IMPORT it_zppasbuma0001[] FROM MEMORY ID 'ZPPASBUMA0001'. ZPPR00067 接資料

********************************************************************************************

w_message1 = 'Physical inventory counting is on going,'.
w_message2 = 'change is not allowed'.
MESSAGE ID 'ZPP01' TYPE 'I' NUMBER 000
WITH w_message1 w_message2.

********************************************************************************************
*& Get House Waybill Number.
SELECT SINGLE zhawb INTO (it_ship-zhawb) FROM zsdps00mp0024
WHERE vbeln = it_ship-vbeln.
IF s_zhawb[] IS NOT INITIAL.
IF sy-subrc = 0.
IF it_ship-zhawb NOT IN s_zhawb.
DELETE it_ship.
CONTINUE.
ENDIF.
ELSE.
DELETE it_ship.
CONTINUE.
ENDIF.
ENDIF.
********************************************************************************************
p_site = ‘123_ _ _abc ’._是空格的意思,就是我現在裡面有三個空格。如果是CONDENSE p_site。
那麼p_site = ‘123_abc ’.如果是CONDENSE p_site NO-GAPS。那麼p_site = ‘123abc ’.

CONCATENATE 'IEQ' sy-datum(6) '01' sy-datum INTO l_date . 求本月第一天
********************************************************************************************
1 TRANSLATE p_maktx USING ', '.
CONDENSE p_maktx.

2 DATA text TYPE string.
text = `BarbcBdbara`.
TRANSLATE text USING 'ABBAabbM'. CONDENSE text.
write text. 結果 AbrMcAdMbrb ZBAMA003
********************************************************************************************

*&Generate File
PERFORM z_ftp_layout(zbar00004) TABLES it_char ---&gt ZPPR00034
USING c_code
p_berid
g_filename
CHANGING g_retcd.

CLEAR g_retcd.
PERFORM z_ftp_layout(zbar00008) TABLES it_char ---&gtZIMR00057F01 ZIMR00061 ZIMR00046F01
USING 'DASHBOARD'
p_werks
l_fname
CHANGING l_tetcd. 產生file的公用form
********************************************************************************************
TYPE pos TYPE i.
SEARCH s_email-low FOR STARTING AT pos. 從第pos個字元開始尋找
********************************************************************************************
..WHERE NAME LIKE ‘LEE%’.
條件為NAME欄位前3個字元為 LEE
..WHERE MODEL NOT LIKE ‘‘%SPS%’.
條件為MODEL欄位不包含 SPS的記錄
IF it_index-kursf_16 IS INITIAL AND it_index-blart(1) = 'Z'. Z開頭的記錄

********************************************************************************************
*& get the max sequence long text
SORT tmp_zsdwomsde0011 BY vbeln posnr zcopo tdid DESCENDING zzseqn.
DELETE ADJACENT DUPLICATES FROM tmp_zsdwomsde0011 COMPARING vbeln posnr zcopo tdid.
********************************************************************************************
DATLO Date and time, local date of user
TIMLO
lt_data-erdat = sy-datum. Current (Application Server) Date
lt_data-erzet = sy-uzeit.
********************************************************************************************
SPLIT p_value AT '/' INTO l_year l_month l_day.
********************************************************************************************
ftp 命令
CONCATENATE 'cd' p_folder INTO l_cmd SEPARATED BY space . Change Current Folder
CONCATENATE 'mkdir' p_folder INTO l_cmd SEPARATED BY space . *& Create A Folder
CONCATENATE 'del' p_ftp_filename INTO l_cmd SEPARATED BY space. Delete a file
CONCATENATE 'rename' g_filename_tmp p_filename INTO l_cmd SEPARATED BY space. Rename a file
********************************************************************************************
data ip_addr(20) type c. get local IP address 如果字元不定義長度,那麼預設為1碼。
CALL METHOD cl_gui_frontend_services=>get_ip_address
RECEIVING
ip_address = ip_addr.
write : ip_addr.
********************************************************************************************
PERFORM get_desc USING it_data-matnr 取母件和子件描述的方法 ZPPR00040
CHANGING it_report-maktx.
PERFORM get_desc USING it_data-idnrk
CHANGING it_report-cmaktx.
********************************************************************************************
RANGES: r_lifnr FOR ekko-lifnr. ZIMR00058TOP
LOOP AT it_vendorno.
CONCATENATE 'IEQ' it_vendorno-lifnr INTO r_lifnr.
APPEND r_lifnr.
ENDLOOP.
********************************************************************************************
SHIFT it_trans-lifnr LEFT DELETING LEADING '0000000000'. 如果lifnr的值是0000123,執行之後的結果是123.去0操作
********************************************************************************************
PERFORM get_asc_code(zbar00004) CHANGING g_tab. ZIMR00016轉換TAB鍵
********************************************************************************************
SPLIT it_load AT cl_abap_char_utilities=>horizontal_tab
INTO it_itab-werks
it_itab-bsart
it_itab-ebeln
it_itab-ebelp
it_itab-eindt. TAB
********************************************************************************************
TRANSLATE g_fpath TO LOWER CASE. 將g_fpath這個變數的值轉換成小寫
TRANSLATE g_fpath TO UPPER CASE. 將g_fpath這個變數的值轉換成大寫
********************************************************************************************
IF NOT l_elikz <> 'X'.
CONTINUE.
ENDIF.

IF l_elikz = 'X'.
CONTINUE.
ENDIF.
結果相同
********************************************************************************************
MESSAGE 'sucess message' TYPE 'S' DISPLAY LIKE 'E'. 實現SHOW ERROR MESSAGE,而不用跳轉螢幕.
********************************************************************************************
IF sy-subrc <> 0.
SET CURSOR FIELD p_werks. 游標定位
MESSAGE e000 WITH 'No Authority for Plant' p_werks.
ENDIF.
********************************************************************************************
SET CURSOR FIELD zpppiccma0001-werks. 設定游標到這個欄位上
********************************************************************************************
* DATA it_mara TYPE STANDARD TABLE OF st_mara WITH HEADER LINE. 定義標準表
********************************************************************************************
SELECT LIPS~WERKS LIPS~MATNR MAKT~MAKTX AS ARKTX
LIPS~LGORT LIPS~MEINS
SUM( LIPS~LFIMG ) AS LFIMG_T
INTO CORRESPONDING FIELDS OF TABLE P_HEADER[]
FROM LIKP
INNER JOIN LIPS
ON LIKP~VBELN = LIPS~VBELN
LEFT JOIN MAKT
ON LIPS~MATNR = MAKT~MATNR AND MAKT~SPRAS = C_LANG
INNER JOIN VBUP
ON VBUP~VBELN = LIPS~VBELN AND VBUP~POSNR = LIPS~POSNR
AND VBUP~WBSTA <> C_DN_STATUS
WHERE LIPS~WERKS IN S_WERKS AND LIKP~LFART IN S_LFART
AND LIKP~WADAT BETWEEN L_DATE
AND S_WADAT-HIGH
GROUP BY LIPS~WERKS LIPS~MATNR MAKT~MAKTX LIPS~LGORT
LIPS~MEINS
ORDER BY LIPS~WERKS LIPS~MATNR MAKT~MAKTX LIPS~LGORT
LIPS~MEINS .
********************************************************************************************
SELECT SUM( LABST ) SUM( INSME )
INTO (IT_ALV-LABST,IT_ALV-INSME)
FROM MARD
WHERE MATNR = P_MATNR
AND WERKS = P_WERKS
AND LGORT IN R_LGORT.
********************************************************************************************
CONCATENATE sy-timlo(2) ':' sy-timlo+2(2) ':' sy-timlo+4(2) INTO l_time .
結果 11:19:31
********************************************************************************************
POPRC TYPE P08_AWE_DEC18_5, "(17)PO Price Data element(資料元素)
********************************************************************************************
ON CHANGE OF IT_TABLE1-MATNR.
L_FINDTIMES = 0.
ENDON.
********************************************************************************************
IF S_MFRNR IS NOT INITIAL.
DELETE IT_TABLE1 WHERE MFRNR NOT IN S_MFRNR.
ENDIF.
如果S_MFRNR = x 。那麼會DELETE S_MFRNR <> X.
********************************************************************************************
l_pwd_len = STRLEN( password ).
********************************************************************************************
MOVE-CORRESPONDING it_plant TO it_tab. 要放入LOOP中
MOVE it_plant-ftp TO it_tab-ftp.
********************************************************************************************
取第一條資料到一個工作區中。
READ TABLE it_tab INDEX 1 INTO wa_tab.

READ TABLE ta_mkpf WITH KEY mblnr = ta_mseg-mblnr BINARY SEARCH.
加上BINARY SEARCH.速度會快很多
********************************************************************************************
根據採購定單45開頭ebeln itab0-ebeln+0(2) = '45'.
********************************************************************************************
WRITE : /1(124) sy-uline . sy-vline no-zero 去'0'
WRITE後跟NO-GAP表示壓縮空格,WRITE 後跟no-ZERO表示不顯示0.
WRITE: 'No' NO-GAP, 'Gap'.
********************************************************************************************
modify it_material transporting eknam.
********************************************************************************************
PARAMETERS : s_fname LIKE rlgrap-filename OBLIGATORY MEMORY ID p04.

"把s_fname的值存入記憶體,下面在用時會自動載入這一次的值

SELECTION-SCREEN ULINE. "畫橫線

SELECTION-SCREEN SKIP 1.

DEFAULT SY-DATUM+0(4) 20061010 選前四位 2006

s_bldat FOR mkpf-bldat DEFAULT sy-datum TO sy-datum,

hkont-sign = 'I'.
hkont-option = 'EQ'.
hkont-low = '0051010100'.
append hkont.
********************************************************************************************
default '1000' 預設值
obligatory 必輸項
NO INTERVALS 單值,沒有間隔
no-extension 限制選擇表為單行 選擇螢幕上不出現->圖示
********************************************************************************************
wa_vbak-vbeln = '111111x'.
wa_vbak-erdat = '20061111'.
APPEND wa_vbak to itab_vbak.
********************************************************************************************
wa_vbak-vbeln = '111111y'.
wa_vbak-erdat = '20061110'.
INSERT wa_vbak INTO TABLE itab_vbak.
********************************************************************************************
wa_vbak-vbeln = '111111z'.
wa_vbak-erdat = '20060202'.
MODIFY itab_vbak FROM wa_vbak TRANSPORTING vbeln erdat where vbeln = '111111z'.
********************************************************************************************
DELETE ADJACENT DUPLICATES FROM itab_vbak COMPARING vbeln posnr.
DELETE itab_vbak 中vbeln、posnr記錄相同的記錄
********************************************************************************************
FOR ALL ENTRIES IN ntable
********************************************************************************************
at new matkl.
new-page. "按物料組分頁
endat.

at end of matkl. "按物料組列印
new-page.
endat.
********************************************************************************************
S: 借 在計算的時候記為負
H: 貸 在計算的時候記為正

select __ from __ where matnr like '1%%%04%'.
********************************************************************************************
1 或 COL_HEADING 灰藍 標題
2 或 COL_NORMAL 淡灰 列表正文
3 或 COL_TOTAL 黃 總計
4 或 COL_KEY 藍綠 關鍵字列
5 或 COL_POSITIVE 綠 正門限值
6 或 COL_NEGATIVE 紅 負門限值
7 或 COL_GROUP 紫 組級別

WRITE: 'AAAA' COLOR 5 INVERSE CENTERED. 字型加色彩並居中
********************************************************************************************
前4條記錄
SELECT * INTO wa FROM scarr UP TO 4 ROWS.
********************************************************************************************
ALV 表頭加圖片
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = G_LIST_TOP_OF_PAGE
i_logo = 'ENJOYSAP_LOGO'
i_end_of_list_grid = 'X'.

在layout中用
l_s_layout-info_fieldname = 'COLOR'. 行色彩. first 在內表中定義一個 COLOR(4) TYPE C, then 用 if在內表中作判斷
IT_LAYOUT-grid_title = 'Material Master'(010). 列頭output
IT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. 最佳化列寬
IT_LAYOUT-zebra = 'X'. 能隔行換色(斑馬線)
IT_LAYOUT-box_fieldname = 'SELECTED'. 第一行的前面是否有挑選行 當MOUSE MOVE到這一列中只可以選中單元格
先定義 G_F2CODE LIKE SY-UCOMM VALUE '&ETA', 然後 IT_LAYOUT-F2CODE = G_F2CODE. 可以讓ALV顯示一行的明細
********************************************************************************************
在output中用
ls_fieldcat-DO_SUM = 'X' 求小計
fc_detail-no_zero = 'X'. 去前面的0
fc_detail-just = 'C'. 引數有C中L左F右 對齊方式
fc_detail-emphasize = 'C411' . 列色彩 引數有C411C511C611C711 從1到7
ls_fieldcat-hotspot = 'X'.
wa_alvlayout-window_titlebar = sy-title.
wa_fieldcat-fix_column = &6. 固定列
wa_fieldcat-cfieldname BY 金額
wa_fieldcat-qfieldname BY 單位

ALV中的資料怎麼自動重新整理
in the form "user_command", there is one changing variant TYPE SLIS_SELFIELD, you can set SLIS_SELFIELD-REFRESH = 'X'.
********************************************************************************************
REPLACE '//' WITH '/' INTO g_fpath.
********************************************************************************************
Describe table itab lines line .
********************************************************************************************
FORM check_plant .

SELECT SINGLE *
FROM t001w
WHERE werks = s_werks-low.

IF sy-subrc <> 0.
MESSAGE s398 WITH 'Plant ' s_werks-low 'is not exist!'.
STOP.
ELSE.
IF s_werks-high IS NOT INITIAL.
SELECT SINGLE *
FROM t001w
WHERE werks = s_werks-high.
IF sy-subrc <> 0.
MESSAGE s398 WITH 'Plant ' s_werks-high 'is not exist!'.
STOP.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " check_plant
********************************************************************************************
Check current user has the authorization required for plant field
PERFORM check_user_authority.

FORM check_user_authority .
DATA: BEGIN OF lt_werks OCCURS 0,
werks TYPE t001w-werks,
END OF lt_werks.

SELECT DISTINCT werks
INTO TABLE lt_werks
FROM t001w
WHERE werks IN s_werks.

LOOP AT lt_werks.
AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
ID 'WERKS' FIELD lt_werks-werks
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
MESSAGE s398 WITH 'Plant ' lt_werks-werks ' have no authorization to query.'.
STOP.
ENDIF.
ENDLOOP.

ENDFORM. " check_user_authority
********************************************************************************************
URL_HEAD = 'http://192.168.0.8/matnr/'.
E_MATNR = VBAP-MATNR.
URL_FOOT = '.JPG'.
CONCATENATE URL_HEAD E_MATNR URL_FOOT INTO URL.
CONDENSE URL NO-GAPS.
********************************************************************************************
PARAMETERS: p_days TYPE i DEFAULT 15 MODIF ID 001.
SELECT-OPTIONS: s_st_del FOR zppbomphd0001-zstatus
DEFAULT 'S' OPTION EQ SIGN I
MODIF ID 001.
設定 MODIF ID 001 當T-code是ZPP002L時,可以將p_days and s_st_del hide
AT SELECTION-SCREEN OUTPUT. 以下CODE要放在這個事件的下面
PERFORM check_screen_output.
FORM check_screen_output .
IF sy-tcode = 'ZPP002L'.
LOOP AT SCREEN.
IF screen-group1 = '001'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " check_screen_output

at selection-screen output. ZPUR00002
loop at screen.
if screen-name = 'P_FNAME'.
if p_excel = 'X'.
screen-input = 1.
else.
screen-input = 0.
endif.
modify screen.
endif.
endloop.
********************************************************************************************
SELECT * FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight.
APPEND wa_flight TO it_flight.
ENDSELECT.
********************************************************************************************
loop at t_report.
move-corresponding t_report to t_alv.
append t_alv.
clear t_alv.
endloop.
********************************************************************************************
貨幣轉換 CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'
********************************************************************************************
DATA: BEGIN OF it_out OCCURS 0.
INCLUDE STRUCTURE zimamlma0001.
DATA: chb(1) TYPE c,
END OF it_out.
********************************************************************************************
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: c_suces AS CHECKBOX.
SELECTION-SCREEN COMMENT (12) text-001 FOR FIELD c_suces. 當單擊 text-001會選中c_suces
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text-r01.
PARAMETERS: p_grpp RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND com1.
SELECTION-SCREEN COMMENT 23(20) text-r02 FOR FIELD p_grpp.
SELECTION-SCREEN END OF LINE.
********************************************************************************************
SELECT DISTINCT seqnr
APPENDING TABLE lt_out
FROM zimamlma0001
WHERE bmatn IN s_matnr
AND mfrnr IN s_mfrnr
AND cdate IN s_datum
AND zampls = '2'.
APPENDING新增加記錄,如果用INTO就會覆蓋以前的記錄
********************************************************************************************
DELETE ADJACENT DUPLICATES FROM lt_output COMPARING mblnr mjahr zeile.
DELETE LT_OUTPUT中 mblnr mjahr zeile 值完全相同的記錄

sort table it_index by matnr.

LOOP AT it_index.
CLEAR l_flag.
AT END OF matnr.
l_flag = 'X'.
ENDAT.
IF l_flag = 'X'.
it_index-tmenge = it_index-tmenge + it_index-menge.
MODIFY it_index TRANSPORTING tmenge WHERE matnr = it_index-matnr.
CLEAR: it_index.
ENDIF.
ENDLOOP.

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90072/viewspace-1001518/,如需轉載,請註明出處,否則將追究法律責任。

相關文章