SELECT | sc4432.ID gros_d | , СпрСотр.ID AS МОС | , zay.Товар AS Товар | , zay.ГодВыпуска AS ГодВыпуска | , zay.IDDoc AS ЗаявкаПокупателя | , pro.IDDoc AS Проработка | , zay.dv zaydv | , pro.dv prodv | , dbo.GetGoodProMax(zay.Товар, zay.dv) GetGoodProMax | , dbo.GetSecDiffEmpl(LEFT(zay.dv, 17), LEFT(pro.dv, 17), '56464') СкоростьПроработки
Вызов
Вот сама функция
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO
ALTER FUNCTION dbo.GetSecDiffEmpl(@_beg Char(17), @_end Char(17), @_Empl Char(9)) RETURNS Int AS BEGIN
If @_Empl=' 0 ' Return 0 Else If @_Empl Is Null Return 0
Declare @d DateTime, @t DateTime, @nSec Int Set @d=Left(@_beg,8) Set @nSec=0
Declare @gr Char(9), @wd Int Declare @ts DateTime, @te DateTime, @tos DateTime, @toe DateTime
/*-------------------------------------------------*/ While @d<@_end Begin
--выходной или рабочий день If DatePart(dw, @d)=7 Or DatePart(dw, @d)=1 Set @wd=1 Else Set @wd=2 --отклонения от нормы записываются в спр Праздники Select @wd=sc4742.sp4740 From sc4742(Nolock) Where sc4742.sp4739=Convert(Char(8), @d, 112) --берем график из сотрудника Set @gr = Null Select Top 1 @gr=value From _1sconst(Nolock) Where id=4745 And objid=@_Empl And date<=@d Order By date Desc, time Desc, docid Desc If @gr Is Null Select Top 1 @gr=value From _1sconst(Nolock) Where id=4711 And objid=' 0 ' And date<=@d Order By date Desc, time Desc, docid Desc --считываем время по графику If @wd=1 Select @ts=sc4730.sp4725+':00', @te=sc4730.sp4726+':00', @tos=sc4730.sp4727+':00', @toe=sc4730.sp4728+':00' From sc4730(Nolock) Where id=@gr Else Select @ts=sc4730.sp4721+':00', @te=sc4730.sp4722+':00', @tos=sc4730.sp4723+':00', @toe=sc4730.sp4724+':00' From sc4730(Nolock) Where id=@gr --считаем кол-во секунд If @tos='00:00:00' --без обеда Begin If @d=Left(@_beg,8) Begin Set @t=SubString(@_beg,10,8) If @t>@te Begin Set @ts=@te End Else If @t>@ts Begin Set @ts=@t End End If @d=Left(@_end,8) Begin Set @t=SubString(@_end,10,8) If @t<@ts Begin Set @te=@ts End Else If @t<@te Begin Set @te=@t End End Set @nSec=@nSec+DateDiff(ss, @ts, @te) End Else Begin If @d=Left(@_beg,8) Begin Set @t=SubString(@_beg,10,8) If @t>@te Begin Set @ts=@tos Set @toe=@te End Else If @t>@toe Begin Set @ts=@tos Set @toe=@t End Else If @t>@tos Begin Set @ts=@tos End Else If @t>@ts Begin Set @ts=@t End End
If @d=Left(@_end,8) Begin Set @t=SubString(@_end,10,8) If @t<@ts Begin Set @te=@toe Set @tos=@ts End Else If @t<@tos Begin Set @te=@toe Set @tos=@t End Else If @t<@toe Begin Set @te=@toe End Else If @t<@te Begin Set @te=@t End
End
Set @nSec=@nSec+DateDiff(ss, @ts, @tos) Set @nSec=@nSec+DateDiff(ss, @toe, @te) End
Set @d=DateAdd(dd, 1, @d) End /*-------------------------------------------------*/
Return @nSec
END
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
|