天天看点

报表开发小结

生产订单的系统状态、用户状态获取

SELECT SINGLE objnr INTO l_objnr FROM aufk WHERE aufnr = s_aufnr.

IF l_objnr IS NOT INITIAL.

CALL FUNCTION 'STATUS_READ' "读取系统状态

EXPORTING

client = sy-mandt

objnr = l_objnr

only_active = 'X'

TABLES

status = i_status

EXCEPTIONS

object_not_found = 1

OTHERS = 2.

"SELECT SINGLE stat FROM jest

" INTO l_stat

" WHERE objnr = gi_qh-objnr

" AND stat LIKE 'E%'

" AND inact NE 'X'.

SELECT txt04 INTO TABLE l_txt

FROM tj02t

FOR ALL ENTRIES IN i_status

WHERE istat = i_status-stat

AND spras = '1'.

IF l_txt[] IS NOT INITIAL.

READ TABLE l_txt WITH KEY txt04 = 'REL'. "REL 状态

IF sy-subrc = '0'.

SELECT tj30~stonr INTO TABLE l_stonr "读取用户状态

FROM tj30

INNER JOIN jsto

ON jsto~stsma = tj30~stsma

WHERE jsto~objnr = l_objnr

AND tj30~stonr = '30'.

IF sy-subrc <> '0'.

ENDIF.

ENDIF.

ENDIF.  

系统状态是REL 用户状态是30的 符合条件

获取操作生产订单的用户名、操作时间:

SELECT SINGLE estat FROM tj30

INTO l_estat1

WHERE stsma = l_stsma

AND stonr = '26' .

SELECT SINGLE MAX( chgnr ) FROM jcds "获取审核人名字

INTO l_chgnr

WHERE objnr = gi_qh-objnr

AND stat = l_estat1

AND inact = '' .

IF l_chgnr IS NOT INITIAL .

SELECT SINGLE usnam udate FROM jcds

INTO (l_usnam, l_udate)

WHERE chgnr = l_chgnr

AND stat = l_estat1

AND objnr = gi_qh-objnr.

CONCATENATE l_udate+0(4) '年' l_udate+4(2) '月' l_udate+6(2) '日'

INTO gi_qh-shdate .

IF l_usnam IS NOT INITIAL .

SELECT SINGLE persnumber FROM usr21

INTO l_persnumber

WHERE bname = l_usnam .

IF l_persnumber IS NOT INITIAL .

SELECT SINGLE name_last name_first FROM adrp

INTO (l_name_last , l_name_first)

WHERE persnumber = l_persnumber.

CONCATENATE '负责人:' l_name_last l_name_first INTO gi_qh-shr .

ENDIF.

ENDIF.

ENDIF.

删除重复数据

SORT i_datasec BY werks.

DELETE ADJACENT DUPLICATES FROM i_datasec COMPARING werks.

读取长文本

DATA conc TYPE thead-tdname.

DATA it_txt TYPE TABLE OF tline WITH HEADER LINE.

DATA wa_stxh TYPE stxh.

CONCATENATE sy-mandt gi_qh-aufnr INTO conc.

SELECT SINGLE * FROM stxh CLIENT SPECIFIED

INTO wa_stxh

WHERE tdobject = 'AUFK'

AND tdname = conc

AND tdid = 'KOPF'

AND tdspras = sy-langu.

IF sy-subrc = 0.

CALL FUNCTION 'READ_TEXT'

EXPORTING

id = 'KOPF'

language = sy-langu

name = conc

object = 'AUFK'

TABLES

lines = it_txt.

LOOP AT it_txt.

DATA m TYPE i .

m = STRLEN( it_txt-tdline ).

IF m = 0 OR it_txt-tdline = space.

CONTINUE.

ENDIF.

CONCATENATE gi_qh-ktext '' it_txt-tdline INTO gi_qh-ktext.

ENDLOOP.

CLEAR it_txt[] .

ENDIF.

ALV FM 定义 选择方式

  wa_layout-box_fieldname      = 'SEL'.

ALV  FM 定义 变色

   wa_layout-info_fieldname     = 'COLOR'.

ALV FM 定义 光标离开事件

1:声明

CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.

METHODS:

handle_data_changed

FOR EVENT data_changed OF cl_gui_alv_grid

IMPORTING er_data_changed.

ENDCLASS. "lcl_event_receiver DEFINITION

CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_data_changed .

DATA: ls_good TYPE lvc_s_modi.

PERFORM handle_data_changed USING er_data_changed.

ENDMETHOD. "handle_data_changed

ENDCLASS. "lcl_event_receiver IMPLEMENTATION

DATA: it_events TYPE slis_t_event,

wa_events LIKE LINE OF it_events.

DATA: lr_grid TYPE REF TO cl_gui_alv_grid.

DATA: g_event_receiver TYPE REF TO lcl_event_receiver.

2:

wa_events-name = 'CALLER_EXIT'.

wa_events-form = 'FM_BUTTON'.

APPEND wa_events TO it_events.

3:

*&---------------------------------------------------------------------*

*& Form fm_button

*&---------------------------------------------------------------------*

* 光标离开

*----------------------------------------------------------------------*

* -->E_GRID text

*----------------------------------------------------------------------*

FORM fm_button USING e_grid TYPE slis_data_caller_exit.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

e_grid = lr_grid.

* 设置enter事件

CALL METHOD lr_grid->register_edit_event

EXPORTING

i_event_id = cl_gui_alv_grid=>mc_evt_enter

EXCEPTIONS

error = 1

OTHERS = 2.

* 设置data changed事件

CALL METHOD lr_grid->register_edit_event

EXPORTING

i_event_id = cl_gui_alv_grid=>mc_evt_modified

EXCEPTIONS

error = 1

OTHERS = 2.

CREATE OBJECT g_event_receiver.

SET HANDLER g_event_receiver->handle_data_changed FOR lr_grid.

ENDFORM. "FM_BUTTON

*&---------------------------------------------------------------------*

*& Form handle_data_changed

*&---------------------------------------------------------------------*

* 屏幕字段改变值后判断

*----------------------------------------------------------------------*

* -->P_ER_DATA_CHANGED text

*----------------------------------------------------------------------*

FORM handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

FIELD-SYMBOLS: <fs_mod_rows> TYPE STANDARD TABLE,

<fs_cells> TYPE lvc_t_modi ,

<fs_cell_wa> TYPE lvc_s_modi ,

<fs> LIKE LINE OF i_data.

DATA: i TYPE i.

IF NOT p_er_data_changed->mp_mod_rows IS INITIAL.

ASSIGN p_er_data_changed->mp_mod_rows->* TO <fs_mod_rows>.

ASSIGN p_er_data_changed->mt_mod_cells TO <fs_cells>.

LOOP AT <fs_mod_rows> ASSIGNING <fs>.

IF <fs>-sbdmng > <fs>-mbdmng OR <fs>-sbdmng < '0'.

READ TABLE <fs_cells> INDEX sy-tabix ASSIGNING <fs_cell_wa>.

i = <fs_cell_wa>-row_id.

LOOP AT i_data WHERE number = i.

i_data-color = 'C610'.

MODIFY i_data.

CLEAR i_data.

ENDLOOP.

ELSE.

READ TABLE <fs_cells> INDEX sy-tabix ASSIGNING <fs_cell_wa>.

i = <fs_cell_wa>-row_id.

LOOP AT i_data WHERE number = i.

i_data-color = ''.

i_data-result = ''.

MODIFY i_data.

CLEAR i_data.

ENDLOOP.

ENDIF.

ENDLOOP.

CALL METHOD lr_grid->refresh_table_display.

ENDIF.

ENDFORM. "handle_data_changed

 ALV FM 排序

  *声明

DATA it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE .

*使用

CLEAR it_sort .

it_sort1-fieldname = 'LGOBE' .

it_sort1-spos = '4' .

it_sort1-up = 'X'.

it_sort1-subtot = 'X'.

APPEND it_sort .

ALV FM 表头HTML格式

CALL METHOD p_cl_dd->html_insert

EXPORTING

contents = m_buffer

CHANGING

position = m_p.

CALL METHOD p_cl_dd->add_text( text = text1 ).

CALL METHOD p_cl_dd->add_gap( width = 20 ).

CALL METHOD p_cl_dd->new_line.

获取登录系统的用户名称

SELECT SINGLE adrp~name_first adrp~name_last

INTO (name_first,name_last)

FROM adrp

INNER JOIN usr21

ON adrp~persnumber = usr21~persnumber

WHERE usr21~bname = sy-uname .

IF sy-subrc = 0 .

CONCATENATE name_last name_first INTO l_name .

ELSE .

l_name = sy-uname .

ENDIF.

打印:一式二联

data: wa_printoption TYPE ssfcompop,

wa_ctrl TYPE ssfctrlop,

wa_archive_index TYPE toa_dara,

wa_archive_index_tab TYPE tsfdara,

wa_archive_parameters TYPE arc_params,

fm_name TYPE rs38l_fnam.

wa_ctrl-preview = ''.

wa_ctrl-no_dialog = ''.

wa_ctrl-no_open = 'X'.

wa_ctrl-no_close = 'X'.

CALL FUNCTION 'SSF_OPEN'

EXPORTING

control_parameters = wa_ctrl.

"若是一个smart 只要调用2次 CALL FUNCTION fm_name 就可达到打印一式二联的效果, 代码省略

CALL FUNCTION 'SSF_CLOSE' .

上一篇: DLA/DCN/DCNv2

继续阅读