IF EXISTS (SELECT * FROM SYSOBJECTS O, SYSUSERS U
                    WHERE
	        O.NAME = 'RETORNA_NRCICLO'  AND
	        TYPE = 'FN'                        AND
	        U.UID = O.UID                     AND
	        U.NAME = USER
          )
  DROP FUNCTION RETORNA_NRCICLO
GO

CREATE FUNCTION RETORNA_NRCICLO (
    @P_CDFILIAL   VARCHAR(4),
    @P_CDSERVFILI VARCHAR(5),
    @P_DATA       DATETIME) RETURNS VARCHAR(10)
AS
BEGIN
   DECLARE @V_CDCARDCICLO     VARCHAR(5);
   DECLARE @V_NRCICLO         INT;
   DECLARE @RETORNO           VARCHAR(10);
   DECLARE @V_DTINICICLO      DATETIME;
   SET @V_NRCICLO = 0;
 
   SELECT @V_CDCARDCICLO = SC.CDCARDCICLO, @V_DTINICICLO = SC.DTINICICLO
     FROM SERVCARDCICLO SC, CARDCICLO CC
    WHERE SC.CDFILIAL = @P_CDFILIAL
      AND SC.CDSERVFILI = @P_CDSERVFILI
      AND CC.CDCARDCICLO = SC.CDCARDCICLO
      AND CC.IDATIVCICLO = 'S'
      AND SC.DTINICICLO = (SELECT MAX(SERVCARDCICLO.DTINICICLO) 
                             FROM SERVCARDCICLO, CARDCICLO
                            WHERE SERVCARDCICLO.CDFILIAL = @P_CDFILIAL
                              AND SERVCARDCICLO.CDSERVFILI = @P_CDSERVFILI
                              AND SERVCARDCICLO.DTINICICLO <= @P_DATA
                              AND CARDCICLO.CDCARDCICLO = SERVCARDCICLO.CDCARDCICLO
                              AND CARDCICLO.IDATIVCICLO = 'S') ;
   
   IF @V_CDCARDCICLO IS NOT NULL BEGIN
      SELECT @V_NRCICLO = CASE ((CONVERT(INT,@P_DATA)-(CONVERT(INT,SC.DTINICICLO)-SC.NRINICICLO)) % (CC.NRSEMCICLO*7)) WHEN 0 THEN (CC.NRSEMCICLO*7) ELSE ((CONVERT(INT,@P_DATA)-(CONVERT(INT,SC.DTINICICLO)-SC.NRINICICLO)) % (CC.NRSEMCICLO*7)) END
        FROM CARDCICLO CC, SERVCARDCICLO SC
       WHERE CC.CDCARDCICLO = SC.CDCARDCICLO
         AND SC.CDCARDCICLO = @V_CDCARDCICLO
         AND SC.CDFILIAL = @P_CDFILIAL
         AND SC.CDSERVFILI = @P_CDSERVFILI
         AND SC.DTINICICLO = @V_DTINICICLO;
   END;
   SET @RETORNO = @V_CDCARDCICLO + CONVERT(VARCHAR,@V_NRCICLO);
   RETURN(@RETORNO);
END
GO

-- VERSAO --
EXEC ATUVEROBJ 'RETORNA_NRCICLO','5.75.000';
GO