IF EXISTS (SELECT *
           FROM SYSOBJECTS O, SYSUSERS U
           WHERE  O.NAME = 'CST_ITEM_VENDA'  AND
	                 TYPE = 'FN' 			AND
                   U.UID = O.UID       AND
                  U.NAME = USER)
DROP FUNCTION CST_ITEM_VENDA
GO
CREATE FUNCTION CST_ITEM_VENDA(@P_CDEMPRESA   VARCHAR(02),
                                    @P_CDINSCESTA  VARCHAR(16),
                                    @P_CDFILIAL    VARCHAR(04),
                                    @P_NRLANCTONF  VARCHAR(10),
                                    @P_CDCLIENTE   VARCHAR(21),
                                    @P_CDOPERACAO  VARCHAR(02),
                                    @P_CDARVPROD   VARCHAR(20)) RETURNS VARCHAR
AS
BEGIN
   DECLARE @V_CSTITEM      VARCHAR(03);
   DECLARE @V_CDGRUPOFISC  VARCHAR(03);
   DECLARE @V_CDARVPROD    VARCHAR(20);
   DECLARE @V_CST1DIGT     VARCHAR(01);
   DECLARE @V_CONTADOR     INT;


   SET @V_CDGRUPOFISC = NULL;

   SELECT @V_CDGRUPOFISC = MAX(CDGRUPOFISC)
     FROM CLIENTE
    WHERE CDCLIENTE = @P_CDCLIENTE;

   IF @V_CDGRUPOFISC IS NULL BEGIN
      SELECT @V_CDGRUPOFISC = MAX(CDGRUPOFISC)
      FROM PARAMFILIAL
      WHERE CDFILIAL = @P_CDFILIAL;
   END;

   IF @V_CDGRUPOFISC IS NULL BEGIN
      SELECT @V_CDGRUPOFISC = MAX(CDGRUPOFISC)
      FROM TIPOOPERAC
      WHERE IDENTRSAIDOP = 'S' AND
            CDTIPOOPER   = @P_CDOPERACAO;
   END;

   SELECT @V_CST1DIGT = MAX(CDCSTDIG1PROD)
     FROM PRODUTO
    WHERE (CDARVPROD = @P_CDARVPROD);

   IF @V_CST1DIGT IS NULL BEGIN
      SELECT @V_CST1DIGT = MAX(CDCSTDIG1SAI)
        FROM INSCRESTAD
       WHERE (CDEMPRESA  = @P_CDEMPRESA) AND
             (CDINSCESTA = @P_CDINSCESTA);
   END;

   IF (@V_CDGRUPOFISC IS NOT NULL) BEGIN
      SELECT @V_CDARVPROD = MAX(P.CDARVPROD),
             @V_CONTADOR  = COUNT(*)
      FROM CODSITUTRIB C LEFT JOIN PRODUTO P ON (C.CDPRODUTO = P.CDPRODUTO)
      WHERE (IDENTSAICST = 'S')                   AND
            (CDEMPRESA   = @P_CDEMPRESA)          AND
            (CDTIPOOPER  = @P_CDOPERACAO)         AND
            (CDINSCESTA  = RTRIM(@P_CDINSCESTA))  AND
            (CDGRUPOFISC = @V_CDGRUPOFISC)        AND
            (CHARINDEX(ISNULL(RTRIM(P.CDARVPROD),@P_CDARVPROD),@P_CDARVPROD) = 1);
   END;

   IF @V_CONTADOR > 0  BEGIN
      IF NOT(@V_CDARVPROD IS NULL) BEGIN
         SELECT @V_CSTITEM = MAX(CDSITUTRIB)
         FROM CODSITUTRIB C LEFT JOIN PRODUTO P ON (C.CDPRODUTO = P.CDPRODUTO)
         WHERE	(C.IDENTSAICST = 'S')                  AND
               (C.CDEMPRESA   = @P_CDEMPRESA)         AND
               (C.CDTIPOOPER  = @P_CDOPERACAO)        AND
               (C.CDINSCESTA  = RTRIM(@P_CDINSCESTA)) AND
               (C.CDGRUPOFISC = @V_CDGRUPOFISC)       AND
               (P.CDARVPROD   = @V_CDARVPROD);
      END
      ELSE BEGIN
         IF (@V_CDARVPROD IS NULL) BEGIN
            SELECT @V_CSTITEM = MAX(CDSITUTRIB)
            FROM CODSITUTRIB C
            WHERE	(C.IDENTSAICST = 'S')                  AND
                  (C.CDEMPRESA   = @P_CDEMPRESA)         AND
                  (C.CDTIPOOPER  = @P_CDOPERACAO)        AND
                  (C.CDINSCESTA  = RTRIM(@P_CDINSCESTA)) AND
                  (C.CDGRUPOFISC = @V_CDGRUPOFISC)       AND
                  (C.CDPRODUTO IS NULL);
         END;
      END;
   END
   ELSE BEGIN
      SELECT @V_CDARVPROD = MAX(P.CDARVPROD),
             @V_CONTADOR  = COUNT(*)
      FROM CODSITUTRIB C, PRODUTO P
      WHERE (IDENTSAICST = 'S')                   AND
            (CDEMPRESA   = @P_CDEMPRESA)          AND
            (CDTIPOOPER  = @P_CDOPERACAO)         AND
            (CDINSCESTA  = RTRIM(@P_CDINSCESTA))  AND
            (CDGRUPOFISC IS NULL)                 AND
            (C.CDPRODUTO = P.CDPRODUTO)           AND
            (CHARINDEX(ISNULL(RTRIM(P.CDARVPROD),@P_CDARVPROD),@P_CDARVPROD) = 1);

      IF NOT(@V_CDARVPROD IS NULL) BEGIN
         SELECT @V_CSTITEM = MAX(CDSITUTRIB)
         FROM CODSITUTRIB C LEFT JOIN PRODUTO P ON (C.CDPRODUTO = P.CDPRODUTO)
         WHERE	(C.IDENTSAICST = 'S')                   AND
               (C.CDEMPRESA   = @P_CDEMPRESA)          AND
               (C.CDTIPOOPER  = @P_CDOPERACAO)         AND
               (C.CDINSCESTA  = RTRIM(@P_CDINSCESTA))  AND
               (C.CDGRUPOFISC IS NULL)                 AND
               (P.CDARVPROD   = @V_CDARVPROD);
      END
      ELSE BEGIN
         IF (@V_CDARVPROD IS NULL) BEGIN
            SELECT @V_CSTITEM = MAX(CDSITUTRIB)
            FROM CODSITUTRIB C
            WHERE	(C.IDENTSAICST = 'S')                  AND
                  (C.CDEMPRESA   = @P_CDEMPRESA)         AND
                  (C.CDTIPOOPER  = @P_CDOPERACAO)        AND
                  (C.CDINSCESTA  = RTRIM(@P_CDINSCESTA)) AND
                  (C.CDGRUPOFISC IS NULL)                AND
                  (C.CDPRODUTO IS NULL);
         END;
      END;
   END;

   IF (@V_CSTITEM IS NOT NULL) BEGIN
      SET @V_CSTITEM = @V_CST1DIGT+@V_CSTITEM;
   END;

   RETURN (@V_CSTITEM);
END
GO

-- VERSAO --
EXEC ATUVEROBJ 'CST_ITEM_VENDA','5.30.xxx';
GO

