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,4And 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,4And 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

posted @ 2012-06-04 15:21  刘伟聪  阅读(463)  评论(0编辑  收藏  举报