SAP 常用函数

  • 格式:docx
  • 大小:748.70 KB
  • 文档页数:18

1、 获取订单状态(STATUS_READ 和 STATUS_TEXT_EDIT)

1.STATUS_READ 改函数的实现原理大概是通过订单的对象好(OR+订单号) 到JEST中取出字段STAT INACT.

JEST表中STAT是一串从字面看不出意思的字符,可以根据STAT到表TJ02T中找到具体的描述。

下面是具体用法

DATA:objnr TYPE aufk-objnr.

objnr = 'OR000000100014'.

DATA:t_status TYPE TABLE OF jstat WITH HEADER LINE.

"结果存放在STATUS表中

CALL FUNCTION 'STATUS_READ'

EXPORTING

client = sy-mandt

objnr = objnr

TABLES

status = t_status

EXCEPTIONS

object_not_found = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

LOOP AT t_status.

IF t_status = 'I0046'.

WRITE:'订单已关闭'.

EXIT.

ENDIF.

ENDLOOP.

2.STATUS_TEXT_EDIT

改函数读取的结果是将订单状态拼接到一个字符串中,而且这个字符串是在前台订单上看到的状态,比较直接,这样做的结果就可能由于状态较多导致长度过长,在某些情况下取的数据可能不准。

下面是一段代码

DATA:line TYPE bsvx-sttxt.

CALL FUNCTION 'STATUS_TEXT_EDIT'

EXPORTING

client = sy-mandt

objnr = objnr

spras = sy-langu

IMPORTING

line = line

EXCEPTIONS

object_not_found = 1 OTHERS . "

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

SEARCH line FOR 'CLSD'.

IF sy-subrc = 0.

WRITE:'订单已关闭'.

ENDIF.

DATA

i_jstat LIKE jstat OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'STATUS_READ'

EXPORTING

client

= sy-mandt

objnr = i_caufv_resb-objnr ”对象号

only_active

= 'X'

*

IMPORTING

* OBTYP

=

* STSMA

=

* STONR

=

TABLES status = i_jstat “目前的所有状态

EXCEPTIONS

object_not_found = 1

OTHERS = 2.

LOOP AT i_jstat WHERE stat = 'I0013' "DLT 删除标识符.

OR stat = 'I0012' "DLV 交货

OR stat = 'I0045' "TECO 技术实现

OR stat = 'I0043' "LKD 冻结

OR stat = 'I0001' "CRTD 建立

OR stat = 'I0046' "CLSD 已结算

OR stat = 'I0076'. "DLID 删除标志

l_delete = 'X'.

EXIT.

ENDLOOP.

2、图标的函数ICON_CREATE

1、定义字段

data: status_icon type icons-text.

2、创建屏幕,并在屏幕定义创建一个"Status Icon"控件 ,命名为:status_icon

3、利用ICON_CREATE函数在输出是设置ICON。

call function 'ICON_CREATE'

exporting

name = 'ICON_RED_LIGHT'

text = '图标后的文本'

info = '提示'

add_stdinf = 'X'

importing

result = status_icon exceptions

icon_not_found = 1

outputfield_too_short = 2

others = 3.

可以通过函数ICON_CREATE将alv中的单元格(Cell)变成ICON.

LOOP AT git_alv ASSIGNING .

CALL FUNCTION 'ICON_CREATE'

EXPORTING

name = icon_pdf "图标名字

info = 'PDF'

IMPORTING

result = -pdf_order

EXCEPTIONS

OTHERS = 0.

ENDLOOP

另外不要忘了声明一个TYPE-POOLS:icon.

TYPE-POOLS:icon.

3、进度条函数SAPGUI_PROGRESS_INDICATOR

DATA: ll_lines(10),"行数

ll_tabix(10),"循环标号

ll_pecnt TYPE p LENGTH 6 DECIMALS 2,"百分比

ll_pecet(6),"百分数

ll_text(40)."消息

CLEAR: ll_lines,ll_tabix,ll_pecnt,ll_pecet,ll_text.

DESCRIBE TABLE it_vbrk LINES ll_lines."获取内表行数

*

LOOP AT it_vbrk INTO wa_vbrk.

ll_tabix = sy-tabix."当前处理的行号

ll_pecnt = ll_tabix / ll_lines * 100."已处理百分比

ll_pecet = ll_pecnt.

"拼接显示消息 CONCATENATE '已完成' ll_pecet '%,共' ll_tabix '条/' ll_lines '条' INTO ll_text.

CONDENSE ll_text."整理格式,去掉多余空格,格式更整齐

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'"调用进度条函数,传入百分比和消息

EXPORTING

percentage = ll_pecnt

text = ll_text.

CLEAR: ll_pecnt,ll_pecet,ll_text.

……

ENDLOOP.

4、GET_GLOBALS_FROM_SLVC_FULLSCR 创建alv grid时,有时需要修改alv中的数据。

修改后将数据传到alv多所对应内表,我们在alv的usercommand事件中可以这样写:

FORM usercommand USING ucomm TYPE sy-ucomm

selfield TYPE slis_selfield.

DATA: lr_grid TYPE REF TO cl_gui_alv_grid.

DATA l_tabix LIKE sy-tabix.

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’

IMPORTING

e_grid = lr_grid. CALL METHOD lr_grid->check_changed_data.

selfield-refresh = ‘X’.

selfield-row_stable = ‘X’.

selfield-col_stable = ‘X’.

*other

ENDFORM.

5、创建供应商

找到一个类和方法来创建,类名:VMD_EI_API 方法名:MAINTAIN_DIRECT_INPUT,类似的

* 供应商表头

ls_vendors-header-object_instance-lifnr = lv_vendor. "供应商

ls_vendors-header-object_task = 'M'. "创建/更改

* 通用数据

ls_vendors-central_data-central-data-stceg = stceg. "增值税登记号

ls_vendors-central_data-central-data-ktokk = '0001'. "账户组

ls_vendors-central_data-central-data-j_1kfrepre = j_1kfrepre. "代表名称