oracle报表范例1 (转载)

复制代码
PL / SQL数据包:

create   or   replace  package CUX_GL_REP_LISTPKG  is

  
--  Author  : LIJINQIAN
   --  Created : 2005-7-12 9:50:00
   --  Purpose : 总帐科目列表
  
    
--  总帐汇总
   Procedure  cuxgllistgath(
    errbuf      Out 
Varchar2 ,
    retcode     Out 
Varchar2 ,
    p_start_date    
Varchar2 ,
    p_end_date      
Varchar2 ,
    p_set_of_gl_id  
Number ,
    p_org_id        
Number ,
    p_report_type   
Number );    
    
    
-- 总帐明细
   Procedure  cuxgllistgathmx(
    errbuf      Out 
Varchar2 ,
    retcode     Out 
Varchar2 ,
    p_start_date    
Varchar2 ,
    p_end_date      
Varchar2 ,
    Chart_of_Accounts_ID 
number ,
    p_Account_From  
varchar2 ,
    p_Account_to    
varchar2 ,   
    p_to_gl         
varchar2 ,
    p_je_source     
Varchar2 ,  
    p_set_of_gl_id  
Number ,
    p_org_id        
Number ,
    p_report_type   
Number );
    
end  CUX_GL_REP_LISTPKG;


包体:

create   or   replace  package body CUX_GL_REP_LISTPKG  is

  
-- =======================================
   --    总帐科目汇总
   -- =======================================
   Procedure  cuxgllistgath(
    errbuf      Out 
Varchar2 ,
    retcode     Out 
Varchar2 ,
    p_start_date    
Varchar2 ,
    p_end_date      
Varchar2 ,
    p_set_of_gl_id  
Number ,
    p_org_id        
Number ,
    p_report_type   
Number
  ) 
Is  
    l_show          
Varchar2 ( 2000 );
    l_org_name      
Varchar2 ( 2000 );
    
    p_sign          
Varchar2 ( 200 );
    p_account_type  
Number : = 0 ;
    
    l_start_dr    
number : = 0 ;
    l_start_cr    
number : = 0 ;
    l_now_dr      
number : = 0 ;
    l_now_cr      
number : = 0 ;
    l_year_dr     
number : = 0 ;
    l_year_cr     
number : = 0 ;
    
    l_qm_dr       
Number : = 0 ;
    l_qm_cr       
Number : = 0 ;
    
    l_start_dr_t    
number : = 0 ;
    l_start_cr_t    
number : = 0 ;
    l_now_dr_t      
number : = 0 ;
    l_now_cr_t      
number : = 0 ;
    l_year_dr_t     
number : = 0 ;
    l_year_cr_t     
number : = 0 ;
    l_end_dr_t      
Number : = 0 ;
    l_end_cr_t      
Number : = 0 ;
    
    l_total         
Number : = 0 ;
    
    
Cursor  cr1  Is
       
select   Distinct   
           gccv.Code_Combination_Id accid,
           gccv.segment1
|| ' . ' || ' T ' || ' . ' || SUBSTR(gccv.segment3, 1 , 4 ) || ' . ' || ' T ' || ' . ' || ' T ' || ' . ' || ' T ' || ' . ' || ' T ' || ' . ' || ' T '  A2,
           fvl1.Description
|| ' . ' || fvl2.Description || ' . ' || fvl3.Description || ' . ' || fvl4.Description || ' . ' || fvl5.Description || ' . ' || fvl6.Description || ' . ' || fvl7.Description || ' . ' || fvl8.Description A3
       
from
           gl_balances gl_ba                    
--  总帐表
           ,Gl_Code_Combinations gccv
           ,fnd_flex_values_vl fvl1
           ,fnd_flex_values_vl fvl2
           ,fnd_flex_values_vl fvl3
           ,fnd_flex_values_vl fvl4
           ,fnd_flex_values_vl fvl5
           ,fnd_flex_values_vl fvl6
           ,fnd_flex_values_vl fvl7
           ,fnd_flex_values_vl fvl8
       
where  gl_ba.code_combination_id = gccv.CODE_COMBINATION_ID
         
And  (fvl1.flex_value = gccv.segment1  And  fvl1.FLEX_VALUE_SET_ID = ' 1007720 ' )               --  公司段
          And  (fvl2.flex_value = ' T '   And  fvl2.FLEX_VALUE_SET_ID = ' 1007721 ' )                         --  部门段
          And  (fvl3.flex_value = substr(gccv.segment3, 1 , 4 And  fvl3.FLEX_VALUE_SET_ID = ' 1007722 ' )   --  科目段
          And  (fvl4.flex_value = ' T '   And  fvl4.FLEX_VALUE_SET_ID = ' 1007723 ' )                         --  子科目段
          And  (fvl5.flex_value = ' T '   And  fvl5.FLEX_VALUE_SET_ID = ' 1007724 ' )                         --  公司间段
          And  (fvl6.flex_value = ' T '   And  fvl6.FLEX_VALUE_SET_ID = ' 1007725 ' )                         --  产品段
          And  (fvl7.flex_value = ' T '   And  fvl7.FLEX_VALUE_SET_ID = ' 1007726 ' )                         --  项目段
          And  (fvl8.flex_value = ' T '   And  fvl8.FLEX_VALUE_SET_ID = ' 1007727 ' )                         --  备用段 
          And  to_number(substr(gl_ba.Period_Name, 4 , 4 ) || substr(gl_ba.Period_Name, 1 , 2 ))  between  to_number(substr(p_start_date, 4 , 4 ) || substr(p_start_date, 1 , 2 ))  and  to_number(substr(p_end_date, 4 , 4 ) || substr(p_end_date, 1 , 2 ))
         
And  gl_ba.Actual_Flag = ' A '                    --   取实际数
          And  gccv.Summary_Flag = ' Y '                    --   取汇总科目
          And  gl_ba.Template_Id = ' 75 '                   --   一级科目汇总
          And  gccv.segment1 = Select   Distinct  
                                  gcc.Segment1
                             
From   gl_je_lines lines 
                                  ,gl_je_headers h 
                                  ,gl_je_batches b
                                  ,Gl_Code_Combinations gcc
                             
Where  b.je_batch_id  =  h.je_batch_id 
                               
And  h.je_header_id  =  lines.je_header_id
                               
And  lines.Code_Combination_Id = gcc.Code_Combination_Id
                               
And  b.org_id = p_org_id)
       
Order   By  gccv.segment1 || ' . ' || ' T ' || ' . ' || SUBSTR(gccv.segment3, 1 , 4 ) || ' . ' || ' T ' || ' . ' || ' T ' || ' . ' || ' T ' || ' . ' || ' T ' || ' . ' || ' T ' ;    
  
Begin
      
--  取得单位名称
       select  a.name  into  l_org_name  from  hr_organization_units a 
      
where  a.organization_id = p_org_id; 
      
      
--  输出报表头
      l_SHOW : =  lpad( ' 客户化 总帐科目余额列表 ' 100 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      cux_my_public_pkg.OUT(
'   ' );  
    
      l_SHOW :
=  rpad( ' 会计日期 ' 10 '   ' ||  rpad(p_start_date,  10 '   ' ) ||  rpad( ' ' ||  p_end_date,  30 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      cux_my_public_pkg.OUT(
'   ' );
    
      
-- 帐户名称
      l_SHOW : =  rpad( ' 单位名称 ' 20 '   ' ||  rpad(l_org_name,  100 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      cux_my_public_pkg.Out(
'   ' );
       
      l_SHOW :
=  rpad( ' 来源 ' 20 '   ' ||  rpad( ' 科目 ' 30 '   ' || rpad( ' 科目说明 ' 100 '   ' ||  
      rpad(
' 过帐状态 ' 10 '   ' ||  
      rpad(
' 期初余额借方 ' 20 '   ' ||  rpad( ' 期初余额贷方 ' 20 '   ' ||  
      rpad(
' 本期发生借方 ' 20 '   ' ||  rpad( ' 本期发生贷方 ' 20 '   ' ||
      rpad(
' 本年累计借方 ' 20 '   ' ||  rpad( ' 本年累计贷方 ' 20 '   ' ||
      rpad(
' 期末余额借方 ' 20 '   ' ||  rpad( ' 期末余额贷方 ' 20 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      
      l_SHOW :
=  lpad( '   ' 20 ' - ' ||  lpad( '   ' 30 ' - ' ||
              lpad(
'   ' 100 ' - ' ||  
              lpad(
'   ' 10 ' - ' ||  
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||  
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' );
      cux_my_public_pkg.OUT(l_SHOW);
   
      
--  汇总科目
       If  p_report_type = 1   Then
         
         
--  汇总init
         l_start_dr_t: = 0 ;
         l_start_cr_t:
= 0 ;
         l_now_dr_t:
= 0 ;
         l_now_cr_t:
= 0 ;
         l_year_dr_t:
= 0 ;
         l_year_cr_t:
= 0 ;
         l_end_dr_t:
= 0 ;
         l_end_cr_t:
= 0 ;
         
         
For  i  In  cr1 Loop
         
            
--  帐户类型
             --   A  (资产) 1
             --   E  (费用类) 4 
             SELECT   Count ( Distinct  gcc.account_type)
                
INTO  p_account_type
             
FROM  gl_code_combinations gcc
            
WHERE  gcc.Code_Combination_Id = i.accid
              
And  (gcc.Segment3  Like   ' 1% '   Or  gcc.Segment3  Like   ' 4% ' );
            
            
IF  p_account_type <> 0   THEN
                p_sign :
=   1 ;
            
ELSE
                p_sign :
=   - 1 ;
            
END   IF ;
      
            
--  期初余额YTD
             SELECT  p_sign * nvl( sum ((gc.begin_balance_dr - gc.begin_balance_cr) + (gc.period_net_dr - gc.period_net_cr)), 0 )
                
into  l_total
            
FROM  GL_BALANCES gc
            
WHERE  gc.Set_Of_Books_Id  =  p_set_of_gl_id
              
AND  gc.code_combination_id  =  i.accid
              
AND  gc.period_name  =  substr(to_char(add_months(to_date(substr(p_start_date, 4 , 4 ) || ' - ' || substr(p_start_date, 1 , 2 ) || ' -01 ' , ' yyyy-mm-dd ' ), - 1 ), ' YYYY-MM-DD ' ), 6 , 2 ) || ' - ' || substr(to_char(add_months(to_date(substr(p_start_date, 4 , 4 ) || ' - ' || substr(p_start_date, 1 , 2 ) || ' -01 ' , ' yyyy-mm-dd ' ), - 1 ), ' YYYY-MM-DD ' ), 1 , 4 )
              
AND  gc.actual_flag  =   ' A ' ;
              
            
IF  p_account_type <> 0   THEN
               l_start_dr:
= l_total;
               l_start_cr:
= 0 ;
            
Else
               l_start_dr:
= 0 ;
               l_start_cr:
= l_total;
            
end   if ;
            
            
--  本期发生额
             Select  nvl( sum (gv.Line_Entered_Dr), 0 ),
                   nvl(
sum (gv.Line_Entered_cr), 0 )
                 
Into  l_now_dr,
                      l_now_cr
            
From  Gl_Je_Journal_Lines_v gv,
                 Gl_Account_Hierarchies gah
            
Where  to_number(substr(gv.Period_Name, 4 , 4 ) || substr(gv.Period_Name, 1 , 2 ))  between  to_number(substr(p_start_date, 4 , 4 ) || substr(p_start_date, 1 , 2 ))  and  to_number(substr(p_end_date, 4 , 4 ) || substr(p_end_date, 1 , 2 ))
              
And  gv.Actual_Flag = ' A '
              
And  GV.Batch_Status = ' P '
              
And  gv.Line_Code_Combination_Id = gah.Detail_Code_Combination_Id
              
And  gah.Summary_Code_Combination_Id = i.accid;
            
            
--  年发生额
             Select  nvl( sum (gv.Line_Entered_Dr), 0 ),
                   nvl(
sum (gv.Line_Entered_cr), 0 )
                 
Into  l_year_dr,
                      l_year_cr
            
From  Gl_Je_Journal_Lines_v gv,
                 Gl_Account_Hierarchies gah
            
Where  gv.Period_Year = substr(p_start_date, 4 , 4
              
And  gv.Actual_Flag = ' A '
              
And  GV.Batch_Status = ' P '
              
And  gv.Line_Code_Combination_Id = gah.Detail_Code_Combination_Id
              
And  gah.Summary_Code_Combination_Id = i.accid;

            
--  期末数
             IF  p_account_type <> 0   THEN
               l_qm_dr:
= l_start_dr + l_now_dr - l_now_cr;
               l_qm_cr:
= 0 ;
            
Else
               l_qm_dr:
= 0 ;
               l_qm_cr:
= l_start_cr + l_now_cr - l_now_dr;
            
End   If ;               
              
            l_SHOW :
=  rpad( ' 汇总 ' 20 '   ' ||  rpad(i.A2,  30 '   ' ||
                      rpad(i.A3, 
100 '   ' ||  
                      rpad(
' 汇总 ' 10 '   ' ||  
                      rpad(to_char(l_start_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_start_cr, ' 999,999,999,990.00 ' ),  20 '   ' ||  
                      rpad(to_char(l_now_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_now_cr, ' 999,999,999,990.00 ' ),  20 '   ' ||
                      rpad(to_char(l_year_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_year_cr, ' 999,999,999,990.00 ' ),  20 '   ' ||
                      rpad(to_char(l_qm_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_qm_cr, ' 999,999,999,990.00 ' ),  20 '   ' );
            cux_my_public_pkg.OUT(l_SHOW);
      
            
--  汇总
            l_start_dr_t: = l_start_dr_t + l_start_dr;
            l_start_cr_t:
= l_start_cr_t + l_start_cr;
            
            l_now_dr_t:
= l_now_dr_t + l_now_dr;
            l_now_cr_t:
= l_now_cr_t + l_now_cr;
            
            l_year_dr_t:
= l_year_dr_t + l_year_dr;
            l_year_cr_t:
= l_year_cr_t + l_year_cr;
            l_end_dr_t:
= l_end_dr_t + l_qm_dr;
            l_end_cr_t:
= l_end_cr_t + l_qm_cr;
      
         
END  LOOP;
         l_SHOW :
=  lpad( '   ' 20 ' - ' ||  lpad( '   ' 30 ' - ' ||
                    lpad(
'   ' 100 ' - ' ||  
                    lpad(
'   ' 10 ' - ' ||  
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||  
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' );
         cux_my_public_pkg.OUT(l_SHOW);
          
         l_SHOW :
=  rpad( ' 合计 ' 20 '   ' ||  rpad( '   ' 30 '   ' ||
                    rpad(
'   ' 100 '   ' ||  
                    rpad(
'   ' 10 '   ' ||  
                    rpad(to_char(l_start_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_start_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' ||  
                    rpad(to_char(l_now_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_now_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' ||
                    rpad(to_char(l_year_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_year_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' ||
                    rpad(to_char(l_end_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_end_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' );
         cux_my_public_pkg.OUT(l_SHOW);
      
End   If ;
  
End  cuxgllistgath;
  
  
-- ==================================
   --    总帐明细
   -- ==================================
   Procedure  cuxgllistgathmx(
    errbuf      Out 
Varchar2 ,
    retcode     Out 
Varchar2 ,
    p_start_date    
Varchar2 ,
    p_end_date      
Varchar2 ,
    Chart_of_Accounts_ID 
number ,
    p_Account_From  
varchar2 ,
    p_Account_to    
varchar2 ,   
    p_to_gl         
varchar2 ,
    p_je_source     
Varchar2 ,  
    p_set_of_gl_id  
Number ,
    p_org_id        
Number ,
    p_report_type   
Number
  ) 
Is
    l_show          
Varchar2 ( 2000 );
    l_org_name      
Varchar2 ( 2000 );
    
    p_sign          
Varchar2 ( 200 );
    p_account_type  
Number : = 0 ;
    
    
--  帐户的范围
    l_acct_desc1     Varchar2 ( 200 );
    l_acct_desc2    
Varchar2 ( 200 );
    l_acct_desc     
Varchar2 ( 2000 );
    l_acct_name     
Varchar2 ( 2000 );
    
    
--  总帐值
    l_start_dr       number : = 0 ;
    l_start_cr      
number : = 0 ;
    l_now_dr        
number : = 0 ;
    l_now_cr        
number : = 0 ;
    l_year_dr       
number : = 0 ;
    l_year_cr       
number : = 0 ;
    
    l_qm_dr         
Number : = 0 ;
    l_qm_cr         
Number : = 0 ;
    
    l_start_dr_t    
number : = 0 ;
    l_start_cr_t    
number : = 0 ;
    l_now_dr_t      
number : = 0 ;
    l_now_cr_t      
number : = 0 ;
    l_year_dr_t     
number : = 0 ;
    l_year_cr_t     
number : = 0 ;
    l_end_dr_t      
Number : = 0 ;
    l_end_cr_t      
Number : = 0 ;
    
    l_total         
Number : = 0 ;
   
    
--  总帐明细
     Cursor  cr1  Is
            
Select  
                 decode(gjh.Je_Source,
' Payables ' , ' 应付款 ' , ' Receivables ' , ' 应收款 ' , ' Spreadsheet ' , ' 电子表格 ' , ' Manual ' , ' 人工 ' ,gjh.Je_Source) A3,
                 gjl.Code_Combination_Id accid,
                 gccb.Segment1
|| ' . ' || gccb.Segment2 || ' . ' || gccb.Segment3 || ' . ' || gccb.Segment4 || ' . ' || gccb.Segment5 || ' . ' || gccb.Segment6 || ' . ' || gccb.Segment7 || ' . ' || gccb.Segment8 A1,
                 ffvl1.Description
|| ' . ' || ffvl2.Description || ' . ' || ffvl3.Description || ' . ' || ffvl4.Description || ' . ' || ffvl5.Description || ' . ' || ffvl6.Description || ' . ' || ffvl7.Description || ' . ' || ffvl8.Description A2, 
                 decode(gjh.Status,
' P ' , ' 已过账 ' , ' 未过账 ' ) A4,
                 
Sum (nvl(gjl.Entered_Dr, 0 )) A5,
                 
Sum (nvl(gjl.Entered_Cr, 0 )) A6
            
From  gl_je_batches gjb  
                ,gl_je_headers gjh
                ,gl_je_lines gjl
                ,Gl_Account_Hierarchies gah
                ,Gl_Code_Combinations gccb
                ,fnd_flex_values_vl ffvl1
                ,fnd_flex_values_vl ffvl2
                ,fnd_flex_values_vl ffvl3
                ,fnd_flex_values_vl ffvl4
                ,fnd_flex_values_vl ffvl5
                ,fnd_flex_values_vl ffvl6
                ,fnd_flex_values_vl ffvl7
                ,fnd_flex_values_vl ffvl8
            
Where  to_number(substr(gjh.Period_Name, 4 , 4 ) || substr(gjh.Period_Name, 1 , 2 ))  between  to_number(substr(p_start_date, 4 , 4 ) || substr(p_start_date, 1 , 2 ))  and  to_number(substr(p_end_date, 4 , 4 ) || substr(p_end_date, 1 , 2 ))
              
And  gjh.je_header_id  =  gjl.je_header_id
              
and  gjl.code_combination_id  =  gccb.code_combination_id
              
and  gjh.je_batch_id  =  gjb.je_batch_id
              
and  gjb.org_id  =  p_org_id
              
And  gjh.Actual_Flag = ' A '
              
And  gjl.Code_Combination_Id = gah.Detail_Code_Combination_Id
              
And  gah.Template_Id = 75
              
And  (ffvl1.flex_value = gccb.segment1  And  ffvl1.FLEX_VALUE_SET_ID = ' 1007720 ' )   --  公司段
               And  (ffvl2.flex_value = gccb.segment2  And  ffvl2.FLEX_VALUE_SET_ID = ' 1007721 ' )   --  部门段
               And  (ffvl3.flex_value = gccb.segment3  And  ffvl3.FLEX_VALUE_SET_ID = ' 1007722 ' )   --  科目段
               And  (ffvl4.flex_value = gccb.segment4  And  ffvl4.FLEX_VALUE_SET_ID = ' 1007723 ' )   --  子科目段
               And  (ffvl5.flex_value = gccb.segment5  And  ffvl5.FLEX_VALUE_SET_ID = ' 1007724 ' )   --  公司间段
               And  (ffvl6.flex_value = gccb.segment6  And  ffvl6.FLEX_VALUE_SET_ID = ' 1007725 ' )   --  产品段
               And  (ffvl7.flex_value = gccb.segment7  And  ffvl7.FLEX_VALUE_SET_ID = ' 1007726 ' )   --  项目段
               And  (ffvl8.flex_value = gccb.segment8  And  ffvl8.FLEX_VALUE_SET_ID = ' 1007727 ' )  
              
And  gjh.Je_Source  =  decode(p_je_source, '' ,gjh.Je_Source, Null ,gjh.Je_Source,p_je_source)
              
And  decode(gjb.status, ' P ' , ' 已过账 ' , ' 未过账 ' Like  decode(p_to_gl, ' Y ' , ' 已过账 ' , ' N ' , ' 未过账 ' , ' %过账 ' )
              
--  科目查询
               and  gccb.segment1  between  nvl(substr(p_Account_From, 1 ,instr(p_Account_From, ' . ' , 1 , 1 ) - 1 ),gccb.segment1) 
                                   
and  nvl(substr(p_Account_to, 1 ,instr(p_Account_to, ' . ' , 1 , 1 ) - 1 ),gccb.segment1)
              
and  gccb.segment2  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 1 ) + 1 ,((instr(p_Account_From, ' . ' , 1 , 2 )) -  (instr(p_Account_From, ' . ' , 1 , 1 ) + 1 ))),gccb.segment2) 
                                   
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 1 ) + 1 ,((instr(p_Account_to, ' . ' , 1 , 2 )) -  (instr(p_Account_to, ' . ' , 1 , 1 ) + 1 ))),gccb.segment2)
              
and  gccb.segment3  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 2 ) + 1 ,((instr(p_Account_From, ' . ' , 1 , 3 )) -  (instr(p_Account_From, ' . ' , 1 , 2 ) + 1 ))),gccb.segment3) 
                                  
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 2 ) + 1 ,((instr(p_Account_to, ' . ' , 1 , 3 )) -  (instr(p_Account_to, ' . ' , 1 , 2 ) + 1 ))),gccb.segment3)
              
and  gccb.segment4  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 3 ) + 1 ,((instr(p_Account_From, ' . ' , 1 , 4 )) -  (instr(p_Account_From, ' . ' , 1 , 3 ) + 1 ))),gccb.segment4) 
                                   
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 3 ) + 1 ,((instr(p_Account_to, ' . ' , 1 , 4 )) -  (instr(p_Account_to, ' . ' , 1 , 3 ) + 1 ))),gccb.segment4)
              
and  gccb.segment5  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 4 ) + 1 ,((instr(p_Account_From, ' . ' , 1 , 5 )) -  (instr(p_Account_From, ' . ' , 1 , 4 ) + 1 ))),gccb.segment5) 
                                   
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 4 ) + 1 ,((instr(p_Account_to, ' . ' , 1 , 5 )) -  (instr(p_Account_to, ' . ' , 1 , 4 ) + 1 ))),gccb.segment5)
              
and  gccb.segment6  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 5 ) + 1 ,((instr(p_Account_From, ' . ' , 1 , 6 )) -  (instr(p_Account_From, ' . ' , 1 , 5 ) + 1 ))),gccb.segment6) 
                                   
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 5 ) + 1 ,((instr(p_Account_to, ' . ' , 1 , 6 )) -  (instr(p_Account_to, ' . ' , 1 , 5 ) + 1 ))),gccb.segment6)
              
and  gccb.segment7  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 6 ) + 1 ,((instr(p_Account_From, ' . ' , 1 , 7 )) -  (instr(p_Account_From, ' . ' , 1 , 6 ) + 1 ))),gccb.segment7) 
                                   
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 6 ) + 1 ,((instr(p_Account_to, ' . ' , 1 , 7 )) -  (instr(p_Account_to, ' . ' , 1 , 6 ) + 1 ))),gccb.segment7)
              
and  gccb.segment8  between  nvl(substr(p_Account_From,instr(p_Account_From, ' . ' , 1 , 7 ) + 1 , 10 ),gccb.segment8) 
                                   
and  nvl(substr(p_Account_to,instr(p_Account_to, ' . ' , 1 , 7 ) + 1 , 10 ),gccb.segment8)
              
And  gah.Summary_Code_Combination_Id  In  ( select    
                                                       gccv.Code_Combination_Id accid
                                                   
from
                                                        gl_balances gl_ba                    
--  总帐表
                                                       ,Gl_Code_Combinations gccv
                                                       ,fnd_flex_values_vl fvl1
                                                       ,fnd_flex_values_vl fvl2
                                                       ,fnd_flex_values_vl fvl3
                                                       ,fnd_flex_values_vl fvl4
                                                       ,fnd_flex_values_vl fvl5
                                                       ,fnd_flex_values_vl fvl6
                                                       ,fnd_flex_values_vl fvl7
                                                       ,fnd_flex_values_vl fvl8
                                                   
where  gl_ba.code_combination_id = gccv.CODE_COMBINATION_ID
                                                     
And  (fvl1.flex_value = gccv.segment1  And  fvl1.FLEX_VALUE_SET_ID = ' 1007720 ' )               --  公司段
                                                      And  (fvl2.flex_value = ' T '   And  fvl2.FLEX_VALUE_SET_ID = ' 1007721 ' )                         --  部门段
                                                      And  (fvl3.flex_value = substr(gccv.segment3, 1 , 4 And  fvl3.FLEX_VALUE_SET_ID = ' 1007722 ' )   --  科目段
                                                      And  (fvl4.flex_value = ' T '   And  fvl4.FLEX_VALUE_SET_ID = ' 1007723 ' )                         --  子科目段
                                                      And  (fvl5.flex_value = ' T '   And  fvl5.FLEX_VALUE_SET_ID = ' 1007724 ' )                         --  公司间段
                                                      And  (fvl6.flex_value = ' T '   And  fvl6.FLEX_VALUE_SET_ID = ' 1007725 ' )                         --  产品段
                                                      And  (fvl7.flex_value = ' T '   And  fvl7.FLEX_VALUE_SET_ID = ' 1007726 ' )                         --  项目段
                                                      And  (fvl8.flex_value = ' T '   And  fvl8.FLEX_VALUE_SET_ID = ' 1007727 ' )                         --  备用段 
                                                      And  to_number(substr(gl_ba.Period_Name, 4 , 4 ) || substr(gl_ba.Period_Name, 1 , 2 ))  between  to_number(substr(p_start_date, 4 , 4 ) || substr(p_start_date, 1 , 2 ))  and  to_number(substr(p_end_date, 4 , 4 ) || substr(p_end_date, 1 , 2 ))
                                                     
And  gl_ba.Actual_Flag = ' A '                    --   取实际数
                                                      And  gccv.Summary_Flag = ' Y '                    --   取汇总科目
                                                      And  gl_ba.Template_Id = ' 75 '                   --   一级科目汇总
                                                      And  gccv.segment1 = Select   Distinct  
                                                                              gcc.Segment1
                                                                         
From   gl_je_lines lines 
                                                                              ,gl_je_headers h 
                                                                              ,gl_je_batches b
                                                                              ,Gl_Code_Combinations gcc
                                                                         
Where  b.je_batch_id  =  h.je_batch_id 
                                                                           
And  h.je_header_id  =  lines.je_header_id
                                                                           
And  lines.Code_Combination_Id = gcc.Code_Combination_Id
                                                                           
And  b.org_id = p_org_id)
                                                   )
            
Group   By   gjl.Code_Combination_Id,
                      gccb.Segment1
|| ' . ' || gccb.Segment2 || ' . ' || gccb.Segment3 || ' . ' || gccb.Segment4 || ' . ' || gccb.Segment5 || ' . ' || gccb.Segment6 || ' . ' || gccb.Segment7 || ' . ' || gccb.Segment8,
                      ffvl1.Description
|| ' . ' || ffvl2.Description || ' . ' || ffvl3.Description || ' . ' || ffvl4.Description || ' . ' || ffvl5.Description || ' . ' || ffvl6.Description || ' . ' || ffvl7.Description || ' . ' || ffvl8.Description, 
                      gjh.Je_Source,
                      gjh.Status
            
Order   By  decode(gjh.Je_Source, ' Payables ' , ' 应付款 ' , ' Receivables ' , ' 应收款 ' , ' Spreadsheet ' , ' 电子表格 ' , ' Manual ' , ' 人工 ' ,gjh.Je_Source),
                     gccb.Segment1
|| ' . ' || gccb.Segment2 || ' . ' || gccb.Segment3 || ' . ' || gccb.Segment4 || ' . ' || gccb.Segment5 || ' . ' || gccb.Segment6 || ' . ' || gccb.Segment7 || ' . ' || gccb.Segment8;
  
Begin
      
--  取得单位名称
       select  a.name  into  l_org_name  from  hr_organization_units a 
      
where  a.organization_id = p_org_id;
      
      
--  取得查询的科目   l_acct_desc1
       --        说明范围   l_acct_desc2   
       If  p_Account_From  Is   Not   Null   Then
           
Select  
                 fvl1.Description
|| ' . ' || fvl2.Description || ' . ' || fvl3.Description || ' . ' || fvl4.Description || ' . ' || fvl5.Description || ' . ' || fvl6.Description || ' . ' || fvl7.Description || ' . ' || fvl8.Description A3
             
Into  l_acct_desc1
            
From  gl_code_combinations_kfv gcck
                 ,fnd_flex_values_vl fvl1
                 ,fnd_flex_values_vl fvl2
                 ,fnd_flex_values_vl fvl3
                 ,fnd_flex_values_vl fvl4
                 ,fnd_flex_values_vl fvl5
                 ,fnd_flex_values_vl fvl6
                 ,fnd_flex_values_vl fvl7
                 ,fnd_flex_values_vl fvl8
            
Where  gcck.Concatenated_Segments = p_Account_From
             
And  (fvl1.flex_value = gcck.segment1  And  fvl1.FLEX_VALUE_SET_ID = ' 1007720 ' )                         --  公司段
              And  (fvl2.flex_value = gcck.segment2  And  fvl2.FLEX_VALUE_SET_ID = ' 1007721 ' )                         --  部门段
              And  (fvl3.flex_value = gcck.segment3  And  fvl3.FLEX_VALUE_SET_ID = ' 1007722 ' )                         --  科目段
              And  (fvl4.flex_value = gcck.segment4  And  fvl4.FLEX_VALUE_SET_ID = ' 1007723 ' )                         --  子科目段
              And  (fvl5.flex_value = gcck.segment5  And  fvl5.FLEX_VALUE_SET_ID = ' 1007724 ' )                         --  公司间段
              And  (fvl6.flex_value = gcck.segment6  And  fvl6.FLEX_VALUE_SET_ID = ' 1007725 ' )                         --  产品段
              And  (fvl7.flex_value = gcck.segment7  And  fvl7.FLEX_VALUE_SET_ID = ' 1007726 ' )                         --  项目段
              And  (fvl8.flex_value = gcck.segment8  And  fvl8.FLEX_VALUE_SET_ID = ' 1007727 ' );
             
           
Select  
                 fvl1.Description
|| ' . ' || fvl2.Description || ' . ' || fvl3.Description || ' . ' || fvl4.Description || ' . ' || fvl5.Description || ' . ' || fvl6.Description || ' . ' || fvl7.Description || ' . ' || fvl8.Description A3
             
Into  l_acct_desc2
            
From  gl_code_combinations_kfv gcck
                 ,fnd_flex_values_vl fvl1
                 ,fnd_flex_values_vl fvl2
                 ,fnd_flex_values_vl fvl3
                 ,fnd_flex_values_vl fvl4
                 ,fnd_flex_values_vl fvl5
                 ,fnd_flex_values_vl fvl6
                 ,fnd_flex_values_vl fvl7
                 ,fnd_flex_values_vl fvl8
            
Where  gcck.Concatenated_Segments = p_Account_to
             
And  (fvl1.flex_value = gcck.segment1  And  fvl1.FLEX_VALUE_SET_ID = ' 1007720 ' )                         --  公司段
              And  (fvl2.flex_value = gcck.segment2  And  fvl2.FLEX_VALUE_SET_ID = ' 1007721 ' )                         --  部门段
              And  (fvl3.flex_value = gcck.segment3  And  fvl3.FLEX_VALUE_SET_ID = ' 1007722 ' )                         --  科目段
              And  (fvl4.flex_value = gcck.segment4  And  fvl4.FLEX_VALUE_SET_ID = ' 1007723 ' )                         --  子科目段
              And  (fvl5.flex_value = gcck.segment5  And  fvl5.FLEX_VALUE_SET_ID = ' 1007724 ' )                         --  公司间段
              And  (fvl6.flex_value = gcck.segment6  And  fvl6.FLEX_VALUE_SET_ID = ' 1007725 ' )                         --  产品段
              And  (fvl7.flex_value = gcck.segment7  And  fvl7.FLEX_VALUE_SET_ID = ' 1007726 ' )                         --  项目段
              And  (fvl8.flex_value = gcck.segment8  And  fvl8.FLEX_VALUE_SET_ID = ' 1007727 ' );
      
End   If ;
      
      l_acct_name:
= p_Account_From || ' --- ' || p_Account_to;
      l_acct_desc:
= l_acct_desc1 || ' --- ' || l_acct_desc2;
      
      
--  输出报表头
      l_SHOW : =  lpad( ' 客户化 总帐科目余额明细列表 ' 100 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      cux_my_public_pkg.OUT(
'   ' );  
    
      l_SHOW :
=  rpad( ' 会计日期 ' 10 '   ' ||  rpad(p_start_date,  10 '   ' ) ||  rpad( ' ' ||  p_end_date,  30 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      cux_my_public_pkg.OUT(
'   ' );
    
      
-- 帐户名称
      l_SHOW : =  rpad( ' 单位名称 ' 20 '   ' ||  rpad(l_org_name,  100 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      l_SHOW :
=  rpad( ' 会计科目 ' 20 '   ' ||  rpad(l_acct_name, 100 '   ' );
      cux_my_public_pkg.Out(l_SHOW);
      l_SHOW :
=  rpad( ' 科目说明 ' 20 '   ' ||  rpad(l_acct_desc, 100 '   ' );
      cux_my_public_pkg.Out(l_SHOW);
      cux_my_public_pkg.OUT(
'   ' );
       
      l_SHOW :
=  rpad( ' 来源 ' 20 '   ' ||  rpad( ' 科目 ' 50 '   ' || rpad( ' 科目说明 ' 150 '   ' ||  
      rpad(
' 过帐状态 ' 10 '   ' ||  
      rpad(
' 期初余额借方 ' 20 '   ' ||  rpad( ' 期初余额贷方 ' 20 '   ' ||  
      rpad(
' 本期发生借方 ' 20 '   ' ||  rpad( ' 本期发生贷方 ' 20 '   ' ||
      rpad(
' 本年累计借方 ' 20 '   ' ||  rpad( ' 本年累计贷方 ' 20 '   ' ||
      rpad(
' 期末余额借方 ' 20 '   ' ||  rpad( ' 期末余额贷方 ' 20 '   ' );
      cux_my_public_pkg.OUT(l_SHOW);
      
      l_SHOW :
=  lpad( '   ' 20 ' - ' ||  lpad( '   ' 50 ' - ' ||
              lpad(
'   ' 150 ' - ' ||  
              lpad(
'   ' 10 ' - ' ||  
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||  
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
              lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' );
      cux_my_public_pkg.OUT(l_SHOW);
      
      
--  汇总科目明细
       If  p_report_type = 1   Then
         
         
--  汇总init
         l_start_dr_t: = 0 ;
         l_start_cr_t:
= 0 ;
         l_now_dr_t:
= 0 ;
         l_now_cr_t:
= 0 ;
         l_year_dr_t:
= 0 ;
         l_year_cr_t:
= 0 ;
         l_end_dr_t:
= 0 ;
         l_end_cr_t:
= 0 ;
         
         
For  i  In  cr1 Loop
         
            
--  帐户类型  A  (资产) E  (费用类) 
             SELECT   Count ( Distinct  gcc.account_type)
                
INTO  p_account_type
             
FROM  gl_code_combinations gcc
            
WHERE  gcc.Code_Combination_Id = i.accid
              
And  (gcc.Segment3  Like   ' 1% '   Or  gcc.Segment3  Like   ' 4% ' );
            
            
IF  p_account_type > 0   THEN
                p_sign :
=   1 ;
            
ELSE
                p_sign :
=   - 1 ;
            
END   IF ;

            
--  期初余额
             SELECT  p_sign * nvl( Sum ( Distinct  (gc.begin_balance_dr - gc.begin_balance_cr) + (gc.period_net_dr - gc.period_net_cr)), 0 )
                
into  l_total
             
FROM  GL_BALANCES gc
            
WHERE  gc.Set_Of_Books_Id  =  p_set_of_gl_id
              
AND  gc.code_combination_id  =  i.accid
              
AND  gc.period_name  =  substr(to_char(add_months(to_date(substr(p_start_date, 4 , 4 ) || ' - ' || substr(p_start_date, 1 , 2 ) || ' -01 ' , ' yyyy-mm-dd ' ), - 1 ), ' YYYY-MM-DD ' ), 6 , 2 ) || ' - ' || substr(to_char(add_months(to_date(substr(p_start_date, 4 , 4 ) || ' - ' || substr(p_start_date, 1 , 2 ) || ' -01 ' , ' yyyy-mm-dd ' ), - 1 ), ' YYYY-MM-DD ' ), 1 , 4 )
              
AND  gc.actual_flag  =   ' A ' ;
              
            
IF  p_sign = 1   THEN
               l_start_dr:
= l_total;
               l_start_cr:
= 0 ;
            
End   If ;
            
            
If  p_sign =- 1   Then
               l_start_dr:
= 0 ;
               l_start_cr:
= l_total;
            
end   if ;
            
            
--  年发生额
             Select  nvl( sum (gv.Line_Entered_Dr), 0 ),
                   nvl(
sum (gv.Line_Entered_cr), 0 )
                 
Into  l_year_dr,
                      l_year_cr
            
From  Gl_Je_Journal_Lines_v gv
            
Where  gv.Period_Year = substr(p_start_date, 4 , 4
              
And  gv.Actual_Flag = ' A '
              
And  gv.Batch_Status = ' P '
              
And  gv.Line_Code_Combination_Id = i.accid;

            
--  期末数
            IF  p_account_type > 0   THEN
              l_qm_dr:
= l_start_dr + i.A5 - i.A6;
              l_qm_cr:
= 0 ;
           
Else
              l_qm_dr:
= 0 ;
              l_qm_cr:
= l_start_cr + i.A6 - i.A5;
           
End   If ;               
              
            l_SHOW :
=  rpad(i.A3,  20 '   ' ||  rpad(i.A1,  50 '   ' ||
                      rpad(i.A2, 
150 '   ' ||  
                      rpad(i.A4, 
10 '   ' ||  
                      rpad(to_char(l_start_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_start_cr, ' 999,999,999,990.00 ' ),  20 '   ' ||  
                      rpad(to_char(i.A5,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(i.A6, ' 999,999,999,990.00 ' ),  20 '   ' ||
                      rpad(to_char(l_year_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_year_cr, ' 999,999,999,990.00 ' ),  20 '   ' ||
                      rpad(to_char(l_qm_dr,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_qm_cr, ' 999,999,999,990.00 ' ),  20 '   ' );
            cux_my_public_pkg.OUT(l_SHOW);
      
            
--  汇总
            l_start_dr_t: = l_start_dr_t + l_start_dr;
            l_start_cr_t:
= l_start_cr_t + l_start_cr;
            
            l_now_dr_t:
= l_now_dr_t + i.A5;
            l_now_cr_t:
= l_now_cr_t + i.A6;
            
            l_year_dr_t:
= l_year_dr_t + l_year_dr;
            l_year_cr_t:
= l_year_cr_t + l_year_cr;
            l_end_dr_t:
= l_end_dr_t + l_qm_dr;
            l_end_cr_t:
= l_end_cr_t + l_qm_cr;
      
         
END  LOOP;
         l_SHOW :
=  lpad( '   ' 20 ' - ' ||  lpad( '   ' 50 ' - ' ||
                    lpad(
'   ' 150 ' - ' ||  
                    lpad(
'   ' 10 ' - ' ||  
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||  
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' ||
                    lpad(
'   ' 20 ' - ' ||  lpad( '   ' 20 ' - ' );
         cux_my_public_pkg.OUT(l_SHOW);
          
         l_SHOW :
=  rpad( ' 合计 ' 20 '   ' ||  rpad( '   ' 50 '   ' ||
                    rpad(
'   ' 150 '   ' ||  
                    rpad(
'   ' 10 '   ' ||  
                    rpad(to_char(l_start_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_start_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' ||  
                    rpad(to_char(l_now_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_now_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' ||
                    rpad(to_char(l_year_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_year_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' ||
                    rpad(to_char(l_end_dr_t,
' 999,999,999,990.00 ' ),  20 '   ' ||  rpad(to_char(l_end_cr_t, ' 999,999,999,990.00 ' ),  20 '   ' );
         cux_my_public_pkg.OUT(l_SHOW);
      
End   If ;
  
End  cuxgllistgathmx;
  
end  CUX_GL_REP_LISTPKG;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/long_li/archive/2005/08/03/444862.aspx

转载于:https://www.cnblogs.com/liuweicong39/archive/2012/06/04/2534765.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值