转载增强
博文用户 首页 | 登录 | 注册——完全免费! 欢迎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)