cnpc_erp_海外板块_动态选择屏幕及内表_abap_100729_徐峰_第1页
cnpc_erp_海外板块_动态选择屏幕及内表_abap_100729_徐峰_第2页
cnpc_erp_海外板块_动态选择屏幕及内表_abap_100729_徐峰_第3页
cnpc_erp_海外板块_动态选择屏幕及内表_abap_100729_徐峰_第4页
cnpc_erp_海外板块_动态选择屏幕及内表_abap_100729_徐峰_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 作者介绍: 动态选择屏幕、内表 2010 年 5 月 徐峰 中石油集团 SAP 实施开发团队 主要从事海外板块及融合方案的开发工作 2. 业务背景: 对照表维护程序,用于 SAP 主数据,FMIS 主数据维护的对照,由于对照表权限, 操作,功能一样,而且会随着业务的增加,会有新的对照表出现。所以写通用的程序比较 方便以及易于维护。 3. 主要内容: 动态选择屏幕,动态的 SQL 语句,动态 ALV 展示。 对照表维护程序 DEMO Y_TESTXF COD A.首先在 ZFMIS_MAPPING 配置需要维护的对照表 ,必输字段,校验字段。 B.根据选定的对照表,生成相应的选择屏幕。 1.定义选择屏幕时,要定义足够多的屏幕字段。 SELECT-OPTIONS:S_SEL1 FOR (S_NAME1) LOWER CASE, S_SEL2 FOR (S_NAME2) LOWER CASE, S_SEL3 FOR (S_NAME3) LOWER CASE, S_SEL4 FOR (S_NAME4) LOWER CASE, 2.根据 ZFMIS_MAPPING 维护的字段 和数据库表的字段,控制屏幕字段的显示。 1.选取数据库表中的字段 P_TABLE 为要查看的对照表 SELECT * FROM DD03L INTO CORRESPONDING FIELDS OF TABLE T_DD03L WHERE TABNAME = P_TABLE AND AS4LOCAL = A AND ROLLNAME MANDT ORDER BY POSITION ASCENDING. 通过指针 赋给选择屏幕字段特定的值 CONCATENATE S_NAME L_TABIX INTO L_S_NAME. CONDENSE: L_S_NAME NO-GAPS. ASSIGN (L_S_NAME) TO . CONCATENATE T_DD03L-TABNAME - T_DD03L-FIELDNAME INTO . CONDENSE NO-GAPS. 3.对于要显示的屏幕字段,赋给屏幕内表 APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-TEXT T_DD03L- KEYFLAG L_FIELDNAME. APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-OPTI_PUSH T_DD03L- KEYFLAG L_FIELDNAME. APPEND_T_SCREEN S_SEL L_TABIX -LOW T_DD03L-KEYFLAG L_FIELDNAME. 中国石油天然气集团公司 ERP 系统推广项目 动态选择屏幕、内表 Version: 1.0 第 3 页共 13 页 APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-TO_TEXT T_DD03L- KEYFLAG L_FIELDNAME. APPEND_T_SCREEN S_SEL L_TABIX -HIGH . APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-VALU_PUSH T_DD03L- KEYFLAG . APPEND_T_SCREEN 是 ABAP 宏 4. 根据屏幕内表,控制选择屏幕的显示 LOOP AT SCREEN . IF SY-DYNNR = 9001 . READ TABLE T_SCREEN WITH KEY NAME = SCREEN-NAME. IF SY-SUBRC = 0. SCREEN-ACTIVE = 1. IF T_SCREEN-FKEY IS NOT INITIAL. * SCREEN-REQUIRED = 1. ENDIF. ELSE. SCREEN-ACTIVE = 0. SCREEN-REQUIRED = 0. ENDIF. ENDIF. MODIFY SCREEN. ENDLOOP. C.根据选择屏幕的显示,进行动态 SQL 语句的查询。 1.建立动态内表 CALL FUNCTION ZDYNP_CREATE_ITAB EXPORTING I_NAME = P_TABLE * I_STYLE_TABLE = X IMPORTING E_I_TABLE = G_DY_TABLE E_WA = G_DY_LINE. * E_STYLE_FNAME = G_ITAB_NAME. ASSIGN G_DY_TABLE-* TO . 内表 ASSIGN G_DY_LINE-* TO .工作区 2.根据用户的输入,找到 RANGE,给内表 T_SELECT_OPTIONS. LOOP AT T_DD03L. L_TABIX = SY-TABIX. T_SELECT_OPTIONS-FIELD = T_DD03L-FIELDNAME. CONCATENATE S_SEL L_TABIX INTO T_SELECT_OPTIONS-SELNM. CONDENSE T_SELECT_OPTIONS-SELNM NO-GAPS. ASSIGN (T_SELECT_OPTIONS-SELNM) TO . IF NOT IS INITIAL. ASSIGN COMPONENT LOW OF STRUCTURE TO . ASSIGN COMPONENT HIGH OF STRUCTURE TO . IF IS NOT INITIAL OR IS NOT INITIAL. APPEND T_SELECT_OPTIONS. ENDIF. ENDIF. ENDLOOP. 2.根据选择屏幕 RANGE,拼写 SQL,给内表 WHERE_TAB LOOP AT T_SELECT_OPTIONS. L_TABIX = SY-TABIX. CONDENSE L_TABIX NO-GAPS. CLEAR: WHERE_CLAUSE. IF L_TABIX = 1. CONCATENATE T_SELECT_OPTIONS-FIELD IN T_SELECT_OPTIONS-SELNM INTO WHERE_CLAUSE SEPARATED BY SPACE. ELSE. CONCATENATE AND T_SELECT_OPTIONS-FIELD IN T_SELECT_OPTIONS-SELNM INTO WHERE_CLAUSE SEPARATED BY SPACE. ENDIF. APPEND WHERE_CLAUSE TO WHERE_TAB. ENDLOOP. 3.根据 SQL,选取数据给内表 SELECT * FROM (P_TABLE) UP TO 500 ROWS INTO CORRESPONDING FIELDS OF TABLE WHERE (WHERE_TAB). D.动态 ALV 展示 1. 根据数据库的字段,选取要展示 ALV 的 FIELDCAT SELECT FIELDNAME POSITION KEYFLAG ROLLNAME DOMNAME LENG FROM DD03L INTO CORRESPONDING FIELDS OF TABLE GT_FCAT_ITAB WHERE TABNAME = P_TABLE AND AS4LOCAL = A AND ROLLNAME MANDT AND ROLLNAME p1 text * TYPE ANY. * L_TABIX = 1. * L_FIELDNAME = BUKRS. * T_DD03L-KEYFLAG = X. * * CONCATENATE S_NAME L_TABIX INTO L_S_NAME. * CONDENSE: L_S_NAME NO-GAPS. * ASSIGN (L_S_NAME) TO . * CONCATENATE T001 - L_FIELDNAME INTO . * CONDENSE NO-GAPS. * SELECT * FROM DD03L INTO CORRESPONDING FIELDS OF TABLE T_DD03L WHERE TABNAME = P_TABLE AND AS4LOCAL = A AND ROLLNAME MANDT ORDER BY POSITION ASCENDING. LOOP AT T_DD03L. L_TABIX = SY-TABIX. 中国石油天然气集团公司 ERP 系统推广项目 动态选择屏幕、内表 Version: 1.0 第 9 页共 13 页 CONCATENATE S_NAME L_TABIX INTO L_S_NAME. CONDENSE: L_S_NAME NO-GAPS. ASSIGN (L_S_NAME) TO . CONCATENATE T_DD03L-TABNAME - T_DD03L-FIELDNAME INTO . CONDENSE NO-GAPS. APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-TEXT T_DD03L-KEYFLAG L_FIELDNAME. APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-OPTI_PUSH T_DD03L- KEYFLAG L_FIELDNAME. APPEND_T_SCREEN S_SEL L_TABIX -LOW T_DD03L-KEYFLAG L_FIELDNAME. APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-TO_TEXT T_DD03L- KEYFLAG L_FIELDNAME. APPEND_T_SCREEN S_SEL L_TABIX -HIGH . APPEND_T_SCREEN %_S_SEL L_TABIX _%_APP_%-VALU_PUSH T_DD03L-KEYFLAG . ENDLOOP. * ENDFORM. “ SUB_SELECT_PARAMETERS *&-* *& Form MODIFY_SCREEN *&-* * text *-* * p1 text * p1 text * p1 text * TYPE ANY. FIELD-SYMBOLS: TYPE ANY. FIELD-SYMBOLS: TYPE ANY. LOOP AT T_DD03L. L_TABIX = SY-TABIX. T_SELECT_OPTIONS-FIELD = T_DD03L-FIELDNAME. CONCATENATE S_SEL L_TABIX INTO T_SELECT_OPTIONS-SELNM. 中国石油天然气集团公司 ERP 系统推广项目 动态选择屏幕、内表 Version: 1.0 第 11 页共 13 页 CONDENSE T_SELECT_OPTIONS-SELNM NO-GAPS. ASSIGN (T_SELECT_OPTIONS-SELNM) TO . IF NOT IS INITIAL. ASSIGN COMPONENT LOW OF STRUCTURE TO . ASSIGN COMPONENT HIGH OF STRUCTURE TO . IF IS NOT INITIAL OR IS NOT INITIAL. APPEND T_SELECT_OPTIONS. ENDIF. ENDIF. ENDLOOP. ENDFORM. “ GET_RANGE *&-* *& Form SUB_GET_TABLE *&-* * text *-* * P_P_TABLE text *-* FORM SUB_GET_TABLE USING P_TABLE. DATA: L_TABIX(10) TYPE C. G_TABLE_NAME = P_TABLE. CALL FUNCTION ZDYNP_CREATE_ITAB EXPORTING I_NAME = G_TABLE_NAME * I_STYLE_TABLE = X IMPORTING E_I_TABLE = G_DY_TABLE E_WA = G_DY_LINE. * E_STYLE_FNAME = G_ITAB_NAME. G_ITAB_NAME = XYZSTYLEZYX. ASSIGN G_DY_TABLE-* TO . ASSIGN G_DY_LINE-* TO . REFRESH: WHERE_TAB. CLEAR: WHERE_TAB. LOOP AT T_SELECT_OPTIONS. L_TABIX = SY-TABIX. CONDENSE L_TABIX NO-GAPS. CLEAR: WHERE_CLAUSE. IF L_TABIX = 1. CONCATENATE T_SELECT_OPTIONS-FIELD IN T_SELECT_OPTIONS-SELNM INTO WHERE_CLAUSE SEPARATED BY SPACE. ELSE. CONCATENATE AND T_SELECT_OPTIONS-FIELD IN T_SELECT_OPTIONS-SELNM INTO WHERE_CLAUSE SEPARATED BY SPACE. ENDIF. APPEND WHERE_CLAUSE TO WHERE_TAB. ENDLOOP. *&-Select Data into itab-* SELECT * FROM (P_TABLE) UP TO 500 ROWS INTO CORRESPONDING FIELDS OF TABLE WHERE (WHERE_TAB). ENDFORM. “ SUB_GET_TABLE *&-* *& Form OUT_ALV *&-* * text *-* * p1 text * AND ROLLNAME ZZSTATUS ORDER BY POSITION ASCENDING. LOOP AT GT_FCAT_ITAB. SELECT SINGLE DDTEXT FROM DD04T INTO GT_FCAT_ITAB-COLTEXT WHERE ROLLNAME = GT_FCAT_ITAB-ROLLNAME AND DDLANGUAGE = SY-LANGU AND AS4LOCAL = A. GT_FCAT_ITAB-TABNAME = G_ITAB_NAME. GT_FCAT_ITAB-F4AVAILABL = X. GT_FCAT_ITAB-REF_FIELD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论