表维护视图的F4增强

利用SE11创建表维护视图后,我们可以通过SE51修改自动生成的屏幕来编写自定义F4以及其它事件。

首先需要找到相应的FUNCTION GROUP

 SE80进入FUNCTION GROUP的编辑页面

修改屏幕的PBO,PAI事件。(出了MDL开头的MUDOLE,其它代码均为系统自动生成)

PROCESS BEFORE OUTPUT.
  MODULE liste_initialisieren.
  LOOP AT extract WITH CONTROL
   tctrl_zfit_037_sfx CURSOR nextline.
    MODULE liste_show_liste.
    MODULE mdl_screen_init.
  ENDLOOP.
*
PROCESS AFTER INPUT.
  MODULE liste_exit_command AT EXIT-COMMAND.
  MODULE liste_before_loop.
  LOOP AT extract.
    MODULE liste_init_workarea.
    CHAIN.
      FIELD zfit_037_sfx-zsfxmid .
      FIELD zfit_037_sfx-zsfxmbm .
      FIELD zfit_037_sfx-zsfxmmc1 .
      FIELD zfit_037_sfx-zsfxmmc2 .
      FIELD zfit_037_sfx-zsfxmmc3 .
*     FIELD zfit_037_sfx-ztxt20 .
*     FIELD ZFIT_037_SFX-ZTF_TYPE .
*     FIELD ZFIT_037_SFX-ZTF_STATUS .
      FIELD zfit_037_sfx-saknr_dr .
      FIELD zfit_037_sfx-saknr_cr .
      FIELD zfit_037_sfx-ztxt50 .
*     FIELD ZFIT_037_SFX-ZATTRIBUTE1 .
*     FIELD ZFIT_037_SFX-ZATTRIBUTE2 .
*     FIELD ZFIT_037_SFX-ZATTRIBUTE3 .
*     FIELD ZFIT_037_SFX-ZATTRIBUTE4 .
*     FIELD ZFIT_037_SFX-ZATTRIBUTE5 .
      MODULE set_update_flag ON CHAIN-REQUEST.
    ENDCHAIN.
    CHAIN.
      FIELD zfit_037_sfx-saknr_dr.
      FIELD zfit_037_sfx-saknr_cr.
      MODULE mdl_change_txt.
    ENDCHAIN.
    FIELD vim_marked MODULE liste_mark_checkbox.
    CHAIN.
      FIELD zfit_037_sfx-zsfxmid .
      FIELD zfit_037_sfx-zsfxmbm .
      MODULE liste_update_liste.
    ENDCHAIN.
  ENDLOOP.
  MODULE liste_after_loop.

  PROCESS ON VALUE-REQUEST.

  FIELD zfit_037_sfx-saknr_dr MODULE mdl_f4_saknr.
  FIELD zfit_037_sfx-saknr_cr MODULE mdl_f4_saknr1.

  MODULE mdl_screen_init. "添加自定义事件,借方科目和贷方科目只能输入一个。

  ZFIT_037_SFX-SAKNR_DR与ZFIT_037_SFX-SAKNR_CR为借方与贷方科目字段。

*----------------------------------------------------------------------*
***INCLUDE LZFI_F037_SFXO02.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module MDL_SCREEN_INIT OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE mdl_screen_init OUTPUT.

    IF ZFIT_037_SFX-SAKNR_CR IS NOT INITIAL.
    LOOP AT SCREEN.
      IF screen-name = 'ZFIT_037_SFX-SAKNR_DR'.
        screen-input = '0'.
      ELSE.
        screen-input = '1'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
    ENDIF.

    IF ZFIT_037_SFX-SAKNR_dR IS NOT INITIAL.
    LOOP AT SCREEN.
      IF screen-name = 'ZFIT_037_SFX-SAKNR_CR'.
        screen-input = '0'.
      ELSE.
        screen-input = '1'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
    ENDIF.

ENDMODULE.

   MDL_CHANGE_TXT."选择科目后自动带出科目文本

MODULE mdl_change_txt INPUT.


  IF zfit_037_sfx-saknr_dr IS NOT INITIAL.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = zfit_037_sfx-saknr_dr
      IMPORTING
        output = zfit_037_sfx-saknr_dr.

    SELECT SINGLE txt50 FROM skat INTO zfit_037_sfx-ztxt50
     WHERE saknr = zfit_037_sfx-saknr_dr.

*    MODIFY zfit_037_sfx FROM  zfit_037_sfx .
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = zfit_037_sfx-saknr_dr
      IMPORTING
        output = zfit_037_sfx-saknr_dr.

  ELSE.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = zfit_037_sfx-saknr_cr
      IMPORTING
        output = zfit_037_sfx-saknr_cr.

    SELECT SINGLE txt50 FROM skat INTO zfit_037_sfx-ztxt50
     WHERE saknr = zfit_037_sfx-saknr_cr.

*    MODIFY zfit_037_sfx FROM  zfit_037_sfx .
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = zfit_037_sfx-saknr_cr
      IMPORTING
        output = zfit_037_sfx-saknr_cr.

  ENDIF.

ENDMODULE.

 在POV事件中加入F4事件。

  FIELD zfit_037_sfx-saknr_dr MODULE mdl_f4_saknr.
  

*----------------------------------------------------------------------*
***INCLUDE LZFI_F037_SFXI02.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  MDL_F4_SAKNR  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE mdl_f4_saknr INPUT.

  DATA:
    l_row         LIKE sy-tabix,
    lt_return_tab TYPE TABLE OF ddshretval,
    ls_return_tab LIKE LINE OF lt_return_tab,
    lt_systems    LIKE dynpread OCCURS 0 WITH HEADER LINE.

*取出屏幕行

  CALL FUNCTION 'DYNP_GET_STEPL'
    IMPORTING
      povstepl = l_row.


*调用帮助函数
  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      tabname           = 'SKAT'
      fieldname         = 'SAKNR'
      dynpprog          = sy-repid
      dynpnr            = '0110' "你的屏幕号
      dynprofield       = 'ZFIT_037_SFX-SAKNR_DR'
      stepl             = l_row
      multiple_choice   = ''
      display           = ''
    TABLES
      return_tab        = lt_return_tab
    EXCEPTIONS
      field_not_found   = 1
      no_help_for_field = 2
      inconsistent_help = 3
      no_values_found   = 4
      OTHERS            = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.

    READ TABLE lt_return_tab INTO ls_return_tab INDEX 1.
*更新屏幕上已经修改的字段

    lt_systems-fieldname = 'ZFIT_037_SFX-SAKNR_DR'.
    lt_systems-stepl = l_row.
    lt_systems-fieldvalue = ls_return_tab-fieldval.
    APPEND lt_systems.

    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        dyname               = sy-repid
        dynumb               = '100'
      TABLES
        dynpfields           = lt_systems
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        undefind_error       = 7
        OTHERS               = 8.
    IF sy-subrc <> 0.
    ENDIF.
  ENDIF.
ENDMODULE.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值