  -- Является ли работа просроченной на переданную дату

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[IsOverdueWork]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[IsOverdueWork]
GO
create function IsOverdueWork(@WorkID integer, @ForDate DateTime)
returns bit
as
begin 
  declare @result bit
  declare @StartDateReal DateTime
  declare @EndDateReal DateTime
  declare @EndPlanDate DateTime
  declare @StartPlanDate DateTime
  declare @IsApproved bit
  declare @IsAccepted bit
  select @StartDateReal = IsNull(Дата_начала_по_факту,0),
    @EndDateReal = IsNull(Дата_окончания_по_факту,0),
    @StartPlanDate = IsNull(Дата_начала_по_графику,0),
    @EndPlanDate = IsNull(Дата_окончания_по_графику,0),
    @IsApproved = IsNull(Является_утвержденной,0), 
    @IsAccepted = IsNull(Является_принятой,0)
  FROM Работа WHERE Код_работы = @WorkID
  if (@IsApproved = 0) OR (@IsAccepted = 1) -- Если работа не утверждена или наоборот, уже принята, то просроченной считаться не может
    return 0
  if @StartDateReal > 0 
  begin
    if (@EndDateReal <= 0) AND (@EndPlanDate > 0) AND (@EndPlanDate < @ForDate) set @result = 1
  end
  else
    if (@StartPlanDate > 0) AND (@StartPlanDate < @ForDate) set @Result = 1
  return @result
end
