转载增强

博文用户



 
首页 | 登录 | 注册——完全免费!
欢迎Guest, 拨打SAP免费咨询热线:800-820-0727
 


所有归类于 ‘ABAP’ 分类的日志

 




选择屏幕的搜索帮助
星期一, 05月 21st, 2012

*&—————– ————————————————————————-*
 *                             选择屏幕
 *&——————————————————————————————*
 SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
 PARAMETERS:     P_WERKS LIKE T001W-WERKS  DEFAULT ‘SS00′,
                 P_REQTMT LIKE ZTMM_REQDEPTMT-REQPTMT OBLIGATORY.
 SELECT-OPTIONS:
                 S_REQDAT  FOR ZTMM_REQPLAN-REQUDATE OBLIGATORY,
                 S_MATNR  FOR ZTMM_REQPLAN-MATNR.
 
SELECTION-SCREEN END OF BLOCK B1.
 AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_REQTMT.
   PERFORM FRM_REQTMT_F4.”部门的搜索帮助
 FORM FRM_REQTMT_F4 .
   DATA: L_SELLINE LIKE SY-STEPL.
   DATA: IT_TCTAB LIKE TABLE OF DDSHRETVAL.
   DATA: WA_TCTAB LIKE  DDSHRETVAL.
   DATA: IT_SYSTEMS LIKE TABLE OF DYNPREAD WITH HEADER LINE.
   DATA: LT_TMT LIKE TABLE OF ZTMM_REQDEPTMT WITH HEADER LINE.
   CALL FUNCTION ‘DYNP_GET_STEPL’
     IMPORTING
       POVSTEPL = L_SELLINE.
 
  SELECT * INTO CORRESPONDING FIELDS OF  TABLE LT_TMT FROM ZTMM_REQDEPTMT WHERE WERKS EQ ‘SS00′.
   CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
     EXPORTING
       RETFIELD    = ‘REQPTMT’
       DYNPPROG    = SY-REPID
       DYNPNR      = SY-DYNNR
       DYNPROFIELD = ‘CONNECTION’
       VALUE_ORG   = ‘S’
     TABLES
       VALUE_TAB   = LT_TMT
       RETURN_TAB  = IT_TCTAB.
   IF SY-SUBRC = 0.
     READ TABLE IT_TCTAB INTO WA_TCTAB INDEX 1.
     READ TABLE LT_TMT WITH KEY REQPTMT = WA_TCTAB-FIELDVAL.
     P_REQTMT = LT_TMT-REQPTMT.
 
    IT_SYSTEMS-FIELDNAME = ‘P_REQTMT’.
     IT_SYSTEMS-STEPL = L_SELLINE.
     IT_SYSTEMS-FIELDVALUE = WA_TCTAB-FIELDVAL.
     APPEND IT_SYSTEMS.
     CALL FUNCTION ‘DYNP_VALUES_UPDATE’
       EXPORTING
         DYNAME               = SY-REPID
         DYNUMB               = SY-DYNNR
       TABLES
         DYNPFIELDS           = IT_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.
   ENDIF.
 
ENDFORM.                    ” FRM_REQTMT_F4


标签: ABAP, SAP, 选择屏幕搜索帮助
 归类于 搜索帮助 | 没有评论 »



BAPI创建和修改物料主数据
星期一, 05月 21st, 2012

BAPI_MATERIAL_SAVEDATA
 
简述:
 
创建和修改物料主数据
 
功能描述:
 
可以用此BAPI创建新物料和修改已存在物料主数据。当创建物料时,必须输入物料号(material number),物料类型(material type),Industry sector,同时也要输入物料描述(material description,参数为MATERIALDESCRIPTION)和描述语言(language)。
 
当要修改物料时,你只需输入物料号(material number)就可以了。
 
在header data(必传的参数)中,至少要选定一个物料数据视图来创建,依据选定的视图,必须维护其他的参数,如果每个视图中必须的field没有维护,FM执行会返回错误,物料创建不会成功。
 
所有要维护的物料视图所需的数据,都要在调用此BAPI前在调用程序中填好相应的参数值,并且要打上操作标记,这样数据才能被FM维护到数据库中。如参数CLIENTDATA,其field的操作标记要维护到参数CLIENTDATAX中。有关联的操作标记checkbox table 的 物料视图数据table中不包括:语言相关文本数据(MAKT,MLTX),International Article Numbers (MEAN), 税的分类(MLAN),这些物料数据可直接传入相应的参数来生成。
 
如果内表或structure(参数)中含有度量单位(如CLIENTDATA-BASE_UOM),语言标识(如MATERIALDESCRIPTION-LANGU),或者是国家标识(如TAXCLASSIFICATIONS-DEPCOUNTRY),此参数总会有一个以_ISO结尾的同名field。这就使得度量单位、语言标识、国家标识等我们可用标准的SAP code,也可以ISO 标准code。在未来业务流程中每个ISO code都有对应的标准SAP code。
 
如果要维护物料长文本(如:basic data texts, internal comments, purchase order texts, material memos, or sales texts)或自定义的物料数据field,一些特定的条件必须要定好,它们在参数MATERIALLONGTEXT 和 EXTENSIONIN中描述。
 
如果是要维护物料主数据的分类视图,要在创建完物料后接着调用BAPI: BAPI_OBJCL_CREATE 分类视图的创建
 
参数:
 
详情请参见BAPI的定义,很容易使用的。
 
另外:
 
对于BAPI的操作都要用BAPI_TRANSACTION_COMMIT来提交的,所以要判断BAPI的执行情况的返回值(参数RETURN),如果有错误要用BAPI_TRANSACTION_ROLLBACK取消所做的操作。建议提交BAPI操作时,加上wait参数,这样会减少某些错误。
 
call function ‘BAPI_TRANSACTION_COMMIT’
           exporting
             wait = ‘X’.


标签: ABAP, BAPI, SAP, 物料主数据
 归类于 BAPI | 没有评论 »



ABAP 搜索帮助
星期一, 05月 21st, 2012

当选择屏幕上的一个字段所参考的数据元素没有建立搜索帮助时,可以手工建立一个:
   1、在se11创建一个搜索帮助ZAUTEST,需要输入:
   (1)描述;
   (2)选择方法:即搜索帮助显示字段所在的透明表;
   (3)搜索帮助参数:即搜索帮助要显示的字段;
   (4)IMP:输入字段,勾上即表示显示该字段;
   (5)EXP:输出字段,勾上即表示该字段是搜索帮助需要的输入字段;
         (6)Lpos:搜索帮助下半部分字段排序;Spos:搜索帮助上半部分字段排序。
   如下图:
 




在Dialog屏幕中给输入字段建立搜索帮助,有以下三种情况:
 一:直接使用系统已有的搜索帮助,对于系统已存在搜索帮助的输入字段可直接使用:在屏幕格式器里双击输入字段框,在其“属性”栏的“搜索帮助”框内填入该字段的搜索帮助名称。如物料“matnr”的搜索帮助名称为“MAT1”。注意:MAT1一定要大写,对于所有在屏幕输入的字符,不管以任何形式输入都要大写,否则系统是不认识的,就如在代码里引号内的字符串要大写才正确一样。
 
二:自建搜索帮助,其过程如下:
 1、在dialog屏幕的逻辑流里在user_command后定义module,如下:
 process before output.
 …
 process after input.
 module user_command_0100.
 process on value-request. “输入字段的响应
 field t_pline module f4_help_for_pline. ““t_plnnr”是输入字段的“name”,“f4_help_for_pline”是module名,自己随便起吧
 2、双击“f4_help_for_pline”创建该module,这时进入程序代码编辑,module如下:
 module f4_help_for_pline input.
   call function ‘F4IF_INT_TABLE_VALUE_REQUEST’ “调用函数
     exporting
       retfield    = ‘PLINE’  “搜索帮助内表要输出的的帮助字段名,注:要大写
       dynpprog    = sy-repid
       dynpnr      = sy-dynnr
 *      dynprofield = ”
       value_org   = ‘S’
     tables
       value_tab   = ithp_pline. “存储搜索帮助内容的内表
 endmodule.                 ” f4_help_for_pline  INPUT
 注:“retfield”的内表输出字段的名字要和输入字段保持一致,并最好和透明表的字段名一致,否则弹出的搜索帮助会显示不了字段名。
 3、在屏幕输出前或在上一屏幕进入本屏幕的动作发生后,取得搜索帮助的内容,如下:
     clear ithp_pline[].
     select pline pltxt
      into corresponding fields of table ithp_pline
      from afpo
      where dwerk = t_werks
      and matnr = t_matnr.
 内表ithp_pline有两个字段pline、pltxt即是搜索帮助将显示的两个列,其中ithp_pline是输入字段。
 
三:联动搜索帮助的建立:有两个输入字段要建立搜索帮助,并且这两个字段是相互关联的,选择一个字段的输入值同时也选择了另一个字段的值,比如顺序与工序的关系必需是相互的。
 1、定义
 data:field_tab_vgn type dfies occurs 0,
      dynpfld_mapping_vgn type dselc occurs 0,
      wa_map_vgn type dselc,
      field_tab_pln type dfies occurs 0,
      dynpfld_mapping_pln type dselc occurs 0,
      wa_map_pln type dselc.
 2、在dialog屏幕的逻辑流里在user_command后定义module,如下:
 process before output.
 …
 process after input.
 module user_command_0100.
 process on value-request.
 field:it_bg-plnfl module f4_help_for_vornr, “顺序、工序的联动搜索
       it_bg-vornr module f4_help_for_vornr.
 3、双击“f4_help_for_vornr”创建该module,这时进入程序代码编辑,module如下:
 module f4_help_for_vornr input.
   call function ‘F4IF_INT_TABLE_VALUE_REQUEST’
     exporting
       retfield    = ‘PLNFL’  “搜索帮助要输出的的帮助字段名
       dynpprog    = sy-repid
       dynpnr      = sy-dynnr
       dynprofield = ‘T_PLNFL’   ““T_PLNFL”为输入字段,在此用T_VORNR也可以但上面的retfield名也要改
       value_org   = ‘S’
     tables
       field_tab   = field_tab_vgn  “联动关系表
       dynpfld_mapping = dynpfld_mapping_vgn “存储联动内容的内表
       value_tab   = ithp_vgn. “存储搜索帮助的内表
 endmodule.                 ” f4_help_for_vornr  INPUT
 4、在屏幕输出前或在上一屏幕进入本屏幕的动作发生后,取得搜索帮助的内容,如下:
    clear ithp_vgn[].
    select plnfl vornr ltxa1
     into corresponding fields of table ithp_vgn
     from afko
     inner join afvc on afvc~aufpl = afko~aufpl
     where afko~aufnr = t_aufnr.
   “调用联动函数
   call function ‘ZSET_F4_FIELD_FROM_VALUE_TAB’
     tables
       value_tab = ithp_vgn       “存储搜索帮助的内表
       field_tab = field_tab_vgn. “联动关系表
   clear dynpfld_mapping_vgn[].
   wa_map_vgn-fldname = ‘PLNFL’.  “帮助内表字段
   wa_map_vgn-dyfldname = ‘T_PLNFL’. “输入字段
   append wa_map_vgn to dynpfld_mapping_vgn.
   wa_map_vgn-fldname = ‘VORNR’.
   wa_map_vgn-dyfldname = ‘T_VORNR’.
   append wa_map_vgn to dynpfld_mapping_vgn.


标签: ABAP, SAP, 搜索帮助
 归类于 搜索帮助 | 没有评论 »



ME31K合同里面增强(行项目添加子屏幕,子屏幕里面增加按钮)
星期四, 05月 17th, 2012

想要在ME31K创建合同的行项目里面增加一个子屏幕,子屏幕里面添加一个按钮,这个按钮的处理方法和以前用VFBS处理的方法不同,有点特殊。
 增强的SMOD是:MM06E005屏幕是211
 在增强屏幕里面增加按钮会提示此功能不能使用,解决办法如下:
 (在表T168里面查找K类型的DETA代码的行,因为此行的屏幕是211的所以经过测试此功能可以用,命名屏幕增强里面的按钮的功能代码为DETA,)后面发现这个方法不能完全实现,只有显示的时候是可以的,后面经过跟踪源程序代码发现还有另外一个表T168F和T168,需要在T168里面复制K VARI的四个行项目,改成我们自己的功能代码(需要在T168F里面添加)
 
然后根据NOTE里面的增加几个代码:
 1. Insert additional parameters in the function modules listed below: Function module     Parameter    Type     Reference field EXIT_SAPMM06E_007   I_UCOMM      Import    SY-UCOMM
 EXIT_SAPMM06E_017   I_UCOMM      Import    SY-UCOMM
 EXIT_SAPMM06E_008   E_UCOMM      Export    SY-UCOMM
 EXIT_SAPMM06E_018   E_UCOMM      Export    SY-UCOMM
               Activate the Optional indicator for the import parameters.
 
2. Carry out the program changes that are specified under “Corrections”. As of Release 4.6A, the program changes are contained in the standard system. Therefore, there are no correction instructions for these releases.
 3. For the control in the user-defined Includes, you can proceed as follows:
 Define a global field G_UCOMM in Include ZXM06TOP (see section “Programs Non-R/3 Standard”)
 In Includes ZXM06U38 and ZXM06U42, copy the I_UCOMMimport parameter to global field G_UCOMM (see section “Programs Non-R/3 Standard”).
 In Includes ZXM06U37 and ZXM06U40, supply export parameter E_UCOMM from global field G_UCOMM (see section “Programs Non-R/3 Standard”).
 For the function codes that are assigned to pushbuttons on the user-defined subscreens, use only four-digit values that start, if possible, with a string that is not used for the function codes used in program SAPMM06E, for example, “Z_”.
 After processing the user-defined function codes, reset the global field G_UCOMM to a function code that is contained in the standard system (table T168F). For example, a possible function code is BACK. This prompts the system to go back to the item overview. (example given in Include ZXM06I01 in section “Programs Non-R/3 Standard”).


标签: ABAP, ME31K, SAP, 增强, 子屏幕按钮
 归类于 增强 | 没有评论 »



功能非常强大的查找增强的ABAP程序(查找所有激活和未激活的BADI,EXIT增强)
星期三, 05月 16th, 2012
 



Description: 功能强大的查找增强
 






*&———————————————————————*
 *& Report  ZTESTZCH994
 *&
 *&———————————————————————*
 *&winson
 *&
 *&———————————————————————*
 
REPORT ZWLP018.
 
tables: sxs_attr.
 type-pools: slis.
 “Globale Typen für generische Listbausteine
 
data: tabix like sy-tabix,
       w_linnum   type i,
       w_off      type i,
       w_index    like sy-tabix,
       w_include  like trdir-name,
       w_prog     like trdir-name,
       w_incl     like trdir-name,
       w_area     like rs38l-area,
       w_level,
       w_str(50)  type c,
       w_funcname like tfdir-funcname,
       w_fsel like sy-ucomm.            ” Determination of screen field
 
constants: c_fmod(40) type c value ‘Function modules searched: ‘,
            c_subm(40) type c value ’Submit programs searched: ’,
            c_devc(60) type c value
            ’User-exits from development classes in function modules’,
            c_col1(12) type c value ’Enhanmt Type’,
            c_col2(40) type c value ’Enhancement’,
            c_col3(30) type c value ’Program/Include’,
            c_col4(20) type c value ’Enhancement Name’,
            c_col5(40) type c value ’Enhancement Description’,
            c_col6(8)  type c value ’Project’,
            c_col7(1)  type c value ’S’,
            c_col8(12) type c value ’ChangeName’,
            c_col9(10)  type c value ’ChangeDate’.
 
* Work Areas: ABAP Workbench
 
data: begin of wa_d010inc.
 data: master type d010inc-master.
 data: end of wa_d010inc.
 
data: begin of wa_tfdir.
 data: funcname type tfdir-funcname,
       pname    type tfdir-pname,
       include  type tfdir-include.
 data: end of wa_tfdir.
 
data: begin of wa_tadir.
 data: devclass type tadir-devclass.
 data: end of wa_tadir.
 
data: begin of wa_tstc.
 data: pgmna type tstc-pgmna.
 data: end of wa_tstc.
 
data: begin of wa_tstcp.
 data: param type tstcp-param.
 data: end of wa_tstcp.
 
data: begin of wa_enlfdir.
 data: area type enlfdir-area.
 data: end of wa_enlfdir.
 
* Work Areas: BADIs
 
data: begin of wa_sxs_attr.
 data: exit_name type sxs_attr-exit_name.
 data: end of wa_sxs_attr.
 
data: begin of wa_sxs_attrt.
 data: text type sxs_attrt-text.
 data: end of wa_sxs_attrt.
 
* Work Areas: Enhancements
 
data: begin of wa_modsap.
 data: member type modsap-member.
 data: end of wa_modsap.
 
data: begin of wa_modsapa.
 data: name type modsapa-name.
 data: end of wa_modsapa.
 
data: begin of wa_modsapt.
 data: modtext type modsapt-modtext.
 data: end of wa_modsapt.
 
* Work Areas: Business Transaction Events
 
data: begin of wa_tbe01t.
 data: text1 type tbe01t-text1.
 data: end of wa_tbe01t.
 
data: begin of wa_tps01t.
 data: text1 type tps01t-text1.
 data: end of wa_tps01t.
 
* user-exits
 
types: begin of ty_mod,
           member  like modact-member,
           name    like modact-name,
           status  like modattr-status,
           anam    like modattr-anam,
           adat    like modattr-adat,
         end of ty_mod.
 data: w_mod type ty_mod.
 
types: begin of t_userexit,
       type(12) type c,
       pname    like trdir-name,
       txt(300),
       level    type c,
       modname(30) type c,
       modtext(40) type c,
       modattr     type ty_mod,
       colour(4)   type c,
 end of t_userexit.
 data: i_userexit type standard table of t_userexit with header line.
 
* Function module developmnet classes
 
types: begin of t_devclass,
       clas   like trdir-clas,
 end of t_devclass.
 data: i_devclass type standard table of t_devclass with header line.
 
* Submit programs
 
types: begin of t_submit,
       pname     like trdir-name,
       level,
       done,
 end of t_submit.
 data: i_submit type standard table of t_submit with header line.
 
* Source code
 
types: begin of t_sourcetab, “#EC * (SLIN lügt!)
         line(200),                                  ”#EC * (SLIN lügt!)
       end of t_sourcetab.                           ”#EC * (SLIN lügt!)
 data: sourcetab type standard table of t_sourcetab with header line.
 data c_overflow(30000) type c.
 
* Description of an ABAP/4 source analysis token
 *data: i_stoken type standard table of stokex with header line.
 
data: i_stoken type standard table of stoken with header line.
 data wa_stoken like i_stoken.
 
* Description of an ABAP/4 source analysis statement
 
data: i_sstmnt type standard table of sstmnt with header line.
 
***”#ECNEEDED
 
* keywords for searching ABAP code
 
types: begin of t_keywords,
       word(30),
 end of t_keywords.
 data: keywords type standard table of t_keywords with header line.
 
* function modules within program
 
types: begin of t_fmodule,
       name   like rs38l-name,
       pname  like trdir-name,
       pname2 like trdir-name,
       level,
       bapi,
       done,
 end of t_fmodule.
 data: i_fmodule type standard table of t_fmodule with header line.
 
* ALV definitions
 
data i_fieldcat type slis_t_fieldcat_alv with header line.
 data i_layout type slis_layout_alv.
 data i_sort type slis_t_sortinfo_alv with header line.
 
*&——————————————————————–&*
 
*& Selection Options                                                  &*
 
*&——————————————————————–&*
 
selection-screen begin of block selscr1 with frame title text-s01.
 parameter: p_pname like trdir-name memory id rid,”ABAP 程序名
            p_tcode like syst-tcode,”对应的TCODE
            p_limit(4) type n default 100,
            p_devc  like rihea-dy_ofn default ’ ’,
            p_func  like rihea-dy_ofn default ’ ’,
            p_subm  like rihea-dy_ofn default ’ ’.
 selection-screen skip.
 parameter: p_alv radiobutton group rad1 default ‘X’,
            p_lst radiobutton group rad1.
 selection-screen end of block selscr1.
 
*&——————————————————————–&*
 
*& START-OF-SELECTION                                                 &*
 
*&——————————————————————–&*
 
start-of-selection.
 
  if p_pname is initial and p_tcode is initial.
     message e008(hrfpm).  ”Make entry on the selection screen
     stop.
   endif.
 
* ensure P_LIMIT is not zero.
 
  if p_limit = 0.
     p_limit = 1.
   endif.
 
  perform data_select.
   perform get_submit_data.
   perform get_fm_data.
   perform get_additional_data.
   perform data_display.
 
*&——————————————————————–&*
 
*& Form DATA_SELECT                                                   &*
 
*&——————————————————————–&*
 
*&                                                                    &*
 
*&——————————————————————–&*
 
form data_select.
 
* data selection message to sap gui
 
  call function ’SAPGUI_PROGRESS_INDICATOR’
     destination ’SAPGUI’
     keeping logical unit of work
     exporting
       text                  = ’Get programs/includes’       ”#EC NOTEXT
     exceptions
       system_failure
       communication_failure
     .                                                       ”#EC *
 
* determine search words
 
  keywords-word = ’CALL’.
   append keywords.
   keywords-word = ’FORM’.
   append keywords.
   keywords-word = ’PERFORM’.
   append keywords.
   keywords-word = ’SUBMIT’.
   append keywords.
   keywords-word = ’INCLUDE’.
   append keywords.
 
  if not p_tcode is initial.
 
* get program name from TCode
 
    select single pgmna from tstc into wa_tstc-pgmna
                  where tcode eq p_tcode.
     if not wa_tstc-pgmna is initial.
       p_pname = wa_tstc-pgmna.
 
* TCode does not include program name, but does have refereve TCode
 
    else.
       select single param from tstcp into wa_tstcp-param
                    where tcode eq p_tcode.
       if sy-subrc = 0.
         check wa_tstcp-param(1)   = ’/’.
         check wa_tstcp-param+1(1) = ’*’.
         if wa_tstcp-param ca ’ ’.
         endif.
         w_off = sy-fdpos + 1.
         subtract 2 from sy-fdpos.
         if sy-fdpos gt 0.
           p_tcode = wa_tstcp-param+2(sy-fdpos).
         endif.
         select single pgmna from tstc into wa_tstc-pgmna
                where tcode eq p_tcode.
         p_pname = wa_tstc-pgmna.
         if sy-subrc <> 0.
           message e110(/saptrx/asc) with ’No program found for: ’
 p_tcode.”#EC NOTEXT
           stop.
         endif.
       else.
         message e110(/saptrx/asc) with ’No program found for: ’ p_tcode.
 “#EC NOTEXT
         stop.
       endif.
 
    endif.
   endif.
 
* Call customer-function aus Program coding
 
  read report p_pname into sourcetab.
   if sy-subrc > 0.
     message e017(enhancement) with p_pname raising no_program.”#EC *
   endif.
 
  scan abap-source sourcetab tokens     into i_stoken
                              statements into i_sstmnt
                              keywords   from keywords
                              overflow into c_overflow
                              with includes.                 ”#EC
   if sy-subrc > 0. ”keine/syntakt. falsche Ablauflog./Fehler im Skanner
     message e130(enhancement) raising syntax_error.         ”#EC
   endif.
 
* check I_STOKEN for entries
 
  clear w_linnum.
   describe table i_stoken lines w_linnum.
   if w_linnum gt 0.
     w_level = ’0′.
     w_prog = ”.
     w_incl = ”.
     perform data_search tables i_stoken using w_level w_prog w_incl.
   endif.
 
endform. “DATA_SELECT
 
*&——————————————————————–&*
 
*& Form GET_FM_DATA                                                   &*
 
*&——————————————————————–&*
 
*&                                                                    &*
 
*&——————————————————————–&*
 
form get_fm_data.
 
* data selection message to sap gui
 
  call function ’SAPGUI_PROGRESS_INDICATOR’
     destination ’SAPGUI’
     keeping logical unit of work
     exporting
       text                  = ’Get function module data’    ”#EC NOTEXT
     exceptions
       system_failure
       communication_failure
     .                                                       ”#EC *
 
* Function module data
 
  sort i_fmodule by name.
   delete adjacent duplicates from i_fmodule comparing name.
 
  loop at i_fmodule where done  ne ’X’.
 
    clear:   i_stoken, i_sstmnt, sourcetab, wa_tfdir, w_include .
     refresh: i_stoken, i_sstmnt, sourcetab.
 
    clear wa_tfdir.
     select single funcname pname include from tfdir into wa_tfdir
                             where funcname = i_fmodule-name.
     check sy-subrc = 0.
 
    call function ’FUNCTION_INCLUDE_SPLIT’
       exporting
         program = wa_tfdir-pname
       importing
         group   = w_area.
 
    concatenate ’L’ w_area ’U’ wa_tfdir-include into w_include.
     i_fmodule-pname  = w_include.
     i_fmodule-pname2 = wa_tfdir-pname.
     modify i_fmodule.
 
    read report i_fmodule-pname into sourcetab.
     if sy-subrc = 0.
 
      scan abap-source sourcetab tokens     into i_stoken
                                  statements into i_sstmnt
                                  keywords   from keywords
                                  with includes.
       if sy-subrc > 0.
         message e130(enhancement) raising syntax_error.
       endif.
 
* check i_stoken for entries
 
      clear w_linnum.
       describe table i_stoken lines w_linnum.
       if w_linnum gt 0.
         w_level = ’1′.
         w_prog  = i_fmodule-pname2.
         w_incl =  i_fmodule-pname.
         perform data_search tables i_stoken using w_level w_prog w_incl.
 
      endif.
     endif.
 
  endloop.
 
* store development classes
 
  if p_devc = ’X’.
     loop at i_fmodule.
       clear: wa_tadir, wa_enlfdir.
 
      select single area from enlfdir into wa_enlfdir-area
                             where funcname = i_fmodule-name.
       check not wa_enlfdir-area is initial.
 
      select single devclass into wa_tadir-devclass
                       from tadir where pgmid    = ’R3TR’
                                    and object   = ’FUGR’
                                    and obj_name = wa_enlfdir-area.
       check not wa_tadir-devclass is initial.
       move wa_tadir-devclass to i_devclass-clas.
       append i_devclass.
       i_fmodule-done = ’X’.
       modify i_fmodule.
     endloop.
 
    sort i_devclass.
     delete adjacent duplicates from i_devclass.
   endif.
 
endform. “GET_FM_DATA
 
*&——————————————————————–&*
 
*& Form GET_SUBMIT_DATA                                               &*
 
*&——————————————————————–&*
 
*&                                                                    &*
 
*&——————————————————————–&*
 
form get_submit_data.
 
* data selection message to sap gui
 
  call function ’SAPGUI_PROGRESS_INDICATOR’
     destination ’SAPGUI’
     keeping logical unit of work
     exporting
       text                  = ’Get submit data’             ”#EC NOTEXT
     exceptions
       system_failure
       communication_failure
     .                                                       ”#EC *
 
  sort i_submit.
   delete adjacent duplicates from i_submit comparing pname.
   w_level = ’0′.
 
  loop at i_submit where done ne ’X’.
 
    clear:   i_stoken, i_sstmnt, sourcetab.
     refresh: i_stoken, i_sstmnt, sourcetab.
 
    read report i_submit-pname into sourcetab.
     if sy-subrc = 0.

 
      scan abap-source sourcetab tokens     into i_stoken
                                  statements into i_sstmnt
                                  keywords   from keywords
                                  with includes.
       if sy-subrc > 0.
 
*        message e130(enhancement) raising syntax_error.
 
        continue.
       endif.
 
* check i_stoken for entries
 
      clear w_linnum.
       describe table i_stoken lines w_linnum.
       if w_linnum gt 0.
         w_prog  = i_submit-pname.
         w_incl = ”.
         perform data_search tables i_stoken using w_level w_prog w_incl.
 
      endif.
     endif.
 
* restrict number of submit program selected for processing
 
    describe table i_submit lines w_linnum.
     if w_linnum ge p_limit.
       w_level = ’1′.
     endif.
     i_submit-done = ’X’.
     modify i_submit.
   endloop.
 
endform. “GET_SUBMIT_DATA
 
*&——————————————————————–&*
 
*& Form DATA_SEARCH                                                   &*
 
*&——————————————————————–&*
 
*&                                                                    &*
 
*&——————————————————————–&*
 
form data_search tables p_stoken structure stoken
                         using p_level p_prog p_incl.
 
  loop at p_stoken.
 
    clear i_userexit.
 
* Workflow
 
    if p_level eq ’1′. ” do not perform for function modules
       if  p_stoken-str+1(16) = ’SWE_EVENT_CREATE’.
         if p_stoken-str+18(1) eq ’ ’.
           replace all occurrences of ”” in p_stoken-str with ”.
           i_userexit-type = ’WorkFlow’.
           i_userexit-txt  = p_stoken-str.
           concatenate p_prog ’/’ p_incl into i_userexit-pname.
           append i_userexit.
         endif.
       endif.
     endif.
 
    tabix = sy-tabix + 1.
     i_userexit-level = p_level.
     if i_userexit-level = ’0′.
       if p_incl is initial.
         i_userexit-pname = p_pname.
       else.
         concatenate  p_pname ’/’ p_incl into i_userexit-pname.

       endif.
     else.
       if p_incl is initial.
         i_userexit-pname = p_prog.
       else.
         concatenate  p_prog ’/’ p_incl into i_userexit-pname.
       endif.
     endif.
 
* Include (SE38)
 
    if p_stoken-str eq ’INCLUDE’.
       check p_level eq ’0′.    ” do not perform for function modules
       w_index = sy-tabix + 1.
       read table p_stoken index w_index into wa_stoken.
       check not wa_stoken-str cs ’STRUCTURE’.
       check not wa_stoken-str cs ’SYMBOL’.
       read table i_submit with key pname = wa_stoken-str.
       if sy-subrc <> 0.
         i_submit-pname = wa_stoken-str.
         i_submit-level = p_level.
         append i_submit.
       endif.
     endif.
 
* Enhancements (SMOD)
 
    if p_stoken-str eq ’CUSTOMER-FUNCTION’.
       clear w_funcname.
       read table p_stoken index tabix.
       translate p_stoken-str using ”’ ’.
       condense p_stoken-str.
       if p_prog is initial.
         concatenate ’EXIT’ p_pname p_stoken-str into w_funcname
                      separated by ’_’.
       else.
         concatenate ’EXIT’ p_prog p_stoken-str into w_funcname
                separated by ’_’.
       endif.
       select single member from modsap into wa_modsap-member
             where member = w_funcname.
       if sy-subrc = 0.   ” check for valid enhancement
         i_userexit-type = ’Enhancement’.
         i_userexit-txt  = w_funcname.
         append i_userexit.
       else.
         clear wa_d010inc.
         select single master into wa_d010inc-master
               from d010inc
                  where include = p_prog.
         concatenate ’EXIT’ wa_d010inc-master p_stoken-str into
 w_funcname
                separated by ’_’.
         i_userexit-type = ’Enhancement’.
         i_userexit-txt  = w_funcname.
       endif.
     endif.
 
* BADIs (SE18)
 
    if p_stoken-str cs ’cl_exithandler=’.
       w_index = sy-tabix + 4.
       read table p_stoken index w_index into wa_stoken.
       i_userexit-txt = wa_stoken-str.
       replace all occurrences of ”” in i_userexit-txt with space.
       i_userexit-type = ’BADI’.
       clear sxs_attr.   ” ensure a real BADI
       select single * from sxs_attr where exit_name = i_userexit-txt.
       if sy-subrc = 0.
         append i_userexit.
       endif.
     endif.
 
* Business transaction events (FIBF)
 
    if p_stoken-str cs ’OPEN_FI_PERFORM’.
       i_userexit-type = ’BusTrEvent’.
       i_userexit-txt = p_stoken-str.
       replace all occurrences of ”” in i_userexit-txt with space.
       i_userexit-modname =  i_userexit-txt+16(8).
       case i_userexit-txt+25(1).
         when ’E’.
           clear wa_tbe01t.
           select single text1 into wa_tbe01t-text1 from tbe01t
                            where event = i_userexit-txt+16(8)
                              and spras = sy-langu.
           if wa_tbe01t-text1 is initial.
             i_userexit-modtext = ’<Not active>’.            ”#EC NOTEXT
           else.
             i_userexit-modtext = wa_tbe01t-text1.
           endif.
           i_userexit-modname+8 = ’/P&S’.                    ”#EC NOTEXT
         when ’P’.
           clear wa_tps01t.
           select single text1 into wa_tps01t-text1 from tps01t
                            where procs = i_userexit-txt+16(8)
                              and spras = sy-langu.
           i_userexit-modtext = wa_tps01t-text1.
           i_userexit-modname+8 = ’/Process’.
       endcase.
 
      append i_userexit.
     endif.
 
* Program exits (SE38)
 
    if p_stoken-str cs ’USEREXIT_’.
       check not p_stoken-str cs ’-’.   ” ensure not USEREXIT_XX-XXX
       check not p_stoken-str cs ’(’.   ” ensure not SUBMIT_XX(X)
       i_userexit-type = ’Program Exit’.
       i_userexit-txt = p_stoken-str.
       replace all occurrences of ”” in i_userexit-txt with space.
       append i_userexit.
     endif.
 
* Submit programs (SE38)
 
    if p_stoken-str cs ’SUBMIT’.
       check p_level eq ’0′.    ” do not perform for function modules
       check not p_stoken-str cs ’_’.   ” ensure not SUBMIT_XXX
       w_index = sy-tabix + 1.
       read table p_stoken index w_index into wa_stoken.
       check not wa_stoken-str cs ’_’.   ” ensure not SUBMIT_XXX
       replace all occurrences of ”” in wa_stoken-str with space.
       read table i_submit with key pname = wa_stoken-str.
       if sy-subrc <> 0.
         i_submit-pname = wa_stoken-str.
         i_submit-level = p_level.
         append i_submit.
       endif.
     endif.
 
* Perform routines (which reference external programs)
 
    if p_stoken-str cs ’PERFORM’.
       check p_level eq ’0′.    ” do not perform for function modules
       w_index = sy-tabix + 1.
       read table p_stoken index w_index into wa_stoken.
       if not wa_stoken-ovfl is initial.
         w_off = wa_stoken-off1 + 10.
         w_str = c_overflow+w_off(30).
         find ’)’ in w_str match offset w_off.
         w_off = w_off + 1.
         wa_stoken-str = w_str(w_off).
       endif.
 
      check wa_stoken-str cs ’(’.
       w_off = 0.
       while sy-subrc  = 0.
         if wa_stoken-str+w_off(1) eq ’(’.
           replace section offset w_off length 1 of wa_stoken-str with ”
 .
           replace all occurrences of ’)’ in wa_stoken-str with space.
           read table i_submit with key pname = wa_stoken-str.
           if sy-subrc <> 0.
             i_submit-pname = wa_stoken-str.
             append i_submit.
           endif.
           exit.
         else.
           replace section offset w_off length 1 of wa_stoken-str with ”
 .
           shift wa_stoken-str left deleting leading space.
         endif.
       endwhile.
     endif.
 
* Function modules (SE37)
 
    if p_stoken-str cs ’FUNCTION’.
 
      clear i_fmodule.
       if p_level eq ’0′.    ” do not perform for function modules (2nd
         w_index = sy-tabix + 1.
         read table p_stoken index w_index into wa_stoken.
 
        if wa_stoken-str cs ’BAPI’.
           i_fmodule-bapi = ’X’.
         endif.
 
        replace first occurrence of ”” in wa_stoken-str with space.
         replace first occurrence of ”” in wa_stoken-str with space.
         if sy-subrc = 4.   ” didn’t find 2nd quote (ie name truncated)
           clear wa_tfdir.
           concatenate wa_stoken-str ’%’ into wa_stoken-str.
           select single funcname into wa_tfdir-funcname from tfdir
                        where funcname like wa_stoken-str.
           if sy-subrc = 0.
             i_fmodule-name = wa_tfdir-funcname.
           else.
             continue.
           endif.
         else.
           i_fmodule-name = wa_stoken-str.
         endif.
         i_fmodule-level = p_level.
         append i_fmodule.
       endif.
     endif.
 
  endloop.
 
endform. “DATA_SEARCH
 
*&——————————————————————–&*
 
*& Form GET_ADDITIONAL_DATA                                           &*
 
*&——————————————————————–&*
 
*&                                                                    &*
 
*&——————————————————————–&*
 
form get_additional_data.
 
* data selection message to sap gui
 
  call function ’SAPGUI_PROGRESS_INDICATOR’
     destination ’SAPGUI’
     keeping logical unit of work
     exporting
       text                  = ’Get additional data’         ”#EC NOTEXT
     exceptions
       system_failure
       communication_failure
     .                                                       ”#EC *
 
  loop at i_userexit.
 
* Workflow
 
    if i_userexit-type eq ’WorkFlow’.
       continue.
     endif.
 
* Enhancement data
 
    if  i_userexit-type cs ’Enh’.
       clear: wa_modsapa.
       select single name into wa_modsapa-name from modsap
                         where member = i_userexit-txt.
       check sy-subrc = 0.
       i_userexit-modname = wa_modsapa-name.
 
      clear wa_modsapt.
       select single modtext into wa_modsapt-modtext from modsapt
                         where name = wa_modsapa-name
                                      and sprsl = sy-langu.
       i_userexit-modtext = wa_modsapt-modtext.
 
* Get the CMOD project name
 
      clear w_mod.
       select single modact~member modact~name modattr~status
                     modattr~anam  modattr~adat
         into w_mod
         from modact
         inner join modattr
           on modattr~name = modact~name
         where modact~member = wa_modsapa-name
           and modact~typ    = space.
       if sy-subrc = 0.
         i_userexit-modattr  = w_mod.
       endif.
     endif.
 
* BADI data
 
    if  i_userexit-type eq ’BADI’.
       clear wa_sxs_attr.
       select single exit_name into wa_sxs_attr-exit_name from sxs_attr
                                     where exit_name = i_userexit-txt.
       if sy-subrc = 0.
         i_userexit-modname = i_userexit-txt.
       else.
         i_userexit-modname = ’Dynamic call’.                ”#EC NOTEXT
       endif.
       clear wa_sxs_attrt.
       select single text into wa_sxs_attrt-text from sxs_attrt
                                      where exit_name =
 wa_sxs_attr-exit_name
                                        and sprsl = sy-langu.
       i_userexit-modtext = wa_sxs_attrt-text.
     endif.
 
    modify i_userexit.
   endloop.
 
* get enhancements via program package
 
  clear wa_tadir.
   select single devclass into wa_tadir-devclass from tadir
                              where pgmid    = ’R3TR’
                                and object   = ’PROG’
                                and obj_name = p_pname.
   if sy-subrc = 0.
     clear: wa_modsapa, wa_modsapt.
     select name from modsapa into wa_modsapa-name
                           where devclass = wa_tadir-devclass.
       select single modtext from modsapt into wa_modsapt-modtext
                           where name = wa_modsapa-name
                             and sprsl = sy-langu.
 
      clear i_userexit.
       read table i_userexit with key modname = wa_modsapa-name.
       if sy-subrc <> 0.
         i_userexit-modtext = wa_modsapt-modtext.
         i_userexit-type = ’Enhancement’.                    ”#EC NOTEXT
         i_userexit-modname  = wa_modsapa-name.
         i_userexit-txt = ’Determined from program DevClass’.”#EC NOTEXT
         i_userexit-pname = ’Unknown’.                       ”#EC NOTEXT
         append i_userexit.
       endif.
     endselect.
   endif.
 
* set row colour.
 
  loop at i_userexit.
     case i_userexit-type.
       when ’BADI’.
         i_userexit-colour = ’C601′.
       when ’Enhancement’.
         i_userexit-colour = ’C501′.
       when ’Program Exit’.
         i_userexit-colour = ’C401′.
       when ’WorkFlow’.
         i_userexit-colour = ’C301′.
       when ’BusTrEvent’.
         i_userexit-colour = ’C201′.
     endcase.
     modify i_userexit.
   endloop.
 
endform. “GET_ADDITIONAL_DATA
 
*&——————————————————————–&*
 
*& Form DATA_DISPLAY                                                  &*
 
*&——————————————————————–&*
 
*&                                                                    &*
 
*&——————————————————————–&*
 
form data_display.
 
* data selection message to sap gui
 
  call function ’SAPGUI_PROGRESS_INDICATOR’
     destination ’SAPGUI’
     keeping logical unit of work
     exporting
       text                  = ’Prepare screen for display’  ”#EC NOTEXT
     exceptions
       system_failure
       communication_failure
     .                                                       ”#EC *
 
  sort i_userexit by type txt modname.
   delete adjacent duplicates from i_userexit comparing txt pname modname
 .
 
  if p_alv = ’ ’.
 
* format headings
 
    write: ’Enhancements from main program: ’, p_pname.
     write: ’Enhancements from TCode: ’, p_tcode.
     write: 201”.
     uline.
     format color col_heading.
     write: /    sy-vline,
            (12) c_col1,                    ”Enhanmt Type
                 sy-vline,
            (40) c_col2,                    ”Enhancement
                 sy-vline,
            (30) c_col3,                    ”Program/Include
                 sy-vline,
            (20) c_col4,                    ”Enhancement name
                 sy-vline,
            (40) c_col5,                    ”Enhancement description
                 sy-vline,
            (8)  c_col6,                    ”Project
                 sy-vline,
            (1)  c_col7,                    ”S
                 sy-vline,
            (12) c_col8,                    ”ChangeName
                 sy-vline,
            (10)  c_col9,                    ”ChangeDate
                 sy-vline.
     format reset.
     uline.
 
* format lines
 
    loop at i_userexit.
 
* set line colour
 
      case i_userexit-type.
         when ’Enhancement’.
           format color 3 intensified off.
         when ’BADI’.
           format color 4 intensified off.
         when ’BusTrEvent’.
           format color 5 intensified off.
         when ’Program Exit’.
           format color 6 intensified off.
         when others.
           format reset.
       endcase.
       write: / sy-vline,
                i_userexit-type,
                sy-vline,
                i_userexit-txt(40),
                sy-vline,
                i_userexit-pname(30),
                sy-vline,
                i_userexit-modname(20),
                sy-vline,
                i_userexit-modtext(40),
                sy-vline.
 
      write:  i_userexit-modattr-name,
               sy-vline,
               i_userexit-modattr-status,
               sy-vline,
               i_userexit-modattr-anam,
               sy-vline,
               i_userexit-modattr-adat no-zero,
               sy-vline.
       hide: i_userexit-modname, i_userexit-type, i_userexit-modattr-name
 .
 
    endloop.
     format reset.
     uline.
 
* user-exits from development class of function modules
 
    if p_devc = ’X’.

       write: /.
       write: / c_devc.
       write: 201”.
       uline (90).
       write: 201”.
 
      loop at i_devclass.
         clear wa_modsapa.
         select name from modsapa into wa_modsapa
                      where devclass = i_devclass-clas.
           select single name modtext into corresponding fields of
 wa_modsapt
                                      from modsapt
                                        where name  = wa_modsapa-name
                                          and sprsl = sy-langu.
           format color 3 intensified off.
           write: / sy-vline,
                    (12) ’Enhancement’,
                    sy-vline,
                   wa_modsapa-name,
                   sy-vline,
                   wa_modsapt-modtext,
                   sy-vline.
         endselect.
       endloop.
       write: 201”.
       uline (90).
       format reset.
     endif.
 
* display fuction modules used in program
 
    write /.
     describe table i_fmodule lines w_linnum.
     write: / c_fmod , at 35 w_linnum.                       ”#EC NOTEXT
     write: 201”.
 
    if p_func = ’X’.
       uline (38).
       write: 201”.
       loop at i_fmodule.
         write: sy-vline,
                i_fmodule-name,
                sy-vline,
                i_fmodule-bapi,
                sy-vline.
         write: 201”.
       endloop.
       write: 201”.
       uline (38).
     endif.
 
* display submit programs used in program
 
    write /.
     describe table i_submit lines w_linnum.
     write: / c_subm , at 35 w_linnum.                       ”#EC NOTEXT
     write: 201”.
     if p_subm = ’X’.
       uline (44).
       write: 201”.
       loop at i_submit.
         write: sy-vline,
                i_submit-pname,
                sy-vline.
         write: 201”.
       endloop.
       write: 201”.
       uline (44).
     endif.
 
* issue message with number of user-exits displayed
 
    describe table i_userexit lines w_linnum.
     message s697(56) with w_linnum.
 
  else.    ” Show in alv format
 
* issue message with number of user-exits displayed
 
    describe table i_userexit lines w_linnum.
     message s697(56) with w_linnum.
 
* Create field catalog
 
    perform create_field_catalog using ’TYPE’           ’T_USEREXIT’ ’ ’
  ’Type’.
     perform create_field_catalog using ’PNAME’          ’T_USEREXIT’ ’ ’
  ’Program name’.
     perform create_field_catalog using ’TXT’            ’T_USEREXIT’ ’ ’
  ’Enhancement’.
     perform create_field_catalog using ’LEVEL’          ’T_USEREXIT’ ’X’
  ’Level’.
     perform create_field_catalog using ’MODNAME’        ’T_USEREXIT’ ’ ’
  ’Enhancement name’.
     perform create_field_catalog using ’MODTEXT’        ’T_USEREXIT’ ’ ’
  ’Enhancement text’.
     perform create_field_catalog using ’MODATTR-MEMBER’ ’T_USEREXIT’ ’X’
  ’Member’.
     perform create_field_catalog using ’MODATTR-NAME’   ’T_USEREXIT’ ’ ’
  ’Project’.
     perform create_field_catalog using ’MODATTR-STATUS’ ’T_USEREXIT’ ’ ’
  ’Status’.
     perform create_field_catalog using ’MODATTR-ANAM’   ’T_USEREXIT’ ’ ’
  ’Changed by’.
     perform create_field_catalog using ’MODATTR-ADAT’   ’T_USEREXIT’ ’ ’
  ’Change date’.
 
* Layout
 
    clear i_layout.
     i_layout-colwidth_optimize = ’X’.
     i_layout-info_fieldname    = ’COLOUR’.
 
* Sort
 
    clear i_sort.
     i_sort-fieldname = ’TYPE’.
     i_sort-tabname   = ’T_USEREXIT’.
     i_sort-up = ’X’.
     append i_sort.
 
    call function ’REUSE_ALV_GRID_DISPLAY’
       exporting
         i_callback_program      = sy-cprog
         i_callback_user_command = ’USER_COMMAND’
         is_layout               = i_layout
         it_fieldcat             = i_fieldcat[]
         it_sort                 = i_sort[]
         i_default               = ’X’
         i_save                  = ’A’
       tables
         t_outtab                = i_userexit.
 
  endif.
 
* issue message with number of user-exits displayed
 
  describe table i_userexit lines w_linnum.
   message s697(56) with w_linnum.
 
endform. “DATA_DISPLAY
 
*&———————————————————————&
 *
 *& Form  CREATE_FIELD_CATALOG
 *&———————————————————————&
 *
 
form create_field_catalog using p_fieldname
                                    p_tabname
                                    p_hide
                                    p_text.
 
  i_fieldcat-fieldname        = p_fieldname.
   i_fieldcat-tabname          = p_tabname.
   i_fieldcat-no_out           = p_hide.
   i_fieldcat-seltext_l        = p_text.
 
  append i_fieldcat.
 
endform. ” CREATE_FIELD_CATALOG
 
*&———————————————————————&
 *
 *& Form  CREATE_FIELD_CATALOG
 *&———————————————————————&
 *
 
form user_command using r_ucomm like sy-ucomm
                         rs_selfield type slis_selfield.
   read table i_userexit index rs_selfield-tabindex.
   check sy-subrc = 0.
   case r_ucomm.
     when ’&IC1′.
       case rs_selfield-sel_tab_field.
         when ’T_USEREXIT-MODNAME’.
           read table i_userexit index rs_selfield-tabindex.
           case i_userexit-type.
             when ’Enhancement’.
               set parameter id ’MON’ field i_userexit-modname.
               call transaction ’SMOD’.
             when ’BADI’.
               set parameter id ’EXN’ field i_userexit-modname.
               call transaction ’SE18′ and skip first screen.
             when ’BusTrEvent’.
               submit rfopfi00 with event = i_userexit-modname(8) and
 return.
             when others.
               message s030(cj). ”Navigation not possible
           endcase.
         when ’T_USEREXIT-MODATTR-NAME’.
           if not i_userexit-modattr-name is initial.
             set parameter id ’MON_KUN’ field i_userexit-modattr-name.
             call transaction ’CMOD’.
           else.
             message s030(cj).”Navigation not possible
           endif.
         when others.
           message s030(cj).”Navigation not possible
       endcase.
   endcase.
 
endform. “user_command
 
*&——————————————————————–&*
 
*& AT LINE-SELECTION                                                  &*
 
*&——————————————————————–&*
 
at line-selection.
 
  get cursor field w_fsel.
 
  case w_fsel.
 
    when ’I_USEREXIT-MODNAME’.
       case i_userexit-type.
         when ’Enhancement’.
           set parameter id ’MON’ field i_userexit-modname.
           call transaction ’SMOD’.
         when ’BADI’.
           set parameter id ’EXN’ field i_userexit-modname.
           call transaction ’SE18′ and skip first screen.
         when ’BusTrEvent’.
           submit rfopfi00 with event = i_userexit-modname(8) and return.
 
        when others.
           message s030(cj).”Navigation not possible
       endcase.
 
    when ’I_USEREXIT-MODATTR-NAME’.
       if not i_userexit-modattr-name is initial.
         set parameter id ’MON_KUN’ field i_userexit-modattr-name.
         call transaction ’CMOD’.
       else.
         message s030(cj).”Navigation not possible
       endif.
 
    when others.
       message s030(cj).”Navigation not possible
 
  endcase.
 



 
 


标签: ABAP, BADI, EXIT, SAP, 增强
 归类于 ABAP, 增强 | 8 篇评论 »



oo(面向对象)类型ALV的模板程序(适合快速开发)
星期二, 05月 15th, 2012

*&———————————————————————*
 *& Report  ZWLP_TEST02
 *&
 *&———————————————————————*
 *&
 *&
 *&———————————————————————*
 
REPORT  ZWLP_TEST04.
 
TYPE-POOLS:SLIS.
 
TABLES: ZTRYXX.
 
*&———————类型定义—————————————————–*
 
*************************************************************************************
 *&——————— 程序中使用的 内表和工作区定义———————————-*
 DATA: WA_TAB LIKE ZTRYXX,
       IT_TAB LIKE TABLE OF ZTRYXX.
 
**************************************************************************************
 *———————-  全局变量     ————————————————*
 
DATA: OK_CODE TYPE SY-UCOMM,
       SAVE_OK TYPE SY-UCOMM.
 **************************************************************************************
 *———————-  ALV显示要用到的几个全局变量     ——————————*
 DATA: WA_CONTAINER TYPE SCRFNAME VALUE ‘ALV’,”ALV是屏幕100中定义控制控件的名称
       ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
       WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
 
DATA:  G_FIELDCAT_ALV TYPE LVC_T_FCAT WITH HEADER LINE,”定义存放字段信息的内表
        G_LAYOUT TYPE LVC_S_LAYO.”定义存放画面布局控制数据的工作区
 
 
 
***************************************************************************************
 
*&—————– ————————————————————————-*
 *                             选择屏幕
 *&——————————————————————————————*
 
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
 SELECT-OPTIONS: S_ZNO FOR ZTRYXX-ZNO,
                 S_ZGZ FOR ZTRYXX-ZGZ.
 PARAMETERS: P_ZGW LIKE ZTRYXX-ZGW OBLIGATORY.
 
PARAMETERS: P_MALE TYPE C RADIOBUTTON GROUP G1,
             P_FEMALE TYPE C RADIOBUTTON GROUP G1.
 SELECTION-SCREEN END OF BLOCK B1.
 
**********************************************************************************************
 
START-OF-SELECTION.
 
*–>根据选择屏幕输入值去表取数据
   PERFORM FRM_GET_DATA.”取数
 *–>把取出来的数据在屏幕显示
   CALL SCREEN 100.
 
 
 
 
 *&———————————————————————*
 *&      Form  FRM_GET_DATA
 *&———————————————————————*
 *      取数逻辑
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_GET_DATA .
   DATA: P_ZSEX LIKE ZTRYXX-ZSEX.
   IF P_MALE EQ ‘X’.
     P_ZSEX = 1.
   ELSE.
     P_ZSEX = 2.
   ENDIF.
   SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_TAB FROM ZTRYXX
     WHERE ZNO IN S_ZNO
     AND   ZGZ IN S_ZGZ
     AND   ZSEX = P_ZSEX
     AND   ZGW = P_ZGW.
 
ENDFORM.                    ” FRM_GET_DATA
 
*&———————————————————————*
 *&      Module  STATUS_0100  OUTPUT
 *&———————————————————————*
 *       text
 *———————————————————————-*
 MODULE STATUS_0100 OUTPUT.
   SET PF-STATUS ‘STA21′.
   SET TITLEBAR ‘员工查询信息’.
 
  IF WA_CUSTOM_CONTAINER IS INITIAL.
 *–>创建定制对象也就是容器
     CREATE OBJECT WA_CUSTOM_CONTAINER
         EXPORTING
     CONTAINER_NAME = WA_CONTAINER.
 *–>创建ALV对象,并把他放入容器
     CREATE OBJECT ALV_GRID
           EXPORTING
     I_PARENT = WA_CUSTOM_CONTAINER.
 *–>显示数据
     PERFORM FRM_DISPLAY_DATA.
 
  ENDIF.
 ENDMODULE.                 ” STATUS_0100  OUTPUT
 *&———————————————————————*
 *&      Module  USER_COMMAND_0100  INPUT
 *&———————————————————————*
 *       text
 *———————————————————————-*
 MODULE USER_COMMAND_0100 INPUT.
   CASE OK_CODE.
     WHEN ‘&F03′.
       LEAVE PROGRAM.
   ENDCASE.
 ENDMODULE.                 ” USER_COMMAND_0100  INPUT
 *&———————————————————————*
 *&      Form  FRM_DISPLAY_DATA
 *&———————————————————————*
 *       显示数据
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_DISPLAY_DATA .
   PERFORM FRM_ALV_LAYOUT_BUILD.”设置整个ALV的布局格式
   PERFORM FRM_ALV_SET_COLUMNS.”设置ALV每一列的输出格式
   CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
     EXPORTING
       I_SAVE          = ‘A’
       IS_LAYOUT       = G_LAYOUT
     CHANGING
       IT_FIELDCATALOG = G_FIELDCAT_ALV[]
       IT_OUTTAB       = IT_TAB.
 ENDFORM.                    ” FRM_DISPLAY_DATA
 *&———————————————————————*
 *&      Form  FRM_ALV_LAYOUT_BUILD
 *&———————————————————————*
 *       ALV整体显示的设置,包括双击,标志是否显示0等
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_ALV_LAYOUT_BUILD.
 
  CLEAR G_LAYOUT.
   G_LAYOUT-ZEBRA = ‘X’.”带条纹模式,隔行换色
   G_LAYOUT-CWIDTH_OPT = ‘X’.”优化列宽,自动适应内容长度
   G_LAYOUT-BOX_FNAME = ‘FLAG’.”存放选择信息,在数据内表中已定义该字段名称
   G_LAYOUT-DETAILTITL = TEXT-041.”POPUP窗口标题
 
ENDFORM.                    ” FRM_ALV_LAYOUT_BUILD
 *&———————————————————————*
 *&      Form  FRM_ALV_SET_COLUMNS
 *&————————-
 *——————————————–*
 *       设置每一个ALV列的显示和属性
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_ALV_SET_COLUMNS .
 
  REFRESH G_FIELDCAT_ALV.
   PERFORM FRM_SET_L_FIELDCAT USING 1  ‘ZNO’     ‘员工编号’.
   PERFORM FRM_SET_L_FIELDCAT USING 2  ‘ZNAME’     ‘员工姓名’.
   PERFORM FRM_SET_L_FIELDCAT USING 3  ‘ZSEX’     ‘员工性别’.
   PERFORM FRM_SET_L_FIELDCAT USING 4  ‘ZGW’     ‘员工岗位’.
   PERFORM FRM_SET_L_FIELDCAT USING 5  ‘ZGZ’     ‘员工工资’.
 
ENDFORM.                    ” FRM_ALV_SET_COLUMNS
 
 
 
*&———————————————————————*
 *&      Form  FRM_SET_L_FIELDCAT
 *&———————————————————————*
 *       将值赋给每一个列
 *———————————————————————-*
 *      –>L_POS      列数
 *      –>NAME       列的名称也就是对应的内表的名称
 *      –>TEXTL      列的抬头文本
 *———————————————————————-*
 FORM FRM_SET_L_FIELDCAT  USING    L_POS NAME TEXTL.
 
  CLEAR: G_FIELDCAT_ALV.
   G_FIELDCAT_ALV-COL_POS = L_POS.
   G_FIELDCAT_ALV-FIELDNAME = NAME.
   G_FIELDCAT_ALV-SCRTEXT_L  = TEXTL.
   APPEND G_FIELDCAT_ALV.
 ENDFORM.                    ” FRM_SET_L_FIELDCAT


标签: ABAP, ALV, SAP, 模板,快速开发
 归类于 ABAP, ABAP例子, 模板程序 | 没有评论 »



MB51物料凭证清单程序增强增加四个字段
星期二, 05月 15th, 2012

功能需求是:
 
在系统标准功能MB51物料凭证查询的基础上增强四个字段
 
1、供应商描述:根据表MSEG中的供应商LIFNR去GOHEAD-VENDORNAME中取值
 
2、物料组:根据MSEG中的物料编码MATNR去表MARA中取MATKL
 
3、物料组描述:根据物料组MARA-MATKL去取T023T-WGBEZ
 
4、成本中心描述:根据MSEG-KOSTL去取CSKT-LTEXT
 
增强的四个字段放在“更改格式”里,需要时取出即可
 
首先进入MB51的标准程序,点击增强按钮,然后点击菜单里面的增强选择把程序的所有隐式增强显示出来,
 


而后在下面几个地方增加如下代码:
 
1.在INCLUDE  RM07DOCS_GENERATED里面的内表定义ITAB增强需要的这几个字段
 
 DATA: BEGIN OF ITAB OCCURS 0.
 DATA: ANLN1 TYPE MSEG-ANLN1 .
 DATA: ANLN2 TYPE MSEG-ANLN2 .
 DATA: APLZL TYPE MSEG-APLZL .
 DATA: AUFNR TYPE MSEG-AUFNR .
 DATA: AUFPL TYPE MSEG-AUFPL .
 DATA: BKTXT TYPE MKPF-BKTXT .
 DATA: BLDAT TYPE MKPF-BLDAT .
 DATA: BPMNG TYPE MSEG-BPMNG .
 DATA: BPRME TYPE MSEG-BPRME .
 DATA: BSTME TYPE MSEG-BSTME .
 DATA: BSTMG TYPE MSEG-BSTMG .
 DATA: BUDAT TYPE MKPF-BUDAT .
 DATA: BUKRS TYPE MSEG-BUKRS .
 DATA: BWART TYPE MSEG-BWART .
 DATA: BWTAR TYPE MSEG-BWTAR .
 DATA: CHARG TYPE MSEG-CHARG .
 DATA: CPUDT TYPE MKPF-CPUDT .
 DATA: CPUTM TYPE MKPF-CPUTM .
 DATA: DMBTR TYPE MSEG-DMBTR .
 DATA: EBELN TYPE MSEG-EBELN .
 DATA: EBELP TYPE MSEG-EBELP .
 DATA: ERFME TYPE MSEG-ERFME .
 DATA: ERFMG TYPE MSEG-ERFMG .
 DATA: EXBWR TYPE MSEG-EXBWR .
 DATA: EXVKW TYPE MSEG-EXVKW .
 DATA: GRUND TYPE MSEG-GRUND .
 DATA: KDAUF TYPE MSEG-KDAUF .
 DATA: KDEIN TYPE MSEG-KDEIN .
 DATA: KDPOS TYPE MSEG-KDPOS .
 DATA: KOSTL TYPE MSEG-KOSTL .
 DATA: KUNNR TYPE MSEG-KUNNR .
 DATA: KZBEW TYPE MSEG-KZBEW .
 DATA: KZVBR TYPE MSEG-KZVBR .
 DATA: KZZUG TYPE MSEG-KZZUG .
 DATA: LGORT TYPE MSEG-LGORT .
 DATA: LIFNR TYPE MSEG-LIFNR .
 DATA: MATNR TYPE MSEG-MATNR .
 DATA: MAT_KDAUF TYPE MSEG-MAT_KDAUF .
 DATA: MAT_KDPOS TYPE MSEG-MAT_KDPOS .
 DATA: MBLNR TYPE MKPF-MBLNR .
 DATA: MEINS TYPE MSEG-MEINS .
 DATA: MENGE TYPE MSEG-MENGE .
 DATA: MJAHR TYPE MKPF-MJAHR .
 DATA: NPLNR TYPE MSEG-NPLNR .
 DATA: PS_PSP_PNR TYPE MSEG-PS_PSP_PNR .
 DATA: RSNUM TYPE MSEG-RSNUM .
 DATA: RSPOS TYPE MSEG-RSPOS .
 DATA: SHKZG TYPE MSEG-SHKZG .
 DATA: SOBKZ TYPE MSEG-SOBKZ .
 DATA: USNAM TYPE MKPF-USNAM .
 DATA: VGART TYPE MKPF-VGART .
 DATA: VKWRT TYPE MSEG-VKWRT .
 DATA: WAERS TYPE MSEG-WAERS .
 DATA: WERKS TYPE MSEG-WERKS .
 DATA: XABLN TYPE MKPF-XABLN .
 DATA: XAUTO TYPE MSEG-XAUTO .
 DATA: XBLNR TYPE MKPF-XBLNR .
 DATA: ZEILE TYPE MSEG-ZEILE .
 ************************************增强供应商描述,物料组和物料组描述和成本中心四个字段
 DATA: NAME  TYPE  LFA1-NAME1.
 DATA: MATKL TYPE MARA-MATKL .
 DATA: WGBEZ TYPE T023T-WGBEZ .
 DATA: LTEXT TYPE CSKT-LTEXT .
 ************************************增强供应商描述,物料组和物料组描述和成本中心四个字段
 
 DATA: END OF ITAB. 

2.在 FORM DATA_SELECTION   DATA_SELECTION_VIA_MATNR  DATA_SELECTION_VIA_BUDAT 的尾部增加如下代码:
 
 LOOP AT  ITAB.
     IF ITAB-LIFNR IS NOT INITIAL.
       SELECT SINGLE NAME1 INTO ITAB-NAME FROM LFA1 WHERE LIFNR EQ ITAB-LIFNR.
     ENDIF.
     IF ITAB-MATNR IS NOT INITIAL.
       SELECT SINGLE MATKL INTO ITAB-MATKL FROM MARA WHERE MATNR EQ ITAB-MATNR.
     ENDIF.
     IF ITAB-MATKL IS NOT INITIAL.
       SELECT SINGLE WGBEZ INTO ITAB-WGBEZ FROM T023T WHERE MATKL EQ ITAB-MATKL.
     ENDIF.
     IF ITAB-KOSTL IS NOT INITIAL.
       SELECT SINGLE LTEXT INTO ITAB-LTEXT FROM CSKT WHERE  KOSTL EQ ITAB-KOSTL.
     ENDIF.
     MODIFY ITAB.
   ENDLOOP. 

3.在 FORM BUILD_RUNTIMETABLE 尾部增加如下代码
 
 ************************************增强供应商描述,物料组和物料组描述和成本中心四个字段
   RX1 ‘ZMB51′  ‘NAME’ ‘00′  ‘00′.
   RX1 ‘ZMB51′ ‘MATKL’ ‘00′  ‘00′.
   RX1 ‘ZMB51′ ‘WGBEZ’ ‘00′  ‘00′.
   RX1 ‘ZMB51′ ‘LTEXT’ ‘00′ ‘00′.
 ************************************增强供应商描述,物料组和物料组描述和成本中心四个字段 

5. DEFINE RX1.
   CS-TABNAME = &1.
   CS-FIELDNAME = &2.
   CS-SELECTION_POSITION = &3.
   CS-OUTPUT_POSITION = &4.
   APPEND CS TO RTT.
 END-OF-DEFINITION. 


标签: ABAP, mb51, SAP, 增强
 归类于 ABAP, 增强 | 没有评论 »



abap程序相关事件以及这些事件执行的顺序
星期一, 05月 14th, 2012

ABAP程序运行的时候,INITIALIZATION首先被调用;
 经过初始化的输入屏幕会显示在表示服务器;
 用户离开输入屏幕的时候,START-OF-SELCTION事件会被自动调用;
 结果数据会以列表的形式显示在第二个屏幕上;
 相关事件有:
 INITIALIZATION.
   通常在此事件块中设定输入屏幕字段的初始值
 AT SELECTION-SCREEN.
   通常在此事件块中进行用户输入数据的合法性检查,发现错误则以消息的形式给出警示,直到用户输入正确的数值
 START-OF-SELCTION.
   通常在此事件中针对业务需求进行系统数据的查询
 END-OF-SELCTION.
   通常在此事件中进行结果清单的输出
 GET.
   从逻辑数据库中得到数据(较少用)
 AT USER-COMMAND
 用户选择命令
 TOP-OF-PAGE.
   在此事件块中设计输出清单的页头
 END-OF-PAGE.
   在此事件中设定输出清单的页脚
 AT LINE-SELECTION.
   无论何时用户通过单击 鼠标或按 F2 键在列表中 选择一个项 目时,AT LINE-SELECTION 和下一个事 件关键字之 间的所有语 句将被处理
 



标签: ABAP, 事件, 添加标签
 归类于 ABAP | 没有评论 »



ABAP程序中调用不同类型的函数弹出不同的消息对话框
星期一, 05月 14th, 2012

一组有用的用户交互窗口函数
 
显示多条消息
 SAP系统用的是这个函数:C14Z_MESSAGES_SHOW_AS_POPUP
 


POPUP_TO_CONFIRM_LOSS_OF_DATA 显示有YES/NO的弹出窗口,提示用户未保存的数据将丢失
 
POPUP_TO_CONFIRM_STEP 提示是否确认操作的弹出窗口
 *调用对话框函数
     call function ‘POPUP_TO_CONFIRM_STEP’
       EXPORTING
         titel          = text-m02
         textline1      = l_msgtxt
         cancel_display = space                          “不显示CANCEL按钮
       IMPORTING
         answer         = l_answer.
 
POPUP_TO_CONFIRM_WITH_MESSAGE 可以显示定制的提示信息的确认窗口
 
POPUP_TO_CONFIRM_WITH_VALUE 显示确认用户对某个特定对象的操作的弹出窗口
 
POPUP_TO_DECIDE 将待确认选项以单选按钮的方式显示的弹出窗口
 
POPUP_TO_DECIDE_WITH_MESSAGE 带消息的确认窗口
 
POPUP_TO_DISPLAY_TEXT 显示多行信息的窗口
 
POPUP_TO_SELECT_MONTH 月份选择窗口
 
POPUP_WITH_TABLE_DISPLAY 有表格对象的确认窗口


标签: ABAP, 函数, 消息
 归类于 ABAP消息 | 没有评论 »



快速开发—系统标准类型ALV的模板程序(带抬头文本的)
星期一, 05月 14th, 2012

*&———————————————————————*
 *& Report  ZWLP_TEST02
 *&
 *&———————————————————————*
 *&
 *&
 *&———————————————————————*
 
REPORT  ZWLP_TEST02.
 
TYPE-POOLS:SLIS.
 
TABLES: ZTRYXX.
 
*&———————类型定义—————————————————–*
 
*************************************************************************************
 *&——————— 程序中使用的 内表和工作区定义———————————-*
 DATA: WA_TAB LIKE ZTRYXX,
       IT_TAB LIKE TABLE OF ZTRYXX.
 
**************************************************************************************
 *———————-  全局变量     ————————————————*
 DATA G_SEX TYPE C.
 
**************************************************************************************
 *———————-  ALV显示要用到的几个全局变量     ——————————*
 
DATA:
   G_FIELDCAT_ALV TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,”定义存放字段信息的内表
   G_LAYOUT TYPE SLIS_LAYOUT_ALV,”定义存放画面布局控制数据的工作区
   G_REPID LIKE SY-REPID VALUE SY-REPID.”报表ID
 
***************************************************************************************
 
*&—————– ————————————————————————-*
 *                             选择屏幕
 *&——————————————————————————————*
 
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
 SELECT-OPTIONS: S_ZNO FOR ZTRYXX-ZNO,”员工编号
                 S_ZGZ FOR ZTRYXX-ZGZ.”
 PARAMETERS: P_ZGW LIKE ZTRYXX-ZGW OBLIGATORY.
 
PARAMETERS: P_MALE TYPE C RADIOBUTTON GROUP G1,
             P_FEMALE TYPE C RADIOBUTTON GROUP G1.
 SELECTION-SCREEN END OF BLOCK B1.
 
**********************************************************************************************
 
START-OF-SELECTION.
 *–>根据选择屏幕输入值去表取数据
   PERFORM FRM_GET_DATA.”取数
 *–>用ALV显示数据
   PERFORM FRM_ALV_LAYOUT_BUILD.”设置ALV整体布局
   PERFORM FRM_ALV_SET_COLUMNS.”设置ALV各个列的格式
   PERFORM FRM_ALV_DISPLAY_DATA.”调用ALV输出函数输出数据
 
 
 
 
 
 
 
*&———————————————————————*
 *&      Form  FRM_GET_DATA
 *&———————————————————————*
 *      根据选择屏幕输入值去表取数据
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_GET_DATA .
   DATA: P_ZSEX LIKE ZTRYXX-ZSEX.
   IF P_MALE EQ ‘X’.
     P_ZSEX = 1.
   ELSE.
     P_ZSEX = 2.
   ENDIF.
   SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_TAB FROM ZTRYXX
     WHERE ZNO IN S_ZNO
     AND   ZGZ IN S_ZGZ
     AND   ZSEX = P_ZSEX
     AND   ZGW = P_ZGW.
 
ENDFORM.                    ” FRM_GET_DATA
 
 
 
*&———————————————————————*
 *&      Form  FRM_ALV_LAYOUT_BUILD
 *&———————————————————————*
 *       ALV整体显示的设置,包括双击,标志是否显示0等
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_ALV_LAYOUT_BUILD.
   CLEAR G_LAYOUT.
   G_LAYOUT-ZEBRA = ‘X’.”带条纹模式,隔行换色
   G_LAYOUT-DETAIL_POPUP = ‘X’.”采用默认的POPUP模式
   G_LAYOUT-F2CODE = ‘&ETA’.”触发POPUP功能码,&ETA表示双击
   G_LAYOUT-NO_VLINE = ‘X’.
   G_LAYOUT-COLWIDTH_OPTIMIZE = ‘X’.”优化列宽,自动适应内容长度
   G_LAYOUT-BOX_FIELDNAME = ‘FLAG’.”存放选择信息,在数据内表中已定义该字段名称
   G_LAYOUT-DETAIL_INITIAL_LINES = ‘X’.
   G_LAYOUT-DETAIL_TITLEBAR = TEXT-041.”POPUP窗口标题
 
ENDFORM.                    ” FRM_ALV_LAYOUT_BUILD
 *&———————————————————————*
 *&      Form  FRM_ALV_SET_COLUMNS
 *&————————-
 *——————————————–*
 *       设置每一个ALV列的显示和属性
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_ALV_SET_COLUMNS .
 
  REFRESH G_FIELDCAT_ALV.
   PERFORM FRM_SET_L_FIELDCAT USING 1  ‘ZNO’     ‘员工编号’.
   PERFORM FRM_SET_L_FIELDCAT USING 2  ‘ZNAME’     ‘员工姓名’.
   PERFORM FRM_SET_L_FIELDCAT USING 3  ‘ZSEX’     ‘员工性别’.
   PERFORM FRM_SET_L_FIELDCAT USING 4  ‘ZGW’     ‘员工岗位’.
   PERFORM FRM_SET_L_FIELDCAT USING 5  ‘ZGZ’     ‘员工工资’.
 
ENDFORM.                    ” FRM_ALV_SET_COLUMNS
 
 
 
*&———————————————————————*
 *&      Form  FRM_SET_L_FIELDCAT
 *&———————————————————————*
 *       将值赋给每一个列
 *———————————————————————-*
 *      –>L_POS      列数
 *      –>NAME       列的名称也就是对应的内表的名称
 *      –>TEXTL      列的抬头文本
 *———————————————————————-*
 FORM FRM_SET_L_FIELDCAT  USING    L_POS NAME TEXTL.
 
  DATA:L_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
   L_FIELDCAT-COL_POS = L_POS.
   L_FIELDCAT-FIELDNAME = NAME.
   L_FIELDCAT-SELTEXT_L = TEXTL.
   APPEND L_FIELDCAT TO G_FIELDCAT_ALV.
 ENDFORM.                    ” FRM_SET_L_FIELDCAT
 
 
 
*&———————————————————————*
 *&      Form  FRM_STATUS_ALV
 *&———————————————————————*
 *       设置ALV的工具栏
 *———————————————————————-*
 *      –>RT_EXTAB   text
 *———————————————————————-*
 FORM FRM_STATUS_ALV USING RT_EXTAB TYPE SLIS_T_EXTAB.
   SET PF-STATUS ‘STA21′.
 ENDFORM.                    “FRM_STATUS_ALV
 *&———————————————————————*
 *&      Form  FRM_USER_COMMAND_ALV
 *&———————————————————————*
 *       对ALV进行的操作的按钮的响应既扑捉功能代码
 *———————————————————————-*
 *      –>PR_UCOMM     text
 *      –>PR_SELFIELD  text
 *———————————————————————-*
 FORM FRM_USER_COMMAND_ALV USING PR_UCOMM TYPE SY-UCOMM PR_SELFIELD TYPE SLIS_SELFIELD.
 
  CASE PR_UCOMM.
     WHEN ‘&F12′ OR ‘&F15′ OR ‘&F03′.
       LEAVE TO SCREEN 0.
   ENDCASE.
 ENDFORM.                    ” FRM_USER_COMMAND_ALV
 
 
 *&———————————————————————*
 *&      Form  FRM_ALV_DISPLAY_DATA
 *&———————————————————————*
 *       调用ALV显示函数显示ALV数据
 *———————————————————————-*
 *  –>  p1        text
 *  <–  p2        text
 *———————————————————————-*
 FORM FRM_ALV_DISPLAY_DATA .
   CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
     EXPORTING
       I_CALLBACK_PROGRAM          = G_REPID”传入返回的程序ID,一般是当前程序名
       I_CALLBACK_PF_STATUS_SET    = ‘FRM_STATUS_ALV’”创建ALV工具栏,对应的程序要创建一样的FORM
       I_CALLBACK_USER_COMMAND     = ‘FRM_USER_COMMAND_ALV’”响应用户的操作,扑捉功能码对应的程序要创建一样的FORM
       I_CALLBACK_HTML_TOP_OF_PAGE = ‘FRM_TOP_OF_PAGE’”设置ALV的头部,对应的程序要创建一样的FORM
       IS_LAYOUT                   = G_LAYOUT         “传入ALV显示格式控制数据
       IT_FIELDCAT                 = G_FIELDCAT_ALV[] “传入显示字段的内表
       I_SAVE                      = ‘A’              “设置为A表示可以保存ALV显示格式
     TABLES
       T_OUTTAB                    = IT_TAB.      “要显示的内表
 
ENDFORM.                    ” FRM_ALV_DISPLAY_DATA
 
*&———————————————————————*
 *&      Form  FRM_TOP_OF_PAGE
 *&———————————————————————*
 *       ALV头部信息
 *———————————————————————-*
 *      –>DOCUMENT   text
 *———————————————————————-*
 FORM FRM_TOP_OF_PAGE USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
   DATA: TEXT TYPE SDYDO_TEXT_ELEMENT.
   “头部的大号标题文本
   CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 5.
   TEXT =  ‘系统反馈信息’.
   CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘HEADING’.
 
  CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 5.
   “图片
   CALL METHOD DOCUMENT->ADD_PICTURE
     EXPORTING
       PICTURE_ID       = ‘ENJOYSAP_LOGO’
       WIDTH            = ‘100*      alternative_text =
 *      tabindex         =
       .
   “换行
   CALL METHOD DOCUMENT->NEW_LINE.
   CALL METHOD DOCUMENT->NEW_LINE.
 
  CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 20.
   TEXT = ‘总条目:’.
   CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘S’.
   CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 4.
 
  TEXT =  ‘测试’.
   CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘S’.
 
  CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 5.
   TEXT =  ‘导入成功条目:’.
 
  CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘S’.
   CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 4.
   TEXT =  ‘文本’.
   CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘S’.
   CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 5.
   TEXT = ‘导入失败条目:’.
   CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘S’.
   CALL METHOD DOCUMENT->ADD_GAP
     EXPORTING
       WIDTH = 4.
   CALL METHOD DOCUMENT->ADD_TEXT
     EXPORTING
       TEXT      = TEXT
       SAP_STYLE = ‘S’.
 ENDFORM.                    “FRM_TOP_OF_PAGE


标签: ABAP, ALV, SAP, 模板
 归类于 ABAP, ABAP例子, ALV相关的东西, 模板程序 | 没有评论 »


« Older Entries

Newer Entries »
 









作者:winson



个人首页

博客管理



日志RSS

评论RSS

 




您正在浏览归类于 ABAP 分类的文章.

 搜索: 

功能
登录
立即注册
SAP创新社区-中文博客

分类
 ABAP (43) ABAP中EXCEL操作 (1) 
ABAP例子 (5) 模板程序 (5) 

ABAP消息 (1) 
ALV相关的东西 (3) 
BAPI (3) 
IDOC (1) 
函数 (3) 
增强 (9) 
小技巧或者有意思的东西 (7) 
屏幕 (1) 
打印相关东西 (3) 
搜索帮助 (3) 
数据库操作 (1) 
文本 (1) 
权限 (1) 
选择屏幕 (3) 

BASIS (2) 
SD销售模块 (1) 

存档
2012年09月
2012年07月
2012年06月
2012年05月

页面
About
 
站外订阅






 

Powered by TechWeb
 SAP开发者网络(SDN) | 业务流程专家社区(BPX) | Business Objects社区(BOC) | 大学联盟社区(UAC) 
原文地址:https://www.cnblogs.com/huangjianisgood/p/2720194.html