首页 > 开发 > 综合 > 正文

前段时间写的一个关于成本计算的存储过程!

2024-07-21 02:07:21
字体:
来源:转载
供稿:网友

--                              ///|///
--                             //  - -  //
--                             (  @ @  )
--┏━━━━━━━━━oooo-(_)-oooo━┓
--┃   定义于2004-07-16                                  ┃
--┃  成本试算存储过程定义,计算成本  ┃
--┃                                                  oooo   ┃
--┗━━━━━━━━━ oooo━-(   )━┛
--                                           (   )   ) /
--                                            / (   (_/
--                                             /_)
create procedure sp_costing_compute
    ( @out_matnr varchar(18),
     @out_werks varchar(4),
     @out_datetime datetime)
as
--插入赠品
declare @matnr varchar(18),@werks varchar(4),@kriqi datetime,@meins varchar(10)
declare @bomatnr varchar(18),@bomsehl varchar(10),@menge float
declare @price float,@danw varchar(20)
declare @umrez float,@aaprice float,@jjprice float,@arate float,@jrate float,@asy float,@jsy float
declare @cpjg float,@umren float
set @cpjg = 0
--计算产成品成本价格
declare mycursor cursor for select meins,aprice,jprice from tb_matnr where convert(varchar(10),kriqi,120)=convert(varchar(10),@out_datetime,120)  and matnr = @out_matnr and [email protected]_werks
open mycursor
fetch mycursor into @meins,@aaprice,@jjprice
close mycursor
deallocate mycursor
declare  bccursor cursor for select bomatnr,bomsehl,menge from tb_bom where [email protected]_matnr and [email protected]_werks and convert(varchar(10),kriqi,120)=convert(varchar(10),@out_datetime,120)
open bccursor
fetch bccursor into @bomatnr,@bomsehl,@menge
   while @@fetch_status = 0
   begin
       declare jgcursor cursor for select price,meins from tb_bcjg where [email protected] and [email protected]_werks and convert(varchar(10),kriqi,120)=convert(varchar(10),@out_datetime,120)
       open jgcursor
       fetch jgcursor into @price,@danw
       close jgcursor
       deallocate jgcursor
                   if @price = 0
                               begin
                                       update tb_matnr set mstatus='置疑' where matnr = @out_matnr and plant = @out_werks and convert(varchar(10),kriqi,120)=convert(varchar(10),@out_datetime,120)
                                       break
                               end
--如果价格单位和bom单位不同,需要进行转换
       if @bomsehl <> @danw
              begin
                   declare zhgxcursor cursor for select umrez from tb_switch where matnr = @bomatnr and msehl = @danw
                   open zhgxcursor
                   fetch zhgxcursor into @umrez
                   close zhgxcursor
                   deallocate zhgxcursor                 
              end    
      if @umrez is null
                 set @umrez = 1
      set @cpjg = @cpjg + @menge * @price / @umrez                     
     fetch next from bccursor into @bomatnr,@bomsehl,@menge
   end  
   close bccursor
   deallocate bccursor
--查看bom成品单位与成品销售单位,如果不同添加转换关系
     declare cpzhcursor cursor for select umren from tb_switch  where matnr = @out_matnr and msehl = @meins
     open cpzhcursor
     fetch cpzhcursor into @umren
     close cpzhcursor
     deallocate cpzhcursor
     if @umren is null
                 set @umren = 1
     if @cpjg <> 0
                 set @cpjg = @cpjg / @umren
  if not @aaprice is null      
          begin
             set @arate = @aaprice - @cpjg
             if @aaprice <> 0
                 set @[email protected] / @aaprice
          end
     else
          begin
               set @arate=0
               set @asy=0
          end
     if not @jjprice is null
           begin
              set @jrate = @jjprice - @cpjg
              if @jjprice <> 0
                  set @jsy = @jrate / @jjprice
           end
     else
          begin
             set  @jrate = 0
             set  @jsy = 0
          end  

   update tb_matnr set cbprice = @cpjg,[email protected],[email protected],[email protected],[email protected] where [email protected]_matnr and [email protected]_werks and convert(varchar(10),kriqi,120)=convert(varchar(10),@out_datetime,120)
go

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表