凡尘clsoho™的博客

E-mail & MSN: clsoho@hotmail.com
QQ1超级群: <101817641已满> QQ2群:<110722895已满>
QQ3超级群:<23765855>QQ4超级群:<85338969>

最近在和一个朋友的交流中,遇到了这么一个需求,就是在TC中对一个字段实现帮助,然后从帮助选择值时能把文本带到TC中的文本字段中,原来没做过这种实现,只是做过回车后,通过CHAIN中的MODULE实现把文本自动带出来,这种方法比较简单,这里就不再说明了。后来找了一点资料,经过测试,用一种笨的方法实现了这个需求,应该还有更简单的方法,以后用到了再更新。现在把这种方法贴出来,与大家共享一下。希望对你有所帮助,也希望我下次能记住。

1、屏幕设计
在屏幕tc增加一列zwx-matnr,勾选输入字段复选框。

2、在逻辑流中输入以下代码
process on value-request.
field zwx-matnr module matnr_f4.

3、具体module代码

module matnr_f4.
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           = 'MARA'
    fieldname         = 'MATNR'
    dynpprog          = sy-repid
    dynpnr            = '0110' "你的屏幕号

    dynprofield       = 'ZWX-MATNR'
    stepl             = l_row
    multiple_choice   = ''
    display           = l_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.

*查询成功,取出物料描述放入屏幕TC中的文本字段中
  read table lt_return_tab into ls_return_tab index 1.
  select single 描述 into 你的描述字段 from 表 where 字段 = ls_return_tab-fieldval.
endif.

 

*更新屏幕上已经修改的字段

lt_systems-fieldname = '你的字段'.
lt_systems-stepl = l_row.
lt_systems-fieldvalue = ls_return_tab-fieldval. “返回的选择值
append lt_systems.
lt_systems-fieldname = '你的字段'.
lt_systems-stepl = l_row.
lt_systems-fieldvalue = 取出的文本值
append lt_systems.

call function 'DYNP_VALUES_UPDATE'
  exporting
    dyname               = sy-repid
    dynumb               = '你的屏幕号'
  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.
endmodule.                 " MATNR_F4

这里用物料来举例,当然也可以自己做帮助,也可以是系统的标准帮助,有兴趣的可以试一试,只有真正测试成功的时候,你才会感觉到自己又学到了新的知识!

 

*##############下面一种方法比上面更加清晰,简单明了,有兴趣的可以看看###############

*##################感谢云东兄提供代码 QQ:24963363#######################

REPORT zgetf4.

TYPES: shlp_descr_t TYPE shlp_descr .
DATA: BEGIN OF itab OCCURS 0 ,
      matnr LIKE mara-matnr ,
      maktx LIKE makt-maktx ,
      END OF itab.
DATA: return_tab TYPE ddshretval OCCURS 0 .

PARAMETERS: p_matnr LIKE itab-matnr ,
            p_maktx LIKE itab-maktx .

INITIALIZATION.
  SELECT matnr maktx INTO TABLE itab FROM makt UP TO 20 ROWS
    WHERE spras = '1'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr .
  PERFORM f4.

*&---------------------------------------------------------------------*
*&      Form  f4
*&---------------------------------------------------------------------*
FORM f4.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         = 'MATNR'
      dynpprog         = sy-repid
      dynpnr           = sy-dynnr
      dynprofield      = 'P_MATNR'
      value_org        = 'S'
      callback_program = sy-repid
      callback_form    = 'CB_FORM'
    TABLES
      value_tab        = itab
      return_tab       = return_tab
    EXCEPTIONS
      parameter_error  = 1
      no_values_found  = 2
      OTHERS           = 3.
ENDFORM.                    "f4
*&---------------------------------------------------------------------*
*&      Form  cb_form
*&---------------------------------------------------------------------*
FORM cb_form TABLES record_tab STRUCTURE seahlpres
              CHANGING shlp TYPE shlp_descr_t
              callcontrol LIKE ddshf4ctrl.
  DATA: interface LIKE LINE OF shlp-interface.
  READ TABLE shlp-interface INTO interface INDEX 1.
  interface-shlpfield+4(1) = '2'.
  interface-valfield = 'P_MAKTX'.
  APPEND interface TO shlp-interface.
ENDFORM.                    "bo_callback_form 

posted on 2010-07-22 14:35  凡尘clsoho  阅读(1698)  评论(0编辑  收藏  举报