srw的总结

1.在报表触发器BeforeReport中调用用户出口函数 FND SRWINIT 来初始化环境:取得并发程序相关信息和预制文件信息

clip_image002

clip_image003

Parameter:
------------
P_SET_OF_BOOKS_ID='1001'
P_CHART_OF_ACCOUNTS_ID='50268'
P_REPORT_TYPE='B'
P_KIND='L'
P_CURRENCY_CODE='HKD'
P_ACTUAL_FLAG='A'
P_BUD_ENC_TYPE_ID='-100'
P_START_PERIOD='Adj-12'
P_END_PERIOD='Adj-12'
P_MIN_FLEX='22-133208-00-00-0000-000'
P_MAX_FLEX='22-133211-00-00-0000-000'
P_ORDER_TYPE='S'
P_PAGE_SIZE='180'
------------

 

 

function BeforeReport return boolean is
begin
SRW.USER_EXIT('FND SRWINIT');

--P_COA_ID =  50268
srw.reference( :P_COA_ID );------------帐套,必须在report和ebs里都定义这个参数不然会报错SRW.REFERENCE 将引用的对象添加到构造依赖列表中,让Report在触发初始化构造的时候对值进行测定
srw.user_exit('FND FLEXSQL --------------------在报表中调用 FND FLEXIDVAL来动态设置显示的弹性域数据
                      CODE = "GL#" ------‘GL#’是帐户关键性弹性域的代码;code:弹性域编码
                      NUM=":P_COA_ID" ---------包括弹性域结构ID的词义变量
                      APPL_SHORT_NAME = "SQLGL"-----弹性域对应的应用简称
                      OUTPUT=":ACC_SELECT_ALL" -------------output:用来存贮SQL语句的词义变量(Placeholder)
                      TABLEALIAS="CC")--------如果使用表别名,制定弹性域对应表的别名
                      MODE="SELECT" "----SELECT 按照内部的格式取出所有段值
                      DISPLAY="ALL"');---指定有多少段是需要显示的,默认值为 ALL;如果只希望显示其中的一段,可以通过指定段名或者段号码来实现


-- GL_CODE_COMBINATIONS  --get values
SELECT 
         APPLICATION_COLUMN_NAME,
         SEGMENT_NUM
    FROM FND_ID_FLEX_SEGMENTS_VL
   WHERE     (ID_FLEX_NUM = 50268) -- P_COA_ID = 50268
         AND (ID_FLEX_CODE = 'GL#') -- CODE = "GL#"  
         AND (APPLICATION_ID = 101) -- APPL_SHORT_NAME = SQLGL
ORDER BY application_id,
         id_flex_code,
         id_flex_num,
         DECODE (enabled_flag,  'Y', 1,  'N', 2),
         segment_num

MSG-00100: 

CC.SEGMENT1||'
'||CC.SEGMENT2||'
'||CC.SEGMENT3||'
'||CC.SEGMENT4||'
'||CC.SEGMENT5||'
'||CC.SEGMENT6

--****************************************

srw.reference(:P_COA_ID);
srw.user_exit('FND FLEXSQL 
                      CODE="GL#" 
                      NUM=":P_COA_ID"
                      APPL_SHORT_NAME="SQLGL"
                      OUTPUT=":WHERE_FLEX" 
                      TABLEALIAS="CC"
                      MODE="WHERE" 
                      DISPLAY="ALL"
                      OPERATOR="BETWEEN" 
                      OPERAND1=":P_MIN_FLEX"
                      OPERAND2=":P_MAX_FLEX"');     


MSG-00200: CC.SEGMENT1 = '22' AND CC.SEGMENT2 BETWEEN '133208' AND '133211' AND CC.SEGMENT3 = '00' AND CC.SEGMENT4 = '00' AND CC.SEGMENT5 = '0000' AND CC.SEGMENT6 = '000'

--****************************************

srw.reference(:P_COA_ID);
srw.user_exit('FND FLEXSQL 
                     CODE="GL#" 
                     NUM=":P_COA_ID"
                     APPL_SHORT_NAME="SQLGL"
                     OUTPUT=":ORDERBY_ACCT" 
                     TABLEALIAS="CC"
                     MODE="ORDER BY" 
                     DISPLAY="GL_ACCOUNT"  -- ACCOUNT:  SEGMENT2
                    SHOWDEPSEG="N"'); 

MSG-00300: CC.SEGMENT2

 --****************************************

srw.reference(:P_COA_ID);
srw.user_exit('FND FLEXSQL 
                     CODE="GL#" 
                     NUM=":P_COA_ID"
                     APPL_SHORT_NAME="SQLGL"
                     OUTPUT=":ORDERBY_BAL" 
                     TABLEALIAS="CC"
                     MODE="ORDER BY" 
                     DISPLAY="GL_BALANCING"  -- BALANCING:  SEGMENT1
                     SHOWDEPSEG="N"');

 MSG-00500: CC.SEGMENT1

return (TRUE);
end;

2.在报表触发器AfterReport中调用用户出口函数 FND SRWEXIT 来释放用户出口函数中使用的内存,USER_EXIT是一个用户出口函数,用于取得帐户段描

function AfterReport return boolean is
begin
     SRW.USER_EXIT('FND SRWEXIT');
     return (TRUE);
end;

 

3.在字段内

设置

function ACC_flex_dataFormula return VARCHAR2 is
begin
   srw.reference(:ACC_flex);
   srw.reference( :P_COA_ID );
   srw.user_exit('FND FLEXIDVAL
                  CODE="GL#"
                  NUM=":P_COA_ID"
                  APPL_SHORT_NAME="SQLGL"
                  DATA=":ACC_FLEX"
                  VALUE=":ACC_FLEX_DATA"
                  DISPLAY="ALL"');
  return(:ACC_FLEX_DATA);

  --22-133211-00-00-0000-000
end;


function ACC_FLEX_DESCFormula return Char is
begin
   srw.reference(:ACC_flex);
   srw.reference( :P_COA_ID );
   srw.user_exit('FND FLEXIDVAL
                  CODE="GL#"
                  NUM=":P_COA_ID"
                  APPL_SHORT_NAME="SQLGL"
                  DATA=":ACC_FLEX"
                  FULL_DESCRIPTION=":ACC_FLEX_DESC"
                  DISPLAY="ALL"');

   return(REPLACE(REPLACE(REPLACE(:ACC_flex_desc,'南京本部'),'缺省'),''));
end;


4.做一个cp acc_select_all

value is null

(c.segment1||'n'||c.segment2||'n'||

c.segment3||'n'||c.segment4||'n'||c.segment5||'n'||

c.segment6||'n'||c.segment7)

具体按要选择的段落分类


.在报表的SqL里写
select
&acc_select_all acc_flex,


srw.reference(:FLEXDATA);
srw.reference(:STRUCT_NUM);
srw.user_exit('FND FLEXIDVAL CODE="GL#"
               NUM=":STRUCT_NUM"
               APPL_SHORT_NAME="SQLGL"
               DATA=":FLEXDATA"
               VALUE=":FLEXFIELD"
               PADDED_VALUE=":FLEXFIELD_PAD"
               DESCRIPTION=":FLEXDESC"
               DISPLAY="ALL"
               IDISPLAY="ALL"');

RETURN(:FLEXFIELD);

增加placeholder (占位符) SELECT_ALL


(CC.SEGMENT1 || 'n' || SEGMENT2 || 'n' || SEGMENT3 || 'n' || SEGMENT4 || 'n' || SEGMENT5 || 'n' || SEGMENT6 || 'n' || SEGMENT7 || 'n' || SEGMENT8 || 'n' || SEGMENT9 || 'n' || SEGMENT10 || 'n' || SEGMENT11 || 'n' || SEGMENT12 || 'n' || SEGMENT13 || 'n' || SEGMENT14 || 'n' || SEGMENT15 || 'n' || SEGMENT16 || 'n' || SEGMENT17 || 'n' || SEGMENT18 || 'n' || SEGMENT19 || 'n' || SEGMENT20 || 'n' || SEGMENT21 || 'n' || SEGMENT22 || 'n' || SEGMENT23 || 'n' || SEGMENT24 || 'n' || SEGMENT25 || 'n' || SEGMENT26 || 'n' || SEGMENT27 || 'n' || SEGMENT28 || 'n' || SEGMENT29 || 'n' || SEGMENT30)


其中 FLEXDATA 是查询的各段的组合,就是SELECT_ALL

STRUCT_NUM COAID

FLEXDESC 是科目的描述

FLEXFIELD_PAD ???

posted @ 2012-11-28 13:56  全威儒  阅读(2338)  评论(0编辑  收藏  举报