您的位置:首页 > 其它

[易飞]财务要求和系统一致 不管是否有销售发票

2011-02-24 14:49 204 查看
那更简单了

/*
*用途:统计销售实际 已开票抓INVLA档抓成本
*作者:龚德辉
*日期:2010-05--23
*/

CREATE Procedure UP_SALRealyCost
(
@year as char(4)='2010'
)
as
begin
declare  @plan Table
(
type nvarchar(20)
,area nvarchar(20)
,sort int
,acct_month1 decimal(18,9)
,acct_month2 decimal(18,9)
,acct_month3 decimal(18,9)
,acct_month4 decimal(18,9)
,acct_month5 decimal(18,9)
,acct_month6 decimal(18,9)
,acct_month7 decimal(18,9)
,acct_month8 decimal(18,9)
,acct_month9 decimal(18,9)
,acct_month10 decimal(18,9)
,acct_month11 decimal(18,9)
,acct_month12 decimal(18,9)
)
declare @account as decimal(18,9),@date as nvarchar(8),@type as nvarchar(20),@area as nvarchar(20),@sort as int ,@newyear as nvarchar(6),@curryear as nvarchar(4)
set @newyear=@year+substring(convert(varchar(10),getdate(),120),6,2)--当前年月
set @curryear=datepart(year,getdate())

if @year>=@curryear
begin

declare Cursorpawf cursor
local static for
select case when left(m.MB005,1) in ('2','3') THEN '其他' else MA003 END MA003,MR003,Acount,[date], case when m.MB005 in('2','3') then  999 else m.MB005 END as sort from (
select  a.CODE,a.Acount,a.[date],b.MR003 from (

select MA076 Dept,TH004 CODE, LA013   AS Acount,LA004  [date]
from
COPTH
LEFT JOIN COPTG   ON TG001=TH001 AND TG002=TH002
LEFT JOIN COPMA ON TG004=MA001
inner JOIN INVLA on LA006=TH001 AND LA007=TH002 AND LA008=TH003
where left(LA004,6)<=@newyear  AND left(LA004,4)=@year

union all

select MA076 Dept,TJ004 CODE,-LA013 AS Acount,LA004 [date]
from
COPTJ
LEFT JOIN COPTI   ON TI001=TJ001 AND TI002=TJ002
LEFT JOIN COPMA ON TI004=MA001
inner JOIN INVLA on LA006=TJ001 AND LA007=TJ002 AND LA008=TJ003
where left(LA004,6)<=@newyear  AND left(LA004,4)=@year

) a left join (select * from CMSMR where MR001='2')  b on a.Dept=b.MR002 ) c
left join (select MA001,MB001,MB005,MA003 from INVMB LEFT JOIN INVMA ON MB005=MA002 WHERE MA001='1') as m on c.CODE=m.MB001
WHERE Acount<>0

Open Cursorpawf
while 1=1
begin
fetch Cursorpawf into
@type
,@area
,@account
,@date
,@sort
if @@fetch_status<>0
break
if @type is not null and @area is not null and @account<>0
begin

if substring(@date,5,2)='01'
begin
insert @plan(type,area,acct_month1,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='02'
begin
insert @plan(type,area,acct_month2,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='03'
begin
insert @plan(type,area,acct_month3,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='04'
begin
insert @plan(type,area,acct_month4,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='05'
begin
insert @plan(type,area,acct_month5,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='06'
begin
insert @plan(type,area,acct_month6,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='07'
begin
insert @plan(type,area,acct_month7,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='08'
begin
insert @plan(type,area,acct_month8,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='09'
begin
insert @plan(type,area,acct_month9,sort)values(@type,@area,@account,@sort)

end
if substring(@date,5,2)='10'
begin
insert @plan(type,area,acct_month10,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='11'
begin
insert @plan(type,area,acct_month11,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='12'
begin
insert @plan(type,area,acct_month12,sort)values(@type,@area,@account,@sort)
end

end
end
close Cursorpawf
deallocate Cursorpawf

end
else
begin

declare Cursorpawf cursor
local static for

select case when left(m.MB005,1) in ('2','3') THEN '其他' else MA003 END MA003,MR003,Acount,[date], case when m.MB005 in('2','3') then  999 else m.MB005 END as sort from (
select  a.CODE,a.Acount,a.[date],b.MR003 from (

select MA076 Dept,TH004 CODE, LA013   AS Acount,LA004  [date]
from
COPTH
LEFT JOIN COPTG   ON TG001=TH001 AND TG002=TH002
LEFT JOIN COPMA ON TG004=MA001
inner JOIN INVLA on LA006=TH001 AND LA007=TH002 AND LA008=TH003
where left(LA004,4)=@year

union all

select MA076 Dept,TJ004 CODE,-LA013 AS Acount,LA004 [date]
from
COPTJ
LEFT JOIN COPTI   ON TI001=TJ001 AND TI002=TJ002
LEFT JOIN COPMA ON TI004=MA001
inner JOIN INVLA on LA006=TJ001 AND LA007=TJ002 AND LA008=TJ003
where left(LA004,6)<=@newyear

) a left join (select * from CMSMR where MR001='2')  b on a.Dept=b.MR002 ) c
left join (select MA001,MB001,MB005,MA003 from INVMB LEFT JOIN INVMA ON MB005=MA002 WHERE MA001='1') as m on c.CODE=m.MB001
WHERE Acount<>0

Open Cursorpawf
while 1=1
begin
fetch Cursorpawf into
@type
,@area
,@account
,@date
,@sort
if @@fetch_status<>0
break
if @type is not null and @area is not null and @account<>0
begin

if substring(@date,5,2)='01'
begin
insert @plan(type,area,acct_month1,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='02'
begin
insert @plan(type,area,acct_month2,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='03'
begin
insert @plan(type,area,acct_month3,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='04'
begin
insert @plan(type,area,acct_month4,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='05'
begin
insert @plan(type,area,acct_month5,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='06'
begin
insert @plan(type,area,acct_month6,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='07'
begin
insert @plan(type,area,acct_month7,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='08'
begin
insert @plan(type,area,acct_month8,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='09'
begin
insert @plan(type,area,acct_month9,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='10'
begin
insert @plan(type,area,acct_month10,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='11'
begin
insert @plan(type,area,acct_month11,sort)values(@type,@area,@account,@sort)
end
if substring(@date,5,2)='12'
begin
insert @plan(type,area,acct_month12,sort)values(@type,@area,@account,@sort)
end

end
end
close Cursorpawf
deallocate Cursorpawf
end

select  sort,
rtrim(type) as type,
area
,convert(decimal(19,2),sum(isnull(acct_month1,0))) as 一月
,convert(decimal(19,2),sum(isnull(acct_month2,0))) as 二月
,convert(decimal(19,2),sum(isnull(acct_month3,0))) as 三月
,convert(decimal(19,2),sum(isnull(acct_month4,0))) as 四月
,convert(decimal(19,2),sum(isnull(acct_month5,0))) as 五月
,convert(decimal(19,2),sum(isnull(acct_month6,0))) as 六月
,convert(decimal(19,2),sum(isnull(acct_month7,0))) as 七月
,convert(decimal(19,2),sum(isnull(acct_month8,0))) as 八月
,convert(decimal(19,2),sum(isnull(acct_month9,0))) as 九月
,convert(decimal(19,2),sum(isnull(acct_month10,0))) as 十月
,convert(decimal(19,2),sum(isnull(acct_month11,0))) as 十一月
,convert(decimal(19,2),sum(isnull(acct_month12,0))) as 十二月
,convert(decimal(19,2),sum(isnull(acct_month1,0))+sum(isnull(acct_month2,0))+sum(isnull(acct_month3,0))+sum(isnull(acct_month4,0))+sum(isnull(acct_month5,0))+sum(isnull(acct_month6,0))+sum(isnull(acct_month7,0))+sum(isnull(acct_month8,0))+sum(isnull(acct_month9,0))+sum(isnull(acct_month10,0))+sum(isnull(acct_month11,0))+sum(isnull(acct_month12,0))) 合计
from @plan
group by sort,type,area
union all
select   sort,
rtrim(type)+ '合计' as type,
rtrim(type)+'合计' area
,convert(decimal(19,2),sum(isnull(acct_month1,0))) as 一月
,convert(decimal(19,2),sum(isnull(acct_month2,0))) as 二月
,convert(decimal(19,2),sum(isnull(acct_month3,0))) as 三月
,convert(decimal(19,2),sum(isnull(acct_month4,0))) as 四月
,convert(decimal(19,2),sum(isnull(acct_month5,0))) as 五月
,convert(decimal(19,2),sum(isnull(acct_month6,0))) as 六月
,convert(decimal(19,2),sum(isnull(acct_month7,0))) as 七月
,convert(decimal(19,2),sum(isnull(acct_month8,0))) as 八月
,convert(decimal(19,2),sum(isnull(acct_month9,0))) as 九月
,convert(decimal(19,2),sum(isnull(acct_month10,0))) as 十月
,convert(decimal(19,2),sum(isnull(acct_month11,0))) as 十一月
,convert(decimal(19,2),sum(isnull(acct_month12,0))) as 十二月
,convert(decimal(19,2),sum(isnull(acct_month1,0))+sum(isnull(acct_month2,0))+sum(isnull(acct_month3,0))+sum(isnull(acct_month4,0))+sum(isnull(acct_month5,0))+sum(isnull(acct_month6,0))+sum(isnull(acct_month7,0))+sum(isnull(acct_month8,0))+sum(isnull(acct_month9,0))+sum(isnull(acct_month10,0))+sum(isnull(acct_month11,0))+sum(isnull(acct_month12,0))) 合计
from @plan
group by  sort, type
order by sort ,type asc
------------------------------合计----------------------
select   --sort,
rtrim(type)+ '合计' as type
--rtrim(type)+'合计' area
,convert(decimal(19,2),sum(isnull(acct_month1,0))) as 一月
,convert(decimal(19,2),sum(isnull(acct_month2,0))) as 二月
,convert(decimal(19,2),sum(isnull(acct_month3,0))) as 三月
,convert(decimal(19,2),sum(isnull(acct_month4,0))) as 四月
,convert(decimal(19,2),sum(isnull(acct_month5,0))) as 五月
,convert(decimal(19,2),sum(isnull(acct_month6,0))) as 六月
,convert(decimal(19,2),sum(isnull(acct_month7,0))) as 七月
,convert(decimal(19,2),sum(isnull(acct_month8,0))) as 八月
,convert(decimal(19,2),sum(isnull(acct_month9,0))) as 九月
,convert(decimal(19,2),sum(isnull(acct_month10,0))) as 十月
,convert(decimal(19,2),sum(isnull(acct_month11,0))) as 十一月
,convert(decimal(19,2),sum(isnull(acct_month12,0))) as 十二月

from @plan
group by  type

end
GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: