ALTER PROCEDURE [dbo].[sp_venMargenVentas]
(@fecini  DATE, 
 @fecfin  DATE, 
 @codloci INT          = 0, 
 @codlocf INT          = 0, 
 @codveni INT          = 0, 
 @codvenf INT          = 0, 
 @codbusi VARCHAR(100) = '0', 
 @codbusf VARCHAR(100) = 'Z', 
 @famini  VARCHAR(10)  = '0', 
 @famfin  VARCHAR(10)  = 'Z', 
 @subini  VARCHAR(10)  = '0', 
 @subfin  VARCHAR(10)  = 'Z', 
 @ctaini  BIGINT       = 0, 
 @ctafin  BIGINT       = 99999999
)
AS
     SET @fecini = CONVERT(DATE, @fecini);
     SET @fecfin = CONVERT(DATE, @fecfin);
     SELECT venDetalle.coddoc, 
            venDetalle.grudoc, 
            venDetalle.numinv, 
            venDetalle.fecdoc, 
            venDetalle.numlin, 
            venDetalle.codfam, 
            venDetalle.codsub, 
            venDetalle.codart, 
            venDetalle.codbus, 
            invArticulos.codbar, 
            venDetalle.nomart, 
            venDetalle.coduni,
            CASE
                WHEN venEncabezado.codsii IN(60, 61)
                THEN venDetalle.cantidad * -1
                ELSE venDetalle.cantidad
            END AS cantidad, 
            venDetalle.salcan, 
            venDetalle.unialt, 
            venDetalle.canalt,
			CASE 
			WHEN venEncabezado.codsii IN(60,61)
			THEN (SELECT VD.preuni FROM venDetalle VD WHERE VD.coddoc = venEncabezado.tipref1 AND VD.numinv = docref1 AND VD.codbus = venDetalle.codbus AND VD.idlinearef = venDetalle.idlinearef)
            ELSE venDetalle.preuni
			END AS preuni,
            venDetalle.preuniadi,
            CASE
                WHEN venEncabezado.codsii IN(60, 61)
                THEN venDetalle.pretot * -1
                ELSE venDetalle.pretot
            END AS pretot, 
            venDetalle.pretotadi, 
            venEncabezado.boddes, 
            venEncabezado.codven, --codigo vendedor ventas 
            venVendedores.nomven, --nombre vendedor ventas             
            ISNULL(cotNotaPedido.vendedor, 99999999) AS codVenVale, 
            venDetalle.glolin,
			CASE
			WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 3
			THEN 0
			ELSE venDetalle.Costo
			END AS Costo, 
            venDetalle.fecent, 
            venDetalle.numlinorden, 
            venDetalle.estado, 
            venDetalle.codloc, 
            venDetalle.porcdescuento,
            CASE
                WHEN venEncabezado.codsii IN(60, 61)
                THEN (venDetalle.descuento + venDetalle.descuentoglobal) * -1
                ELSE (venDetalle.descuento + venDetalle.descuentoglobal)
            END AS descuento, 
            venDetalle.porcadicional, 
            venDetalle.adicional, 
            venDetalle.codcen, 
            venDetalle.codana, 
            venDetalle.tip_impadi, 
            venDetalle.costoRef, 
            venDetalle.saldoGral, 
            venDetalle.stockGral, 
            venDetalle.preunibruto, 
            venDetalle.fechacosto, 
            venDetalle.np, 
            venDetalle.loging, 
            venDetalle.fecing, 
            venDetalle.logmod, 
            venDetalle.fecmod, 
            venDocumentos.nomdoc,
			CASE
			WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 1
			THEN venDocumentos.alias_doc + 'ANUL'
            WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 2
			THEN venDocumentos.alias_doc + 'CTEX'
			WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 3
			THEN venDocumentos.alias_doc + 'CPRE'
			WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 4
			THEN venDocumentos.alias_doc + 'CCAN'
			ELSE
			venDocumentos.alias_doc
			END AS alias_doc, 
            CONVERT(DECIMAL(18,4),
				(CASE
                 WHEN venEncabezado.codsii IN(60, 61)
                 THEN venDetalle.preuni * -1
                 ELSE venDetalle.preuni
				 END * venDetalle.cantidad)) AS precioventa,
            CONVERT(DECIMAL(18,4),
				(CASE
                WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo <> 3 
                THEN(venDetalle.Costo * venDetalle.cantidad) * -1
				WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 3 
				THEN 0
                ELSE(venDetalle.Costo * venDetalle.cantidad)
            END)) AS totalcosto, 
            CONVERT(DECIMAL(18,4),(CASE
                 WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo <> 3 
                 THEN (CASE 
						WHEN venEncabezado.codsii IN(60,61)
						THEN (SELECT VD.preuni FROM venDetalle VD WHERE VD.coddoc = venEncabezado.tipref1 AND VD.numinv = docref1 AND VD.codbus = venDetalle.codbus AND VD.idlinearef = venDetalle.idlinearef)
						ELSE venDetalle.preuni
						END) * -1
				 WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 3
				 THEN 0
                 ELSE (CASE 
						WHEN venEncabezado.codsii IN(60,61)
						THEN (SELECT VD.preuni FROM venDetalle VD WHERE VD.coddoc = venEncabezado.tipref1 AND VD.numinv = docref1 AND VD.codbus = venDetalle.codbus AND VD.idlinearef = venDetalle.idlinearef)
						ELSE venDetalle.preuni
						END)
             END * venDetalle.cantidad) - (CASE
                                               WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo <> 3 
                                               THEN venDetalle.Costo * -1
											   WHEN venEncabezado.codsii IN(60, 61) AND venEncabezado.motivo = 3 
											   THEN 0
                                               ELSE venDetalle.Costo
                                           END * venDetalle.cantidad)) AS MARGEN
     INTO #DETALLE
     FROM invArticulos
          INNER JOIN venDetalle
          INNER JOIN venEncabezado ON venDetalle.grudoc = venEncabezado.grudoc
                                      AND venDetalle.coddoc = venEncabezado.coddoc
                                      AND venDetalle.numinv = venEncabezado.numinv ON invArticulos.codbus = venDetalle.codbus
          LEFT OUTER JOIN venDocumentos ON venEncabezado.codsii = venDocumentos.codsii
                                           AND venEncabezado.coddoc = venDocumentos.coddoc
                                           AND venEncabezado.grudoc = venDocumentos.grudoc
          LEFT JOIN venVendedores ON venVendedores.codven = venEncabezado.codven
          LEFT OUTER JOIN cotReferencias ON venDetalle.numinv = cotreferencias.Num_ref
                                            AND venEncabezado.codsii = cotreferencias.Tip_ref
                                            AND vendetalle.codbus = cotreferencias.Cod_bus
                                            AND vendetalle.idlinearef = cotReferencias.idlinea
          LEFT OUTER JOIN cotNotaPedido ON cotReferencias.Num_NP = numdoc

     WHERE venEncabezado.grudoc = 10
           AND venEncabezado.fecdoc BETWEEN @fecini AND @fecfin
           AND (venEncabezado.codloc = @codloci
                OR @codloci = 0)
           AND (venEncabezado.codven BETWEEN @codveni AND @codvenf)
           AND venDetalle.codbus BETWEEN RTRIM(@codbusi) AND RTRIM(@codbusf)
           AND venDetalle.codfam BETWEEN RTRIM(@famini) AND RTRIM(@famfin)
           AND venDetalle.codsub BETWEEN RTRIM(@subini) AND RTRIM(@subfin)
           AND (venEncabezado.rutcte BETWEEN @ctaini AND @ctafin)
           AND (NOT venEncabezado.codsii IN(60, 61)
     OR venEncabezado.codsii IN(60, 61)
     AND venEncabezado.motivo NOT IN(2))
	 AND (cotNotaPedido.coddoc = 2 OR cotNotaPedido.coddoc IS NULL)

	 SELECT #DETALLE.*, 
            invFamilia.nomfam, 
            invSubFamilia.nomsub, 
      ISNULL(venVendedores.nomven, 'Sin vendedor') AS nomVenVale
     FROM invSubFamilia
          INNER JOIN #DETALLE ON invSubFamilia.codfam = #DETALLE.codfam
                                 AND invSubFamilia.codsub = #DETALLE.codsub
          INNER JOIN invFamilia ON invSubFamilia.codfam = invFamilia.codfam
     LEFT JOIN venVendedores ON venVendedores.codven = #DETALLE.codVenVale
	 GROUP BY #DETALLE.coddoc, #DETALLE.grudoc,#DETALLE.numinv,#DETALLE.fecdoc,#DETALLE.numlin,#DETALLE.codfam,#DETALLE.codsub,#DETALLE.codart,#DETALLE.codbus,#DETALLE.codbar,
			#DETALLE.nomart,#DETALLE.coduni,#DETALLE.cantidad,#DETALLE.salcan,#DETALLE.unialt,#DETALLE.canalt,#DETALLE.preuni,#DETALLE.preuniadi,#DETALLE.pretot,
			#DETALLE.pretotadi,#DETALLE.boddes,#DETALLE.codven,#DETALLE.nomven,#DETALLE.codVenVale,#DETALLE.glolin,#DETALLE.Costo,#DETALLE.fecent,#DETALLE.numlinorden,
			#DETALLE.estado,#DETALLE.codloc,#DETALLE.porcdescuento,#DETALLE.descuento,#DETALLE.porcadicional,#DETALLE.adicional,#DETALLE.codcen,#DETALLE.codana,#DETALLE.tip_impadi,
			#DETALLE.costoRef,#DETALLE.saldoGral,#DETALLE.stockGral,#DETALLE.preunibruto,#DETALLE.fechacosto,#DETALLE.np,#DETALLE.loging,#DETALLE.fecing,#DETALLE.logmod,
			#DETALLE.fecmod,#DETALLE.nomdoc,#DETALLE.alias_doc,#DETALLE.precioventa,#DETALLE.totalcosto,#DETALLE.MARGEN,invFamilia.nomfam,invSubFamilia.nomsub,venVendedores.nomven