Imports System.Data.SqlClient
Imports System.IO

Public Class Informes
    Private funcion As New funcion.Funcion
    Private funcionCadena As New funcion.Cadenas
    Private sistema As New funcion.Sistema
    Private ser As BD.ABD
    Private sqlc As SqlConnection
    Private sqlc1 As SqlConnection
    Private cmd As SqlCommand
    Private cmd1 As SqlCommand
    Private myTrans As SqlTransaction
    Private sql As String

    Private ds As DataSet
    Private dr, dr2 As SqlDataReader
    Private dr1 As SqlDataReader
    Private drDias As SqlDataReader
    Private da As SqlDataAdapter

    Private row As DataRow

    Private direccion As String

    Public empCodigo As Long
    Public empDescripcion As String

    Dim dar, dar2, dar3 As SqlDataReader
    Dim cnn As New SqlConnection
    Dim sentFuncion As New funcion.Cadenas
    Dim sentFuncion1 As New funcion.Funcion

    ''para imprimir codigo de barra
    Dim lcRet, lcStart, lcStop, lcCheck As Object
    Dim lnAsc, lnI, lnLong, lnCheckSum, aa As Object

    Public Sub New()
        ser = New BD.ABD
        cmd = New SqlCommand
        sqlc = New SqlConnection

        cmd1 = New SqlCommand
        sqlc1 = New SqlConnection

        ds = New DataSet("INFORME")

        Try
            direccion = sistema.AppPath(False)
            Dim temp As String = direccion.Substring(direccion.Length - 3, 3)

            If temp = "bin" Then
                direccion = direccion.Substring(0, direccion.Length - 4)
            End If

            direccion = direccion & "\" & "DsInforme.xsd"
        Finally

        End Try
    End Sub

    Public Function infSistemas() As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(NUMSISTEMAS)))+LTRIM(RTRIM(NUMSISTEMAS)) AS CODIGOORDEN, " & _
              " RTRIM(NUMSISTEMAS)  AS CODIGO, " & _
              " RTRIM(DESSISTEMAS) AS DESCRIPCION FROM SISTEMAS " & _
              " WHERE CODEMPRESA =  " & empCodigo & " " & _
              " ORDER BY  CODIGOORDEN "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infSucursal(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMERO," & _
        "RTRIM(S.NUMSUCURSAL) AS CODIGO, RTRIM(S.DESSUCURSAL) AS DESCRIPCION, " & _
        "RTRIM(S.TELEFONO) AS TELEFONO, RTRIM(S.DIRECCION) AS DIRECCION, " & _
        "ISNULL(S.CODZONA,0) AS CODZONA, " & _
        "ISNULL((RTRIM(Z.DESZONA)+' / '+RTRIM(P.DESPAIS)+' / '+RTRIM(D.DESDEPARTAMENTO)+' / '+RTRIM(C.DESCIUDAD)),' ') AS DESZONA, " & _
        "ISNULL(SP.NUMSUCURSAL, '') AS CODIGODEPENDE, ISNULL(SP.DESSUCURSAL, '') AS DESCRIPCIONDEPENDE " & _
        "FROM SUCURSAL S LEFT OUTER JOIN SUCURSAL SP ON SP.CODSUCURSALPERTENECE = S.CODSUCURSAL " & _
        "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
        "LEFT OUTER JOIN CIUDAD C ON Z.CODCIUDAD = C.CODCIUDAD " & _
        "LEFT OUTER JOIN DEPARTAMENTO D ON C.CODDEPARTAMENTO = D.CODDEPARTAMENTO " & _
        "LEFT OUTER JOIN PAIS P ON D.CODPAIS = P.CODPAIS " & _
        "WHERE S.CODEMPRESA = " & empCodigo & " AND  S.CODSUCURSALPERTENECE IS NULL " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO, CODIGODEPENDE"
        Else
            sql = sql + " CODIGO, CODIGODEPENDE"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("DIRECCION")
                row.Item("Campo4") = dr("TELEFONO")
                row.Item("Campo5") = dr("DESZONA")
                row.Item("Campo6") = dr("CODIGODEPENDE")
                row.Item("Campo7") = dr("DESCRIPCIONDEPENDE")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTablasActPorFecha(ByVal desdeUsuario As String, ByVal hastaUsuario As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT A.CODIGO AS NUMEROABM, E.NOMFANTASIA AS EMPRESA, A.TABLA AS ARCHIVO, " & _
        " A.NUMCODIGO AS CODIGO, A.DESCRIPCION AS DESCRIPCION, " & _
        " A.USUARIO, A.NIVEL, " & _
        " CASE " & _
        " WHEN A.INSERTAR = 1 THEN 'Registro creado' " & _
        " WHEN A.MODIFICAR = 1 THEN 'Registro modificado' " & _
        " WHEN A.ELIMINAR = 1 THEN 'Registro eliminado' " & _
        " END AS ABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 103) AS FECHAABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 108) AS HORAABM " & _
        " FROM AUDITORIATABLAS A INNER JOIN EMPRESA E ON A.EMPRESA = E.CODEMPRESA " & _
        " WHERE CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY A.FECHA, A.USUARIO, ARCHIVO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()


                row.Item("Numero1") = dr("NUMEROABM")
                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("USUARIO")
                row.Item("Campo4") = dr("NIVEL")
                row.Item("Campo5") = dr("FECHAABM")
                row.Item("Campo6") = dr("HORAABM")
                row.Item("Campo7") = dr("ARCHIVO")
                row.Item("Campo8") = dr("ABM")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeUsuario
            row.Item("Campo3") = hastaUsuario
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTablasActPorTabla(ByVal desdeUsuario As String, ByVal hastaUsuario As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT A.CODIGO AS NUMEROABM, E.NOMFANTASIA AS EMPRESA, A.TABLA AS ARCHIVO, " & _
        " A.NUMCODIGO AS CODIGO, A.DESCRIPCION AS DESCRIPCION, " & _
        " A.USUARIO, A.NIVEL, " & _
        " CASE " & _
        " WHEN A.INSERTAR = 1 THEN 'Registro creado' " & _
        " WHEN A.MODIFICAR = 1 THEN 'Registro modificado' " & _
        " WHEN A.ELIMINAR = 1 THEN 'Registro eliminado' " & _
        " END AS ABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 103) AS FECHAABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 108) AS HORAABM " & _
        " FROM AUDITORIATABLAS A INNER JOIN EMPRESA E ON A.EMPRESA = E.CODEMPRESA " & _
        " WHERE CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY ARCHIVO, A.FECHA, A.USUARIO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Numero1") = dr("NUMEROABM")
                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("USUARIO")
                row.Item("Campo4") = dr("NIVEL")
                row.Item("Campo5") = dr("FECHAABM")
                row.Item("Campo6") = dr("HORAABM")
                row.Item("Campo7") = dr("ARCHIVO")
                row.Item("Campo8") = dr("ABM")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeUsuario
            row.Item("Campo3") = hastaUsuario
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTablasActPorUsuario(ByVal desdeUsuario As String, ByVal hastaUsuario As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT A.CODIGO AS NUMEROABM, E.NOMFANTASIA AS EMPRESA, A.TABLA AS ARCHIVO, " & _
        " A.NUMCODIGO AS CODIGO, A.DESCRIPCION AS DESCRIPCION, " & _
        " A.USUARIO, A.NIVEL, " & _
        " CASE " & _
        " WHEN A.INSERTAR = 1 THEN 'Registro creado' " & _
        " WHEN A.MODIFICAR = 1 THEN 'Registro modificado' " & _
        " WHEN A.ELIMINAR = 1 THEN 'Registro eliminado' " & _
        " END AS ABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 103) AS FECHAABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 108) AS HORAABM " & _
        " FROM AUDITORIATABLAS A INNER JOIN EMPRESA E ON A.EMPRESA = E.CODEMPRESA " & _
        " WHERE CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY A.USUARIO, A.FECHA, ARCHIVO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Numero1") = dr("NUMEROABM")
                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("USUARIO")
                row.Item("Campo4") = dr("NIVEL")
                row.Item("Campo5") = dr("FECHAABM")
                row.Item("Campo6") = dr("HORAABM")
                row.Item("Campo7") = dr("ARCHIVO")
                row.Item("Campo8") = dr("ABM")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeUsuario
            row.Item("Campo3") = hastaUsuario
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infMovimientosActPorFecha(ByVal desdeUsuario As String, ByVal hastaUsuario As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT A.CODIGO AS NUMEROABM, E.NOMFANTASIA AS EMPRESA, A.MOVIMIENTO AS MOVIMIENTO, " & _
        " A.SUCURSAL AS SUCURSAL, A.COMPROBANTE AS COMPROBANTE,  A.IMPORTE, " & _
        " A.NUMERO AS NUMERO, A.MONEDA AS MONEDA, A.COTIZACION1, A.COTIZACION2, " & _
        " A.FECHAMOVIMIENTO, A.FECHAPROCESO,A.DETALLE AS LINEASDETALLE, " & _
        " A.USUARIO, A.NIVEL, " & _
        " CASE " & _
        " WHEN A.INSERTAR = 1 THEN 'Registro creado' " & _
        " WHEN A.MODIFICAR = 1 THEN 'Registro modificado' " & _
        " WHEN A.ELIMINAR = 1 THEN 'Registro eliminado' " & _
        " END AS ABM, " & _
        " CONVERT(DATETIME, A.FECHA) AS ORDENFECHA, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 103) AS FECHAABM, " & _
        " CONVERT(VARCHAR(10), A.FECHA, 108) AS HORAABM " & _
        " FROM AUDITORIAMOVIMIENTOS A INNER JOIN EMPRESA E ON A.EMPRESA = E.CODEMPRESA " & _
        " WHERE E.CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY ORDENFECHA, A.USUARIO, MOVIMIENTO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Numero1") = dr("NUMEROABM")
                row.Item("Campo1") = dr("SUCURSAL")
                row.Item("Campo2") = dr("COMPROBANTE")
                row.Item("Campo3") = dr("USUARIO")
                row.Item("Campo4") = dr("NIVEL")
                row.Item("Campo5") = dr("FECHAABM")
                row.Item("Campo6") = dr("HORAABM")
                row.Item("Campo7") = dr("MOVIMIENTO")
                row.Item("Campo8") = dr("ABM")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo10") = dr("FECHAMOVIMIENTO")
                row.Item("Campo11") = dr("FECHAPROCESO")
                row.Item("Campo12") = dr("LINEASDETALLE")
                row.Item("Campo13") = dr("NUMERO")
                row.Item("Campo14") = dr("IMPORTE")
                row.Item("Campo15") = dr("COTIZACION1")
                row.Item("Campo16") = dr("COTIZACION2")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeUsuario
            row.Item("Campo3") = hastaUsuario
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infMovimientosActPorMov(ByVal desdeUsuario As String, ByVal hastaUsuario As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT A.CODIGO AS NUMEROABM, E.NOMFANTASIA AS EMPRESA, A.MOVIMIENTO AS MOVIMIENTO, " & _
              " A.SUCURSAL AS SUCURSAL, A.COMPROBANTE AS COMPROBANTE,  A.IMPORTE, " & _
              " A.NUMERO AS NUMERO, A.MONEDA AS MONEDA, A.COTIZACION1, A.COTIZACION2, " & _
              " A.FECHAMOVIMIENTO, A.FECHAPROCESO,A.DETALLE AS LINEASDETALLE, " & _
              " A.USUARIO, A.NIVEL, " & _
              " CASE " & _
              " WHEN A.INSERTAR = 1 THEN 'Registro creado' " & _
              " WHEN A.MODIFICAR = 1 THEN 'Registro modificado' " & _
              " WHEN A.ELIMINAR = 1 THEN 'Registro eliminado' " & _
              " END AS ABM, " & _
              " CONVERT(DATETIME, A.FECHA) AS ORDENFECHA, " & _
              " CONVERT(VARCHAR(10), A.FECHA, 103) AS FECHAABM, " & _
              " CONVERT(VARCHAR(10), A.FECHA, 108) AS HORAABM " & _
              " FROM AUDITORIAMOVIMIENTOS A INNER JOIN EMPRESA E ON A.EMPRESA = E.CODEMPRESA " & _
              " WHERE E.CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
              " ORDER BY MOVIMIENTO, ORDENFECHA, A.USUARIO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Numero1") = dr("NUMEROABM")
                row.Item("Campo1") = dr("SUCURSAL")
                row.Item("Campo2") = dr("COMPROBANTE")
                row.Item("Campo3") = dr("USUARIO")
                row.Item("Campo4") = dr("NIVEL")
                row.Item("Campo5") = dr("FECHAABM")
                row.Item("Campo6") = dr("HORAABM")
                row.Item("Campo7") = dr("MOVIMIENTO")
                row.Item("Campo8") = dr("ABM")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo10") = dr("FECHAMOVIMIENTO")
                row.Item("Campo11") = dr("FECHAPROCESO")
                row.Item("Campo12") = dr("LINEASDETALLE")
                row.Item("Campo13") = dr("NUMERO")
                row.Item("Campo14") = dr("IMPORTE")
                row.Item("Campo15") = dr("COTIZACION1")
                row.Item("Campo16") = dr("COTIZACION2")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeUsuario
            row.Item("Campo3") = hastaUsuario
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infMovimientosActPorUsuario(ByVal desdeUsuario As String, ByVal hastaUsuario As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT A.CODIGO AS NUMEROABM, E.NOMFANTASIA AS EMPRESA, A.MOVIMIENTO AS MOVIMIENTO, " & _
              " A.SUCURSAL AS SUCURSAL, A.COMPROBANTE AS COMPROBANTE,  A.IMPORTE, " & _
              " A.NUMERO AS NUMERO, A.MONEDA AS MONEDA, A.COTIZACION1, A.COTIZACION2, " & _
              " A.FECHAMOVIMIENTO, A.FECHAPROCESO,A.DETALLE AS LINEASDETALLE, " & _
              " A.USUARIO, A.NIVEL, " & _
              " CASE " & _
              " WHEN A.INSERTAR = 1 THEN 'Registro creado' " & _
              " WHEN A.MODIFICAR = 1 THEN 'Registro modificado' " & _
              " WHEN A.ELIMINAR = 1 THEN 'Registro eliminado' " & _
              " END AS ABM, " & _
              " CONVERT(DATETIME, A.FECHA) AS ORDENFECHA, " & _
              " CONVERT(VARCHAR(10), A.FECHA, 103) AS FECHAABM, " & _
              " CONVERT(VARCHAR(10), A.FECHA, 108) AS HORAABM " & _
              " FROM AUDITORIAMOVIMIENTOS A INNER JOIN EMPRESA E ON A.EMPRESA = E.CODEMPRESA " & _
              " WHERE E.CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
              " ORDER BY  A.USUARIO, ORDENFECHA, MOVIMIENTO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Numero1") = dr("NUMEROABM")
                row.Item("Campo1") = dr("SUCURSAL")
                row.Item("Campo2") = dr("COMPROBANTE")
                row.Item("Campo3") = dr("USUARIO")
                row.Item("Campo4") = dr("NIVEL")
                row.Item("Campo5") = dr("FECHAABM")
                row.Item("Campo6") = dr("HORAABM")
                row.Item("Campo7") = dr("MOVIMIENTO")
                row.Item("Campo8") = dr("ABM")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo10") = dr("FECHAMOVIMIENTO")
                row.Item("Campo11") = dr("FECHAPROCESO")
                row.Item("Campo12") = dr("LINEASDETALLE")
                row.Item("Campo13") = dr("NUMERO")
                row.Item("Campo14") = dr("IMPORTE")
                row.Item("Campo15") = dr("COTIZACION1")
                row.Item("Campo16") = dr("COTIZACION2")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeUsuario
            row.Item("Campo3") = hastaUsuario
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoModulos(ByVal desdesistema As String, ByVal hastasistema As String, ByVal condiciones As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT M.CODMODULO, RTRIM(M.DESMODULO) AS DESMODULOS, " & _
              " REPLICATE('0',5-LEN(RTRIM(S.NUMSISTEMAS)))+LTRIM(RTRIM(S.NUMSISTEMAS)) AS CODIGOORDEN, " & _
              " RTRIM(S.NUMSISTEMAS)  AS CODSISTEMAS, " & _
              " RTRIM(S.DESSISTEMAS) AS DESSISTEMAS FROM MODULOS M, SISTEMAS S " & _
              " WHERE  S.CODSISTEMAS = M.CODSISTEMAS AND M.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
              " ORDER BY  CODIGOORDEN, M.CODMODULO "
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODSISTEMAS")
                row.Item("Campo2") = dr("DESSISTEMAS")
                row.Item("Campo3") = dr("DESMODULOS")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            row.Item("Campo2") = desdesistema
            row.Item("Campo3") = hastasistema

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoPermisos(ByVal desdesistema As String, ByVal hastasistema As String, _
    ByVal desdeUsuario As String, ByVal hastaUsuario As String, ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT MU.CODMODULO AS CODMODULO, " & _
              " REPLICATE('0',5-LEN(RTRIM(S.NUMSISTEMAS)))+LTRIM(RTRIM(S.NUMSISTEMAS)) AS CODIGOORDEN, " & _
              " CASE  WHEN  MU.[SELECT] = 0 THEN 'No' ELSE 'Si' END AS SELECTS, " & _
              " CASE WHEN MU.[INSERT] = 0 THEN 'No' ELSE 'Si'  END AS INSERTS, " & _
              " CASE WHEN  MU.[UPDATE] = 0 THEN 'No' ELSE 'Si' END AS UPDATES, " & _
              " CASE WHEN MU.[DELETE] = 0 THEN 'No' ELSE 'Si' END  AS DELETES, " & _
              " CASE WHEN MU.[PRINT] = 0 THEN 'No' ELSE 'Si'  END AS PRINTS, " & _
              " CASE WHEN MU.[LIMITECREDITO] = 0 THEN 'No' ELSE 'Si'END AS LIMITECREDITO, " & _
              " CASE WHEN MU.[DESC] = 0 THEN 'No'ELSE 'Si' END AS DESCUENTOS, " & _
              " CASE WHEN MU.VENCIDAS = 0 THEN 'No' ELSE 'Si' END AS VENCIDAS, " & _
              " CASE WHEN  MU.ANULAR = 0 THEN 'No' ELSE 'Si' END AS ANULAR, " & _
              " RTRIM(M.DESMODULO) AS DESMODULO, RTRIM(U.DESUSUARIO) AS DESUSUARIO, " & _
              " RTRIM(S.DESSISTEMAS) AS DESSISTEMA, RTRIM(S.NUMSISTEMAS) AS NUMSISTEMA " & _
              " FROM MODULOUSUARIO MU " & _
              " INNER JOIN USUARIO U ON MU.CODUSUARIO = U.CODUSUARIO " & _
              " INNER JOIN MODULOS M ON MU.CODMODULO = M.CODMODULO " & _
              " INNER JOIN SISTEMAS S ON M.CODSISTEMAS = S.CODSISTEMAS " & _
              " WHERE MU.CODEMPRESA  = " & empCodigo & "  " & condiciones & " " & _
              " ORDER BY DESSISTEMA, DESMODULO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSISTEMA")
                row.Item("Campo2") = dr("DESSISTEMA")
                row.Item("Campo3") = dr("DESMODULO")
                row.Item("Campo4") = dr("DESUSUARIO")
                row.Item("Campo5") = dr("INSERTS")
                row.Item("Campo6") = dr("UPDATES")
                row.Item("Campo7") = dr("DELETES")
                row.Item("Campo8") = dr("SELECTS")
                row.Item("Campo9") = dr("PRINTS")
                row.Item("Campo10") = dr("LIMITECREDITO")
                row.Item("Campo11") = dr("DESCUENTOS")
                row.Item("Campo12") = dr("VENCIDAS")
                row.Item("Campo13") = dr("ANULAR")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion

            row.Item("Campo2") = desdesistema
            row.Item("Campo3") = hastasistema
            row.Item("Campo4") = desdeUsuario
            row.Item("Campo5") = hastaUsuario

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpAjuste(ByVal codajuste As Long, _
    ByVal canDecimales As Integer) As DataSet
        Dim fecha As String
        Dim tipoajuste As String
        Dim numero As String
        Dim descomprobante As String
        Dim dessucursal As String
        Dim concepto As String
        Dim desconcepto As String

        ds.Clear()

        sql = ""
        sql = "SELECT A.CODAJUSTE  AS CODAJUSTE,CONVERT(VARCHAR(10),A.FECHAAJUSTE,103) AS FECHAAJUSTE, " & _
              "RTRIM(A.NUMAJUSTE) AS NUMAJUSTE, A.TIPOAJUSTE AS TIPOAJUSTE, " & _
              "RTRIM(C.NUMCONCEPTO) AS NUMCONCEPTO, RTRIM(C.DESCONCEPTO) AS DESCONCEPTO,  " & _
              "RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
              "RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
              "RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
              "AD.CANTIDADAJUSTE, AD.COSTOULTIMO, " & _
              "(AD.COSTOULTIMO * AD.CANTIDADAJUSTE) AS TOTALAJUSTE, " & _
              "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO " & _
              "FROM AJUSTE A INNER JOIN SUCURSAL S ON A.CODSUCURSAL = S.CODSUCURSAL " & _
              "INNER JOIN TIPOCOMPROBANTE TC ON A.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
              "INNER JOIN CONCEPTO C ON A.CODCONCEPTO = C.CODCONCEPTO " & _
              "INNER JOIN AJUSTEDETALLE AD ON A.CODAJUSTE = AD.CODAJUSTE " & _
              "INNER JOIN PRODUCTOS P ON AD.CODPRODUCTO = P.CODPRODUCTO " & _
              "WHERE A.CODAJUSTE = " & codajuste & " " & _
              "ORDER BY LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                fecha = dr("FECHAAJUSTE")
                numero = dr("NUMAJUSTE")
                descomprobante = dr("DESCOMPROBANTE")
                dessucursal = dr("DESSUCURSAL")
                desconcepto = dr("DESCONCEPTO")

                If dr("TIPOAJUSTE") = 1 Then
                    tipoajuste = "Ajuste en mas (+)"
                Else
                    tipoajuste = "Ajuste en menos (-)"
                End If

                row.Item("Campo1") = dr("CODIGOBARRA")
                row.Item("Campo2") = dr("DESPRODUCTO")

                row.Item("Numero1") = dr("CANTIDADAJUSTE")
                row.Item("Numero2") = dr("COSTOULTIMO")
                row.Item("Numero3") = Math.Round(dr("TOTALAJUSTE"), canDecimales)

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            dr.Close()

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = dessucursal
            row.Item("Campo3") = descomprobante
            row.Item("Campo4") = numero
            row.Item("Campo5") = fecha
            row.Item("Campo6") = desconcepto
            row.Item("Campo7") = tipoajuste

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpCompra(ByVal codcompra As Long, ByVal candecimalesimporte As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT C.CODCOMPRA AS CODCOMPRA, RTRIM(C.NUMCOMPRA) AS NUMCOMPRA, C.CODCOMPROBANTE AS CODCOMPROBANTE, RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        "RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, CONVERT(VARCHAR(10), C.FECHACOMPRA,103) AS FECHACOMPRA," & _
        "RTRIM(P.NUMPROVEEDOR) AS NUMPROVEEDOR, RTRIM(P.APELLIDO) + '' + RTRIM(P.NOMBRE) AS PROVEEDOR," & _
        "RTRIM(P.TELEFONO) AS TELEFONO, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL," & _
        "RTRIM(C.NUMRESPONSABLE) AS NUMRESPONSABLE, RTRIM(R.DESRESPONSABLE) AS DESRESPONSABLE," & _
        "RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTO," & _
        "CD.CANTIDADCOMPRA AS CANTIDADCOMPRA, CD.COSTOUNITARIO AS COSTOUNITARIO," & _
        "CD.COSTOBRUTO AS COSTOBRUTO, " & _
        "CD.CODPRODUCTO AS CODPRODUCTO, " & _
        "(ISNULL(C.TOTALEXENTA,0) + ISNULL(C.TOTALGRAVADA,0)) AS SUBTOTAL," & _
        "ISNULL(C.TOTALDESCUENTO,0) AS TOTALDESCUENTO," & _
        "ISNULL(C.TOTALIVA,0) AS TOTALIVA," & _
        "ISNULL(C.TOTALCOMPRA,0) AS TOTALCOMPRA " & _
        "FROM COMPRAS C INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        "INNER JOIN PROVEEDOR P ON C.CODPROVEEDOR = P.CODPROVEEDOR " & _
        "INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN RESPONSABLE R ON C.NUMRESPONSABLE = R.NUMRESPONSABLE AND C.RES_CODEMPRESA = R.CODEMPRESA " & _
        "INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        "INNER JOIN PRODUCTOS PR ON CD.CODPRODUCTO = PR.CODPRODUCTO " & _
        "WHERE C.CODCOMPRA = " & codcompra & " ORDER BY CD.LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Dim FECHACOMPRA As String
            Dim NUMCOMPRA As String
            Dim NUMPROVEEDOR As String
            Dim PROVEEDOR As String
            Dim DESCOMPROBANTE As String
            Dim TELEFONO As String
            Dim DESSUCURSAL As String
            Dim DESRESPONSABLE As String
            Dim TOTALIVA As Decimal
            Dim TOTALDESCUENTO As Decimal
            Dim SUBTOTAL As Decimal
            Dim TOTALCOMPRA As Decimal

            Do While dr.Read()

                row = ds.Tables("Detalle").NewRow()

                FECHACOMPRA = dr("FECHACOMPRA")
                NUMCOMPRA = dr("NUMCOMPRA")
                DESCOMPROBANTE = dr("DESCOMPROBANTE")
                DESSUCURSAL = dr("DESSUCURSAL")
                DESRESPONSABLE = dr("DESRESPONSABLE")
                NUMPROVEEDOR = dr("NUMPROVEEDOR")
                PROVEEDOR = dr("PROVEEDOR")
                SUBTOTAL = dr("SUBTOTAL")
                TOTALIVA = dr("TOTALIVA")
                TOTALDESCUENTO = dr("TOTALDESCUENTO")
                TOTALCOMPRA = dr("TOTALCOMPRA")

                row.Item("Campo8") = dr("CODIGOBARRA")
                row.Item("Campo9") = dr("DESPRODUCTO")
                row.Item("Numero2") = dr("CANTIDADCOMPRA")
                row.Item("Numero3") = dr("COSTOBRUTO")
                row.Item("Numero5") = Math.Round(dr("CANTIDADCOMPRA") * dr("COSTOBRUTO"), candecimalesimporte)

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo4") = DESSUCURSAL
            row.Item("Campo5") = DESRESPONSABLE
            row.Item("Campo2") = NUMCOMPRA
            row.Item("Campo3") = FECHACOMPRA
            row.Item("Campo6") = DESCOMPROBANTE
            row.Item("Campo7") = PROVEEDOR
            row.Item("Campo8") = TELEFONO
            row.Item("Numero6") = TOTALCOMPRA
            row.Item("Numero1") = SUBTOTAL
            row.Item("Numero2") = TOTALDESCUENTO
            row.Item("Numero3") = TOTALIVA

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpDevolucion(ByVal coddevolucion As Long, _
 ByVal candecimales As Integer) As DataSet
        ds.Clear()

        ds.ReadXml(direccion)

        Dim desmoneda As String
        Dim fechadevolucion As String
        Dim numdevolucion As String
        Dim numclientes As String
        Dim nummoneda As String
        Dim clientes As String
        Dim descomprobante As String
        Dim telefono As String
        Dim dessucursal As String
        Dim ruc As String
        Dim totaliva As Decimal
        Dim totaldescuento As Decimal
        Dim subtotal As Decimal
        Dim totaldevolucion As Decimal
        Dim numventa As String
        Dim numvendedor As String

        Dim imptotal As Decimal
        Dim saldocobro As Decimal
        Dim impletras As String

        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
        Dim sumaIva5, sumaIva10 As Decimal
        Dim tipoventa As Long
        Dim grav5, grav10 As Decimal
        Dim descuentolinea As Decimal
        Dim descuentoexenta, descuento5, descuento10 As Decimal
        Dim moneda As String
        Dim direccionCliente As String
        Dim exen As Decimal

        descuentoexenta = 0
        descuento5 = 0
        descuento10 = 0
        imptotal = 0
        sumaIva5 = 0
        sumaIva10 = 0
        totalDescuentoExenta = 0
        totalDescuentoGravada5 = 0
        totalDescuentoGravada10 = 0
        totalDescuento = 0
        descuentolinea = 0
        Dim fecha As DateTime

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(D.NUMDEVOLUCION) AS NUMDEVOLUCION, ISNULL(RTRIM(V.NUMVENTA),'') AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10), D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " RTRIM(C.NUMCLIENTE) AS NUMCLIENTE, RTRIM(C.APELLIDO) + ' ' + RTRIM(C.NOMBRE) AS CLIENTES, " & _
        " RTRIM(C.TELEFONO) AS TELEFONO, RTRIM(C.RUC) AS RUC, RTRIM(C.DIRECCION) AS DIRECCION, " & _
        " RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTO, " & _
        " DD.CANTIDADDEVUELTA AS CANTIDADDEVUELTA, " & _
        " DD.PRECIONETO AS PRECIONETO, DD.PRECIOBRUTO AS PRECIOVENTABRUTO, " & _
        " DD.CANTIDADDEVUELTA * DD.PRECIOBRUTO AS TOTALDEVOLUCION, DD.IVA, DD.[DESC], " & _
        " D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO AS SUBTOTAL, " & _
        " D.TOTALDESCUENTO AS TOTALDESCUENTO, ISNULL(RTRIM(M.SIMBOLO),'') AS MONEDA, " & _
        " D.TOTALIVA AS TOTALIVA, " & _
        " D.TOTALDEVOLUCION AS TOTALGENERAL, ISNULL(VE.NUMVENDEDOR,'') AS NUMVENDEDOR " & _
        " FROM DEVOLUCION D INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON D.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN CLIENTES C ON D.CODCLIENTE = C.CODCLIENTE " & _
        " INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = PR.CODPRODUCTO " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = D.CODVENDEDOR " & _
        " LEFT OUTER JOIN VENTAS V ON D.CODVENTA = V.CODVENTA " & _
        " WHERE D.CODDEVOLUCION = " & coddevolucion & " " & _
        " and D.ESTADO = 0 " & _
        " ORDER BY DD.LINEANUMERO"
        'se agrego la condicion ESTADO = 0 para que no  imprima las devoluciones anuladas solo aquellos que no fueron anuladas ** 17/11/2011 **
        Try
            ser.Abrir(sqlc)

            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader


            Do While dr.Read()

                row = ds.Tables("Detalle").NewRow()

                fechadevolucion = dr("FECHADEVOLUCION")
                numdevolucion = dr("NUMDEVOLUCION")
                descomprobante = dr("DESCOMPROBANTE")
                dessucursal = dr("DESSUCURSAL")
                numclientes = dr("NUMCLIENTE")
                clientes = dr("CLIENTES")
                subtotal = dr("SUBTOTAL")
                totaliva = dr("TOTALIVA")
                totaldescuento = dr("TOTALDESCUENTO")
                totaldevolucion = dr("TOTALGENERAL")
                moneda = dr("MONEDA")
                direccionCliente = dr("direccion")
                numvendedor = dr("numvendedor")

                telefono = dr("TELEFONO")
                ruc = dr("RUC")
                numventa = dr("NUMVENTA")

                row.Item("Campo8") = dr("CODIGOBARRA")
                row.Item("Campo9") = dr("DESPRODUCTO")
                row.Item("Numero2") = dr("CANTIDADDEVUELTA")
                row.Item("Numero3") = dr("PRECIONETO")
                row.Item("Numero5") = dr("PRECIOVENTABRUTO")

                If dr("IVA") = 0 Then
                    'Productos Exentos
                    'descuentoexenta = descuentoexenta + Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100) * dr("CANTIDADDEVUELTA"), candecimales)
                    descuentoexenta = descuentoexenta + Math.Round(Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100), candecimales) * dr("CANTIDADDEVUELTA"), candecimales)
                    'descuentolinea = Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100) * dr("CANTIDADDEVUELTA"), candecimales)
                    descuentolinea = Math.Round(Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100), candecimales) * dr("CANTIDADDEVUELTA"), candecimales)
                    row.Item("Numero3") = dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA")   '''' AGREGADO
                    row.Item("Numero4") = 0
                    row.Item("Numero6") = 0
                    exen = exen + (dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA"))
                Else
                    'Productos Gravados
                    Select Case dr("IVA")
                        Case 5
                            descuento5 = descuento5 + Math.Round(Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100), candecimales) * dr("CANTIDADDEVUELTA"), candecimales)
                            descuentolinea = Math.Round(Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100), candecimales) * dr("CANTIDADDEVUELTA"), candecimales)
                            sumaIva5 = sumaIva5 + (dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA")) - descuentolinea
                            row.Item("Numero4") = dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA")
                            grav5 = grav5 + (dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA"))
                            descuentolinea = 0
                            row.Item("Numero3") = 0
                            row.Item("Numero6") = 0

                        Case 10
                            descuento10 = descuento10 + Math.Round(Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100), candecimales) * dr("CANTIDADDEVUELTA"), candecimales)
                            descuentolinea = Math.Round(Math.Round((dr("PRECIOVENTABRUTO") * dr("DESC") / 100), candecimales) * dr("CANTIDADDEVUELTA"), candecimales)
                            sumaIva10 = sumaIva10 + (dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA")) - descuentolinea
                            row.Item("Numero3") = 0
                            row.Item("Numero4") = 0
                            row.Item("Numero6") = (dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA"))
                            grav10 = grav10 + (dr("PRECIOVENTABRUTO") * dr("CANTIDADDEVUELTA"))
                            descuentolinea = 0
                    End Select

                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            totaldescuento = descuento10 + descuento5 + descuentoexenta

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo4") = dessucursal
            row.Item("Campo2") = numdevolucion

            fecha = CDate(fechadevolucion)


            row.Item("Campo3") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
            row.Item("Campo6") = descomprobante
            row.Item("Campo7") = clientes
            row.Item("Campo8") = telefono
            row.Item("Campo9") = ruc
            row.Item("Campo10") = numventa
            row.Item("Campo12") = direccionCliente
            row.Item("Campo13") = numvendedor

            row.Item("Numero6") = totaldevolucion
            row.Item("Numero1") = subtotal
            row.Item("Numero2") = totaldescuento
            row.Item("Numero3") = totaliva
            row.Item("Numero5") = candecimales

            ''''''''''''''''''''''''''''''''''''''''''''''''''''
            ''''''''''''''''''''''''''''''''''''''''''''''''''''
            row.Item("Numero8") = exen
            row.Item("Numero7") = grav5
            row.Item("Numero1") = grav10
            row.Item("Numero11") = descuentoexenta
            row.Item("Numero12") = descuento5
            row.Item("Numero13") = descuento10
            row.Item("Numero10") = totaldescuento

            If totaldescuento > 0 Then
                row.Item("Campo14") = "Total Descuento:"
            End If

            row.Item("Numero14") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
            row.Item("Numero15") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

            ''''''''''''''''''''''''''''''''''''''''''''''''''''
            ''''''''''''''''''''''''''''''''''''''''''''''''''''

            row.Item("Campo11") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(totaldevolucion, candecimales)).Trim + " #-"

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpBoletaVenta(ByVal codventa As Long, ByVal candecimales As Integer, _
    ByVal presupuestos As String, _
    ByVal detalle As Boolean) As DataSet
        Dim i As Integer
        Dim ii As Integer
        Dim dtVenta As DataTable

        Dim fecha As Date
        Dim descuentoexenta As Decimal
        Dim descuento5
        Dim descuento10 As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10 As Decimal
        Dim totalDescuentoGravada5 As Decimal
        Dim imptotal As Decimal
        Dim sumaIva5 As Decimal
        Dim sumaIva10 As Decimal
        Dim precioBruto As Decimal
        Dim cantidad As Decimal
        Dim PorcentajeDescuento As Decimal
        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalIva As Decimal
        Dim totalDescuento As Decimal
        Dim tipoventa As Long
        Dim moneda As String
        Dim espacio As Integer

        ds.Clear()

        sql = ""
        sql = "/*CABECERA*/ " & _
        "SELECT V.NUMVENTA AS NUMERO, V.NUMVENTATIMBRADO AS NUMVENTATIMBRADO, " & _
        "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, " & _
        "V.CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION, V.TIPOVENTA, " & _
        "V.PORCENTAJEDESCUENTO, V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
        "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION, " & _
        "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, " & _
        "RTRIM(US.DESUSUARIO) AS USUARIO, " & _
        "/*DETALLE*/ " & _
        "VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, VD.COSTOULTIMO, " & _
        "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.IVA, " & _
        "VD.[DESC], VD.PORCENCOMI, " & _
        "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO " & _
        "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
        "INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        "INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        "INNER JOIN USUARIO US ON V.CODUSUARIO = US.CODUSUARIO " & _
        "AND US.CODEMPRESA = V.CODEMPRESA " & _
        "WHERE V.CODVENTA = " & codventa & " " & _
        "ORDER BY VD.LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtVenta = New DataTable("VENTA")

            da = New SqlDataAdapter(cmd)
            da.Fill(dtVenta)

            'Este ciclo se hace por que debe imprimir la factura dos veces
            'El segundo ciclo es por cada detalle de venta
            For i = 1 To 1
                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0

                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0

                If i = 1 Then
                    row = ds.Tables("Cabecera").NewRow()

                    row.Item("Numero1") = candecimales

                    ds.Tables("Cabecera").Rows.Add(row)
                End If

                For ii = 0 To dtVenta.Rows.Count - 1
                    'Si la venta incluye presupuesto
                    'imprimir un solo detalle
                    If detalle = True Then
                        row = ds.Tables("Detalle").NewRow()

                        'Numero de Factura
                        row.Item("Campo1") = i
                        row.Item("Campo2") = "( " & dtVenta.Rows(ii)("NUMVENTATIMBRADO") & " )"

                        'Usuario que hizo la factura y hora de Venta
                        row.Item("Campo10") = "( OPERADOR :" & dtVenta.Rows(ii)("USUARIO") & " )"

                        'Modalidad de Pago
                        If dtVenta.Rows(ii)("MODALIDADPAGO") = "0" Then
                            row.Item("Campo3") = "XXX"
                            row.Item("Campo4") = ""
                        Else
                            row.Item("Campo3") = ""
                            row.Item("Campo4") = "XXX"
                        End If

                        'Fecha de Factura
                        fecha = CDate(dtVenta.Rows(ii)("FECHAVENTA"))

                        'Datos del Cliente
                        row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                        row.Item("Campo6") = dtVenta.Rows(ii)("CLIENTE") & " ( " & dtVenta.Rows(ii)("NUMCLIENTE") & " )"
                        If dtVenta.Rows(ii)("RUC") = "" Then
                            row.Item("Campo7") = dtVenta.Rows(ii)("NUMCEDULA")
                        Else
                            row.Item("Campo7") = dtVenta.Rows(ii)("RUC")
                        End If

                        'Datos del Producto
                        row.Item("Numero1") = dtVenta.Rows(ii)("CANTIDADVENTA")
                        row.Item("Campo3") = dtVenta.Rows(ii)("CODIGOBARRA")
                        row.Item("Campo8") = dtVenta.Rows(ii)("DESPRODUCTO")
                        row.Item("Numero2") = dtVenta.Rows(ii)("PRECIOVENTABRUTO")


                        precioBruto = CDec(dtVenta.Rows(ii)("PRECIOVENTABRUTO"))
                        cantidad = CDec(dtVenta.Rows(ii)("CANTIDADVENTA"))
                        imptotal = imptotal + (precioBruto * cantidad)
                        PorcentajeDescuento = CDec(dtVenta.Rows(ii)("DESC"))

                        If CDec(dtVenta.Rows(ii)("IVA")) = 0 Then
                            'Producto Exento
                            row.Item("Numero3") = Math.Round(precioBruto * cantidad, candecimales)
                            row.Item("Numero4") = 0
                            row.Item("Numero5") = 0

                            descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        Else
                            'Producto Gravado
                            row.Item("Numero3") = 0

                            Select Case dtVenta.Rows(ii)("IVA")
                                Case 5
                                    row.Item("Numero4") = Math.Round(precioBruto * cantidad, candecimales)
                                    row.Item("Numero5") = 0

                                    sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                    descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                                Case 10
                                    row.Item("Numero4") = 0
                                    row.Item("Numero5") = Math.Round(precioBruto * cantidad, candecimales)

                                    sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                    descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            End Select
                        End If

                        row.Item("Numero10") = dtVenta.Rows(ii)("IVA")

                        ds.Tables("Detalle").Rows.Add(row)
                    Else
                        precioBruto = CDec(dtVenta.Rows(ii)("PRECIOVENTABRUTO"))
                        cantidad = CDec(dtVenta.Rows(ii)("CANTIDADVENTA"))
                        imptotal = imptotal + (precioBruto * cantidad)
                        PorcentajeDescuento = CDec(dtVenta.Rows(ii)("DESC"))

                        If CDec(dtVenta.Rows(ii)("IVA")) = 0 Then
                            descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        Else
                            Select Case dtVenta.Rows(ii)("IVA")
                                Case 5
                                    sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                    descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                                Case 10
                                    sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                    descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            End Select
                        End If
                    End If

                    PorcentajeDescuento = CDec(dtVenta.Rows(ii)("PORCENTAJEDESCUENTO"))
                    totalExenta = CDec(dtVenta.Rows(ii)("TOTALEXENTA"))
                    totalGravada = CDec(dtVenta.Rows(ii)("TOTALGRAVADA"))
                    totalIva = CDec(dtVenta.Rows(ii)("TOTALIVA"))
                    totalDescuento = CDec(dtVenta.Rows(ii)("TOTALDESCUENTO"))
                    tipoventa = Val(dtVenta.Rows(ii)("TIPOVENTA"))
                Next

                'Para imprimir los datos de la factura 
                'sin el detalle cuando se incluye presupuesto
                If detalle = False Then
                    row = ds.Tables("Detalle").NewRow()

                    'Numero de Factura
                    row.Item("Campo1") = i
                    row.Item("Campo2") = dtVenta.Rows(0)("NUMERO")

                    'Modalidad de Pago
                    If dtVenta.Rows(0)("MODALIDADPAGO") = "0" Then
                        row.Item("Campo3") = "XXX"
                        row.Item("Campo4") = ""
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo4") = "XXX"
                    End If

                    'Fecha de Factura
                    fecha = CDate(dtVenta.Rows(0)("FECHAVENTA"))

                    'Datos del Cliente

                    row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                    row.Item("Campo6") = dtVenta.Rows(ii)("CLIENTE") & " ( " & dtVenta.Rows(ii)("NUMCLIENTE") & " )"
                    If dtVenta.Rows(0)("RUC") = "" Then
                        row.Item("Campo7") = dtVenta.Rows(0)("NUMCEDULA")
                    Else
                        row.Item("Campo7") = dtVenta.Rows(0)("RUC")
                    End If

                    'Datos del Producto
                    row.Item("Numero1") = 1
                    row.Item("Campo8") = "CONSUMISIÓN DE ALIMENTOS"
                    'row.Item("Numero2") = 0

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los sub totales sin descuento
                If Not totalDescuento = 0 Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = "SUB TOTALES SIN DESCUENTO"
                    row.Item("Numero3") = totalExenta
                    row.Item("Numero4") = Math.Round(sumaIva5, candecimales)
                    row.Item("Numero5") = Math.Round(sumaIva10, candecimales)
                    row.Item("Numero10") = dtVenta.Rows(ii)("IVA")

                    ds.Tables("Detalle").Rows.Add(row)

                    'Para imprimir los descuentos
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    If PorcentajeDescuento > 0 Then
                        row.Item("Campo8") = "DESCUENTO " & _
                        Math.Round(PorcentajeDescuento, candecimales).ToString & " %"

                        totalDescuentoExenta = Math.Round((totalExenta * PorcentajeDescuento / 100), candecimales)

                        If sumaIva5 > 0 Then
                            totalDescuentoGravada5 = Math.Round((sumaIva5 * PorcentajeDescuento / 100), candecimales)
                        End If

                        If sumaIva10 > 0 Then
                            totalDescuentoGravada10 = Math.Round((sumaIva10 * PorcentajeDescuento / 100), candecimales)
                        End If
                    Else
                        row.Item("Campo8") = "DESCUENTO "

                        totalDescuentoExenta = Math.Round(descuentoexenta, candecimales)
                        totalDescuentoGravada5 = Math.Round(descuento5, candecimales)
                        totalDescuentoGravada10 = Math.Round(descuento10, candecimales)
                    End If

                    row.Item("Numero3") = totalDescuentoExenta
                    row.Item("Numero4") = totalDescuentoGravada5
                    row.Item("Numero5") = totalDescuentoGravada10
                    row.Item("Numero10") = dtVenta.Rows(ii)("IVA")

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                If detalle = True Then
                    If totalDescuento = 0 Then
                        espacio = 5 - dtVenta.Rows.Count
                    Else
                        espacio = 2 - dtVenta.Rows.Count
                    End If
                Else
                    If totalDescuento = 0 Then
                        espacio = 5
                    Else
                        espacio = 2
                    End If
                End If

                For ii = 1 To espacio
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = ""

                    ds.Tables("Detalle").Rows.Add(row)
                Next

                'Para imprimir los totales
                row = ds.Tables("Detalle").NewRow()

                'Si existe diferencia entre la cabecera y el detalle
                ''''''''''''''''''''''''''''''''''''''''''''''''''''
                Dim diferencia As Decimal

                Select Case (totalExenta + totalGravada + totalIva - totalDescuento)
                    Case Is > imptotal
                        diferencia = (totalExenta + totalGravada + totalIva - totalDescuento) - imptotal

                        If sumaIva5 > 0 Then
                            sumaIva5 = sumaIva5 + diferencia
                        ElseIf sumaIva10 > 0 Then
                            sumaIva10 = sumaIva10 + diferencia
                        End If
                    Case Is < imptotal
                        diferencia = imptotal - (totalExenta + totalGravada + totalIva - totalDescuento)

                        If sumaIva5 > 0 Then
                            sumaIva5 = sumaIva5 - diferencia
                        ElseIf sumaIva10 > 0 Then
                            sumaIva10 = sumaIva10 - diferencia
                        End If
                End Select

                imptotal = (totalExenta + totalGravada + totalIva - totalDescuento)
                ''''''''''''''''''''''''''''''''''''''''''''''''''''

                row.Item("Campo1") = i
                row.Item("Campo8") = "PIE"
                row.Item("Numero6") = Math.Round(totalExenta - totalDescuentoExenta, candecimales)
                row.Item("Numero7") = Math.Round(sumaIva5 - totalDescuentoGravada5, candecimales)
                row.Item("Numero8") = Math.Round(sumaIva10 - totalDescuentoGravada10, candecimales)

                'Total de la factura
                row.Item("Numero9") = Math.Round(imptotal, candecimales)

                'Para el IVA
                Dim IVAcinco As Decimal
                Dim IVAdiez As Decimal
                Dim IVAdiferencia As Decimal

                IVAcinco = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                IVAdiez = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                If (IVAcinco > 0) And (IVAdiez > 0) Then
                    Select Case (IVAcinco + IVAdiez)
                        Case Is > totalIva
                            IVAdiferencia = (IVAcinco + IVAdiez) - totalIva
                            IVAcinco = IVAcinco - IVAdiferencia
                        Case Is < totalIva
                            IVAdiferencia = totalIva - (IVAcinco + IVAdiez)
                            IVAcinco = IVAcinco + IVAdiferencia
                    End Select
                ElseIf (IVAcinco > 0) And (IVAdiez = 0) Then
                    IVAcinco = totalIva
                ElseIf (IVAcinco = 0) And (IVAdiez > 0) Then
                    IVAdiez = totalIva
                End If

                row.Item("Numero10") = IVAcinco
                row.Item("Numero11") = IVAdiez

                row.Item("Numero12") = totalIva

                'Para imprimir la moneda de la Venta
                moneda = dtVenta.Rows(0)("DESMONEDA")

                row.Item("Campo9") = funcion.NumeroaLetras(Math.Round(imptotal, candecimales)) & "----------"
                row.Item("Campo10") = presupuestos

                ds.Tables("Detalle").Rows.Add(row)
            Next
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function ImpFacturaVenta(ByVal codventa As Long, ByVal candecimales As Integer, _
    ByVal presupuestos As String, _
    ByVal detalle As Boolean) As DataSet
        Dim i As Integer
        Dim ii As Integer
        Dim dtVenta As DataTable

        Dim fecha As Date
        Dim descuentoexenta As Decimal
        Dim descuento5
        Dim descuento10 As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10 As Decimal
        Dim totalDescuentoGravada5 As Decimal
        Dim imptotal As Decimal
        Dim sumaIva5 As Decimal
        Dim sumaIva10 As Decimal
        Dim precioBruto As Decimal
        Dim cantidad As Decimal
        Dim PorcentajeDescuento As Decimal
        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalIva As Decimal
        Dim totalDescuento As Decimal
        Dim tipoventa As Long
        Dim moneda As String
        Dim espacio As Integer

        ds.Clear()

        sql = ""
        sql = "/*CABECERA*/ " & _
        "SELECT V.NUMVENTA AS NUMERO, V.NUMVENTATIMBRADO AS NUMVENTATIMBRADO, " & _
        "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, " & _
        "V.CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION, V.TIPOVENTA, " & _
        "V.PORCENTAJEDESCUENTO, V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
        "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION, " & _
        "RTRIM(CL.TELEFONO) AS TELEFONO, RTRIM(CL.CELULAR) AS CELULAR, " & _
        "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, " & _
        "RTRIM(US.DESUSUARIO) AS USUARIO, " & _
        "/*DETALLE*/ " & _
        "VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, VD.COSTOULTIMO, " & _
        "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.IVA, " & _
        "VD.[DESC], VD.PORCENCOMI, " & _
        "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO " & _
        "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
        "INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        "INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        "INNER JOIN USUARIO US ON V.CODUSUARIO = US.CODUSUARIO " & _
        "AND V.CODEMPRESA = US.CODEMPRESA " & _
        "WHERE V.CODVENTA = " & codventa & " " & _
        "ORDER BY VD.LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtVenta = New DataTable("VENTA")

            da = New SqlDataAdapter(cmd)
            da.Fill(dtVenta)

            'Este ciclo se hace por que debe imprimir la factura dos veces
            'El segundo ciclo es por cada detalle de venta
            For i = 1 To 1
                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0

                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0

                If i = 1 Then
                    row = ds.Tables("Cabecera").NewRow()

                    row.Item("Numero1") = candecimales

                    ds.Tables("Cabecera").Rows.Add(row)
                End If

                For ii = 0 To dtVenta.Rows.Count - 1
                    'Si la venta incluye presupuesto
                    'imprimir un solo detalle
                    If detalle = True Then
                        row = ds.Tables("Detalle").NewRow()

                        'Numero de Factura
                        row.Item("Campo1") = i
                        row.Item("Campo2") = "( " & dtVenta.Rows(ii)("NUMVENTATIMBRADO") & " )"

                        'Usuario que hizo la factura y hora de Venta
                        row.Item("Campo10") = "( OPERADOR :" & dtVenta.Rows(ii)("USUARIO") & " )"

                        'Direccion y telefono
                        If dtVenta.Rows(ii)("TELEFONO") <> "" Then
                            row.Item("Campo19") = dtVenta.Rows(ii)("TELEFONO")
                        Else
                            row.Item("Campo19") = dtVenta.Rows(ii)("CELULAR")
                        End If

                        row.Item("Campo20") = dtVenta.Rows(ii)("DIRECCION")

                        'Nota de Remisión
                        row.Item("Campo18") = "0"

                        'Modalidad de Pago
                        If dtVenta.Rows(ii)("MODALIDADPAGO") = "0" Then
                            row.Item("Campo3") = "X"
                            row.Item("Campo4") = ""
                        Else
                            row.Item("Campo3") = ""
                            row.Item("Campo4") = "X"
                        End If

                        'Fecha de Factura
                        fecha = CDate(dtVenta.Rows(ii)("FECHAVENTA"))

                        'Datos del Cliente
                        row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                        row.Item("Campo6") = dtVenta.Rows(ii)("CLIENTE") & " ( " & dtVenta.Rows(ii)("NUMCLIENTE") & " )"
                        If dtVenta.Rows(ii)("RUC") = "" Then
                            row.Item("Campo7") = dtVenta.Rows(ii)("NUMCEDULA")
                        Else
                            row.Item("Campo7") = dtVenta.Rows(ii)("RUC")
                        End If

                        'Datos del Producto
                        row.Item("Numero1") = dtVenta.Rows(ii)("CANTIDADVENTA")
                        row.Item("Campo17") = dtVenta.Rows(ii)("CODIGOBARRA")
                        row.Item("Campo8") = dtVenta.Rows(ii)("DESPRODUCTO")
                        row.Item("Numero2") = dtVenta.Rows(ii)("PRECIOVENTABRUTO")

                        precioBruto = CDec(dtVenta.Rows(ii)("PRECIOVENTABRUTO"))
                        cantidad = CDec(dtVenta.Rows(ii)("CANTIDADVENTA"))
                        imptotal = imptotal + (precioBruto * cantidad)
                        PorcentajeDescuento = CDec(dtVenta.Rows(ii)("DESC"))

                        If CDec(dtVenta.Rows(ii)("IVA")) = 0 Then
                            'Producto Exento
                            row.Item("Numero3") = Math.Round(precioBruto * cantidad, candecimales)
                            row.Item("Numero4") = 0
                            row.Item("Numero5") = 0

                            descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        Else
                            'Producto Gravado
                            row.Item("Numero3") = 0

                            Select Case dtVenta.Rows(ii)("IVA")
                                Case 5
                                    row.Item("Numero4") = Math.Round(precioBruto * cantidad, candecimales)
                                    row.Item("Numero5") = 0

                                    sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                    descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                                Case 10
                                    row.Item("Numero4") = 0
                                    row.Item("Numero5") = Math.Round(precioBruto * cantidad, candecimales)

                                    sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                    descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            End Select
                        End If

                        ds.Tables("Detalle").Rows.Add(row)
                    Else
                        precioBruto = CDec(dtVenta.Rows(ii)("PRECIOVENTABRUTO"))
                        cantidad = CDec(dtVenta.Rows(ii)("CANTIDADVENTA"))
                        imptotal = imptotal + (precioBruto * cantidad)
                        PorcentajeDescuento = CDec(dtVenta.Rows(ii)("DESC"))

                        If CDec(dtVenta.Rows(ii)("IVA")) = 0 Then
                            descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        Else
                            Select Case dtVenta.Rows(ii)("IVA")
                                Case 5
                                    sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                    descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                                Case 10
                                    sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                    descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            End Select
                        End If
                    End If

                    PorcentajeDescuento = CDec(dtVenta.Rows(ii)("PORCENTAJEDESCUENTO"))
                    totalExenta = CDec(dtVenta.Rows(ii)("TOTALEXENTA"))
                    totalGravada = CDec(dtVenta.Rows(ii)("TOTALGRAVADA"))
                    totalIva = CDec(dtVenta.Rows(ii)("TOTALIVA"))
                    totalDescuento = CDec(dtVenta.Rows(ii)("TOTALDESCUENTO"))
                    tipoventa = Val(dtVenta.Rows(ii)("TIPOVENTA"))
                Next

                'Para imprimir los datos de la factura 
                'sin el detalle cuando se incluye presupuesto
                If detalle = False Then
                    row = ds.Tables("Detalle").NewRow()

                    'Numero de Factura
                    row.Item("Campo1") = i
                    row.Item("Campo2") = dtVenta.Rows(0)("NUMERO")

                    'Modalidad de Pago
                    If dtVenta.Rows(0)("MODALIDADPAGO") = "0" Then
                        row.Item("Campo3") = "XXX"
                        row.Item("Campo4") = ""
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo4") = "XXX"
                    End If

                    'Fecha de Factura
                    fecha = CDate(dtVenta.Rows(0)("FECHAVENTA"))

                    'Datos del Cliente
                    row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                    row.Item("Campo6") = dtVenta.Rows(ii)("CLIENTE") & " ( " & dtVenta.Rows(ii)("NUMCLIENTE") & " )"
                    If dtVenta.Rows(0)("RUC") = "" Then
                        row.Item("Campo7") = dtVenta.Rows(0)("NUMCEDULA")
                    Else
                        row.Item("Campo7") = dtVenta.Rows(0)("RUC")
                    End If

                    'Datos del Producto
                    row.Item("Numero1") = 1
                    row.Item("Campo8") = "CONSUMISIÓN DE ALIMENTOS"
                    'row.Item("Numero2") = 0

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los sub totales sin descuento
                If Not totalDescuento = 0 Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = "SUB TOTALES SIN DESCUENTO"
                    row.Item("Numero3") = totalExenta
                    row.Item("Numero4") = Math.Round(sumaIva5, candecimales)
                    row.Item("Numero5") = Math.Round(sumaIva10, candecimales)

                    ds.Tables("Detalle").Rows.Add(row)

                    'Para imprimir los descuentos
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    If PorcentajeDescuento > 0 Then
                        row.Item("Campo8") = "DESCUENTO " & _
                        Math.Round(PorcentajeDescuento, candecimales).ToString & " %"

                        totalDescuentoExenta = Math.Round((totalExenta * PorcentajeDescuento / 100), candecimales)

                        If sumaIva5 > 0 Then
                            totalDescuentoGravada5 = Math.Round((sumaIva5 * PorcentajeDescuento / 100), candecimales)
                        End If

                        If sumaIva10 > 0 Then
                            totalDescuentoGravada10 = Math.Round((sumaIva10 * PorcentajeDescuento / 100), candecimales)
                        End If
                    Else
                        row.Item("Campo8") = "DESCUENTO "

                        totalDescuentoExenta = Math.Round(descuentoexenta, candecimales)
                        totalDescuentoGravada5 = Math.Round(descuento5, candecimales)
                        totalDescuentoGravada10 = Math.Round(descuento10, candecimales)
                    End If

                    row.Item("Numero3") = totalDescuentoExenta
                    row.Item("Numero4") = totalDescuentoGravada5
                    row.Item("Numero5") = totalDescuentoGravada10

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                If detalle = True Then
                    If totalDescuento = 0 Then
                        espacio = 10 - dtVenta.Rows.Count
                    Else
                        espacio = 7 - dtVenta.Rows.Count
                    End If
                Else
                    If totalDescuento = 0 Then
                        espacio = 10
                    Else
                        espacio = 7
                    End If
                End If

                For ii = 1 To espacio
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = ""

                    ds.Tables("Detalle").Rows.Add(row)
                Next

                'Para imprimir los totales
                row = ds.Tables("Detalle").NewRow()

                'Si existe diferencia entre la cabecera y el detalle
                ''''''''''''''''''''''''''''''''''''''''''''''''''''
                Dim diferencia As Decimal

                Select Case (totalExenta + totalGravada + totalIva - totalDescuento)
                    Case Is > imptotal
                        diferencia = (totalExenta + totalGravada + totalIva - totalDescuento) - imptotal

                        If sumaIva5 > 0 Then
                            sumaIva5 = sumaIva5 + diferencia
                        ElseIf sumaIva10 > 0 Then
                            sumaIva10 = sumaIva10 + diferencia
                        End If
                    Case Is < imptotal
                        diferencia = imptotal - (totalExenta + totalGravada + totalIva - totalDescuento)

                        If sumaIva5 > 0 Then
                            sumaIva5 = sumaIva5 - diferencia
                        ElseIf sumaIva10 > 0 Then
                            sumaIva10 = sumaIva10 - diferencia
                        End If
                End Select

                imptotal = (totalExenta + totalGravada + totalIva - totalDescuento)
                ''''''''''''''''''''''''''''''''''''''''''''''''''''

                row.Item("Campo1") = i
                row.Item("Campo8") = "PIE"
                row.Item("Numero6") = Math.Round(totalExenta - totalDescuentoExenta, candecimales)
                row.Item("Numero7") = Math.Round(sumaIva5 - totalDescuentoGravada5, candecimales)
                row.Item("Numero8") = Math.Round(sumaIva10 - totalDescuentoGravada10, candecimales)

                'Total de la factura
                row.Item("Numero9") = Math.Round(imptotal, candecimales)

                'Para el IVA
                Dim IVAcinco As Decimal
                Dim IVAdiez As Decimal
                Dim IVAdiferencia As Decimal

                IVAcinco = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                IVAdiez = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                If (IVAcinco > 0) And (IVAdiez > 0) Then
                    Select Case (IVAcinco + IVAdiez)
                        Case Is > totalIva
                            IVAdiferencia = (IVAcinco + IVAdiez) - totalIva
                            IVAcinco = IVAcinco - IVAdiferencia
                        Case Is < totalIva
                            IVAdiferencia = totalIva - (IVAcinco + IVAdiez)
                            IVAcinco = IVAcinco + IVAdiferencia
                    End Select
                ElseIf (IVAcinco > 0) And (IVAdiez = 0) Then
                    IVAcinco = totalIva
                ElseIf (IVAcinco = 0) And (IVAdiez > 0) Then
                    IVAdiez = totalIva
                End If

                row.Item("Numero10") = IVAcinco
                row.Item("Numero11") = IVAdiez

                row.Item("Numero12") = totalIva

                'Para imprimir la moneda de la Venta
                moneda = dtVenta.Rows(0)("DESMONEDA")

                row.Item("Campo9") = funcion.NumeroaLetras(Math.Round(imptotal, candecimales)) & "----------"
                row.Item("Campo10") = presupuestos

                ds.Tables("Detalle").Rows.Add(row)
            Next
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function ImpFacturaVentaMayorista(ByVal codventa As Long, ByVal candecimales As Integer, _
    ByVal presupuestos As String, _
    ByVal detalle As Boolean, ByVal totalBruto As Decimal) As DataSet
        Dim i As Integer
        Dim ii As Integer
        Dim dtVenta As DataTable

        Dim fecha As Date
        Dim descuentoexenta As Decimal
        Dim descuento5
        Dim descuento10 As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10 As Decimal
        Dim totalDescuentoGravada5 As Decimal
        Dim imptotal As Decimal
        Dim sumaIva5 As Decimal
        Dim sumaIva10 As Decimal
        Dim precioBruto As Decimal
        Dim cantidad As Decimal
        Dim PorcentajeDescuento As Decimal
        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalIva As Decimal
        Dim totalDescuento As Decimal
        Dim tipoventa As Long
        Dim moneda As String
        Dim espacio As Integer

        ds.Clear()

        sql = ""
        sql = "/*CABECERA*/ " & _
        "SELECT V.CODVENTA, V.NUMVENTA AS NUMERO, V.NUMVENTATIMBRADO AS NUMVENTATIMBRADO, " & _
        "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, " & _
        "V.CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION, V.TIPOVENTA, " & _
        "V.PORCENTAJEDESCUENTO, V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
        "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION, " & _
        "RTRIM(CL.TELEFONO) AS TELEFONO, RTRIM(CL.CELULAR) AS CELULAR, " & _
        "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, " & _
        "RTRIM(US.DESUSUARIO) AS USUARIO, " & _
        "/*DETALLE*/ " & _
        "VD.LINEANUMERO, VD.CANTIDADBRUTA, VD.CANTIDADMINIMA, VD.CANTIDADENVASE, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, VD.COSTOULTIMO, " & _
        "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.IVA, " & _
        "VD.[DESC], VD.PORCENCOMI, " & _
        "VD.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO " & _
        "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
        "INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        "INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        "INNER JOIN USUARIO US ON V.CODUSUARIO = US.CODUSUARIO " & _
        "AND V.CODEMPRESA = US.CODEMPRESA " & _
        "WHERE V.CODVENTA = " & codventa & " " & _
        "ORDER BY VD.LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtVenta = New DataTable("VENTA")

            da = New SqlDataAdapter(cmd)
            da.Fill(dtVenta)

            'Este ciclo se hace por que debe imprimir la factura dos veces
            'El segundo ciclo es por cada detalle de venta
            For i = 1 To 1
                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0

                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0

                If i = 1 Then
                    row = ds.Tables("Cabecera").NewRow()

                    row.Item("Numero1") = candecimales

                    ds.Tables("Cabecera").Rows.Add(row)
                End If

                For ii = 0 To dtVenta.Rows.Count - 1
                    'Si la venta incluye presupuesto
                    'imprimir un solo detalle
                    If detalle = True Then
                        row = ds.Tables("Detalle").NewRow()

                        'Numero de Factura
                        row.Item("Campo1") = i
                        row.Item("Campo2") = "( " & dtVenta.Rows(ii)("NUMVENTATIMBRADO") & " )"

                        'Usuario que hizo la factura y hora de Venta
                        row.Item("Campo10") = "( OPERADOR :" & dtVenta.Rows(ii)("USUARIO") & " )"

                        'Direccion y telefono
                        If dtVenta.Rows(ii)("TELEFONO") <> "" Then
                            row.Item("Campo19") = dtVenta.Rows(ii)("TELEFONO")
                        Else
                            row.Item("Campo19") = dtVenta.Rows(ii)("CELULAR")
                        End If

                        row.Item("Campo20") = dtVenta.Rows(ii)("DIRECCION")

                        'Nota de Remisión
                        row.Item("Campo18") = "0"

                        'Modalidad de Pago
                        If dtVenta.Rows(ii)("MODALIDADPAGO") = "0" Then
                            row.Item("Campo3") = "CONTADO"
                            row.Item("Campo4") = ""
                        Else
                            row.Item("Campo3") = ""
                            row.Item("Campo4") = "CREDITO"
                        End If

                        'Fecha de Factura
                        fecha = CDate(dtVenta.Rows(ii)("FECHAVENTA"))

                        'Datos del Cliente
                        row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                        row.Item("Campo6") = dtVenta.Rows(ii)("CLIENTE") & " ( " & dtVenta.Rows(ii)("NUMCLIENTE") & " )"
                        If dtVenta.Rows(ii)("RUC") = "" Then
                            row.Item("Campo7") = dtVenta.Rows(ii)("NUMCEDULA")
                        Else
                            row.Item("Campo7") = dtVenta.Rows(ii)("RUC")
                        End If

                        'Datos del Producto
                        '''''''''''''''''''
                        If CDec(dtVenta.Rows(ii)("CANTIDADMINIMA")) > 0 Then
                            row.Item("Numero1") = dtVenta.Rows(ii)("CANTIDADENVASE")
                        Else
                            row.Item("Numero1") = dtVenta.Rows(ii)("CANTIDADVENTA")
                        End If

                        row.Item("Campo17") = dtVenta.Rows(ii)("CODIGOBARRA")
                        row.Item("Campo8") = dtVenta.Rows(ii)("DESPRODUCTO")
                        row.Item("Numero2") = dtVenta.Rows(ii)("PRECIOVENTABRUTO")
                        row.Item("Numero13") = dtVenta.Rows(ii)("CANTIDADBRUTA")
                        '''''''''''''''''''

                        precioBruto = CDec(dtVenta.Rows(ii)("PRECIOVENTABRUTO"))

                        If CDec(dtVenta.Rows(ii)("CANTIDADMINIMA")) > 0 Then
                            cantidad = CDec(dtVenta.Rows(ii)("CANTIDADMINIMA")) * CDec(dtVenta.Rows(ii)("CANTIDADENVASE"))
                        Else
                            cantidad = CDec(dtVenta.Rows(ii)("CANTIDADVENTA"))
                        End If

                        imptotal = imptotal + (precioBruto * cantidad)
                        PorcentajeDescuento = CDec(dtVenta.Rows(ii)("DESC"))

                        If CDec(dtVenta.Rows(ii)("IVA")) = 0 Then
                            'Producto Exento
                            row.Item("Numero3") = Math.Round(precioBruto * cantidad, candecimales)
                            row.Item("Numero4") = 0
                            row.Item("Numero5") = 0

                            descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        Else
                            'Producto Gravado
                            row.Item("Numero3") = 0

                            Select Case dtVenta.Rows(ii)("IVA")
                                Case 5
                                    row.Item("Numero4") = Math.Round(precioBruto * cantidad, candecimales)
                                    row.Item("Numero5") = 0

                                    sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                    descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                                Case 10
                                    row.Item("Numero4") = 0
                                    row.Item("Numero5") = Math.Round(precioBruto * cantidad, candecimales)

                                    sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                    descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            End Select
                        End If

                        '''''''''''''''''
                        'Para mostrar el resumen de envases por linea de producto
                        Dim strEnvase As String
                        Dim cantidadEnvase As Integer
                        Dim pesoPromedio As Decimal

                        strEnvase = ""
                        cantidadEnvase = 0
                        pesoPromedio = 0

                        sql = " SELECT RTRIM(E.NUMENVASE) AS NUMENVASE, RTRIM(E.DESENVASE) AS DESENVASE, " & _
                        " VE.CANTIDAD, VE.PESO, " & _
                        " VE.CONTROLARPESO, VE.CONTROLARSTOCK " & _
                        " FROM VENTASENVASE VE INNER JOIN ENVASE E ON E.CODENVASE = VE.CODENVASE " & _
                        " WHERE VE.CODVENTA = " & codventa & " " & _
                        " AND VE.CODPRODUCTO = " & dtVenta.Rows(ii)("CODPRODUCTO") & " " & _
                        " AND VE.LINEANUMERO = " & dtVenta.Rows(ii)("LINEANUMERO")

                        cmd.CommandText = sql
                        dr = cmd.ExecuteReader

                        If dr.HasRows = False Then
                            row.Item("Campo11") = ""
                        Else
                            Do While dr.Read
                                If dr("CONTROLARPESO") = 1 Then
                                    cantidadEnvase = cantidadEnvase + CDec(dr("CANTIDAD"))
                                End If

                                If strEnvase.Equals("") = False Then
                                    strEnvase = strEnvase & " - "
                                End If

                                strEnvase = strEnvase & dr("NUMENVASE") & _
                                " = " & Math.Round(dr("CANTIDAD"), 0) & " x " & _
                                Math.Round(dr("PESO"), 2)
                            Loop

                            row.Item("Campo11") = strEnvase

                            'Obtener el peso promedio
                            If cantidadEnvase > 0 Then
                                pesoPromedio = CDec(dtVenta.Rows(ii)("CANTIDADVENTA")) / cantidadEnvase
                            Else
                                pesoPromedio = 0
                            End If

                            If pesoPromedio > 0 Then
                                row.Item("Numero14") = Math.Round(pesoPromedio, 2)
                            Else
                                row.Item("Numero14") = 0
                            End If
                        End If

                        dr.Close()
                        '''''''''''''''''

                        row.Item("Campo12") = ""

                        ds.Tables("Detalle").Rows.Add(row)
                    Else
                        precioBruto = CDec(dtVenta.Rows(ii)("PRECIOVENTABRUTO"))

                        If CDec(dtVenta.Rows(ii)("CANTIDADMINIMA")) > 0 Then
                            cantidad = CDec(dtVenta.Rows(ii)("CANTIDADMINIMA")) * CDec(dtVenta.Rows(ii)("CANTIDADENVASE"))
                        Else
                            cantidad = CDec(dtVenta.Rows(ii)("CANTIDADVENTA"))
                        End If

                        imptotal = imptotal + (precioBruto * cantidad)
                        PorcentajeDescuento = CDec(dtVenta.Rows(ii)("DESC"))

                        If CDec(dtVenta.Rows(ii)("IVA")) = 0 Then
                            descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        Else
                            Select Case dtVenta.Rows(ii)("IVA")
                                Case 5
                                    sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                    descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                                Case 10
                                    sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                    descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            End Select
                        End If
                    End If

                    PorcentajeDescuento = CDec(dtVenta.Rows(ii)("PORCENTAJEDESCUENTO"))
                    totalExenta = CDec(dtVenta.Rows(ii)("TOTALEXENTA"))
                    totalGravada = CDec(dtVenta.Rows(ii)("TOTALGRAVADA"))
                    totalIva = CDec(dtVenta.Rows(ii)("TOTALIVA"))
                    totalDescuento = CDec(dtVenta.Rows(ii)("TOTALDESCUENTO"))
                    tipoventa = Val(dtVenta.Rows(ii)("TIPOVENTA"))
                Next

                'Para imprimir los datos de la factura 
                'sin el detalle cuando se incluye presupuesto
                If detalle = False Then
                    row = ds.Tables("Detalle").NewRow()

                    'Numero de Factura
                    row.Item("Campo1") = i
                    row.Item("Campo2") = dtVenta.Rows(0)("NUMERO")

                    'Modalidad de Pago
                    If dtVenta.Rows(0)("MODALIDADPAGO") = "0" Then
                        row.Item("Campo3") = "XXX"
                        row.Item("Campo4") = ""
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo4") = "XXX"
                    End If

                    'Fecha de Factura
                    fecha = CDate(dtVenta.Rows(0)("FECHAVENTA"))

                    'Datos del Cliente
                    row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                    row.Item("Campo6") = dtVenta.Rows(ii)("CLIENTE") & " ( " & dtVenta.Rows(ii)("NUMCLIENTE") & " )"
                    If dtVenta.Rows(0)("RUC") = "" Then
                        row.Item("Campo7") = dtVenta.Rows(0)("NUMCEDULA")
                    Else
                        row.Item("Campo7") = dtVenta.Rows(0)("RUC")
                    End If

                    'Datos del Producto
                    row.Item("Numero1") = 1
                    row.Item("Campo8") = "CONSUMISIÓN DE ALIMENTOS"
                    'row.Item("Numero2") = 0

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los sub totales sin descuento
                If Not totalDescuento = 0 Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = "SUB TOTALES SIN DESCUENTO"
                    row.Item("Numero3") = totalExenta
                    row.Item("Numero4") = Math.Round(sumaIva5, candecimales)
                    row.Item("Numero5") = Math.Round(sumaIva10, candecimales)

                    ds.Tables("Detalle").Rows.Add(row)

                    'Para imprimir los descuentos
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    If PorcentajeDescuento > 0 Then
                        row.Item("Campo8") = "DESCUENTO " & _
                        Math.Round(PorcentajeDescuento, candecimales).ToString & " %"

                        totalDescuentoExenta = Math.Round((totalExenta * PorcentajeDescuento / 100), candecimales)

                        If sumaIva5 > 0 Then
                            totalDescuentoGravada5 = Math.Round((sumaIva5 * PorcentajeDescuento / 100), candecimales)
                        End If

                        If sumaIva10 > 0 Then
                            totalDescuentoGravada10 = Math.Round((sumaIva10 * PorcentajeDescuento / 100), candecimales)
                        End If
                    Else
                        row.Item("Campo8") = "DESCUENTO "

                        totalDescuentoExenta = Math.Round(descuentoexenta, candecimales)
                        totalDescuentoGravada5 = Math.Round(descuento5, candecimales)
                        totalDescuentoGravada10 = Math.Round(descuento10, candecimales)
                    End If

                    row.Item("Numero3") = totalDescuentoExenta
                    row.Item("Numero4") = totalDescuentoGravada5
                    row.Item("Numero5") = totalDescuentoGravada10

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                '''''''''''''''''
                'Para mostrar el resumen de envases 
                Dim total As Integer
                Dim envase As String

                envase = ""
                total = 0

                sql = " SELECT MAX(RTRIM(E.NUMENVASE)) AS NUMENVASE, MAX(RTRIM(E.DESENVASE)) AS DESENVASE, " & _
                " SUM(VE.CANTIDAD) AS CANTIDAD " & _
                " FROM VENTASENVASE VE INNER JOIN ENVASE E ON E.CODENVASE = VE.CODENVASE " & _
                " WHERE VE.CODVENTA = " & codventa & " " & _
                " AND VE.CONTROLARPESO = 1 " & _
                " GROUP BY VE.CODENVASE " & _
                " ORDER BY NUMENVASE "

                cmd.CommandText = sql
                dr = cmd.ExecuteReader

                If dr.HasRows = True Then
                    Do While dr.Read
                        If envase.Equals("") = False Then
                            envase = envase & " - "
                        Else
                            envase = "TOTAL CAJAS: "
                        End If

                        envase = envase & dr("NUMENVASE") & _
                        " = " & Math.Round(dr("CANTIDAD"), 0)
                    Loop

                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = 1
                    row.Item("Campo8") = ""
                    row.Item("Campo11") = ""
                    row.Item("Campo12") = envase
                    row.Item("Numero15") = totalBruto

                    ds.Tables("Detalle").Rows.Add(row)
                Else
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = 1
                    row.Item("Campo8") = ""
                    row.Item("Campo11") = ""
                    row.Item("Campo12") = "-"
                    row.Item("Numero15") = totalBruto

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                dr.Close()
                '''''''''''''''''

                If detalle = True Then
                    If totalDescuento = 0 Then
                        espacio = 11 - dtVenta.Rows.Count
                    Else
                        espacio = 8 - dtVenta.Rows.Count
                    End If
                Else
                    If totalDescuento = 0 Then
                        espacio = 11
                    Else
                        espacio = 8
                    End If
                End If

                If envase <> "" Then
                    espacio = espacio - 1
                End If

                For ii = 1 To espacio
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = ""
                    row.Item("Campo11") = ""
                    row.Item("Campo12") = ""

                    ds.Tables("Detalle").Rows.Add(row)
                Next

                'Para imprimir los totales
                row = ds.Tables("Detalle").NewRow()

                'Si existe diferencia entre la cabecera y el detalle
                ''''''''''''''''''''''''''''''''''''''''''''''''''''
                Dim diferencia As Decimal

                Select Case (totalExenta + totalGravada + totalIva - totalDescuento)
                    Case Is > imptotal
                        diferencia = (totalExenta + totalGravada + totalIva - totalDescuento) - imptotal

                        If sumaIva5 > 0 Then
                            sumaIva5 = sumaIva5 + diferencia
                        ElseIf sumaIva10 > 0 Then
                            sumaIva10 = sumaIva10 + diferencia
                        End If
                    Case Is < imptotal
                        diferencia = imptotal - (totalExenta + totalGravada + totalIva - totalDescuento)

                        If sumaIva5 > 0 Then
                            sumaIva5 = sumaIva5 - diferencia
                        ElseIf sumaIva10 > 0 Then
                            sumaIva10 = sumaIva10 - diferencia
                        End If
                End Select

                imptotal = (totalExenta + totalGravada + totalIva - totalDescuento)
                ''''''''''''''''''''''''''''''''''''''''''''''''''''

                row.Item("Campo1") = i
                row.Item("Campo8") = "PIE"
                row.Item("Numero6") = Math.Round(totalExenta - totalDescuentoExenta, candecimales)
                row.Item("Numero7") = Math.Round(sumaIva5 - totalDescuentoGravada5, candecimales)
                row.Item("Numero8") = Math.Round(sumaIva10 - totalDescuentoGravada10, candecimales)

                'Total de la factura
                row.Item("Numero9") = Math.Round(imptotal, candecimales)

                'Para el IVA
                Dim IVAcinco As Decimal
                Dim IVAdiez As Decimal
                Dim IVAdiferencia As Decimal

                IVAcinco = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                IVAdiez = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                If (IVAcinco > 0) And (IVAdiez > 0) Then
                    Select Case (IVAcinco + IVAdiez)
                        Case Is > totalIva
                            IVAdiferencia = (IVAcinco + IVAdiez) - totalIva
                            IVAcinco = IVAcinco - IVAdiferencia
                        Case Is < totalIva
                            IVAdiferencia = totalIva - (IVAcinco + IVAdiez)
                            IVAcinco = IVAcinco + IVAdiferencia
                    End Select
                ElseIf (IVAcinco > 0) And (IVAdiez = 0) Then
                    IVAcinco = totalIva
                ElseIf (IVAcinco = 0) And (IVAdiez > 0) Then
                    IVAdiez = totalIva
                End If

                row.Item("Numero10") = IVAcinco
                row.Item("Numero11") = IVAdiez

                row.Item("Numero12") = totalIva

                'Para imprimir la moneda de la Venta
                moneda = dtVenta.Rows(0)("DESMONEDA")

                row.Item("Campo9") = funcion.NumeroaLetras(Math.Round(imptotal, candecimales)) & "----------"
                row.Item("Campo10") = presupuestos
                row.Item("Campo11") = ""
                row.Item("Campo12") = ""

                ds.Tables("Detalle").Rows.Add(row)
            Next
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function ImpPresupuesto(ByVal codPresupuesto As Long, ByVal candecimales As Integer) As DataSet
        Dim i As Integer
        Dim ii As Integer
        Dim dtPresupuesto As DataTable

        Dim fecha As Date
        Dim descuentoexenta As Decimal
        Dim descuento5
        Dim descuento10 As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10 As Decimal
        Dim totalDescuentoGravada5 As Decimal
        Dim imptotal As Decimal
        Dim sumaIva5 As Decimal
        Dim sumaIva10 As Decimal
        Dim precioBruto As Decimal
        Dim cantidad As Decimal
        Dim PorcentajeDescuento As Decimal
        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalIva As Decimal
        Dim totalDescuento As Decimal
        Dim tipoventa As Long
        Dim moneda As String
        Dim espacio As Integer

        ds.Clear()

        sql = ""
        sql = "/*CABECERA*/ " & _
        "SELECT RTRIM(TC.DESCOMPROBANTE) AS COMPROBANTE, PR.NUMPRESUPUESTO AS NUMERO, " & _
        "CONVERT(VARCHAR(10), PR.FECHAPRESUPUESTO, 103) AS FECHAPRESUPUESTO, PR.MODALIDADPAGO AS MODALIDADPAGO, " & _
        "PR.CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, PR.COTIZACION1 AS COTIZACION, PR.TIPOVENTA, " & _
        "PR.PORCENTAJEDESCUENTO, PR.TOTALEXENTA, PR.TOTALGRAVADA, PR.TOTALDESCUENTO, PR.TOTALIVA, I.COHEFICIENTE, " & _
        "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION, RTRIM(PR.DIRENVIO) AS DIRENVIO, " & _
        "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, " & _
        "/*DETALLE*/ " & _
        "PRD.CANTIDAD, 0 AS COSTOPROMEDIO, PRD.COSTOULTIMO, " & _
        "PRD.PRECIOVENTABRUTO, PRD.PRECIOVENTANETO, PRD.PRECIOVENTALISTA, PRD.IVA, " & _
        "PRD.DESCUENTO, PRD.PORCENCOMI, " & _
        "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO " & _
        "FROM PRESUPUESTOVENTAS PR INNER JOIN TIPOCOMPROBANTE TC ON PR.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        "INNER JOIN CLIENTES CL ON PR.CODCLIENTE = CL.CODCLIENTE " & _
        "INNER JOIN MONEDA M ON PR.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN SUCURSAL S ON PR.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN VENDEDOR VEN ON PR.CODVENDEDOR = VEN.CODVENDEDOR " & _
        "INNER JOIN PRESUPUESTOVENTASDETALLE PRD ON PR.CODPRESUPUESTO = PRD.CODPRESUPUESTO " & _
        "INNER JOIN PRODUCTOS P ON PRD.CODPRODUCTO = P.CODPRODUCTO " & _
        "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        "INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        "WHERE PR.CODPRESUPUESTO = " & codPresupuesto & " " & _
        "ORDER BY PRD.LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtPresupuesto = New DataTable("PRESUPUESTO")

            da = New SqlDataAdapter(cmd)
            da.Fill(dtPresupuesto)

            'Este ciclo se hace por que debe imprimir el presupuesto dos veces
            'El segundo ciclo es por cada detalle de venta
            For i = 1 To 1
                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0

                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0

                If i = 1 Then
                    row = ds.Tables("Cabecera").NewRow()

                    row.Item("Numero1") = candecimales

                    ds.Tables("Cabecera").Rows.Add(row)
                End If

                For ii = 0 To dtPresupuesto.Rows.Count - 1
                    row = ds.Tables("Detalle").NewRow()

                    'Numero de Factura
                    row.Item("Campo1") = i
                    row.Item("Campo2") = dtPresupuesto.Rows(ii)("COMPROBANTE") & " Nş " & dtPresupuesto.Rows(ii)("NUMERO")

                    'Modalidad de Pago
                    If dtPresupuesto.Rows(ii)("MODALIDADPAGO") = "0" Then
                        row.Item("Campo3") = "XXX"
                        row.Item("Campo4") = ""
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo4") = "XXX"
                    End If

                    'Fecha de Factura
                    fecha = CDate(dtPresupuesto.Rows(ii)("FECHAPRESUPUESTO"))

                    'Datos del Cliente
                    row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                    row.Item("Campo6") = dtPresupuesto.Rows(ii)("CLIENTE")
                    If dtPresupuesto.Rows(ii)("RUC") = "" Then
                        row.Item("Campo7") = dtPresupuesto.Rows(ii)("NUMCEDULA")
                    Else
                        row.Item("Campo7") = dtPresupuesto.Rows(ii)("RUC")
                    End If

                    If dtPresupuesto.Rows(ii)("DIRENVIO") = "" Then
                        row.Item("Campo10") = dtPresupuesto.Rows(ii)("DIRECCION")
                    Else
                        row.Item("Campo10") = dtPresupuesto.Rows(ii)("DIRENVIO")
                    End If

                    'Datos del Producto
                    row.Item("Numero1") = dtPresupuesto.Rows(ii)("CANTIDAD")
                    row.Item("Campo8") = dtPresupuesto.Rows(ii)("DESPRODUCTO")
                    row.Item("campo11") = dtPresupuesto.Rows(ii)("CODIGOBARRA")
                    row.Item("Numero2") = dtPresupuesto.Rows(ii)("PRECIOVENTABRUTO")

                    precioBruto = CDec(dtPresupuesto.Rows(ii)("PRECIOVENTABRUTO"))
                    cantidad = CDec(dtPresupuesto.Rows(ii)("CANTIDAD"))
                    imptotal = imptotal + (precioBruto * cantidad)
                    PorcentajeDescuento = CDec(dtPresupuesto.Rows(ii)("DESCUENTO"))

                    If CDec(dtPresupuesto.Rows(ii)("IVA")) = 0 Then
                        'Producto Exento
                        row.Item("Numero3") = Math.Round(precioBruto * cantidad, candecimales)
                        row.Item("Numero4") = 0
                        row.Item("Numero5") = 0

                        descuentoexenta = descuentoexenta + (precioBruto * PorcentajeDescuento * cantidad / 100)
                    Else
                        'Producto Gravado
                        row.Item("Numero3") = 0

                        Select Case dtPresupuesto.Rows(ii)("IVA")
                            Case 5
                                row.Item("Numero4") = Math.Round(precioBruto * cantidad, candecimales)
                                row.Item("Numero5") = 0

                                sumaIva5 = sumaIva5 + (precioBruto * cantidad)
                                descuento5 = descuento5 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                            Case 10
                                row.Item("Numero4") = 0
                                row.Item("Numero5") = Math.Round(precioBruto * cantidad, candecimales)

                                sumaIva10 = sumaIva10 + Math.Round(precioBruto * cantidad, candecimales)
                                descuento10 = descuento10 + (precioBruto * PorcentajeDescuento * cantidad / 100)
                        End Select
                    End If

                    ds.Tables("Detalle").Rows.Add(row)

                    PorcentajeDescuento = CDec(dtPresupuesto.Rows(ii)("PORCENTAJEDESCUENTO"))
                    totalExenta = CDec(dtPresupuesto.Rows(ii)("TOTALEXENTA"))
                    totalGravada = CDec(dtPresupuesto.Rows(ii)("TOTALGRAVADA"))
                    totalIva = CDec(dtPresupuesto.Rows(ii)("TOTALIVA"))
                    totalDescuento = CDec(dtPresupuesto.Rows(ii)("TOTALDESCUENTO"))
                    tipoventa = Val(dtPresupuesto.Rows(ii)("TIPOVENTA"))
                Next

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los sub totales sin descuento
                If Not totalDescuento = 0 Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = "SUB TOTALES SIN DESCUENTO"
                    row.Item("Numero3") = totalExenta
                    row.Item("Numero4") = Math.Round(sumaIva5, candecimales)
                    row.Item("Numero5") = Math.Round(sumaIva10, candecimales)

                    ds.Tables("Detalle").Rows.Add(row)

                    'Para imprimir los descuentos
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    If PorcentajeDescuento > 0 Then
                        row.Item("Campo8") = "DESCUENTO " & _
                        Math.Round(PorcentajeDescuento, candecimales).ToString & " %"

                        totalDescuentoExenta = Math.Round((totalExenta * PorcentajeDescuento / 100), candecimales)

                        If sumaIva5 > 0 Then
                            totalDescuentoGravada5 = Math.Round((sumaIva5 * PorcentajeDescuento / 100), candecimales)
                        End If

                        If sumaIva10 > 0 Then
                            totalDescuentoGravada10 = Math.Round((sumaIva10 * PorcentajeDescuento / 100), candecimales)
                        End If
                    Else
                        row.Item("Campo8") = "DESCUENTO "

                        totalDescuentoExenta = Math.Round(descuentoexenta, candecimales)
                        totalDescuentoGravada5 = Math.Round(descuento5, candecimales)
                        totalDescuentoGravada10 = Math.Round(descuento10, candecimales)
                    End If

                    row.Item("Numero3") = totalDescuentoExenta
                    row.Item("Numero4") = totalDescuentoGravada5
                    row.Item("Numero5") = totalDescuentoGravada10

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                If totalDescuento = 0 Then
                    espacio = 15 - dtPresupuesto.Rows.Count
                Else
                    espacio = 13 - dtPresupuesto.Rows.Count
                End If

                For ii = 1 To espacio
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = i
                    row.Item("Campo8") = ""

                    ds.Tables("Detalle").Rows.Add(row)
                Next

                'Para imprimir los totales
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = i
                row.Item("Campo8") = "PIE"
                row.Item("Numero6") = Math.Round(totalExenta - totalDescuentoExenta, candecimales)
                row.Item("Numero7") = Math.Round(sumaIva5 - totalDescuentoGravada5, candecimales)
                row.Item("Numero8") = Math.Round(sumaIva10 - totalDescuentoGravada10, candecimales)

                'Total de la factura
                row.Item("Numero9") = Math.Round(imptotal, candecimales)

                'Para el IVA
                Dim IVAcinco As Decimal
                Dim IVAdiez As Decimal
                Dim IVAdiferencia As Decimal

                IVAcinco = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                IVAdiez = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                If (IVAcinco > 0) And (IVAdiez > 0) Then
                    Select Case (IVAcinco + IVAdiez)
                        Case Is > totalIva
                            IVAdiferencia = (IVAcinco + IVAdiez) - totalIva
                            IVAcinco = IVAcinco - IVAdiferencia
                        Case Is < totalIva
                            IVAdiferencia = totalIva - (IVAcinco + IVAdiez)
                            IVAcinco = IVAcinco + IVAdiferencia
                    End Select
                ElseIf (IVAcinco > 0) And (IVAdiez = 0) Then
                    IVAcinco = totalIva
                ElseIf (IVAcinco = 0) And (IVAdiez > 0) Then
                    IVAdiez = totalIva
                End If

                row.Item("Numero10") = IVAcinco
                row.Item("Numero11") = IVAdiez

                row.Item("Numero12") = totalIva

                'Para imprimir la moneda de la Venta
                moneda = dtPresupuesto.Rows(0)("DESMONEDA")

                row.Item("Campo9") = moneda & " " & funcion.NumeroaLetras(Math.Round(imptotal, candecimales))

                ds.Tables("Detalle").Rows.Add(row)
            Next
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function ImpNotaRemisión(ByVal codtransferencia As Long, ByVal TARJETA As Long, _
    ByVal ESN As Long, ByVal SIMCARD As Long, ByVal CARGAEXPRES As Long) As DataSet
        ds.Clear()

        Dim codproductoaux As String = ""
        Dim numcompraaux As String = ""
        Dim sql1 As String

        Dim cnn As New SqlConnection
        Dim cmd1 As New SqlCommand
        Dim dr1 As SqlDataReader
        Dim cad As String = ""

        sql = ""
        'sql = "SELECT T.CODTRANSFERENCIA AS CODTRANSFERENCIA, CONVERT(VARCHAR(10),T.FECHATRANSFERENCIA,103) AS FECHATRANSFERENCIA, " & _
        '      "RTRIM(T.NUMTRANSFERENCIA) AS NUMTRANSFERENCIA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALORIGEN, RTRIM(S.DESSUCURSAL) AS DESSUCURSALORIGEN, " & _
        '      "RTRIM(SU.NUMSUCURSAL) AS NUMSUCURSALDESTINO, RTRIM(SU.DESSUCURSAL) AS DESSUCURSALDESTINO, " & _
        '      "RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        '      "ISNULL(TD.CANTIDADTRANFERENCIA ,0) AS CANTIDADTRANFERENCIA,ISNULL(TD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
        '      "ISNULL(TD.COSTOULTIMO,0),RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        '      "ISNULL(TD.COSTOULTIMO,0) AS COSTOULTIMO, (ISNULL(TD.COSTOULTIMO,0) * ISNULL(TD.CANTIDADTRANFERENCIA,0)) AS TOTALCOSTO " & _
        '      "FROM TRANFERENCIA T, SUCURSAL S, SUCURSAL SU, TIPOCOMPROBANTE TC, TRANSFERENCIASDETALLE TD, PRODUCTOS P " & _
        '      "WHERE T.CODSUCURSAL = S.CODSUCURSAL And T.SUCURSALDESTINO = SU.CODSUCURSAL And TC.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        '      "AND TD.CODTRANSFERENCIA=T.CODTRANSFERENCIA AND P.CODPRODUCTO=TD.CODPRODUCTO AND T.CODTRANSFERENCIA =" & codtransferencia & " " & _
        '      "AND T.CODEMPRESA = " & empCodigo & " order by TD.LINEANUMERO "

        sql = " SELECT T.CODTRANSFERENCIA AS CODTRANSFERENCIA, " & _
            " CONVERT(VARCHAR(10),T.FECHATRANSFERENCIA,103) AS FECHATRANSFERENCIA, " & _
            " RTRIM(T.NUMTRANSFERENCIA) AS NUMTRANSFERENCIA, " & _
            " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALORIGEN, " & _
            " RTRIM(S.DESSUCURSAL) + ' ' + RTRIM(S.DIRECCION) AS DESSUCURSALORIGEN, " & _
            " RTRIM(SU.NUMSUCURSAL) AS NUMSUCURSALDESTINO, " & _
            " RTRIM(SU.DESSUCURSAL)  AS DESTINO , " & _
            " RTRIM(SU.DIRECCION) AS DESSUCURSALDESTINO, " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
            " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
            " ISNULL(TD.CANTIDADTRANFERENCIA ,0) AS CANTIDADTRANFERENCIA, " & _
            " ISNULL(TD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
            " ISNULL(TD.COSTOULTIMO,0), " & _
            " P.CODPRODUCTO AS CODPRODUCTO , " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " P.CODLINEA AS CODLINEA, " & _
            " ISNULL(TD.COSTOULTIMO,0) AS COSTOULTIMO, " & _
            " (ISNULL(TD.COSTOULTIMO,0) * ISNULL(TD.CANTIDADTRANFERENCIA,0)) AS TOTALCOSTO " & _
            " FROM TRANFERENCIA T INNER JOIN SUCURSAL S ON T.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL SU ON T.SUCURSALDESTINO = SU.CODSUCURSAL " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
            " INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA=T.CODTRANSFERENCIA " & _
            " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO=TD.CODPRODUCTO " & _
            " WHERE T.CODTRANSFERENCIA = " & codtransferencia & " AND T.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY P.CODIGOBARRA, TD.LINEANUMERO "

        '" LEFT OUTER JOIN TRANSFERENCIASDETALLERANGOS TR ON  TD.CODTRANSFERENCIA = TR.CODTRANSFERENCIA AND TD.CODPRODUCTO = TR.CODPRODUCTO " & _
        '" LEFT OUTER JOIN TRANSFERENCIASUBDETALLE  TS ON TD.CODTRANSFERENCIA = TS.CODTRANSFERENCIA AND TD.CODPRODUCTO = TS.CODPRODUCTO " & _
        '" LEFT OUTER JOIN EQUIPOS E ON TS.CODEQUIPO = E.CODEQUIPO " & _
        '" LEFT OUTER JOIN SIMCARD SI ON TS.CODSIMCARD = SI.CODSIMCARD " & _
        '" ISNULL(TR.RANGO1,'0') AS RANGO1, " & _
        '" ISNULL(TR.RANGO2,'0') AS RANGO2, " & _
        '" ISNULL(TR.CANTIDAD,0) AS CANTIDAD, " & _
        '" ISNULL(E.ESN,'') AS ESN, " & _
        '" ISNULL(SI.NUMSIMCARD,'') AS SIMCARD " & _


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            ser.Abrir(cnn)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd1.Connection = cnn


            dr = cmd.ExecuteReader

            Try
                Dim texfecha As String
                Dim numero, descomprobante, desorigen, desdestino As String
                Dim destino, costo As String
                Dim edu As Integer = 0

                Do While dr.Read()

                    row = ds.Tables("Detalle").NewRow()

                    texfecha = dr("FECHATRANSFERENCIA")
                    numero = dr("NUMTRANSFERENCIA")
                    descomprobante = dr("DESCOMPROBANTE")
                    desorigen = dr("DESSUCURSALORIGEN")
                    desdestino = dr("DESSUCURSALDESTINO")
                    destino = dr("DESTINO")
                    costo = dr("COSTOULTIMO")
                    row.Item("Campo8") = dr("CODIGOBARRA")
                    row.Item("Campo9") = dr("DESPRODUCTO")
                    row.Item("Numero2") = dr("CANTIDADTRANFERENCIA")
                    row.Item("Numero1") = dr("COSTOULTIMO")
                    row.Item("Numero5") = dr("TOTALCOSTO")

                    If codproductoaux <> dr("CODIGOBARRA") Or numcompraaux <> dr("NUMTRANSFERENCIA") Then
                        'TARJETAS
                        If dr("CODLINEA") = TARJETA And dr("CODPRODUCTO") <> CARGAEXPRES Then
                            sql1 = ""
                            sql1 = "SELECT RANGO1 AS RANGO1, RANGO2 AS RANGO2, CANTIDAD FROM TRANSFERENCIASDETALLERANGOS WHERE CODTRANSFERENCIA = " & dr("CODTRANSFERENCIA") & " AND CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                            cad = ""
                            Try
                                cmd1.CommandText = sql1
                                dr1 = cmd1.ExecuteReader
                                'cad = "-----------------------------------------------------------------------------------------" & vbCrLf
                                'cad = cad & "                          RANGOS DE TPY`S TRANSFERIDOS.." & vbCrLf
                                'cad = cad & "-----------------------------------------------------------------------------------------" & vbCrLf & vbCrLf
                                'cad = cad & "DESDE          -          HASTA          -          CANTIDAD " & vbCrLf
                                'cad = cad & "-----------------------------------------------------------------------------------------" & vbCrLf & vbCrLf

                                Do While dr1.Read
                                    cad = cad & " " & CStr(dr1("RANGO1")) & "    -    " & CStr(dr1("RANGO2")) & "        -          (" & CStr(Math.Round(dr1("CANTIDAD"), 0)) & ".00) " & vbCrLf
                                Loop
                                cad = cad & vbCrLf
                                cad = cad & "         " & vbCrLf
                                row.Item("Campo1") = cad
                            Catch ex As Exception
                                MsgBox(ex.ToString)
                            Finally
                                dr1.Close()
                            End Try
                            'EQUIPOS - ESN`S
                        ElseIf dr("CODLINEA") = ESN Then
                            sql1 = ""
                            sql1 = "SELECT E.ESN AS ESN FROM EQUIPOSSTOCK E, TRANSFERENCIASUBDETALLE TS WHERE TS.CODEQUIPO = E.CODEQUIPO AND " & _
                                   "TS.CODTRANSFERENCIA = " & dr("CODTRANSFERENCIA") & " AND TS.CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                            cad = ""
                            Try
                                cmd1.CommandText = sql1
                                dr1 = cmd1.ExecuteReader
                                'cad = "---------------------------------------------------------------------" & vbCrLf
                                'cad = cad & "                 ESN DE LOS EQUIPOS TRANSFERIDOS " & vbCrLf
                                'cad = cad & "--------------------------------------------------------------------" & vbCrLf & vbCrLf
                                Dim c As String = ""
                                Dim i As Integer
                                cad = ""
                                Do While dr1.Read
                                    edu += 1
                                    If edu = 5 Then
                                        edu = 0
                                        cad = cad & dr1("ESN") & "/" & vbCrLf
                                        cad = cad & ""
                                    Else
                                        cad = cad & dr1("ESN") & "/"
                                    End If
                                    ' c = CStr(dr1("ESN"))
                                    'For i = 1 To 25 - Len(CStr(dr1("ESN")).Trim)
                                    '    If i = Len(CStr(dr1("ESN")).Trim) Then
                                    '        c = c + "*"
                                    '    Else
                                    '        c = c + " "
                                    '    End If
                                    'Next
                                    'cad = cad & c & "/" : TAB()
                                Loop
                                cad = cad & vbCrLf
                                cad = cad & "         " & vbCrLf
                                row.Item("Campo1") = cad
                            Catch ex As Exception
                                MsgBox(ex.ToString)
                            Finally
                                dr1.Close()
                            End Try

                            'SIMCARD
                        ElseIf dr("CODLINEA") = SIMCARD Then
                            sql1 = ""
                            sql1 = "SELECT S.NUMSINCARD AS NUMSIMCARD FROM SIMCCARDSTOCK S, TRANSFERENCIASUBDETALLE TS  " & _
                                   "WHERE S.CODSIMCARD = TS.CODSIMCARD AND TS.CODTRANSFERENCIA = " & dr("CODTRANSFERENCIA") & " AND TS.CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                            cad = ""
                            Try
                                cmd1.CommandText = sql1
                                dr1 = cmd1.ExecuteReader
                                'cad = "---------------------------------------------------------------------" & vbCrLf
                                'cad = cad & "                 NÚMEROS DE SIMCARD´S " & vbCrLf
                                'cad = cad & "--------------------------------------------------------------------" & vbCrLf & vbCrLf
                                cad = ""
                                Do While dr1.Read
                                    edu += 1
                                    If edu = 6 Then
                                        edu = 0
                                        cad = cad & dr1("NUMSIMCARD") & "/" & vbCrLf
                                        cad = cad & ""
                                    Else
                                        cad = cad & dr1("NUMSIMCARD") & "/"
                                    End If
                                    'cad = cad & "*" & CStr(dr1("NUMSIMCARD")) & "* /// " : TAB()
                                Loop
                                cad = cad & vbCrLf
                                cad = cad & "         " & vbCrLf
                                row.Item("Campo1") = cad
                            Catch ex As Exception
                                MsgBox(ex.ToString)
                            Finally
                                dr1.Close()
                            End Try
                        Else
                            row.Item("Campo1") = "0"
                        End If

                        codproductoaux = dr("CODIGOBARRA")
                        numcompraaux = dr("NUMTRANSFERENCIA")
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = desorigen
                row.Item("Campo2") = desdestino
                row.Item("Numero7") = numero
                row.Item("Campo3") = destino
                row.Item("Campo4") = "X"
                row.Item("Campo5") = texfecha
                row.Item("Campo6") = numero
                ds.Tables("Cabecera").Rows.Add(row)
            Catch
            Finally
                dr.Close()
                sqlc.Close()
                ser.Cerrar(sqlc)
            End Try
        Finally
        End Try
        Return ds
    End Function

    Public Function ImpOrdenCompra(ByVal codOrden As Long, ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(O.NUMORDENCOMPRA) AS NUMORDENCOMPRA, RTRIM(O.PLAZOENTREGA) AS PLAZO, O.COTIZACION1 AS COTIZACION, " & _
            "RTRIM(TC.NUMTIPOCOMPRO) AS TIPOCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
            "RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
            "RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            "RTRIM(T.NUMTRANSPORTE) AS NUMTRANSPORTE, RTRIM(T.DESTRANSPORTE) AS DESTRANSPORTE, " & _
            "RTRIM(P.NUMPROVEEDOR) AS NUMPROVEEDOR, (RTRIM(P.APELLIDO) + ', ' + RTRIM(P.NOMBRE)) AS PROVEEDOR, " & _
            "CONVERT(VARCHAR(10), O.FECHAORDEN, 103) AS FECHAORDEN, " & _
            "RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS PRODUCTO, " & _
            "OD.CANTIDAD AS CANTIDAD, " & _
            "RTRIM(U.NUMMEDIDA) AS NUMMEDIDA, RTRIM(U.DESMEDIDA) AS DESMEDIDA, " & _
            "OD.COSTO AS COSTO, (OD.CANTIDAD * OD.COSTO) AS TOTAL " & _
            "FROM ORDENCOMPRA O INNER JOIN TIPOCOMPROBANTE TC ON O.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            "INNER JOIN SUCURSAL S ON O.CODSUCURSAL = S.CODSUCURSAL " & _
            "INNER JOIN MONEDA M ON O.CODMONEDA = M.CODMONEDA " & _
            "INNER JOIN TIPOTRANSPORTE T ON O.CODTRANSPORTE = T.CODTRANSPORTE " & _
            "INNER JOIN PROVEEDOR P ON O.CODPROVEEDOR = P.CODPROVEEDOR " & _
            "INNER JOIN ORDENCOMPRADETALLE OD ON O.CODORDENCOMPRA = OD.CODORDENCOMPRA " & _
            "INNER JOIN PRODUCTOS PR ON OD.CODPRODUCTO = PR.CODPRODUCTO " & _
            "INNER JOIN UNIDADMEDIDA U ON PR.CODMEDIDA = U.CODMEDIDA " & _
            "WHERE O.CODORDENCOMPRA = " & codOrden & " " & _
            "ORDER BY OD.LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                'Verifica que la cabezera se imprima una sola vez
                'aux = 0 No Impreso
                'aux = 1 Impreso
                '''''''''''''''''''''''''''''''''''''''''''''''''
                Dim aux As Integer
                aux = 0

                Do While dr.Read
                    If aux = 0 Then
                        '###################
                        '#    CABECERA     #
                        '###################
                        row = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

                        row.Item("Campo1") = empDescripcion
                        row.Item("Campo2") = dr("FECHAORDEN")
                        row.Item("Campo3") = dr("NUMSUCURSAL")
                        row.Item("Campo4") = dr("DESSUCURSAL")
                        row.Item("Campo5") = dr("NUMPROVEEDOR")
                        row.Item("Campo6") = dr("PROVEEDOR")
                        row.Item("Campo7") = dr("PLAZO")
                        row.Item("Campo8") = dr("NUMTRANSPORTE")
                        row.Item("Campo9") = dr("DESTRANSPORTE")
                        row.Item("Campo10") = dr("NUMMONEDA")
                        row.Item("Campo11") = dr("DESMONEDA")
                        row.Item("Campo12") = dr("TIPOCOMPROBANTE")
                        row.Item("Campo13") = dr("DESCOMPROBANTE")
                        row.Item("Numero1") = dr("NUMORDENCOMPRA")
                        row.Item("Numero2") = dr("COTIZACION")

                        ds.Tables("Cabecera").Rows.Add(row)

                        aux = 1
                    End If

                    '###############
                    '#   DETALLE   #
                    '###############
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("CODIGOBARRA")
                    row.Item("Campo2") = dr("NUMMEDIDA")
                    row.Item("Campo3") = dr("DESMEDIDA")
                    row.Item("Campo4") = dr("PRODUCTO")

                    row.Item("Numero1") = dr("CANTIDAD")
                    row.Item("Numero2") = dr("COSTO")
                    row.Item("Numero3") = Math.Round(dr("TOTAL"), canDecimales)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop
            Catch ex As Exception
                MsgBox(ex.ToString)
            Finally
                dr.Close()
            End Try
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        'Una vez que tenemos todos los datos en el dataset, vamos a llamar al nuevo 
        'formulario y le vamos a pasar el dataset:
        Return ds
    End Function

    Public Sub ImprimirTicket(ByVal NombreImpresora As String, ByVal Codventa As Long, ByVal Codsucursal As Long, ByVal Efectivo As Decimal, _
    ByVal Descobrador As String, ByVal TARJETAS As Long, ByVal ESN As Long, _
    ByVal SIMCARD As Long, ByVal CELULAR As Long, ByVal candecimales As Integer)

        Dim Ticket As New Ticket.Ticket
        Dim sqlc1 As New SqlConnection
        Dim importe As New TxtMoneda.TxtMoneda
        Dim cantidad As New TxtMoneda.TxtMoneda
        Dim descuento As New TxtMoneda.TxtMoneda

        If candecimales <> 0 Then
            candecimales = 2
        End If

        importe.TxtMonedaDecimales = candecimales
        cantidad.TxtMonedaDecimales = candecimales
        descuento.TxtMonedaDecimales = candecimales


        'Ticket.ImagenCabecera.FromFile("C:\edu.jpg")  'esta propiedad no es obligatoria 
        Ticket.LongitudMaxima = 70
        Ticket.LongitudMaximaDescripcion = 23
        Ticket.CaracterParaLineas = "-"
        Ticket.Margen = 0
        Ticket.NombreFuente = "Font Arial"
        Ticket.TamańoFuente = 8

        ser.Abrir(sqlc1)
        ser.Abrir(sqlc)
        sql = ""
        Try
            sql = "SELECT RTRIM(E.NOMFANTASIA) AS NOMFANTASIA, " & _
                  "ISNULL(RTRIM(E.RUCCONTRIBUYENTE),'') AS RUC, " & _
                  "ISNULL(RTRIM(S.DIRECCION),'') AS DIRECCION, " & _
                  "RTRIM(E.TELEFONO) AS TELEFONO   " & _
                  "FROM EMPRESA E, SUCURSAL S " & _
                  "WHERE E.CODEMPRESA =  " & empCodigo & " AND S.CODSUCURSAL = " & Codsucursal & " AND S.CODEMPRESA = E.CODEMPRESA "

            cmd.Connection = sqlc
            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            Do While dr.Read
                Ticket.AgregarCabecera(dr("NOMFANTASIA"))
                Ticket.AgregarCabecera("RUC : " & dr("RUC"))
                Ticket.AgregarCabecera(dr("DIRECCION") & " Tel. " & dr("TELEFONO"))
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
        End Try

        Dim contador As Long = 0
        Dim subtotal As Decimal = 0.0

        Dim numventa As String
        Dim cliente As String = ""
        Dim cmd1 As New SqlCommand
        Dim dr1 As SqlDataReader
        Dim descripcion As String = ""
        Dim cedula, ruc As String
        Dim sucursal As String
        Dim fecha As String
        Dim numcelular As String = ""

        cmd1.Connection = sqlc1

        Try
            sql = ""
            sql = "SELECT V.CODVENTA AS CODVENTA, V.TOTALDESCUENTO AS DESCUENTO, VD.CANTIDADVENTA AS CANTIDAD, RTRIM(P.DESPRODUCTO) + ' ' + LTRIM(STR(IVA,18,0)) + '%' AS DESCRIPCION,VD.PRECIOVENTABRUTO AS PRECIO, " & _
                  "VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO AS TOTAL, " & _
                  "CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHA, " & _
                  "V.NUMVENTATIMBRADO AS NUMVENTA, " & _
                  "ISNULL(RTRIM(VD.NUMCELULAR),'') AS NUMCELULAR, " & _
                  "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
                  "RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                  "RTRIM(CL.NUMCEDULA) AS CEDULA, RTRIM(CL.RUC) AS RUC, " & _
                  "P.CODLINEA AS CODLINEA, P.CODPRODUCTO AS CODPRODUCTO,  " & _
                  "RTRIM(S.DESSUCURSAL) AS SUCURSAL " & _
                  "FROM VENTAS V INNER JOIN  VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                  "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                  "INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                  "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                  "WHERE V.CODVENTA = " & Codventa & ""

            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            contador = 0

            Do While dr.Read
                contador += 1
                importe.Text = dr("TOTAL")
                importe.TextoSQL(importe.Text)
                subtotal += importe.Text
                descuento.Text = dr("DESCUENTO")
                numventa = dr("NUMVENTA")
                cliente = dr("CLIENTE") & "  " & dr("NUMCLIENTE")
                ruc = dr("RUC")
                cedula = dr("CEDULA")
                sucursal = dr("SUCURSAL")
                descripcion = dr("DESCRIPCION")
                fecha = dr("FECHA")

                '========
                'ESN    '
                '========
                Dim cadedu As String = ""
                If ESN = dr("CODLINEA") Then
                    cadedu = "0"
                    sql = ""
                    sql = " SELECT E.ESN AS ESN FROM VENTASSUBDETALLE VSD " & _
                          " INNER JOIN EQUIPOSSTOCK E ON VSD.CODEQUIPO = E.CODEQUIPO " & _
                          " WHERE VSD.CODVENTA = " & dr("CODVENTA") & " AND VSD.CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                    Try
                        cmd1.CommandText = sql
                        dr1 = cmd1.ExecuteReader
                        cadedu = "ESN : "
                        Do While dr1.Read
                            cadedu = cadedu & dr1("ESN") & " - "
                        Loop
                    Catch ex As Exception
                        MsgBox(EX.ToString)
                    Finally
                        dr1.Close()
                    End Try
                End If

                '========
                'SIMCARD'
                '========
                If SIMCARD = dr("CODLINEA") Then

                    cadedu = "SIMCARD : "
                    sql = ""
                    sql = " SELECT E.NUMSINCARD AS NUMSIMCARD,ISNULL(E.NUMCELULAR,'') AS NUMCELULAR FROM VENTASSUBDETALLE VSD " & _
                          " INNER JOIN SIMCCARDSTOCK E ON VSD.CODSIMCARD = E.CODSIMCARD " & _
                          " WHERE VSD.CODVENTA = " & dr("CODVENTA") & " AND VSD.CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                    Try
                        cmd1.CommandText = sql
                        dr1 = cmd1.ExecuteReader
                        Do While dr1.Read
                            If dr1("NUMCELULAR") <> "" Then
                                cadedu = cadedu & dr1("NUMSIMCARD") & "=" & dr1("NUMCELULAR")
                            Else
                                cadedu = cadedu & dr1("NUMSIMCARD")
                            End If
                        Loop
                    Catch ex As Exception
                        MsgBox(EX.ToString)
                    Finally
                        dr1.Close()
                    End Try
                End If

                'TARJETAS'
                '=========
                If TARJETAS = dr("CODLINEA") And dr("CODPRODUCTO") <> CELULAR Then
                    sql = ""
                    sql = "SELECT T.NUMPTY AS NUMTPY FROM VENTASSUBDETALLE VS, TPYSTOCK T " & _
                          "WHERE VS.CODVENTA = " & dr("CODVENTA") & " And VS.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                          "AND VS.CODTPY = T.CODTPY ORDER BY NUMTPY "

                    Try
                        cmd1.CommandText = sql
                        dr1 = cmd1.ExecuteReader
                        cadedu = "TPY Nş "
                        Do While dr1.Read
                            cadedu = cadedu & dr1("NUMTPY") & " - "
                        Loop
                    Catch ex As Exception
                        MsgBox(EX.ToString)
                    Finally
                        dr1.Close()
                    End Try
                End If

                'If TARJETAS = dr("CODLINEA") And dr("CODPRODUCTO") = CELULAR Then
                '    cadedu = cadedu & " " & dr("NUMCELULAR")
                'End If
                If dr("CODPRODUCTO") = CELULAR Then
                    cadedu = cadedu & " " & dr("NUMCELULAR")
                End If

                If cadedu <> "0" Then
                    descripcion = descripcion & " " & cadedu
                End If

                cantidad.Text = dr("CANTIDAD")
                cantidad.TextoSQL(cantidad.Text)

                Ticket.AgregarDetalle(Math.Round(dr("CANTIDAD"), 2), descripcion, importe.Text)
            Loop
        Catch ex As Exception
            MsgBox(EX.ToString)
        Finally
            dr.Close()
        End Try

        Ticket.AgregarCabecera("Sucursal " & sucursal)
        Ticket.AgregarCabecera("*** I.V.A. INCLUIDO ***")
        Ticket.AgregarCabecera("Cliente : " & cliente)
        If ruc.Trim <> "" Then
            Ticket.AgregarCabeceraLinea("RUC : " & ruc)
        Else
            Ticket.AgregarCabeceraLinea("C.I. : " & cedula)
        End If

        'Ticket.AddSubHeaderLine("FECHA : " & Now.ToShortDateString & "  HORA : " & Now.ToShortTimeString)
        'Ticket.AddSubHeaderLine("TICKET Nş : " & numventa)

        Ticket.AgregarTotal("Cantidad de Items  ", contador)

        If CType(descuento.Text, Decimal) > 0 Then
            importe.Text = subtotal
            importe.TextoSQL(importe.Text)
            subtotal = importe.Text
            Ticket.AgregarTotal("Sub Total ", importe.Text)
            descuento.TextoSQL(descuento.Text)
            Ticket.AgregarTotal("Descuento ", "-" & descuento.Text)
        End If

        importe.Text = subtotal
        importe.Text = CType(importe.Text, Decimal) - CType(descuento.Text, Decimal)
        importe.TextoSQL(importe.Text)
        Ticket.AgregarTotal("NETO A PAGAR ", importe.Text)

        importe.Text = Efectivo
        importe.TextoSQL(importe.Text)
        Ticket.AgregarTotal("Total Efectivo ", importe.Text)

        importe.Text = subtotal
        importe.Text = CType(importe.Text, Decimal) - CType(descuento.Text, Decimal)
        importe.TextoSQL(importe.Text)

        cantidad.Text = Efectivo
        cantidad.TextoSQL(cantidad.Text)

        cantidad.Text = CType(cantidad.Text, Decimal) - CType(importe.Text, Decimal)
        cantidad.TextoSQL(cantidad.Text)
        Ticket.AgregarTotal("Cambio ", cantidad.Text)
        Ticket.AgregarTotal("", "")

        Ticket.AgregarTotal("FECHA       HORA   TICKET", "CAJERO")
        Ticket.AgregarTotal(CDate(fecha).ToShortDateString & " " & Now.ToShortTimeString & " " & numventa, Descobrador)
        Ticket.AgregarTotal("", "")
        Ticket.AgregarTotal("<<<MUCHAS GRACIAS POR SU COMPRA>>>", "")
        For X As Long = 0 To 8
            Ticket.AgregarTotal("", "")
        Next
        'Ticket.AgregarPie("FECHA     HORA  TICKET  SUC   CAJERO")
        'Ticket.AgregarPie(Now.ToShortDateString & " " & Now.ToShortTimeString & " " & numventa & " " & "130" & " " & Descobrador)
        'Ticket.AgregarPie("     MUCHAS GRACIAS POR SU COMPRA     ")
        'Ticket.AgregarPie("")
        'Ticket.AgregarPie("")
        'Ticket.AgregarPie("")
        'Ticket.AgregarPie("")
        'Ticket.AgregarPie("")
        'Ticket.AgregarPie("")
        'Ticket.AgregarPie("")


        'Ticket.AddTotal("", "")

        'Ticket.AddTotal("TICKET", "CAJERO")
        'Ticket.AddTotal(numventa, Descobrador)
        'Ticket.AddTotal("", "")
        'Ticket.AddTotal("<<<MUCHAS GRACIAS POR SU COMPRA>>>", "")

        'Ticket.AddFooterLine("TICKET " & Space(5) & " SUC " & Space(5) & "CAJERO")

        'Ticket.AddFooterLine(numventa & Space(10) & "130" & Space(8) & "EDULFO LESME")
        'Ticket.AddFooterLine("  ***MUCHAS GRACIAS POR SU COMPRA***")

        If Ticket.VerificarImpresora(NombreImpresora) = True Then
            Ticket.ImprimirTicket(NombreImpresora)
        End If

    End Sub

    Public Function ImpTransferencia(ByVal codtransferencia As Long, _
    ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT T.CODTRANSFERENCIA AS CODTRANSFERENCIA, " & _
            " CONVERT(VARCHAR(10),T.FECHATRANSFERENCIA,103) AS FECHATRANSFERENCIA, " & _
            " RTRIM(T.NUMTRANSFERENCIA) AS NUMTRANSFERENCIA, " & _
            " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALORIGEN, " & _
            " RTRIM(S.DESSUCURSAL) AS DESSUCURSALORIGEN, " & _
            " RTRIM(SU.NUMSUCURSAL) AS NUMSUCURSALDESTINO, " & _
            " RTRIM(SU.DESSUCURSAL) AS DESSUCURSALDESTINO, " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
            " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
            " ISNULL(TD.CANTIDADTRANFERENCIA ,0) AS CANTIDADTRANFERENCIA, " & _
            " ISNULL(TD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
            " ISNULL(TD.COSTOULTIMO,0), " & _
            " P.CODPRODUCTO AS CODPRODUCTO , " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " P.CODLINEA AS CODLINEA, " & _
            " ISNULL(TD.COSTOULTIMO,0) AS COSTOULTIMO, " & _
            " (ISNULL(TD.COSTOULTIMO,0) * ISNULL(TD.CANTIDADTRANFERENCIA,0)) AS TOTALCOSTO " & _
            " FROM TRANFERENCIA T INNER JOIN SUCURSAL S ON T.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL SU ON T.SUCURSALDESTINO = SU.CODSUCURSAL " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
            " INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA=T.CODTRANSFERENCIA " & _
            " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO=TD.CODPRODUCTO " & _
            " WHERE T.CODTRANSFERENCIA = " & codtransferencia & " AND T.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY TD.LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Dim texfecha As String
                Dim numero, descomprobante, desorigen, desdestino As String

                Do While dr.Read()

                    row = ds.Tables("Detalle").NewRow()

                    texfecha = dr("FECHATRANSFERENCIA")
                    numero = dr("NUMTRANSFERENCIA")
                    descomprobante = dr("DESCOMPROBANTE")
                    desorigen = dr("DESSUCURSALORIGEN")
                    desdestino = dr("DESSUCURSALDESTINO")

                    row.Item("Campo8") = dr("CODIGOBARRA")
                    row.Item("Campo9") = dr("DESPRODUCTO")
                    row.Item("Numero2") = dr("CANTIDADTRANFERENCIA")
                    row.Item("Numero3") = dr("COSTOULTIMO")
                    row.Item("Numero5") = Math.Round(dr("TOTALCOSTO"), candecimales)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo4") = desorigen
                row.Item("Campo5") = desdestino
                row.Item("Numero7") = numero
                row.Item("Campo3") = texfecha
                row.Item("Campo6") = descomprobante

                ds.Tables("Cabecera").Rows.Add(row)
            Catch

            Finally
                dr.Close()
                ser.Cerrar(sqlc)
            End Try
        Finally

        End Try
        Return ds
    End Function

    Public Function InfAntiguedadStock(ByVal desdeFecha As String, ByVal HastaFecha As String, _
    ByVal DesdeSucursal As String, ByVal HastaSucursal As String, _
    ByVal DesdeFamilia As String, ByVal HastaFamilia As String, _
    ByVal DesdeLinea As String, ByVal HastaLinea As String, _
    ByVal DesdeRubro As String, ByVal HastaRubro As String, _
    ByVal DesdeProducto As String, ByVal HastaProducto As String, _
    ByVal MonedaInforme As String, ByVal CotizacionMonedaInf As String, _
    ByVal codMoneda As Long, ByVal canDecimales As Integer, _
    ByVal DesSuc1 As String, ByVal DesSuc2 As String, ByVal DesFami1 As String, ByVal DesFami2 As String, _
    ByVal DesLin1 As String, ByVal DesLin2 As String, ByVal DesRub1 As String, ByVal DesRub2 As String, _
    ByVal DesProd1 As String, ByVal DesProd2 As String, ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal condiciones As String, ByVal condiciones_sucursal As String, ByVal condiciones_compra As String, _
    ByVal titulo As Byte, ByVal tipo As Byte, ByVal tipoPrecio As Byte, ByVal orden As String, _
    ByVal cortefamilia As Byte, ByVal cortelinea As Byte, ByVal corterubro As Byte, ByVal cortecategoria As Byte, _
    ByVal cortesubcategoria As Byte, ByVal cortemarca As Byte, ByVal incluye As Byte) As DataSet

        ds.Clear()

        If desdeFecha.Trim.Length = 0 Then
            desdeFecha = "01/01/1900"
        End If

        sql = ""
        sql = "SELECT RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
        "ISNULL(P.COSTOPP,0) AS COSTOPP, " & _
        "P.CODMONEDA AS CODMONEDAPRODUCTO, " & _
"/*ISNULL((SELECT C.FACTORVENTA FROM COTIZACION C WHERE C.FECHAMOVIMIENTO = " & _
        "(SELECT MAX(C.FECHAMOVIMIENTO) FROM COTIZACION C WHERE C.CODEMPRESA =" & empCodigo & _
        "AND C.CODMONEDA = P.CODMONEDA AND " & _
        "C.FECHAMOVIMIENTO <= CAST('" & HastaFecha & "' AS DATETIME)) AND C.CODEMPRESA =" & empCodigo & _
"AND C.CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION,*/ " & _
        "ISNULL((SELECT C.FACTORVENTA FROM COTIZACION C WHERE C.FECHAMOVIMIENTO = " & _
        "(SELECT MAX(C.FECHAMOVIMIENTO) FROM COTIZACION C WHERE C.CODEMPRESA =" & empCodigo & _
        "AND C.CODMONEDA = P.CODMONEDA AND " & _
        "C.FECHAMOVIMIENTO = (SELECT MAX(CT.FECHAMOVIMIENTO) " & _
        " FROM COTIZACION CT " & _
        " WHERE CT.CODMONEDA = C.CODMONEDA)) AND C.CODEMPRESA =" & empCodigo & _
        "AND C.CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION, " & _
        "RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS DESFAMILIA,  " & _
        "RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA)AS DESLINEA, " & _
        "RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS DESRUBRO, " & _
        "REPLICATE('0',5-LEN(F.NUMFAMILIA))+LTRIM(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIAORDEN, " & _
        "REPLICATE('0',5-LEN(L.NUMLINEA))+LTRIM(RTRIM(L.NUMLINEA)) AS NUMLINEAORDEN, " & _
        "REPLICATE('0',5-LEN(R.NUMRUBRO))+LTRIM(RTRIM(R.NUMRUBRO)) AS NUMRUBROORDEN, " & _
        "REPLICATE('0',15-LEN(P.CODIGOBARRA))+LTRIM(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRAORDEN, " & _
        " ISNULL(CP.CODCATEGORIA,0) AS CODCATEGORIA, ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
        " ISNULL(SC.CODSUBCATEGORIA,0) AS CODSUBCATEGORIA, ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
        " ISNULL(MC.CODMARCA,0) AS CODMARCA, ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA, " & _
        " ISNULL(REPLICATE('0',5-LEN(CP.NUMCATEGORIA))+LTRIM(RTRIM(CP.NUMCATEGORIA)),'') AS NUMCATEGORIAORDEN, " & _
        " ISNULL(REPLICATE('0',5-LEN(SC.NUMSUBCATEGORIA))+LTRIM(RTRIM(SC.NUMSUBCATEGORIA)),'') AS NUMSUBCATEGORIAORDEN, " & _
        " ISNULL(REPLICATE('0',5-LEN(MC.NUMMARCA))+LTRIM(RTRIM(MC.NUMMARCA)),'') AS NUMMARCAORDEN, " & _
        "ISNULL((SELECT SUM(PS.CANTIDAD) FROM PRODUCTOSUCURSAL PS, SUCURSAL S " & _
        "WHERE PS.CODSUCURSAL = S.CODSUCURSAL AND P.CODPRODUCTO = PS.CODPRODUCTO " & condiciones_sucursal & ") ,0) AS STOCKACTUAL, " & _
        "P.COSTOPP AS COSTOPPRECALCULADO, " & _
        "ISNULL((SELECT MAX(PR.PRECIOVENTA) FROM PRECIO PR, TIPOCLIENTE T, SUCURSAL S " & _
        "WHERE PR.CODSUCURSAL = S.CODSUCURSAL AND PR.CODTIPOCLIENTE = T.CODTIPOCLIENTE " & _
        "AND PR.CODPRODUCTO = P.CODPRODUCTO AND PR.CODEMPRESA =" & empCodigo & " " & _
        "AND (T.NUMTIPOCLIENTE = '1' OR UPPER(T.NUMTIPOCLIENTE) = UPPER('MAY'))" & condiciones_sucursal & " GROUP BY P.CODPRODUCTO),0) AS PRECIOMAYORISTA, " & _
        "ISNULL((SELECT MAX(PR.CODMONEDA) FROM PRECIO PR, TIPOCLIENTE T, SUCURSAL S " & _
        "WHERE PR.CODSUCURSAL = S.CODSUCURSAL AND PR.CODTIPOCLIENTE = T.CODTIPOCLIENTE " & _
        "AND PR.CODPRODUCTO = P.CODPRODUCTO AND PR.CODEMPRESA =" & empCodigo & " " & _
        "AND (T.NUMTIPOCLIENTE = '1' OR UPPER(T.NUMTIPOCLIENTE) = UPPER('MAY'))" & condiciones_sucursal & " GROUP BY P.CODPRODUCTO),0) AS CODMONEDAMAYORISTA, " & _
        "ISNULL((SELECT MAX(PR.PRECIOVENTA) FROM PRECIO PR, TIPOCLIENTE T, SUCURSAL S " & _
        "WHERE PR.CODSUCURSAL = S.CODSUCURSAL AND PR.CODTIPOCLIENTE = T.CODTIPOCLIENTE " & _
        "AND PR.CODPRODUCTO = P.CODPRODUCTO AND PR.CODEMPRESA =" & empCodigo & " " & _
        "AND (T.NUMTIPOCLIENTE = '2' OR UPPER(T.NUMTIPOCLIENTE) = UPPER('MIN') OR UPPER(T.NUMTIPOCLIENTE) = UPPER('DET'))" & condiciones_sucursal & " GROUP BY P.CODPRODUCTO),0) AS PRECIOMINORISTA, " & _
        "ISNULL((SELECT MAX(PR.CODMONEDA) FROM PRECIO PR, TIPOCLIENTE T, SUCURSAL S " & _
        "WHERE PR.CODSUCURSAL = S.CODSUCURSAL AND PR.CODTIPOCLIENTE = T.CODTIPOCLIENTE " & _
        "AND PR.CODPRODUCTO = P.CODPRODUCTO AND PR.CODEMPRESA =" & empCodigo & " " & _
        "AND (T.NUMTIPOCLIENTE = '2' OR UPPER(T.NUMTIPOCLIENTE) = UPPER('MIN') OR UPPER(T.NUMTIPOCLIENTE) = UPPER('DET'))" & condiciones_sucursal & " GROUP BY P.CODPRODUCTO),0) AS CODMONEDAMINORISTA, " & _
        "ISNULL(CONVERT(VARCHAR(10),(SELECT MAX(V.FECHAVENTA) FROM VENTASDETALLE VD, VENTAS V, PRODUCTOSUCURSAL PS, SUCURSAL S " & _
        "WHERE (V.ESTADO = 0 OR V.ESTADO = 9) AND V.CODEMPRESA =" & empCodigo & " " & _
        "AND V.CODVENTA = VD.CODVENTA AND P.CODPRODUCTO = VD.CODPRODUCTO " & _
        "AND P.CODPRODUCTO = PS.CODPRODUCTO AND S.CODSUCURSAL=PS.CODSUCURSAL " & _
        "AND PS.CODSUCURSAL = V.CODSUCURSAL " & condiciones_sucursal & "), 103), '')  AS FECHAULTIMAVENTA, " & _
" ISNULL((SELECT SUM(VD.CANTIDADVENTA) FROM VENTASDETALLE VD, VENTAS V, PRODUCTOSUCURSAL PS, SUCURSAL S " & _
       " WHERE (V.ESTADO = 0 OR V.ESTADO = 9) AND V.CODEMPRESA = " & empCodigo & " " & _
       " AND V.CODVENTA = VD.CODVENTA AND P.CODPRODUCTO = VD.CODPRODUCTO " & _
       " AND P.CODPRODUCTO = PS.CODPRODUCTO AND S.CODSUCURSAL = PS.CODSUCURSAL " & _
       " AND PS.CODSUCURSAL = V.CODSUCURSAL " & _
       " AND V.FECHAVENTA BETWEEN CAST('" & desdeFecha & "' AS DATETIME) AND  CAST('" & HastaFecha & "' AS DATETIME) " & condiciones_sucursal & " ) , 0) AS CANTIDADULTIMAVENTA, " & _
 "ISNULL((SELECT MAX(CD.CANTIDADCOMPRA) FROM COMPRASDETALLE CD, COMPRAS C, PRODUCTOSUCURSAL PS, SUCURSAL S " & _
        "WHERE C.CODEMPRESA =" & empCodigo & " AND C.CODCOMPRA = CD.CODCOMPRA " & _
        "AND P.CODPRODUCTO = CD.CODPRODUCTO AND P.CODPRODUCTO = PS.CODPRODUCTO " & _
        "AND S.CODSUCURSAL=PS.CODSUCURSAL AND PS.CODSUCURSAL = C.CODSUCURSAL " & _
        "AND C.FECHACOMPRA = (SELECT MAX(C.FECHACOMPRA) FROM COMPRASDETALLE CD, COMPRAS C, PRODUCTOSUCURSAL PS, SUCURSAL S " & _
        "WHERE C.CODEMPRESA =" & empCodigo & " AND C.CODCOMPRA = CD.CODCOMPRA " & _
        "AND P.CODPRODUCTO = CD.CODPRODUCTO AND P.CODPRODUCTO = PS.CODPRODUCTO " & _
        "AND S.CODSUCURSAL=PS.CODSUCURSAL AND PS.CODSUCURSAL = C.CODSUCURSAL " & condiciones_compra & " " & condiciones_sucursal & ")" & _
        "AND C.FECGRA = (SELECT MAX(C.FECGRA) FROM COMPRASDETALLE CD, COMPRAS C, PRODUCTOSUCURSAL PS, SUCURSAL S " & _
        "WHERE C.CODEMPRESA =" & empCodigo & " AND C.CODCOMPRA = CD.CODCOMPRA " & _
        "AND P.CODPRODUCTO = CD.CODPRODUCTO AND P.CODPRODUCTO = PS.CODPRODUCTO " & _
        "AND S.CODSUCURSAL=PS.CODSUCURSAL AND PS.CODSUCURSAL = C.CODSUCURSAL " & condiciones_compra & " " & condiciones_sucursal & ")" & condiciones_sucursal & " " & condiciones_compra & ") , 0) AS CANTIDADULTIMACOMPRA, " & _
        "ISNULL(CONVERT(VARCHAR(10),(SELECT MAX(C.FECHACOMPRA) FROM COMPRASDETALLE CD, COMPRAS C, PRODUCTOSUCURSAL PS, SUCURSAL S " & _
        "WHERE C.CODEMPRESA =" & empCodigo & " AND C.CODCOMPRA = CD.CODCOMPRA " & _
        "AND P.CODPRODUCTO = CD.CODPRODUCTO AND P.CODPRODUCTO = PS.CODPRODUCTO " & _
        "AND S.CODSUCURSAL=PS.CODSUCURSAL AND PS.CODSUCURSAL = C.CODSUCURSAL " & condiciones_compra & " " & condiciones_sucursal & "),103) , '') AS FECHAULTIMACOMPRA " & _
        " FROM PRODUCTOS P " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
        " WHERE P.CODEMPRESA = " & empCodigo & " "
      
        If incluye = 1 Then '' Inclusive productos sin Compra 
            sql = sql & " " & condiciones & " " & _
            " " & orden & " "
        Else
            sql = sql & " AND (P.CODPRODUCTO IN(SELECT CD.CODPRODUCTO FROM COMPRASDETALLE CD, COMPRAS C, SUCURSAL S " & _
           " WHERE C.CODCOMPRA = CD.CODCOMPRA AND C.CODSUCURSAL = S.CODSUCURSAL " & _
           " AND C.CODEMPRESA = " & empCodigo & " " & condiciones_sucursal & " " & condiciones_compra & ")) " & condiciones & " " & _
           " " & orden & " "
        End If

        FileOpen(1, "C:\LOCO.TXT", OpenMode.Output, OpenAccess.Write)
        WriteLine(1, sql)
        FileClose(1)

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                If dr("STOCKACTUAL") <> 0 Then
                    row = ds.Tables("Detalle").NewRow()

                    If cortefamilia = 1 Then
                        row.Item("Campo1") = dr("NUMFAMILIA")
                        row.Item("Campo4") = dr("DESFAMILIA")
                    Else
                        row.Item("Campo1") = ""
                        row.Item("Campo4") = ""
                    End If
                    If cortelinea = 1 Then
                        row.Item("Campo2") = dr("NUMLINEA")
                        row.Item("Campo5") = dr("DESLINEA")
                    Else
                        row.Item("Campo2") = ""
                        row.Item("Campo5") = ""
                    End If
                    If corterubro = 1 Then
                        row.Item("Campo3") = dr("NUMRUBRO")
                        row.Item("Campo6") = dr("DESRUBRO")
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo6") = ""
                    End If
                    If cortecategoria = 1 Then
                        row.Item("Campo11") = dr("NUMCATEGORIA")
                        row.Item("Campo12") = dr("DESCATEGORIA")
                    Else
                        row.Item("Campo11") = ""
                        row.Item("Campo12") = ""
                    End If
                    If cortesubcategoria = 1 Then
                        row.Item("Campo13") = dr("NUMSUBCATEGORIA")
                        row.Item("Campo14") = dr("DESSUBCATEGORIA")
                    Else
                        row.Item("Campo13") = ""
                        row.Item("Campo14") = ""
                    End If
                    If cortemarca = 1 Then
                        row.Item("Campo15") = dr("NUMMARCA")
                        row.Item("Campo16") = dr("DESMARCA")
                    Else
                        row.Item("Campo15") = ""
                        row.Item("Campo16") = ""
                    End If

                    row.Item("Campo7") = dr("CODIGOBARRA")
                    row.Item("Campo8") = dr("DESPRODUCTO")
                    row.Item("Numero1") = dr("STOCKACTUAL")

                    If dr("CODMONEDAPRODUCTO") = codMoneda Then
                        row.Item("Numero2") = dr("COSTOPP")
                    Else
                        row.Item("Numero2") = Math.Round(dr("COSTOPP") * dr("ULTIMACOTIZACION") / CotizacionMonedaInf, canDecimales)
                    End If

                    If tipoPrecio = 0 Then
                        If dr("CODMONEDAMINORISTA") = codMoneda Then
                            row.Item("Numero3") = dr("PRECIOMINORISTA")
                        Else
                            row.Item("Numero3") = Math.Round(dr("PRECIOMINORISTA") * dr("ULTIMACOTIZACION") / CotizacionMonedaInf, canDecimales)
                        End If
                    Else
                        If dr("CODMONEDAMAYORISTA") = codMoneda Then
                            row.Item("Numero3") = dr("PRECIOMAYORISTA")
                        Else
                            row.Item("Numero3") = Math.Round(dr("PRECIOMAYORISTA") * dr("ULTIMACOTIZACION") / CotizacionMonedaInf, canDecimales)
                        End If
                    End If

                    row.Item("Numero4") = dr("CANTIDADULTIMAVENTA")
                    row.Item("Campo9") = dr("FECHAULTIMAVENTA")
                    row.Item("Numero5") = dr("CANTIDADULTIMACOMPRA")
                    row.Item("Campo10") = dr("FECHAULTIMACOMPRA")

                    row.Item("Numero6") = CType(dr("STOCKACTUAL"), Decimal) * CType(row.Item("Numero2"), Decimal)

                    ds.Tables("Detalle").Rows.Add(row)
                End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            row.Item("Campo1") = empDescripcion

            row.Item("Campo14") = PRODUCTO1
            row.Item("Campo15") = PRODUCTO2
            row.Item("Campo16") = PRODUCTO3
            row.Item("Campo19") = "Categoria"
            row.Item("Campo20") = "Sub Categoria"
            row.Item("Campo21") = "Marca"

            row.Item("Numero2") = cortefamilia
            row.Item("Numero3") = cortelinea
            row.Item("Numero4") = corterubro
            row.Item("Numero5") = cortecategoria
            row.Item("Numero6") = cortesubcategoria
            row.Item("Numero7") = cortemarca


            row.Item("Campo2") = DesSuc1
            row.Item("Campo3") = DesSuc2
            row.Item("Campo4") = DesFami1
            row.Item("Campo5") = DesFami2
            row.Item("Campo6") = DesLin1
            row.Item("Campo7") = DesLin2
            row.Item("Campo8") = DesRub1
            row.Item("Campo9") = DesRub2
            row.Item("Campo10") = desdeFecha
            row.Item("Campo18") = HastaFecha
            row.Item("Campo11") = DesProd1
            row.Item("Campo12") = DesProd2
            row.Item("Campo13") = MonedaInforme

            row.Item("Campo22") = desdecategoria
            row.Item("Campo23") = hastacategoria
            row.Item("Campo24") = desdesubcategoria
            row.Item("Campo25") = hastasubcategoria
            row.Item("Campo26") = desdemarca
            row.Item("Campo27") = hastamarca

            If tipoPrecio = 0 Then
                row.Item("Campo17") = "DETALLE"
            Else
                row.Item("Campo17") = "MAYORISTA"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infCiudad(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(C.NUMCIUDAD)))+LTRIM(RTRIM(C.NUMCIUDAD)) AS NUMERO, " & _
              "RTRIM(C.NUMCIUDAD) AS CODIGO, RTRIM(Z.DESZONA) AS DESCRIPCION, " & _
              "REPLICATE('0',5-LEN(RTRIM(Z.NUMZONA)))+LTRIM(RTRIM(Z.NUMZONA)) AS ZONA, " & _
              "RTRIM(Z.NUMZONA) AS CODIGOZONA, " & _
              "RTRIM(C.DESCIUDAD) AS DESCIUDAD FROM ZONA Z INNER JOIN CIUDAD C ON Z.CODZONA = C.CODZONA " & _
              "WHERE Z.CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " ZONA, NUMERO"
        Else
            sql = sql + " CODIGOZONA, CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCIUDAD")
                row.Item("Campo3") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '################### 
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infCobrador(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(C.NUMCOBRADOR)))+LTRIM(RTRIM(NUMCOBRADOR)) AS NUMERO, " & _
              " RTRIM(C.NUMCOBRADOR) AS CODIGO, RTRIM(C.DESCOBRADOR) AS DESCRIPCION, " & _
              " ISNULL(RTRIM(U.DESUSUARIO), '') AS DESUSUARIO,C.PORCENCOMI,C.NROPLANILLA,C.NROCUENTA, " & _
              " CASE C.ESTADOCOBRADOR WHEN 0 THEN 'ACTIVO' WHEN 1 THEN 'NO ACTIVO' END AS ESTADO,  " & _
              " C.ZONA AS CODIGOZONA, CASE C.ZONA WHEN 0 THEN 'CAPITAL' WHEN 1 THEN 'INTERIOR' END AS ZONA  " & _
              " FROM COBRADOR C " & _
              " LEFT OUTER JOIN USUARIO U ON  C.USUARIO = U.CODUSUARIO " & _
              " WHERE C.CODEMPRESA = " & empCodigo & " " & _
              " ORDER BY ZONA, "


        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()
                row.Item("Campo10") = dr("CODIGOZONA")
                row.Item("Campo11") = dr("ZONA")
                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("DESUSUARIO")
                row.Item("Campo4") = dr("PORCENCOMI")
                row.Item("Campo5") = dr("NROPLANILLA")
                row.Item("Campo6") = dr("NROCUENTA")
                row.Item("Campo7") = dr("ESTADO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infColor(ByVal tipo As Byte, Optional ByVal titulo As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMCOLOR)))+LTRIM(RTRIM(NUMCOLOR)) AS NUMERO, " & _
              "RTRIM(NUMCOLOR) AS CODIGO, RTRIM(DESCOLOR) AS DESCRIPCION FROM COLOR " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = "Listado de " & titulo & "s"

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infConcepto(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMCONCEPTO)))+LTRIM(RTRIM(NUMCONCEPTO)) AS NUMERO, " & _
              "NUMCONCEPTO AS CODIGO, DESCONCEPTO AS DESCRIPCION FROM CONCEPTO " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCargaAjustes(ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursalDesde As String, ByVal sucursalDescripcionDesde As String, _
    ByVal sucursalHasta As String, ByVal sucursalDescripcionHasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, ByVal tipoCosto As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(S.NUMSUCURSAL)AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        "RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        "RTRIM(C.NUMCONCEPTO) AS NUMCONCEPTO, RTRIM(C.DESCONCEPTO) AS CONCEPTO, " & _
        "CONVERT(VARCHAR(10),A.FECHAAJUSTE,103) AS FECHAAJUSTE, " & _
        "RTRIM(A.NUMAJUSTE) AS NUMERO, " & _
        "M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, A.COTIZACION1 AS COTIZACION, " & _
        "P.CODPRODUCTO AS CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        "P.CODLINEA AS CODLINEA, " & _
        "A.CODAJUSTE AS CODAJUSTE, " & _
        "AD.CANTIDADAJUSTE AS CANTIDAD, AD.COSTOULTIMO AS COSTOULTIMO, " & _
        "ISNULL(AD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO, " & _
        "CONVERT(VARCHAR(10),A.FECGRA,103) AS FECHAINGRESO, " & _
        "CASE TIPOAJUSTE " & _
        "WHEN 0 THEN 'Ajuste en menos (-)' " & _
        "WHEN 1 THEN 'Ajuste en mas (+)' " & _
        "END AS TIPO " & _
        "FROM AJUSTE A INNER JOIN SUCURSAL S ON A.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN TIPOCOMPROBANTE T ON A.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        "INNER JOIN MONEDA M ON A.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN CONCEPTO C ON A.CODCONCEPTO = C.CODCONCEPTO " & _
        "INNER JOIN AJUSTEDETALLE AD ON A.CODAJUSTE = AD.CODAJUSTE " & _
        "INNER JOIN PRODUCTOS P ON AD.CODPRODUCTO = P.CODPRODUCTO " & _
        "WHERE A.CODEMPRESA = " & empCodigo & " " & condiciones & _
        "ORDER BY NUMSUCURSAL, NUMCOMPROBANTE, A.FECHAAJUSTE, NUMERO, LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo2") = dr("FECHAAJUSTE")
                    row.Item("Campo3") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("NUMCONCEPTO")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Campo7") = dr("CODIGOBARRA")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Campo9") = dr("SUCURSAL")
                    row.Item("Campo10") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo11") = dr("CONCEPTO")
                    row.Item("Campo12") = dr("TIPO")

                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Numero5") = dr("CANTIDAD")

                    If tipoCosto = 0 Then
                        row.Item("Numero6") = dr("COSTOPPRECALCULADO")
                        row.Item("Numero7") = dr("COSTOPPRECALCULADO") * dr("CANTIDAD")
                    Else
                        row.Item("Numero6") = dr("COSTOULTIMO")
                        row.Item("Numero7") = dr("COSTOULTIMO") * dr("CANTIDAD")
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        If tipoCosto = 0 Then
                            row.Item("Numero10") = dr("COSTOPPRECALCULADO") * dr("CANTIDAD")
                        Else
                            row.Item("Numero10") = dr("COSTOULTIMO") * dr("CANTIDAD")
                        End If
                    Else
                        If tipoCosto = 0 Then
                            row.Item("Numero10") = dr("COSTOPPRECALCULADO") * dr("COTIZACION") / cotizacion * dr("CANTIDAD")
                        Else
                            row.Item("Numero10") = dr("COSTOULTIMO") * dr("COTIZACION") / cotizacion * dr("CANTIDAD")
                        End If
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursalDescripcionDesde
                row.Item("Campo17") = sucursalDescripcionHasta
                row.Item("Campo18") = comprobanteDescripcionDesde
                row.Item("Campo19") = comprobanteDescripcionHasta
                row.Item("Campo20") = numeroDesde
                row.Item("Campo21") = numeroHasta
                row.Item("Campo14") = fechaDesde
                row.Item("Campo15") = fechaHasta
                row.Item("Campo28") = moneda
                row.Item("Campo29") = cotizacion

                If tipoCosto = 0 Then
                    row.Item("Campo30") = "Promedio"
                Else
                    row.Item("Campo30") = "Unitario"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaCompras(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
   ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
   ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
   ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
   ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
   ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
   ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
   ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
   ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
   ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
   ByVal fecha_desde As String, ByVal fecha_hasta As String, _
   ByVal condiciones As String, ByVal titulo As Byte, _
   ByVal tipoCosto As Byte, ByVal agrupar As Byte, ByVal orden As Byte) As DataSet
        ds.Clear()
        sql = ""
        sql = " SELECT RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        " RTRIM (C.NUMCOMPRA) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(PRO.APELLIDO)+', '+RTRIM(PRO.NOMBRE)) AS PROVEEDOR, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, C.TOTALIVA, " & _
        " RTRIM(M.DESMONEDA) AS MONEDA, " & _
        " C.CODCOMPRA AS CODCOMPRA, " & _
        " C.COTIZACION1 AS COTIZACION, " & _
        " C.COTIZACION2 AS COTIZACION2, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(T.NUMTIPOCOMPRO))+LTRIM(RTRIM(T.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',10-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, " & _
        " RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " CD.CANTIDADCOMPRA AS CANTIDAD, " & _
        " CD.COSTOUNITARIO AS COSTOUNITARIO, " & _
        " CD.COSTOBRUTO AS COSTOBRUTO, " & _
        " CASE WHEN CD.FACTORPROMEDIO > 0 THEN (CD.COSTOUNITARIO + CD.FACTORPROMEDIO) " & _
        " ELSE 0 END AS COSTOFINAL, " & _
        " CD.CANTIDADCOMPRA * CD.COSTOUNITARIO AS TOTAL, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, " & _
        " P.CODMONEDA AS CODMONEDAPRODUCTO, " & _
        " P.CODPRODUCTO AS CODPRODUCTO, " & _
        " P.CODLINEA AS CODLINEA, " & _
        " ISNULL(CD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO, " & _
        " ISNULL((SELECT FACTORVENTA FROM COTIZACION WHERE FECHAMOVIMIENTO = " & _
        " (SELECT  MAX(FECHAMOVIMIENTO) AS MAXIMO FROM COTIZACION WHERE CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO <= C.FECHACOMPRA)AND CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECGRA,103) AS FECHAINGRESO, M.CODMONEDA AS CODMONEDA,CONVERT(VARCHAR(10),CD.FECHAVCTO,103) AS FECHAVENCIMIENTO, " & _
        " C.MODALIDADPAGO, ISNULL(RTRIM(PLA.DESPLANCUENTA), '') AS CUENTAMERCADERIA " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE T ON C.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON C.CODPROVEEDOR = PRO.CODPROVEEDOR " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PLA ON P.CUENTAMERCADERIA = PLA.CODPLANCUENTA " & _
        " WHERE P.CODEMPRESA = " & empCodigo & " " & condiciones & " "

        'If agrupar = 0 Then
        '    sql = sql & " ORDER BY NUMSUCURSALORDEN, NUMTIPOCOMPROORDEN, NROCOMPROBANTE, CD.LINEANUMERO "
        'Else
        '    If orden = 0 Then
        '        sql = sql & " ORDER BY ORDENFECHACOMPRA, CD.LINEANUMERO "
        '    Else
        '        sql = sql & " ORDER BY C.CODCOMPRA, CD.LINEANUMERO "
        '    End If
        'End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()
                    row.Item("Campo1") = dr("SUCURSAL")
                    row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NROCOMPROBANTE")
                    row.Item("Campo7") = dr("CODIGO")
                    row.Item("Campo9") = "0"
                    row.Item("Campo2") = dr("FECHACOMPRA")
                    row.Item("Campo5") = dr("PROVEEDOR")
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("TOTALGRAVADA")
                    row.Item("Numero3") = dr("TOTALIVA")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Numero5") = dr("CANTIDAD")
                    row.Item("Numero8") = dr("TOTALDESCUENTO")
                    row.Item("Numero9") = dr("TOTALCOMPRA")
                    row.Item("Campo13") = dr("CUENTAMERCADERIA")
                    row.Item("Campo14") = dr("FECHAVENCIMIENTO")

                    If dr("MODALIDADPAGO") = "0" Then
                        row.Item("Campo12") = "Contado"
                    Else
                        row.Item("Campo12") = "Crédito"
                    End If

                    row.Item("Numero6") = dr("COSTOBRUTO")

                    If dr("CODMONEDA") = moneda_informe Then
                        row.Item("Numero7") = Math.Round(dr("COSTOBRUTO") * dr("CANTIDAD"), candecimales)
                        row.Item("Numero10") = dr("TOTALCOMPRA")
                    Else
                        row.Item("Numero7") = dr("COSTOBRUTO") * dr("CANTIDAD")
                        row.Item("Numero10") = Math.Round((dr("TOTALCOMPRA") * dr("COTIZACION")) / cotizacion, candecimales)
                    End If

                    row.Item("Numero12") = dr("COSTOFINAL")
                    row.Item("Campo20") = dr("CODCOMPRA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                If tipoCosto = 0 Then
                    row.Item("Campo2") = "Promedio"
                Else
                    row.Item("Campo2") = "Unitario"
                End If
                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo26") = moneda_descripcion_desde
                row.Item("Campo27") = moneda_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta
                row.Item("Campo28") = moneda_descripcion
                row.Item("Campo29") = cotizacion
                ds.Tables("Cabecera").Rows.Add(row)
            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function


    Public Function infControlCargaComprasSinCosto(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
      ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
      ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
      ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
      ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
      ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
      ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
      ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
      ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
      ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
      ByVal fecha_desde As String, ByVal fecha_hasta As String, _
      ByVal condiciones As String, ByVal titulo As Byte, _
      ByVal tipoCosto As Byte, ByVal agrupar As Byte, ByVal orden As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        " RTRIM (C.NUMCOMPRA) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(PRO.APELLIDO)+', '+RTRIM(PRO.NOMBRE)) AS PROVEEDOR, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, C.TOTALIVA, " & _
        " RTRIM(M.DESMONEDA) AS MONEDA, " & _
        " C.CODCOMPRA AS CODCOMPRA, " & _
        " C.COTIZACION1 AS COTIZACION, " & _
        " C.COTIZACION2 AS COTIZACION2, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(T.NUMTIPOCOMPRO))+LTRIM(RTRIM(T.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',10-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, " & _
        " RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " CD.CANTIDADCOMPRA AS CANTIDAD, " & _
        " CD.COSTOUNITARIO AS COSTOUNITARIO, " & _
        " CD.COSTOBRUTO AS COSTOBRUTO, " & _
        " CASE WHEN CD.FACTORPROMEDIO > 0 THEN (CD.COSTOUNITARIO + CD.FACTORPROMEDIO) " & _
        " ELSE 0 END AS COSTOFINAL, " & _
        " CD.CANTIDADCOMPRA * CD.COSTOUNITARIO AS TOTAL, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, " & _
        " P.CODMONEDA AS CODMONEDAPRODUCTO, " & _
        " P.CODPRODUCTO AS CODPRODUCTO, " & _
        " P.CODLINEA AS CODLINEA, " & _
        " ISNULL(CD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO, " & _
        " ISNULL((SELECT FACTORVENTA FROM COTIZACION WHERE FECHAMOVIMIENTO = " & _
        " (SELECT  MAX(FECHAMOVIMIENTO) AS MAXIMO FROM COTIZACION WHERE CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO <= C.FECHACOMPRA)AND CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECGRA,103) AS FECHAINGRESO, M.CODMONEDA AS CODMONEDA, " & _
        " C.MODALIDADPAGO, ISNULL(RTRIM(PLA.DESPLANCUENTA), '') AS CUENTAMERCADERIA " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE T ON C.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON C.CODPROVEEDOR = PRO.CODPROVEEDOR " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PLA ON P.CUENTAMERCADERIA = PLA.CODPLANCUENTA " & _
        " WHERE P.CODEMPRESA = " & empCodigo & " " & condiciones & " "

        'If agrupar = 0 Then
        '    sql = sql & " ORDER BY NUMSUCURSALORDEN, NUMTIPOCOMPROORDEN, NROCOMPROBANTE, CD.LINEANUMERO "
        'Else
        '    If orden = 0 Then
        '        sql = sql & " ORDER BY ORDENFECHACOMPRA, CD.LINEANUMERO "
        '    Else
        '        sql = sql & " ORDER BY C.CODCOMPRA, CD.LINEANUMERO "
        '    End If
        'End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("SUCURSAL")
                    row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NROCOMPROBANTE")
                    row.Item("Campo7") = dr("CODIGO")
                    row.Item("Campo9") = "0"
                    row.Item("Campo2") = dr("FECHACOMPRA")
                    row.Item("Campo5") = dr("PROVEEDOR")
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("TOTALGRAVADA")
                    row.Item("Numero3") = dr("TOTALIVA")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Numero5") = dr("CANTIDAD")
                    row.Item("Numero8") = dr("TOTALDESCUENTO")
                    row.Item("Numero9") = dr("TOTALCOMPRA")
                    row.Item("Campo13") = dr("CUENTAMERCADERIA")

                    If dr("MODALIDADPAGO") = "0" Then
                        row.Item("Campo12") = "Contado"
                    Else
                        row.Item("Campo12") = "Crédito"
                    End If

                    row.Item("Numero6") = dr("COSTOBRUTO")

                    If dr("CODMONEDA") = moneda_informe Then
                        row.Item("Numero7") = Math.Round(dr("COSTOBRUTO") * dr("CANTIDAD"), candecimales)
                        row.Item("Numero10") = dr("TOTALCOMPRA")
                    Else
                        row.Item("Numero7") = dr("COSTOBRUTO") * dr("CANTIDAD")
                        row.Item("Numero10") = Math.Round((dr("TOTALCOMPRA") * dr("COTIZACION")) / cotizacion, candecimales)
                    End If

                    row.Item("Numero12") = dr("COSTOFINAL")
                    row.Item("Campo20") = dr("CODCOMPRA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                If tipoCosto = 0 Then
                    row.Item("Campo2") = "Promedio"
                Else
                    row.Item("Campo2") = "Unitario"
                End If

                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo26") = moneda_descripcion_desde
                row.Item("Campo27") = moneda_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta
                row.Item("Campo28") = moneda_descripcion
                row.Item("Campo29") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaDevolucion(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hasta As String, ByVal vend_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal zona_desde As String, ByVal zona_descripcion_desde As String, _
    ByVal zona_hasta As String, ByVal zona_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT D.CODDEVOLUCION AS CODDEVOLUCION, RTRIM (D.NUMDEVOLUCION) AS NUMERO, RTRIM(T.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " D.PORCENTAJEDESCUENTO AS DESCUENTO, D.COTIZACION1 AS COTIZACION, " & _
        " CONVERT(VARCHAR(10), D.FECGRA, 103) AS FECHAINGRESO, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " D.TOTALEXENTA AS TOTALEXENTA, D.TOTALGRAVADA AS TOTALGRAVADA, " & _
        " D.TOTALIVA AS TOTALIVA, D.TOTALDESCUENTO AS MONTODESCUENTO, " & _
        " (D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) AS TOTALFACTURA, " & _
        " DD.CANTIDADDEVUELTA AS CANTIDAD, " & _
        " DD.PRECIOBRUTO AS PRECIOBRUTO, DD.PRECIONETO AS PRECIONETO, " & _
        " DD.CANTIDADDEVUELTA * DD.PRECIONETO AS TOTALNETO, " & _
        " DD.CANTIDADDEVUELTA * DD.PRECIOBRUTO AS TOTALBRUTO, " & _
        " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CODPRODUCTO AS CODPRODUCTO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, P.CODLINEA AS CODLINEA, " & _
        " ISNULL(RTRIM(Z.DESZONA),'') AS ZONA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " CL.LIMCREDITO AS LIMITECREDITO " & _
        " FROM DEVOLUCION D INNER JOIN TIPOCOMPROBANTE T ON D.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON D.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
        " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN PRODUCTOS P ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN VENTAS V ON D.CODVENTA = V.CODVENTA " & _
        " WHERE D.CODEMPRESA =  " & empCodigo & "  AND D.ESTADO = 0  " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, FECHADEVOLUCION, NUMTIPOCOMPRO, NUMERO, LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo2") = dr("FECHADEVOLUCION")
                    row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo15") = dr("SUCURSAL")
                    row.Item("Campo17") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo6") = dr("VENDEDOR")
                    row.Item("Campo7") = dr("MONEDA")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Campo10") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo12") = dr("ZONA")
                    row.Item("Campo14") = dr("NUMCLIENTE")
                    row.Item("Numero1") = dr("COTIZACION")
                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("PRECIOBRUTO")
                    row.Item("Numero4") = dr("PRECIONETO")

                    row.Item("Numero13") = Math.Round(dr("TOTALBRUTO"), candecimales)

                    row.Item("Numero6") = dr("TOTALEXENTA")
                    row.Item("Numero7") = dr("TOTALGRAVADA")
                    row.Item("Numero8") = dr("TOTALIVA")
                    'row.Item("Numero9") = dr("MONTODESCUENTO")
                    row.Item("Numero10") = dr("TOTALFACTURA")
                    row.Item("Numero11") = dr("DESCUENTO")

                    row.Item("Campo13") = "NORMAL"

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero12") = dr("TOTALFACTURA")
                        row.Item("Numero5") = dr("TOTALNETO")
                    Else
                        row.Item("Numero12") = (dr("TOTALFACTURA") * dr("COTIZACION")) / cotizacion
                        row.Item("Numero5") = (dr("TOTALNETO") * dr("COTIZACION")) / cotizacion
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo20") = vend_descripcion_desde
                row.Item("Campo21") = vend_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo26") = zona_descripcion_desde
                row.Item("Campo27") = zona_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaDevolucionObservacion(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hasta As String, ByVal vend_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal zona_desde As String, ByVal zona_descripcion_desde As String, _
    ByVal zona_hasta As String, ByVal zona_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " DECLARE @CODEMPRESA NUMERIC(18) " & _
        " SET @CODEMPRESA =  " & empCodigo & " " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " MONTH(D.FECHADEVOLUCION) AS MES, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " REPLICATE('0',5-LEN(RTRIM(TCL.NUMTIPOCLIENTE)))+LTRIM(RTRIM(TCL.NUMTIPOCLIENTE)) AS NUMTIPOCLIENTEORDEN, " & _
        " RTRIM(TCL.NUMTIPOCLIENTE) AS NUMTIPOCLIENTE, RTRIM(TCL.DESTIPOCLIENTE) AS DESTIPOCLIENTE, " & _
        " D.NUMDEVOLUCION AS NUMDEVOLUCION, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " ISNULL(D.TOTALGRAVADA,0) AS TOTALGRAVADA, " & _
        " ISNULL(D.TOTALGRAVADA * D.COTIZACION1,0) AS TOTALGRAVADAINFORME, " & _
        " ISNULL(D.TOTALEXENTA,0) AS TOTALEXENTA, " & _
        " ISNULL(D.TOTALEXENTA * D.COTIZACION1,0) AS TOTALEXENTAINFORME, " & _
        " ISNULL(D.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
        " ISNULL(D.TOTALDESCUENTO * D.COTIZACION1,0) AS TOTALDESCUENTOINFORME, " & _
        " ISNULL(D.TOTALIVA,0) AS TOTALIVA, " & _
        " ISNULL(D.TOTALIVA * D.COTIZACION1,0) AS TOTALIVAINFORME, " & _
        " TOTALDEVOLUCION AS TOTALDEVOLUCION, " & _
        " ISNULL(D.TOTALDEVOLUCION * D.COTIZACION1,0) AS TOTALDEVOLUCIONINFORME, " & _
        " D.CODMONEDA AS CODMONEDA, RTRIM(U.DESUSUARIO) AS DESUSUARIO, " & _
        " ISNULL(RTRIM(V.NUMVENTA),'') AS NUMVENTA, " & _
        " ISNULL(RTRIM(TV.NUMTIPOCOMPRO),'') + ' -' AS NUMCOMPROBANTEVENTA, " & _
        " ISNULL(RTRIM(CL.RUC),'') AS RUC, ISNULL(RTRIM(D.OBSERVACION), '') AS OBSERVACION, " & _
        " VE.NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS DESVENDEDOR, " & _
        " ISNULL((SELECT MAX(C.CODCOBRANZA) FROM COBRANZAS C " & _
        " WHERE C.CODCOMPROBANTE = D.CODCOMPROBANTE AND CONVERT(NUMERIC, C.NUMCOMPROBANTE) = CONVERT(NUMERIC, D.NUMDEVOLUCION)),0) AS CONTROL " & _
        " FROM DEVOLUCION D INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON  D.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = D.CODVENDEDOR " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN USUARIO U ON U.CODUSUARIO = D.CODUSUARIO " & _
        " LEFT OUTER JOIN VENTAS V ON D.CODVENTA = V.CODVENTA " & _
        " LEFT OUTER JOIN TIPOCOMPROBANTE TV ON V.CODCOMPROBANTE = TV.CODCOMPROBANTE " & _
        " AND U.CODEMPRESA = D.CODEMPRESA " & _
        " INNER JOIN TIPOCLIENTE TCL ON TCL.CODTIPOCLIENTE = CL.CODTIPOCLIENTE " & _
        " WHERE D.CODEMPRESA = @CODEMPRESA AND D.ESTADO = 0 " & condiciones & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo15") = dr("DESSUCURSAL")
                    row.Item("Campo6") = dr("NUMCOMPROBANTEVENTA")
                    If dr("CONTROL") = 0 Then
                        If dr("NUMVENTA") = "" Then
                            row.Item("Campo5") = "                  *"
                        Else
                            row.Item("Campo5") = dr("NUMVENTA") & " *"
                        End If
                    Else
                        row.Item("Campo5") = dr("NUMVENTA")
                    End If

                    row.Item("Campo3") = dr("FECHADEVOLUCION")
                    row.Item("Campo4") = dr("RUC")
                    row.Item("Campo18") = dr("NUMDEVOLUCION")
                    row.Item("Campo8") = dr("NUMCLIENTE")
                    row.Item("Campo9") = dr("CLIENTE")
                    row.Item("Campo10") = dr("OBSERVACION")
                    row.Item("campo17") = dr("DESVENDEDOR")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero2") = dr("TOTALGRAVADA") - dr("TOTALDESCUENTO")
                        row.Item("Numero3") = dr("TOTALEXENTA")
                        row.Item("Numero6") = dr("TOTALIVA")
                        row.Item("Numero5") = dr("TOTALDEVOLUCION")
                    Else
                        row.Item("Numero2") = Math.Round(dr("TOTALGRAVADAINFORME") / cotizacion, candecimales) - Math.Round(dr("TOTALDESCUENTOINFORME") / cotizacion, candecimales)
                        row.Item("Numero3") = Math.Round(dr("TOTALEXENTAINFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("TOTALIVAINFORME") / cotizacion, candecimales)
                        row.Item("Numero5") = Math.Round(dr("TOTALDEVOLUCIONINFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo20") = vend_descripcion_desde
                row.Item("Campo21") = vend_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo26") = zona_descripcion_desde
                row.Item("Campo27") = zona_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaInventario(ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursalDesde As String, ByVal sucursalDescripcionDesde As String, _
    ByVal sucursalHasta As String, ByVal sucursalDescripcionHasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal TARJETA As Long, _
    ByVal ESN As Long, ByVal SIMCARD As Long, _
    ByVal mostrarDetalle As Boolean, ByVal titulo As Byte, ByVal tipoCosto As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
          " CONVERT(VARCHAR(10),I.FECHAINVENTARIO,103) AS FECHAINVENTARIO, RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPRO,  " & _
          " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (I.NUMINVENTARIO) AS NROINVENTARIO,  " & _
          " RTRIM(M.DESMONEDA) AS MONEDA, I.TIPOINVENTARIO AS TIPOINVENTARIO, P.CODPRODUCTO, I.COTIZACION1 AS COTIZACION, " & _
          " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, IND.CANTIDAD AS CANTIDAD,  " & _
          " P.CODMONEDA AS CODMONEDA, " & _
          " P.ULTIMOCOSTO AS ULTIMOCOSTOINFORME, P.ULTIMOCOSTO*(SELECT MAX(FACTORVENTA) FROM COTIZACION C WHERE C.CODMONEDA = P.CODMONEDA " & _
          " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA = P.CODMONEDA)) AS ULTIMOCOSTO,  " & _
          " CASE M.DECIMALES WHEN 0 THEN ROUND(IND.CANTIDAD * P.ULTIMOCOSTO, 0) " & _
          " ELSE ROUND(IND.CANTIDAD * P.ULTIMOCOSTO, " & candecimales & ") END AS TOTAL, " & _
          " IND.CANTIDAD * P.ULTIMOCOSTO*(SELECT MAX(FACTORVENTA) FROM COTIZACION C WHERE C.CODMONEDA = P.CODMONEDA " & _
          " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA = P.CODMONEDA)) AS TOTALINFORME,  " & _
          " CONVERT(VARCHAR(10),I.FECGRA,103) AS FECHAINGRESO, M.CODMONEDA, P.CODMONEDA  " & _
          " FROM INVENTARIO I " & _
          " INNER JOIN INVENTARIODETALLE IND ON I.CODINVENTARIO = IND.CODINVENTARIO " & _
          " INNER JOIN PRODUCTOS P ON IND.CODPRODUCTO = P.CODPRODUCTO " & _
          " INNER JOIN SUCURSAL S ON I.CODSUCURSAL = S.CODSUCURSAL " & _
          " INNER JOIN MONEDA M ON I.CODMONEDA = M.CODMONEDA " & _
          " INNER JOIN TIPOCOMPROBANTE T ON I.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
          " WHERE I.CODEMPRESA = " & empCodigo & " AND I.ESTADO = 0 " & condiciones & " " & _
          " ORDER BY S.NUMSUCURSAL, I.TIPOINVENTARIO, T.NUMTIPOCOMPRO, FECHAINVENTARIO, I.NUMINVENTARIO, LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo10") = dr("SUCURSAL")

                    If dr("TIPOINVENTARIO") = 0 Then
                        row.Item("Campo5") = "PARCIAL"
                    Else
                        row.Item("Campo5") = "GENERAL"
                    End If

                    row.Item("Campo3") = dr("NUMCOMPRO")
                    row.Item("Campo9") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NROINVENTARIO")
                    row.Item("Campo2") = dr("FECHAINVENTARIO")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Campo7") = dr("CODIGO")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Numero5") = dr("CANTIDAD")
                    row.Item("Numero5") = dr("CANTIDAD")
                    row.Item("Numero7") = dr("TOTAL")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero10") = Math.Round(dr("TOTAL"), candecimales)
                        row.Item("Numero6") = dr("ULTIMOCOSTOINFORME")
                    Else
                        row.Item("Numero10") = Math.Round(dr("TOTALINFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("ULTIMOCOSTO") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursalDescripcionDesde
                row.Item("Campo17") = sucursalDescripcionHasta
                row.Item("Campo18") = comprobanteDescripcionDesde
                row.Item("Campo19") = comprobanteDescripcionHasta
                row.Item("Campo20") = numeroDesde
                row.Item("Campo21") = numeroHasta
                row.Item("Campo14") = fechaDesde
                row.Item("Campo15") = fechaHasta
                row.Item("Campo29") = moneda
                row.Item("Numero2") = cotizacion

                'If tipoCosto = 0 Then
                '    row.Item("Campo30") = "Promedio"
                'Else
                '    row.Item("Campo30") = "Unitario"
                'End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaNotaCredito(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, _
    ByVal titulo As Byte) As DataSet

        ds.Clear()


        sql = ""
        sql = " DECLARE @CODEMPRESA NUMERIC(18) " & _
                " SET @CODEMPRESA = " & empCodigo & " " & _
                " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
                " RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
                " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
                " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
                " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
                " D.NUMDEVOLUCION AS NUMDEVOLUCION, " & _
                " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
                " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                " ISNULL(D.TOTALGRAVADA,0) - ISNULL(D.TOTALIVA,0) AS TOTALGRAVADA, " & _
                " ISNULL(D.TOTALGRAVADA*D.COTIZACION1,0) - ISNULL(D.TOTALIVA*D.COTIZACION1,0) AS TOTALGRAVADAINFORME, " & _
                " ISNULL(D.TOTALEXENTA,0) AS TOTALEXENTA, " & _
                " ISNULL(D.TOTALEXENTA*D.COTIZACION1,0) AS TOTALEXENTAINFORME, " & _
                " ISNULL(D.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
                " ISNULL(D.TOTALDESCUENTO*D.COTIZACION1,0) AS TOTALDESCUENTOINFORME, " & _
                " ISNULL(D.TOTALIVA,0) AS TOTALIVA, " & _
                " ISNULL(D.TOTALIVA*D.COTIZACION1,0) AS TOTALIVAINFORME, " & _
                " ISNULL(D.TOTALGRAVADA,0) + ISNULL(D.TOTALEXENTA,0) - ISNULL(D.TOTALDESCUENTO,0) AS TOTALFACTURA, " & _
                " ISNULL(D.TOTALGRAVADA*D.COTIZACION1,0) + ISNULL(D.TOTALEXENTA*D.COTIZACION1,0) - ISNULL(D.TOTALDESCUENTO*D.COTIZACION1,0) AS TOTALFACTURAINFORME, " & _
                " D.CODMONEDA AS CODMONEDA " & _
                " FROM DEVOLUCION  D INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
                " INNER JOIN TIPOCOMPROBANTE TC ON  D.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                " INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
                " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
                " WHERE D.CODEMPRESA = @CODEMPRESA  AND D.ESTADO = 0  " & condiciones & " " & _
                " ORDER BY NUMSUCURSAL,D.FECHADEVOLUCION,NUMTIPOCOMPRO,NUMDEVOLUCION "


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql


            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo15") = dr("DESSUCURSAL")
                    row.Item("Campo2") = dr("FECHADEVOLUCION")
                    row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo17") = dr("DESCOMPROBANTE")
                    row.Item("Campo18") = dr("NUMDEVOLUCION")
                    row.Item("Campo8") = dr("NUMCLIENTE")
                    row.Item("Campo9") = dr("CLIENTE")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero2") = dr("TOTALGRAVADA")
                        row.Item("Numero3") = dr("TOTALEXENTA")
                        row.Item("Numero4") = dr("TOTALDESCUENTO")
                        row.Item("Numero6") = dr("TOTALIVA")
                        row.Item("Numero5") = dr("TOTALFACTURA")
                    Else
                        row.Item("Numero2") = Math.Round(dr("TOTALGRAVADAINFORME") / cotizacion, candecimales)
                        row.Item("Numero3") = Math.Round(dr("TOTALEXENTAINFORME") / cotizacion, candecimales)
                        row.Item("Numero4") = Math.Round(dr("TOTALDESCUENTOINFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("TOTALIVAINFORME") / cotizacion, candecimales)
                        row.Item("Numero5") = Math.Round(dr("TOTALFACTURAINFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaOrden(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(OC.NUMORDENCOMPRA) AS NUMORDENCOMPRA, OC.PLAZOENTREGA, " & _
              " CONVERT(VARCHAR(10),OC.FECHAORDEN,103) AS FECHAORDEN, " & _
              " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
              " OCD.CANTIDAD AS CANTIDAD, OCD.COSTO AS COSTO, ISNULL(OCD.CANTIDADAUTORI,0) AS CANTAUTORIZADO, " & _
              " OC.COTIZACION1 AS COTIZACION1, OC.COTIZACION2 AS COTIZACION2, " & _
              " OCD.CANTIDAD*OCD.COSTO AS TOTAL, P.CODLINEA AS CODLINEA, " & _
              " (OCD.CANTIDAD*OCD.COSTO) * OC.COTIZACION1 AS TOTALINFORME, " & _
              " OC.CODMONEDA AS CODMONEDA,RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
              " RTRIM(PRO.NUMPROVEEDOR) AS NUMPROVEEDOR, RTRIM(PRO.APELLIDO)+' '+RTRIM(PRO.NOMBRE) AS DESPROVEEDOR, " & _
              " RTRIM(TC.NUMTIPOCOMPRO) AS TIPOCOMPROBANTE,RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
              " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL " & _
              " FROM ORDENCOMPRA OC " & _
              " INNER JOIN ORDENCOMPRADETALLE OCD ON OC.CODORDENCOMPRA = OCD.CODORDENCOMPRA " & _
              " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = OCD.CODPRODUCTO " & _
              " INNER JOIN MONEDA M ON M.CODMONEDA = OC.CODMONEDA " & _
              " INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = OC.CODPROVEEDOR " & _
              " INNER JOIN TIPOCOMPROBANTE TC ON OC.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
              " INNER JOIN SUCURSAL S ON OC.CODSUCURSAL = S.CODSUCURSAL " & _
              " WHERE OC.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
              " ORDER BY NUMSUCURSAL, TIPOCOMPROBANTE, NUMORDENCOMPRA, LINEANUMERO "
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("SUCURSAL")
                    row.Item("Campo3") = dr("DESCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMORDENCOMPRA")
                    row.Item("Campo7") = dr("CODIGO")
                    row.Item("Campo9") = "0"
                    row.Item("Campo2") = dr("FECHAORDEN")
                    row.Item("Campo5") = dr("DESPROVEEDOR")
                    row.Item("Campo6") = dr("DESMONEDA")
                    row.Item("Numero4") = dr("COTIZACION1")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Numero5") = dr("CANTIDAD")
                    row.Item("Numero8") = dr("CANTAUTORIZADO")
                    row.Item("Numero6") = dr("COSTO")
                    row.Item("Numero7") = dr("TOTAL")

                    If dr("CODMONEDA") = moneda_informe Then
                        row.Item("Numero10") = dr("TOTAL")
                    Else
                        row.Item("Numero10") = dr("TOTALINFORME") / cotizacion
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo26") = moneda_descripcion_desde
                row.Item("Campo27") = moneda_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta
                row.Item("Campo28") = moneda_descripcion
                row.Item("Campo29") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaTransferencias(ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursalOrigenDesde As String, ByVal sucursalOrigenDescripcionDesde As String, _
    ByVal sucursalOrigenHasta As String, ByVal sucursalOrigenDescripcionHasta As String, _
    ByVal sucursalDestinoDesde As String, ByVal sucursalDestinoDescripcionDesde As String, _
    ByVal sucursalDestinoHasta As String, ByVal sucursalDestinoDescripcionHasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, ByVal tipoCosto As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(SO.NUMSUCURSAL) AS NUMSUCURSALORIGEN, RTRIM(SO.DESSUCURSAL) AS DESSUCURSALORIGEN, " & _
        "RTRIM(SD.NUMSUCURSAL) AS NUMSUCURSALDESTINO, RTRIM(SD.DESSUCURSAL) AS DESSUCURSALDESTINO, " & _
        "CONVERT(VARCHAR(10),TRA.FECHATRANSFERENCIA,103) AS FECHATRANSFERENCIA, " & _
        "RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        "TRA.CODTRANSFERENCIA, RTRIM(TRA.NUMTRANSFERENCIA)AS NUMERO, " & _
        "M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, TRA.COTIZACION1 AS COTIZACION, " & _
        "P.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        "P.CODLINEA AS CODLINEA, " & _
        "TRAD.CANTIDADTRANFERENCIA AS CANTIDAD, " & _
        "TRAD.COSTOULTIMO AS COSTOULTIMO, ISNULL(TRAD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
        "ISNULL(RTRIM(TRA.OBSERVACION),'') AS OBSERVACION " & _
        "FROM TRANFERENCIA TRA INNER JOIN SUCURSAL SO ON TRA.CODSUCURSAL = SO.CODSUCURSAL " & _
        "INNER JOIN SUCURSAL SD ON TRA.SUCURSALDESTINO = SD.CODSUCURSAL " & _
        "INNER JOIN TIPOCOMPROBANTE T ON TRA.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        "INNER JOIN MONEDA M ON TRA.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN TRANSFERENCIASDETALLE TRAD ON TRA.CODTRANSFERENCIA = TRAD.CODTRANSFERENCIA " & _
        "INNER JOIN PRODUCTOS P ON TRAD.CODPRODUCTO = P.CODPRODUCTO " & _
        "WHERE TRA.CODEMPRESA = " & empCodigo & " " & condiciones & _
        "ORDER BY NUMSUCURSALORIGEN, NUMSUCURSALDESTINO, NUMTIPOCOMPRO, TRA.FECHATRANSFERENCIA, NUMERO, LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSALORIGEN")
                    row.Item("Campo2") = dr("FECHATRANSFERENCIA")
                    row.Item("Campo3") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("NUMSUCURSALDESTINO")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Campo7") = dr("CODIGO")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Campo9") = dr("DESSUCURSALORIGEN")
                    row.Item("Campo10") = dr("DESSUCURSALDESTINO")
                    row.Item("Campo11") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo20") = dr("OBSERVACION")

                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Numero5") = dr("CANTIDAD")

                    If tipoCosto = 0 Then
                        row.Item("Numero6") = dr("COSTOPROMEDIO")
                        row.Item("Numero7") = dr("COSTOPROMEDIO") * dr("CANTIDAD")
                    Else
                        row.Item("Numero6") = dr("COSTOULTIMO")
                        row.Item("Numero7") = dr("COSTOULTIMO") * dr("CANTIDAD")
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        If tipoCosto = 0 Then
                            row.Item("Numero8") = Math.Round(dr("COSTOPROMEDIO") * dr("CANTIDAD"), candecimales)
                        Else
                            row.Item("Numero8") = Math.Round(dr("COSTOULTIMO") * dr("CANTIDAD"), candecimales)
                        End If
                    Else
                        If tipoCosto = 0 Then
                            row.Item("Numero8") = Math.Round(dr("COSTOPROMEDIO") * dr("CANTIDAD") * dr("COTIZACION") / cotizacion, candecimales)
                        Else
                            row.Item("Numero8") = Math.Round(dr("COSTOULTIMO") * dr("CANTIDAD") * dr("COTIZACION") / cotizacion, candecimales)
                        End If
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursalOrigenDescripcionDesde
                row.Item("Campo17") = sucursalOrigenDescripcionHasta
                row.Item("Campo22") = sucursalDestinoDescripcionDesde
                row.Item("campo24") = sucursalDestinoDescripcionHasta
                row.Item("Campo18") = comprobanteDescripcionDesde
                row.Item("Campo19") = comprobanteDescripcionHasta
                row.Item("Campo6") = numeroDesde
                row.Item("Campo7") = numeroHasta
                row.Item("Campo14") = fechaDesde
                row.Item("Campo15") = fechaHasta
                row.Item("Campo28") = moneda
                row.Item("Campo29") = cotizacion

                If tipoCosto = 0 Then
                    row.Item("Campo30") = "Promedio"
                Else
                    row.Item("Campo30") = "Unitario"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaVentas(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hasta As String, ByVal vend_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal zona_desde As String, ByVal zona_descripcion_desde As String, _
    ByVal zona_hasta As String, ByVal zona_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, ByVal total As Byte, _
    ByVal tipoVenta As Byte, ByVal modalidad As Byte, ByVal orden As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT V.CODVENTA AS CODVENTA, RTRIM (V.NUMVENTA) AS NUMERO, RTRIM(T.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " V.PORCENTAJEDESCUENTO AS DESCUENTO, V.COTIZACION1 AS COTIZACION, " & _
        " CONVERT(VARCHAR(10), V.FECGRA, 103) AS FECHAINGRESO, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " V.TOTALEXENTA AS TOTALEXENTA, V.TOTALGRAVADA AS TOTALGRAVADA, " & _
        " V.TOTALIVA AS TOTALIVA, V.ESTADO AS ESTADO, V.TOTALDESCUENTO AS MONTODESCUENTO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS TOTALFACTURA, " & _
        " VD.CANTIDADVENTA AS CANTIDAD, VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO, VD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
        " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CODPRODUCTO AS CODPRODUCTO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(VE.NUMVENDEDOR) + ' - ' + RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(Z.DESZONA) AS ZONA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " CL.LIMCREDITO AS LIMITECREDITO, V.MODALIDADPAGO, V.FECGRA AS FECGRA, V.TIPOPRECIO, " & _
        " ISNULL(RTRIM(TL.DESLISTA), '') AS TIPOLISTA " & _
        " FROM VENTAS V INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN TIPOLISTA TL ON TL.CODLISTA = CL.CODLISTA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0 " & condiciones & " "


        '''ORDER BY NUMSUCURSAL, CAST(" & orden & " AS DATETIME), VENDEDOR, NUMERO, LINEANUMERO 
        ''se quito porque se envia un criterio de ordenacion dado por el usuario

        '''" ORDER BY NUMSUCURSAL, CAST(V.FECHAVENTA AS DATETIME), NUMTIPOCOMPRO, NUMERO, LINEANUMERO " se quito el corte por tipo de comprobante

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    If orden = "V.FECHAVENTA" Then
                        row.Item("Campo2") = dr("FECHAVENTA")
                    Else
                        row.Item("Campo2") = dr("FECHAINGRESO")
                    End If
                    row.Item("Campo15") = dr("SUCURSAL")
                    'row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    'row.Item("Campo17") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo6") = dr("VENDEDOR")
                    row.Item("Campo7") = dr("MONEDA")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Campo12") = dr("ZONA")
                    row.Item("Campo14") = dr("NUMCLIENTE")
                    row.Item("Numero1") = dr("COTIZACION")

                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("PRECIOVENTABRUTO")
                    row.Item("Numero4") = dr("PRECIOVENTANETO")

                    If total = 1 Then
                        row.Item("Numero13") = dr("CANTIDAD") * dr("PRECIOVENTABRUTO")
                    Else
                        row.Item("Numero13") = dr("CANTIDAD") * dr("PRECIOVENTANETO")
                    End If

                    row.Item("Campo10") = dr("TIPOLISTA")

                    row.Item("Numero6") = dr("TOTALEXENTA")
                    row.Item("Numero7") = dr("TOTALGRAVADA")
                    row.Item("Numero8") = dr("TOTALIVA")
                    row.Item("Numero9") = dr("MONTODESCUENTO")
                    row.Item("Numero10") = dr("TOTALFACTURA")
                    row.Item("Numero11") = dr("DESCUENTO")

                    If dr("MODALIDADPAGO") = 0 Then
                        row.Item("Campo13") = "CONTADO"
                    Else
                        row.Item("Campo13") = "CRÉDITO"
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero12") = dr("TOTALFACTURA")
                        row.Item("Numero5") = dr("CANTIDAD") * dr("PRECIOVENTANETO")
                    Else
                        row.Item("Numero12") = (dr("TOTALFACTURA") * dr("COTIZACION")) / cotizacion
                        row.Item("Numero5") = dr("CANTIDAD") * dr("PRECIOVENTANETO") * dr("COTIZACION") / cotizacion
                    End If

                    row.Item("Campo20") = dr("FECGRA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo20") = vend_descripcion_desde
                row.Item("Campo21") = vend_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo26") = zona_descripcion_desde
                row.Item("Campo27") = zona_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                If tipoVenta = 1 Then
                    row.Item("campo3") = "Minorista"
                ElseIf tipoVenta = 2 Then
                    row.Item("campo3") = "Mayorista"
                End If

                If modalidad = 1 Then
                    row.Item("campo4") = "CONTADO"
                ElseIf modalidad = 2 Then
                    row.Item("campo4") = "CRÉDITO"
                Else
                    row.Item("campo4") = "TODOS"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlVentaMayoristaPorDia(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT 1 AS ORDEN, MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA),103) AS FECHA, " & _
        " MAX(V.FECHAVENTA) AS FECHAORDEN, " & _
        " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, MAX(LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE))) AS CLIENTE, " & _
        " MAX(M.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.DESMONEDA)) AS MONEDA, " & _
        " MAX(P.CODPRODUCTO) AS CODPRODUCTO, MAX(RTRIM(P.CODIGOBARRA)) AS CODIGO, MAX(RTRIM(P.DESPRODUCTO)) AS DESCRIPCION, " & _
        " SUM(VD.CANTIDADBRUTA) AS CANTIDADBRUTA, MAX(VD.CANTIDADMINIMA) AS CANTIDADMINIMA, " & _
        " SUM(VD.CANTIDADENVASE) AS CANTIDADENVASE, SUM(VD.CANTIDADVENTA) AS CANTIDAD, " & _
        " MAX(VD.PRECIOVENTANETO) AS PRECIOVENTANETO, MAX(VD.PRECIOVENTABRUTO) AS PRECIOVENTABRUTO, " & _
        " SUM(VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO) AS TOTALBRUTO, " & _
        " SUM(VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO * V.COTIZACION1) AS TOTALBRUTOINFORME, " & _
        " SUM(VD.CANTIDADMINIMA * VD.CANTIDADENVASE * VD.PRECIOVENTABRUTO) AS TOTALBRUTOENVASE, " & _
        " SUM(VD.CANTIDADMINIMA * VD.CANTIDADENVASE * VD.PRECIOVENTABRUTO * V.COTIZACION1) AS TOTALBRUTOENVASEINFORME " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0 " & condiciones & " " & _
        " GROUP BY V.CODSUCURSAL, V.FECHAVENTA, V.CODCLIENTE, V.CODMONEDA, VD.CODPRODUCTO " & _
        " UNION ALL " & _
        " SELECT 2 AS ORDEN, MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA),103) AS FECHA, " & _
        " MAX(V.FECHAVENTA) AS FECHAORDEN, " & _
        " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, MAX(LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE))) AS CLIENTE, " & _
        " MAX(M.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.DESMONEDA)) AS MONEDA, " & _
        " MAX(E.CODENVASE) AS CODPRODUCTO, MAX(RTRIM(E.NUMENVASE)) AS CODIGO, MAX(RTRIM(E.DESENVASE)) AS DESCRIPCION, " & _
        " 0 AS CANTIDADBRUTA, SUM(VE.CANTIDAD) AS CANTIDADMINIMA, " & _
        " ISNULL((SELECT SUM(DD.CANTIDAD) " & _
        " FROM DEVOLUCIONENVASEDETALLE DD INNER JOIN DEVOLUCIONENVASE D ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " WHERE D.CODCLIENTE = V.CODCLIENTE " & _
        " AND D.FECHADEVOLUCION = V.FECHAVENTA " & _
        " AND DD.CODENVASE = VE.CODENVASE), 0) AS CANTIDADENVASE, 0 AS CANTIDAD, " & _
        " 0 AS PRECIOVENTANETO, 0 AS PRECIOVENTABRUTO, " & _
        " 0 AS TOTALBRUTO, " & _
        " 0 AS TOTALBRUTOINFORME, " & _
        " 0 AS TOTALBRUTOENVASE, " & _
        " 0 AS TOTALBRUTOENVASEINFORME " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN VENTASENVASE VE ON VD.CODVENTA = VE.CODVENTA " & _
        " AND VD.CODPRODUCTO = VE.CODPRODUCTO " & _
        " AND VD.LINEANUMERO = VE.LINEANUMERO " & _
        " INNER JOIN ENVASE E ON E.CODENVASE = VE.CODENVASE " & _
        " WHERE VE.CONTROLARPESO = 1 " & _
        " AND V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0 " & condiciones & " " & _
        " GROUP BY V.CODSUCURSAL, V.FECHAVENTA, V.CODCLIENTE, V.CODMONEDA, VE.CODENVASE " & _
        " ORDER BY SUCURSAL, FECHAORDEN, NUMCLIENTE, MONEDA, ORDEN, CODIGO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("SUCURSAL")
                    row.Item("Campo2") = dr("FECHA")
                    row.Item("Campo3") = dr("NUMCLIENTE") + " - " + dr("CLIENTE")
                    row.Item("Campo4") = dr("MONEDA")

                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero14") = dr("CANTIDADBRUTA")
                    row.Item("Numero15") = dr("CANTIDADMINIMA")
                    row.Item("Numero16") = dr("CANTIDADENVASE")

                    row.Item("Numero3") = dr("PRECIOVENTABRUTO")
                    row.Item("Numero4") = dr("PRECIOVENTANETO")

                    'If dr("CANTIDADMINIMA") > 0 Then
                    '    row.Item("Numero13") = Math.Round(dr("CANTIDADMINIMA") * _
                    '    dr("CANTIDADENVASE") * dr("PRECIOVENTABRUTO"), candecimales)
                    'Else
                    '    row.Item("Numero13") = Math.Round(dr("CANTIDAD") * dr("PRECIOVENTABRUTO"), candecimales)
                    'End If

                    'If codMoneda = dr("CODMONEDA") Then
                    '    If dr("CANTIDADMINIMA") > 0 Then
                    '        row.Item("Numero5") = Math.Round(dr("CANTIDADMINIMA") * _
                    '        dr("CANTIDADENVASE") * dr("PRECIOVENTABRUTO"), candecimales)
                    '    Else
                    '        row.Item("Numero5") = Math.Round(dr("CANTIDAD") * dr("PRECIOVENTABRUTO"), candecimales)
                    '    End If
                    'Else
                    '    If dr("CANTIDADMINIMA") > 0 Then
                    '        row.Item("Numero5") = Math.Round(dr("CANTIDADMINIMA") * _
                    '        dr("CANTIDADENVASE") * dr("PRECIOVENTABRUTO") * dr("COTIZACION") / cotizacion, candecimales)
                    '    Else
                    '        row.Item("Numero5") = Math.Round(dr("CANTIDAD") * dr("PRECIOVENTABRUTO") * dr("COTIZACION") / cotizacion, candecimales)
                    '    End If
                    'End If

                    If dr("CANTIDADMINIMA") > 0 Then
                        row.Item("Numero13") = Math.Round(dr("TOTALBRUTOENVASE"), candecimales)
                    Else
                        row.Item("Numero13") = Math.Round(dr("TOTALBRUTO"), candecimales)
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        If dr("CANTIDADMINIMA") > 0 Then
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTOENVASE"), candecimales)
                        Else
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTO"), candecimales)
                        End If
                    Else
                        If dr("CANTIDADMINIMA") > 0 Then
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTOENVASEINFORME")/ cotizacion, candecimales)
                        Else
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTOINFORME") / cotizacion, candecimales)
                        End If
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlVentaMayorista(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal condicionesDevolucion As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT 1 AS ORDEN, MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA),103) AS FECHA, " & _
        " MAX(V.FECHAVENTA) AS FECHAORDEN, " & _
        " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, MAX(LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE))) AS CLIENTE, " & _
        " MAX(M.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.DESMONEDA)) AS MONEDA, " & _
        " MAX(P.CODPRODUCTO) AS CODPRODUCTO, MAX(RTRIM(P.CODIGOBARRA)) AS CODIGO, MAX(RTRIM(P.DESPRODUCTO)) AS DESCRIPCION, " & _
        " SUM(VD.CANTIDADBRUTA) AS CANTIDADBRUTA, MAX(VD.CANTIDADMINIMA) AS CANTIDADMINIMA, " & _
        " SUM(VD.CANTIDADENVASE) AS CANTIDADENVASE, SUM(VD.CANTIDADVENTA) AS CANTIDAD, " & _
        " AVG(VD.PRECIOVENTANETO) AS PRECIOVENTANETO, AVG(VD.PRECIOVENTABRUTO) AS PRECIOVENTABRUTO, " & _
        " SUM(VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO) AS TOTALBRUTO, " & _
        " SUM(VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO * V.COTIZACION1) AS TOTALBRUTOINFORME, " & _
        " SUM(VD.CANTIDADMINIMA * VD.CANTIDADENVASE * VD.PRECIOVENTABRUTO) AS TOTALBRUTOENVASE, " & _
        " SUM(VD.CANTIDADMINIMA * VD.CANTIDADENVASE * VD.PRECIOVENTABRUTO * V.COTIZACION1) AS TOTALBRUTOENVASEINFORME " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0 " & condiciones & " " & _
        " GROUP BY V.CODSUCURSAL, V.CODCLIENTE, V.CODMONEDA, VD.CODPRODUCTO " & _
        " UNION ALL " & _
        " SELECT 2 AS ORDEN, MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA),103) AS FECHA, " & _
        " MAX(V.FECHAVENTA) AS FECHAORDEN, " & _
        " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, MAX(LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE))) AS CLIENTE, " & _
        " MAX(M.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.DESMONEDA)) AS MONEDA, " & _
        " MAX(E.CODENVASE) AS CODPRODUCTO, MAX(RTRIM(E.NUMENVASE)) AS CODIGO, MAX(RTRIM(E.DESENVASE)) AS DESCRIPCION, " & _
        " 0 AS CANTIDADBRUTA, SUM(VE.CANTIDAD) AS CANTIDADMINIMA, " & _
        " ISNULL((SELECT SUM(DD.CANTIDAD) " & _
        " FROM DEVOLUCIONENVASEDETALLE DD INNER JOIN DEVOLUCIONENVASE D ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " WHERE D.CODCLIENTE = V.CODCLIENTE " & condicionesDevolucion & _
        " AND DD.CODENVASE = VE.CODENVASE), 0) AS CANTIDADENVASE, 0 AS CANTIDAD, " & _
        " 0 AS PRECIOVENTANETO, 0 AS PRECIOVENTABRUTO, " & _
        " 0 AS TOTALBRUTO, " & _
        " 0 AS TOTALBRUTOINFORME, " & _
        " 0 AS TOTALBRUTOENVASE, " & _
        " 0 AS TOTALBRUTOENVASEINFORME " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN VENTASENVASE VE ON VD.CODVENTA = VE.CODVENTA " & _
        " AND VD.CODPRODUCTO = VE.CODPRODUCTO " & _
        " AND VD.LINEANUMERO = VE.LINEANUMERO " & _
        " INNER JOIN ENVASE E ON E.CODENVASE = VE.CODENVASE " & _
        " WHERE VE.CONTROLARPESO = 1 " & _
        " AND V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0 " & condiciones & " " & _
        " GROUP BY V.CODSUCURSAL, V.CODCLIENTE, V.CODMONEDA, VE.CODENVASE " & _
        " ORDER BY SUCURSAL, NUMCLIENTE, MONEDA, ORDEN, CODIGO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("SUCURSAL")
                    row.Item("Campo2") = dr("FECHA")
                    row.Item("Campo3") = dr("NUMCLIENTE") + " - " + dr("CLIENTE")
                    row.Item("Campo4") = dr("MONEDA")

                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero14") = dr("CANTIDADBRUTA")
                    row.Item("Numero15") = dr("CANTIDADMINIMA")
                    row.Item("Numero16") = dr("CANTIDADENVASE")

                    row.Item("Numero3") = dr("PRECIOVENTABRUTO")
                    row.Item("Numero4") = dr("PRECIOVENTANETO")

                    If dr("CANTIDADMINIMA") > 0 Then
                        row.Item("Numero13") = Math.Round(dr("TOTALBRUTOENVASE"), candecimales)
                    Else
                        row.Item("Numero13") = Math.Round(dr("TOTALBRUTO"), candecimales)
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        If dr("CANTIDADMINIMA") > 0 Then
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTOENVASE"), candecimales)
                        Else
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTO"), candecimales)
                        End If
                    Else
                        If dr("CANTIDADMINIMA") > 0 Then
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTOENVASEINFORME") / cotizacion, candecimales)
                        Else
                            row.Item("Numero5") = Math.Round(dr("TOTALBRUTOINFORME") / cotizacion, candecimales)
                        End If
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infControlCargaVentasDeposito(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hasta As String, ByVal vend_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal zona_desde As String, ByVal zona_descripcion_desde As String, _
    ByVal zona_hasta As String, ByVal zona_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal TARJETA As Long, _
    ByVal ESN As Long, ByVal SIMCARD As Long, _
    ByVal mostrarDetalle As Boolean, ByVal titulo As Byte) As DataSet
        ds.Clear()

        Dim codproductoaux As String = ""
        Dim numVentaAux As String = ""
        Dim sql1 As String

        Dim cnn As New SqlConnection
        Dim cmd1 As New SqlCommand
        Dim dr1 As SqlDataReader
        Dim cad As String = ""

        sql = ""
        sql = " SELECT V.CODVENTA AS CODVENTA, RTRIM (V.NUMVENTA) AS NUMERO, RTRIM(T.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
            " V.PORCENTAJEDESCUENTO AS DESCUENTO, V.COTIZACION1 AS COTIZACION, " & _
            " CONVERT(VARCHAR(10), V.FECGRA, 103) AS FECHAINGRESO, " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
            " V.TOTALEXENTA AS TOTALEXENTA, V.TOTALGRAVADA AS TOTALGRAVADA, " & _
            " V.TOTALIVA AS TOTALIVA, V.ESTADO AS ESTADO, V.TOTALDESCUENTO AS MONTODESCUENTO, " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS TOTALFACTURA, " & _
            " VD.CANTIDADVENTA AS CANTIDAD, " & _
            " VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO, VD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
            " VD.CANTIDADVENTA * VD.PRECIOVENTANETO AS TOTALNETO, " & _
            " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CODPRODUCTO AS CODPRODUCTO, " & _
            " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(VE.NUMVENDEDOR) + ' - ' + RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, P.CODLINEA AS CODLINEA, " & _
            " RTRIM(Z.DESZONA) AS ZONA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
            " CASE CL.CODTIPOCLIENTE  " & _
            " WHEN 1 THEN (RTRIM(CL.OBSERVACION)+ ' / ' + RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) " & _
            " WHEN 2 THEN (RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) END AS CLIENTE, RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
            " CL.LIMCREDITO AS LIMITECREDITO  " & _
            " FROM VENTAS V INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
            " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
            " INNER JOIN SUCURSAL S ON VD.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR " & _
            " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
            " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
            " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
            " WHERE V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0 " & condiciones & " " & _
            " ORDER BY NUMSUCURSAL, FECHAVENTA, NUMTIPOCOMPRO,NUMERO, CODIGO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            ser.Abrir(cnn)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd1.Connection = cnn

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo2") = dr("FECHAVENTA")
                    row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo15") = dr("SUCURSAL")
                    row.Item("Campo17") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo6") = dr("VENDEDOR")
                    row.Item("Campo7") = dr("MONEDA")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Campo10") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo12") = dr("ZONA")
                    row.Item("Campo14") = dr("NUMCLIENTE")
                    row.Item("Numero1") = dr("COTIZACION")
                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("PRECIOVENTABRUTO")
                    row.Item("Numero4") = dr("PRECIOVENTANETO")
                    row.Item("Numero5") = dr("TOTALNETO")
                    row.Item("Numero6") = dr("TOTALEXENTA")
                    row.Item("Numero7") = dr("TOTALGRAVADA")
                    row.Item("Numero8") = dr("TOTALIVA")
                    row.Item("Numero9") = dr("MONTODESCUENTO")
                    row.Item("Numero10") = dr("TOTALFACTURA")
                    row.Item("Numero11") = dr("DESCUENTO")

                    Dim aux As Long = dr("TOTALFACTURA")
                    Select Case dr("ESTADO")
                        Case 0
                            row.Item("Campo13") = "NORMAL"
                        Case 1
                            row.Item("Campo13") = "ANULADO"
                        Case 9
                            row.Item("Campo13") = "EXCEDIDO"
                    End Select

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero12") = dr("TOTALFACTURA")
                    Else
                        row.Item("Numero12") = (dr("TOTALFACTURA") * dr("COTIZACION")) / cotizacion
                        ''Math.Round(dr("TOTALFACTURA") / cotizacion, candecimales)
                    End If

                    If mostrarDetalle = True And codproductoaux <> dr("CODIGO") Or numVentaAux <> dr("NUMERO") Then
                        'TARJETAS
                        If dr("CODLINEA") = TARJETA Then
                            sql1 = ""
                            sql1 = "SELECT RANGO1 AS RANGO1, RANGO2 AS RANGO2, CANTIDAD FROM VENTASDETALLERANGOS WHERE CODVENTA = " & dr("CODVENTA") & " AND CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                            cad = ""
                            Try
                                cmd1.CommandText = sql1
                                dr1 = cmd1.ExecuteReader

                                If dr1.HasRows = True Then
                                    cad = "-----------------------------------------------------------------------------------------" & vbCrLf
                                    cad = cad & "                          RANGOS DE TPY`S GENERADOS.." & vbCrLf
                                    cad = cad & "-----------------------------------------------------------------------------------------" & vbCrLf & vbCrLf
                                    cad = cad & "DESDE          -          HASTA          -          CANTIDAD " & vbCrLf
                                    cad = cad & "-----------------------------------------------------------------------------------------" & vbCrLf & vbCrLf

                                    Do While dr1.Read
                                        cad = cad & " " & CStr(dr1("RANGO1")) & "    -    " & CStr(dr1("RANGO2")) & "        -          (" & CStr(Math.Round(dr1("CANTIDAD"), candecimales)) & ".00) " & vbCrLf
                                    Loop

                                    cad = cad & vbCrLf
                                    cad = cad & "         " & vbCrLf

                                    row.Item("Campo18") = cad
                                Else
                                    row.Item("Campo18") = "0"
                                End If
                            Catch ex As Exception
                                MsgBox(ex.ToString)
                            Finally
                                dr1.Close()
                            End Try
                            'EQUIPOS - ESN`S
                        ElseIf dr("CODLINEA") = ESN Then
                            sql1 = ""
                            sql1 = "SELECT ESN FROM VENTASSUBDETALLE TSD " & _
                            "INNER JOIN EQUIPOSSTOCK E ON TSD.CODEQUIPO = E.CODEQUIPO  WHERE TSD.CODVENTA = " & dr("CODVENTA") & " AND TSD.CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                            cad = ""
                            Try
                                cmd1.CommandText = sql1
                                dr1 = cmd1.ExecuteReader

                                If dr1.HasRows = True Then
                                    cad = "---------------------------------------------------------------------" & vbCrLf
                                    cad = cad & "                 ESN DE LOS EQUIPOS CARGADOS " & vbCrLf
                                    cad = cad & "--------------------------------------------------------------------" & vbCrLf & vbCrLf
                                    Dim c As String = ""
                                    Dim i As Integer
                                    Do While dr1.Read
                                        c = "*" & CStr(dr1("ESN"))
                                        'For i = 1 To 25 - Len(CStr(dr1("ESN")).Trim)
                                        '    If i = Len(CStr(dr1("ESN")).Trim) Then
                                        '        c = c + "*"
                                        '    Else
                                        '        c = c + " "
                                        '    End If
                                        'Next
                                        cad = cad & c & " /// " : TAB()
                                    Loop

                                    cad = cad & vbCrLf
                                    cad = cad & "         " & vbCrLf

                                    row.Item("Campo18") = cad
                                Else
                                    row.Item("Campo18") = "0"
                                End If
                            Catch ex As Exception
                                MsgBox(ex.ToString)
                            Finally
                                dr1.Close()
                            End Try

                            'SIMCARD
                        ElseIf dr("CODLINEA") = SIMCARD Then
                            sql1 = ""
                            sql1 = "SELECT NUMSINCARD AS NUMSIMCARD FROM VENTASSUBDETALLE TSD " & _
                            "INNER JOIN SIMCCARDSTOCK E ON TSD.CODSIMCARD = E.CODSIMCARD  WHERE TSD.CODVENTA = " & dr("CODVENTA") & " AND TSD.CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                            cad = ""
                            Try
                                cmd1.CommandText = sql1
                                dr1 = cmd1.ExecuteReader

                                If dr1.HasRows = True Then
                                    cad = "---------------------------------------------------------------------" & vbCrLf
                                    cad = cad & "                 NÚMEROS DE SIMCARD´S " & vbCrLf
                                    cad = cad & "--------------------------------------------------------------------" & vbCrLf & vbCrLf

                                    Do While dr1.Read
                                        cad = cad & "*" & CStr(dr1("NUMSIMCARD")) & "* /// " : TAB()
                                    Loop
                                    cad = cad & vbCrLf
                                    cad = cad & "         " & vbCrLf

                                    row.Item("Campo18") = cad
                                Else
                                    row.Item("Campo18") = cad
                                End If
                            Catch ex As Exception
                                MsgBox(ex.ToString)
                            Finally
                                dr1.Close()
                            End Try
                        Else
                            row.Item("Campo18") = "0"
                        End If

                        codproductoaux = dr("CODIGO")
                        numVentaAux = dr("NUMERO")
                    End If
                    ''condicion para saber si se muestra o no el detalle de los rangos generados
                    row.Item("Campo19") = mostrarDetalle

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo20") = vend_descripcion_desde
                row.Item("Campo21") = vend_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo26") = zona_descripcion_desde
                row.Item("Campo27") = zona_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infDepartamento(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(D.NUMDEPARTAMENTO)))+LTRIM(RTRIM(D.NUMDEPARTAMENTO)) AS NUMERO, " & _
              "RTRIM(D.NUMDEPARTAMENTO) AS CODIGO, RTRIM(D.DESDEPARTAMENTO) AS DESCRIPCION, " & _
              "REPLICATE('0',5-LEN(RTRIM(P.NUMPAIS)))+LTRIM(RTRIM(P.NUMPAIS)) AS PAIS, RTRIM(P.NUMPAIS) AS CODIGOPAIS, " & _
              "RTRIM(P.DESPAIS) AS DESPAIS FROM DEPARTAMENTO D INNER JOIN PAIS P ON D.CODPAIS = P.CODPAIS " & _
              "WHERE D.CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " PAIS, NUMERO"
        Else
            sql = sql + " CODIGOPAIS, CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo3") = dr("DESPAIS")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infDescuentoClienteProducto(ByVal orden As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',10-LEN(RTRIM(C.NUMCLIENTE)))+LTRIM(RTRIM(C.NUMCLIENTE)) AS ORDENCLIENTE, " & _
              " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENPRODUCTO, " & _
              " REPLICATE('0',5-LEN(RTRIM(D.CODDESCUENTO)))+LTRIM(RTRIM(D.CODDESCUENTO)) AS ORDENDESCUENTO, " & _
              " RTRIM(C.NUMCLIENTE) AS NUMCLIENTE, RTRIM(C.APELLIDO)+ ' ' +  RTRIM(C.NOMBRE) AS DESCLIENTE, " & _
              " RTRIM(P.CODIGOBARRA) AS NUMPRODUCTO, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, RTRIM(D.NUMDESCUENTO) AS NUMDESCUENTO, " & _
              " D.PORCENTAJEDESCUENTO AS PORCENTAJEDESCUENTO FROM DESCUENTOCLIENTEPRODUCTO DCP " & _
              " INNER JOIN CLIENTES C ON C.CODCLIENTE = DCP.CODCLIENTE " & _
              " INNER JOIN PRODUCTOS  P ON P.CODPRODUCTO = DCP.CODPRODUCTO " & _
              " INNER JOIN DESCUENTOPRODUCTO D ON D.CODDESCUENTO  = DCP.CODDESCUENTO " & _
              " WHERE P.CODEMPRESA = " & empCodigo & " " & _
              " ORDER BY " & orden & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMCLIENTE")
                row.Item("Campo2") = dr("DESCLIENTE")
                row.Item("Campo3") = dr("NUMPRODUCTO")
                row.Item("Campo4") = dr("DESPRODUCTO")
                row.Item("Campo5") = dr("NUMDESCUENTO")
                row.Item("Numero1") = dr("PORCENTAJEDESCUENTO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infPrecioPrioridad(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(NUMPRIORIDAD)))+LTRIM(RTRIM(NUMPRIORIDAD)) AS ORDENPRIORIDAD, " & _
              " RTRIM(NUMPRIORIDAD) NUMPRIORIDAD, RTRIM(DESPRIORIDAD) AS DESPRIORIDAD, " & _
              " ORDEN FROM PRECIOPRIORIDAD " & _
              " WHERE CODEMPRESA = " & empCodigo & " " & _
              " ORDER BY "

        If tipo = 1 Then
            sql = sql + " ORDENPRIORIDAD"
        Else
            sql = sql + " NUMPRIORIDAD"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMPRIORIDAD")
                row.Item("Campo2") = dr("DESPRIORIDAD")
                row.Item("Numero1") = dr("ORDEN")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '################### 
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infDescuentoProducto(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMDESCUENTO)))+LTRIM(RTRIM(NUMDESCUENTO)) AS NUMERO, " & _
              "RTRIM(NUMDESCUENTO) AS CODIGO, PORCENTAJEDESCUENTO AS DESCRIPCION FROM DESCUENTOPRODUCTO " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infEstadisticoComprasCantidad(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal canDecimales As Integer, ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipo As Byte) As DataSet
        Dim promedio As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(C.FECHACOMPRA)) AS MESFECHACOMPRA, " & _
        " SUM(CD.CANTIDADCOMPRA) AS CANTIDAD " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " WHERE C.ESTADO IS NULL AND P.ACTUALIZARSTOCK = 1 " & condiciones & _
        " GROUP BY C.CODSUCURSAL, P.CODPRODUCTO, MONTH(C.FECHACOMPRA) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, DESCRIPCION, MESFECHACOMPRA "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, CODIGOBARRAORDEN, MESFECHACOMPRA "
        End If


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                promedio = 0

                Select Case CType(dr("MESFECHACOMPRA"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 2
                        row.Item("Numero2") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 3
                        row.Item("Numero3") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 4
                        row.Item("Numero4") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 5
                        row.Item("Numero5") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 6
                        row.Item("Numero6") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 7
                        row.Item("Numero7") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 8
                        row.Item("Numero8") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 9
                        row.Item("Numero9") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 10
                        row.Item("Numero10") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 11
                        row.Item("Numero11") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 12
                        row.Item("Numero12") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = promedio / 12
                row.Item("Numero14") = promedio

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo17") = desdecategoria
            row.Item("Campo18") = hastacategoria
            row.Item("Campo19") = desdesubcategoria
            row.Item("Campo20") = hastasubcategoria
            row.Item("Campo21") = desdemarca
            row.Item("Campo22") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infEstadisticoComprasImporte(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal moneda As String, ByVal cotizacion As String, _
    ByVal canDecimales As Integer, ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipo As Byte, ByVal tipoImporte As Byte) As DataSet
        Dim promedio As Decimal
        Dim importe As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(C.FECHACOMPRA)) AS MESFECHACOMPRA, " & _
        " SUM(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * C.COTIZACION1) AS IMPORTENETO, " & _
        " SUM(CD.CANTIDADCOMPRA * CD.COSTOBRUTO * C.COTIZACION1) AS IMPORTEBRUTO " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " WHERE C.ESTADO IS NULL " & condiciones & _
        " GROUP BY C.CODSUCURSAL, P.CODPRODUCTO, MONTH(C.FECHACOMPRA) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, DESCRIPCION, MESFECHACOMPRA "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, CODIGOBARRAORDEN, MESFECHACOMPRA "
        End If


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                promedio = 0
                importe = 0
                If tipoImporte = 0 Then
                    importe = dr("IMPORTENETO")
                Else
                    importe = dr("IMPORTEBRUTO")
                End If

                Select Case CType(dr("MESFECHACOMPRA"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 2
                        row.Item("Numero2") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 3
                        row.Item("Numero3") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 4
                        row.Item("Numero4") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 5
                        row.Item("Numero5") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 6
                        row.Item("Numero6") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 7
                        row.Item("Numero7") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 8
                        row.Item("Numero8") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 9
                        row.Item("Numero9") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 10
                        row.Item("Numero10") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 11
                        row.Item("Numero11") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 12
                        row.Item("Numero12") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = promedio / 12
                row.Item("Numero14") = promedio

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo20") = desdecategoria
            row.Item("Campo21") = hastacategoria
            row.Item("Campo22") = desdesubcategoria
            row.Item("Campo23") = hastasubcategoria
            row.Item("Campo24") = desdemarca
            row.Item("Campo25") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            row.Item("Campo17") = moneda
            row.Item("Campo18") = cotizacion

            If tipoImporte = 0 Then
                row.Item("Campo19") = " Neto"
            Else
                row.Item("Campo19") = " Bruto"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfEstadisticoVentas(ByVal Codempresa As Long, ByVal desempresa As String, _
   ByVal DesdeFecha As String, ByVal HastaFecha As String, _
   ByVal DesdeSucursal As String, ByVal HastaSucursal As String, _
   ByVal Familia As String, ByVal DesdeFamilia As String, ByVal HastaFamilia As String, _
   ByVal Linea As String, ByVal DesdeLinea As String, ByVal HastaLinea As String, _
   ByVal Rubro As String, ByVal DesdeRubro As String, ByVal HastaRubro As String, _
   ByVal DesdeProducto As String, ByVal HastaProducto As String, ByVal MonedaInforme As String, ByVal CotizacionMonedaInf As Decimal, _
   ByVal DesSuc1 As String, ByVal DesSuc2 As String, ByVal DesFami1 As String, ByVal DesFami2 As String, _
   ByVal DesLin1 As String, ByVal DesLin2 As String, ByVal DesRub1 As String, ByVal DesRub2 As String, _
   ByVal DesProd1 As String, ByVal DesProd2 As String, _
   ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
   ByVal DTipoDeVta As Integer, ByVal HTipoDeVta As Integer, ByVal Orden As String, ByVal Ascendente As String, _
   ByVal OrdenDelInfor As String, ByVal canDecimales As Integer, _
   ByVal condicionesVenta As String, ByVal condicionesDevolucion As String, ByVal tipocosto As Integer) As DataSet

        Dim contador As Int64
        Dim i As Integer
        Dim items As Long = 0

        ds.Clear()

        If HastaFecha = "" Then
            HastaFecha = Now.ToShortDateString
        End If

        sql = "DECLARE @EMPRE AS NUMERIC(9) " & _
            "SET @EMPRE = " & Codempresa & " " & _
            "SELECT MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, " & _
            " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
            "MAX(RTRIM(P.DESPRODUCTO)) AS DESPRODUCTO, " & _
            "MAX(V.CODSUCURSAL) AS CODSUCURSAL, MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(DESSUCURSAL)) AS DESSUCURSAL, " & _
            "ISNULL(MAX(P.CODFAMILIA), 0) AS CODFAMILIA, " & _
            "ISNULL(MAX(P.CODLINEA), 0) AS CODLINEA, " & _
            "ISNULL(MAX(P.CODRUBRO), 0) AS CODRUBRO, " & _
            "ISNULL(MAX(RTRIM(F.NUMFAMILIA)), '') AS NUMFAMILIA, ISNULL(MAX(RTRIM(F.DESFAMILIA)), '') AS DESFAMILIA, " & _
            "ISNULL(MAX(RTRIM(L.NUMLINEA)), '') AS NUMLINEA, ISNULL(MAX(RTRIM(L.DESLINEA)), '') AS DESLINEA, " & _
            "ISNULL(MAX(RTRIM(R.NUMRUBRO)), '') AS NUMRUBRO, ISNULL(MAX(RTRIM(R.DESRUBRO)), '') AS DESRUBRO, " & _
            "MAX(P.CODPRODUCTO) AS CODPRODUCTO, " & _
            "SUM(VD.CANTIDADVENTA) AS CANTIDADVENTA, MAX(V.CODMONEDA) AS CODMONEDA, " & _
            "MAX(V.COTIZACION1) AS COTIZACION1, MAX(V.COTIZACION2) AS COTIZACION2, " & _
            "AVG((VD.PRECIOVENTANETO * V.COTIZACION1)) AS PRECIONETO, MAX(V.CODMONEDA)AS  CODMONEDA, " & _
            "SUM(((VD.PRECIOVENTANETO * V.COTIZACION1) * VD.CANTIDADVENTA)) AS PRECIOMONEDAPRINCIPAL, " & _
            "SUM(((VD.COSTOULTIMO * V.COTIZACION1) * VD.CANTIDADVENTA)) AS ULTIMOCOSTO, " & _
            " (ISNULL((SELECT SUM(CD.COSTOPROMEDIO * C.COTIZACION1) " & _
            " FROM COMPRASDETALLE CD, COMPRAS C " & _
            " WHERE(CD.CODCOMPRA = C.CODCOMPRA) " & _
            " AND CD.CODPRODUCTO = P.CODPRODUCTO " & _
            " AND CD.CODCOMPRA = (SELECT MAX(CDE.CODCOMPRA) FROM COMPRASDETALLE CDE, COMPRAS CO " & _
            " WHERE(CDE.CODCOMPRA = CO.CODCOMPRA) " & _
            " AND CO.FECHACOMPRA <= CAST( '" & HastaFecha & "'  AS DATETIME ) " & _
            " AND CDE.CODPRODUCTO = P.CODPRODUCTO)),(ISNULL((SELECT SUM(CASE WHEN PP.COSTOPP = 0 THEN PP.ULTIMOCOSTO " & _
            " WHEN PP.COSTOPP IS NULL THEN PP.ULTIMOCOSTO " & _
            " ELSE PP.COSTOPP END * CM.FACTORVENTA) " & _
            " FROM  PRODUCTOS PP, MONEDA M, COTIZACION CM " & _
            " WHERE(PP.CODMONEDA = M.CODMONEDA) " & _
            " AND M.CODMONEDA = CM.CODMONEDA " & _
            " AND PP.CODPRODUCTO = P.CODPRODUCTO " & _
            " AND CM.FECHAMOVIMIENTO = (SELECT MAX(CO.FECHAMOVIMIENTO) " & _
            " FROM PRODUCTOS PR, MONEDA M, COTIZACION CO " & _
            " WHERE(PR.CODPRODUCTO = PP.CODPRODUCTO) " & _
            " AND PR.CODMONEDA = M.CODMONEDA " & _
            " AND M.CODMONEDA = CO.CODMONEDA " & _
            " AND PR.FECHAPP <= PP.FECHAPP)),0)))) " & _
            " AS COSTOPROMEDIO, " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0  " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0) AS CANTIDADDEVUELTA, " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0) AS TOTALCANTDEVO, " & _
            " (ISNULL((SELECT SUM(CD.COSTOPROMEDIO * C.COTIZACION1) " & _
            " FROM COMPRASDETALLE CD, COMPRAS C " & _
            " WHERE(CD.CODCOMPRA = C.CODCOMPRA) " & _
            " AND CD.CODPRODUCTO = P.CODPRODUCTO " & _
            " AND CD.CODCOMPRA = (SELECT MAX(CDE.CODCOMPRA) FROM COMPRASDETALLE CDE, COMPRAS CO " & _
            " WHERE(CDE.CODCOMPRA = CO.CODCOMPRA) " & _
            " AND CO.FECHACOMPRA <= CAST( '" & HastaFecha & "'  AS DATETIME ) " & _
            " AND CDE.CODPRODUCTO = P.CODPRODUCTO)),(ISNULL((SELECT SUM(CASE WHEN PP.COSTOPP = 0 THEN PP.ULTIMOCOSTO " & _
            " WHEN PP.COSTOPP IS NULL THEN PP.ULTIMOCOSTO " & _
            " ELSE PP.COSTOPP END * CM.FACTORVENTA) " & _
            " FROM  PRODUCTOS PP, MONEDA M, COTIZACION CM " & _
            " WHERE(PP.CODMONEDA = M.CODMONEDA) " & _
            " AND M.CODMONEDA = CM.CODMONEDA " & _
            " AND PP.CODPRODUCTO = P.CODPRODUCTO " & _
            " AND CM.FECHAMOVIMIENTO = (SELECT MAX(CO.FECHAMOVIMIENTO) " & _
            " FROM PRODUCTOS PR, MONEDA M, COTIZACION CO " & _
            " WHERE(PR.CODPRODUCTO = PP.CODPRODUCTO) " & _
            " AND PR.CODMONEDA = M.CODMONEDA " & _
            " AND M.CODMONEDA = CO.CODMONEDA " & _
            " AND PR.FECHAPP <= PP.FECHAPP)),0)))) " & _
            " AS COSTODEVOLUCION, " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * (DD.COSTOULTIMO * D.COTIZACION1)) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0) AS TOTALCOSTODEVO, " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0) AS PRECIODEVOLUCION, " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * (DD.PRECIONETO * D.COTIZACION1)) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0) AS TOTALPRECIODEVO, " & _
            "(SUM(VD.PRECIOVENTANETO * V.COTIZACION1 * VD.CANTIDADVENTA) " & _
            "- " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0)) " & _
            "-  " & _
            "(SUM(VD.COSTOULTIMO * V.COTIZACION1 * VD.CANTIDADVENTA) " & _
            "-  " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.COSTOULTIMO * D.COTIZACION1) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0)) AS UTILIDAD, " & _
            "((((SUM(VD.PRECIOVENTANETO * V.COTIZACION1 * VD.CANTIDADVENTA) " & _
            "- " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1)  " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0)) " & _
            "-  " & _
            "(SUM(VD.COSTOULTIMO * V.COTIZACION1 * VD.CANTIDADVENTA)  " & _
            "-  " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.COSTOULTIMO * D.COTIZACION1) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0))) * 100) " & _
            "/ " & _
            "CASE " & _
            "(SUM(VD.PRECIOVENTANETO * V.COTIZACION1 * VD.CANTIDADVENTA) " & _
            "- " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0)) " & _
            "WHEN 0 THEN 1 " & _
            "ELSE " & _
            "(SUM(VD.PRECIOVENTANETO * V.COTIZACION1 * VD.CANTIDADVENTA) " & _
            "- " & _
            "ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1) " & _
            "FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
            "INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            "INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
            "LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            "WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
            "AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
            "GROUP BY PR.CODPRODUCTO), 0)) END) AS PORCENUTILI " & _
            "FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
            "INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
            "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
            "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            "LEFT OUTER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
            "LEFT OUTER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
            "LEFT OUTER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
            "LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
            "LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
            "LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
            "WHERE V.CODEMPRESA = @EMPRE  " & _
            "AND (V.ESTADO = 0 OR V.ESTADO = 9) " & condicionesVenta & _
            "GROUP BY F.CODFAMILIA, L.CODLINEA, R.CODRUBRO, P.CODPRODUCTO " & _
            "ORDER BY NUMFAMILIA, NUMLINEA, NUMRUBRO "

        sql = sql + Orden + Ascendente

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Dim PRECIOVENTA As Decimal
                Dim TotalCantidadDevolucion As Decimal
                Dim TotalPrecioDevolucion As Decimal
                Dim TotalCostoDevolucion As Decimal
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                    row.Item("Campo1") = dr("NUMFAMILIA")
                    row.Item("Campo2") = dr("NUMLINEA")
                    row.Item("Campo3") = dr("NUMRUBRO")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("DESLINEA")
                    row.Item("Campo6") = dr("DESRUBRO")
                    row.Item("Campo10") = Familia
                    row.Item("Campo11") = Linea
                    row.Item("Campo12") = Rubro
                    row.Item("Campo7") = dr("CODIGOBARRA")
                    row.Item("Campo8") = dr("DESPRODUCTO")
                    row.Item("Numero1") = dr("CANTIDADVENTA")
                    row.Item("Numero2") = Math.Round(dr("PRECIOMONEDAPRINCIPAL") / CotizacionMonedaInf, canDecimales)
                    row.Item("Numero3") = CotizacionMonedaInf

                    If tipocosto = 0 Then
                        'row.Item("Numero4") = Math.Round(dr("COSTOPROMEDIO") * row.Item("Numero1") / CotizacionMonedaInf, canDecimales)
                        row.Item("Numero4") = dr("COSTOPROMEDIO") * row.Item("Numero1") / CotizacionMonedaInf
                    Else
                        row.Item("Numero4") = Math.Round(dr("ULTIMOCOSTO") / CotizacionMonedaInf, canDecimales)
                    End If

                    row.Item("Numero5") = dr("CANTIDADDEVUELTA")
                    row.Item("Numero6") = Math.Round(dr("PRECIODEVOLUCION") / CotizacionMonedaInf, canDecimales)
                    row.Item("Numero7") = Math.Round(dr("COSTODEVOLUCION") * row.Item("Numero5") / CotizacionMonedaInf, canDecimales)
                    row.Item("Numero8") = row.Item("Numero1") - row.Item("Numero5") 'Cantidad venta neta (cant.vta - cant.devo)
                    row.Item("Numero9") = row.Item("Numero4") - row.Item("Numero7") 'Costo Neto  (costo vta. - costo devo) 
                    row.Item("Numero10") = row.Item("Numero2") - row.Item("Numero6") 'Precio Vta. Neto (precio venta - precio devo)
                    row.Item("Numero11") = row.Item("Numero2") - row.Item("Numero4") 'Utilidad de venta bruta (precio venta bruto - costo venta bruto) 
                    row.Item("Numero12") = Math.Round(dr("UTILIDAD") / CotizacionMonedaInf, canDecimales) 'dr("Numero10") - dr("Numero9")  'Utilidad precio de venta - precio devo - costoventa - costo devolucion
                    row.Item("Numero13") = dr("PORCENUTILI") '(dr("Numero12") * 100) / dr("Numero10") 'Porcentaje de Utilidad (precio vta - costo venta) * 100 / precio vta.

                    TotalCantidadDevolucion = dr("TOTALCANTDEVO")
                    TotalPrecioDevolucion = dr("TOTALPRECIODEVO")
                    TotalCostoDevolucion = dr("TOTALCOSTODEVO")
                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                '###################
                '#    CABECERA     #
                '###################

                row = ds.Tables("Cabecera").NewRow()
                row.Item("Campo1") = desempresa
                row.Item("Campo16") = Familia
                row.Item("Campo17") = Linea
                row.Item("Campo18") = Rubro
                row.Item("Campo2") = RTrim(DesdeSucursal) + "   " + RTrim(DesSuc1)
                row.Item("Campo3") = RTrim(HastaSucursal) + "   " + RTrim(DesSuc2)
                row.Item("Campo4") = RTrim(DesdeFamilia) + "   " + RTrim(DesFami1)
                row.Item("Campo5") = RTrim(HastaFamilia) + "   " + RTrim(DesFami2)
                row.Item("Campo6") = RTrim(DesdeLinea) + "    " + RTrim(DesLin1)
                row.Item("Campo7") = RTrim(HastaLinea) + "    " + RTrim(DesLin2)
                row.Item("Campo8") = RTrim(DesdeRubro) + "    " + RTrim(DesRub1)
                row.Item("Campo9") = RTrim(HastaRubro) + "    " + RTrim(DesRub2)
                row.Item("Campo24") = desdecategoria
                row.Item("Campo19") = hastacategoria
                row.Item("Campo20") = desdesubcategoria
                row.Item("Campo21") = hastasubcategoria
                row.Item("Campo22") = desdemarca
                row.Item("Campo23") = hastamarca
                row.Item("Campo10") = DesdeFecha
                row.Item("Campo15") = HastaFecha
                row.Item("Campo11") = DesdeProducto + "   " + RTrim(DesProd1)
                row.Item("Campo12") = HastaProducto + "   " + RTrim(DesProd2)
                row.Item("Campo13") = MonedaInforme
                row.Item("Campo14") = OrdenDelInfor
                row.Item("Numero1") = TotalCantidadDevolucion
                row.Item("Numero2") = TotalPrecioDevolucion
                row.Item("Numero3") = TotalCostoDevolucion
                row.Item("Numero4") = canDecimales
                row.Item("Numero5") = CotizacionMonedaInf

                ds.Tables("Cabecera").Rows.Add(row)
            Catch ex As Exception
                MsgBox("Error" & vbCrLf & ex.Message)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch ex As Exception
            MsgBox("Error" & vbCrLf & ex.Message)
        Finally
        End Try
        Return ds
    End Function

    Public Function infEstadisticoVentasCantidad(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal canDecimales As Integer, ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipo As Byte) As DataSet
        Dim promedio As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(V.FECHAVENTA)) AS MESFECHAVENTA, " & _
        " SUM(VD.CANTIDADVENTA) AS CANTIDAD " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " WHERE V.ESTADO = 0 " & condiciones & _
        " AND V.CODEMPRESA = " & empCodigo & _
        " GROUP BY V.CODSUCURSAL, P.CODFAMILIA, P.CODPRODUCTO, MONTH(V.FECHAVENTA) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, FAMILIAORDEN, DESCRIPCION, MESFECHAVENTA "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, FAMILIAORDEN, CODIGOBARRAORDEN, MESFECHAVENTA "
        End If

        Dim imprime As Boolean
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")


                promedio = 0

                Select Case CType(dr("MESFECHAVENTA"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 2
                        row.Item("Numero2") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 3
                        row.Item("Numero3") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 4
                        row.Item("Numero4") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 5
                        row.Item("Numero5") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 6
                        row.Item("Numero6") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 7
                        row.Item("Numero7") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 8
                        row.Item("Numero8") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 9
                        row.Item("Numero9") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 10
                        row.Item("Numero10") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 11
                        row.Item("Numero11") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 12
                        row.Item("Numero12") = dr("CANTIDAD")
                        promedio = promedio + dr("CANTIDAD")
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = promedio / 12
                row.Item("Numero14") = promedio

                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo17") = desdecategoria
            row.Item("Campo18") = hastacategoria
            row.Item("Campo19") = desdesubcategoria
            row.Item("Campo20") = hastasubcategoria
            row.Item("Campo21") = desdemarca
            row.Item("Campo22") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infEstadisticoVentasImporte(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal moneda As String, ByVal cotizacion As String, _
    ByVal canDecimales As Integer, ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipo As Byte, ByVal tipoImporte As Byte) As DataSet
        Dim promedio As Decimal
        Dim importe As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(V.FECHAVENTA)) AS MESFECHAVENTA, " & _
        " SUM(VD.CANTIDADVENTA * VD.PRECIOVENTANETO * V.COTIZACION1) AS IMPORTENETO, " & _
        " SUM(VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO * V.COTIZACION1) AS IMPORTEBRUTO " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " WHERE V.ESTADO = 0 " & condiciones & _
        " AND V.CODEMPRESA = " & empCodigo & _
        " GROUP BY V.CODSUCURSAL, P.CODPRODUCTO, MONTH(V.FECHAVENTA) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, DESCRIPCION, MESFECHAVENTA "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, CODIGOBARRAORDEN, MESFECHAVENTA "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                promedio = 0
                importe = 0
                If tipoImporte = 0 Then
                    importe = dr("IMPORTENETO")
                Else
                    importe = dr("IMPORTEBRUTO")
                End If

                Select Case CType(dr("MESFECHAVENTA"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 2
                        row.Item("Numero2") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 3
                        row.Item("Numero3") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 4
                        row.Item("Numero4") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 5
                        row.Item("Numero5") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 6
                        row.Item("Numero6") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 7
                        row.Item("Numero7") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 8
                        row.Item("Numero8") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 9
                        row.Item("Numero9") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 10
                        row.Item("Numero10") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 11
                        row.Item("Numero11") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 12
                        row.Item("Numero12") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = (promedio / 12)
                row.Item("Numero14") = promedio

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo20") = desdecategoria
            row.Item("Campo21") = hastacategoria
            row.Item("Campo22") = desdesubcategoria
            row.Item("Campo23") = hastasubcategoria
            row.Item("Campo24") = desdemarca
            row.Item("Campo25") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha
            row.Item("Campo17") = moneda
            row.Item("Campo18") = cotizacion

            If tipoImporte = 0 Then
                row.Item("Campo19") = " Neto"
            Else
                row.Item("Campo19") = " Bruto"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infEstadoProducto(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMESTADOPRODUCTO)))+LTRIM(RTRIM(NUMESTADOPRODUCTO)) AS NUMERO, " & _
        "RTRIM(NUMESTADOPRODUCTO) AS CODIGO, RTRIM(DESESTADOPRODUCTO) AS DESCRIPCION FROM ESTADOPRODUCTO " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfFacturasAnuladas(ByVal DesdeFecha As String, ByVal HastaFecha As String, _
    ByVal DesdeSucursal As String, ByVal HastaSucursal As String, _
    ByVal DesdeNumero As String, ByVal HastaNumero As String, _
    ByVal MonedaInforme As String, _
    ByVal DesdeComprobante As String, ByVal HastaComprobante As String, _
    ByVal CotizacionMonedaInf As String, ByVal codMoneda As Long, _
    ByVal DesSuc1 As String, ByVal DesSuc2 As String, _
    ByVal DesComprobante1 As String, ByVal DesComprobante2 As String, _
    ByVal candecimales As Integer, ByVal desdevendedor As String, ByVal hastavendedor As String, _
    Optional ByVal condiciones As String = "") As DataSet

        ds.Clear()

        sql = "SELECT V.NUMVENTA AS NUMFACTURA, RTRIM(TC.NUMTIPOCOMPRO)AS NUMCOMPROBANTE, " & _
            "V.CODMONEDA AS CODMONEDA, " & _
            "RTRIM(TC.DESCOMPROBANTE)AS TIPOCOMPROBANTE, ISNULL(V.PORCENTAJEDESCUENTO, 0) AS PORCENTAJEDESCUENTO, " & _
            "RTRIM(S.NUMSUCURSAL)AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
            "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, " & _
            " CAST(V.FECHAVENTA AS DATETIME) AS FECHAVENTAORDEN, " & _
            "V.TOTALEXENTA AS TOTALEXENTA, (V.TOTALEXENTA * V.COTIZACION1)AS TOTALEXENTAINFORME, " & _
            "V.TOTALGRAVADA AS TOTALGRAVADA, (V.TOTALGRAVADA * V.COTIZACION1)AS TOTALGRAVADAINFORME, " & _
            "V.TOTALIVA AS TOTALIVA, (V.TOTALIVA * V.COTIZACION1) AS TOTALIVAINFORME, " & _
            "(RTRIM(CL.APELLIDO) + ', ' + RTRIM(CL.NOMBRE))AS CLIENTE, " & _
            "V.TOTALDESCUENTO AS IMPORTEDESCUENTO, (V.TOTALDESCUENTO * V.COTIZACION1) AS IMPORTEDESCUENTOINFORME, " & _
            "V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO AS TOTALFACTURA, " & _
            "(((V.TOTALEXENTA * V.COTIZACION1) + (V.TOTALGRAVADA * V.COTIZACION1) + (V.TOTALIVA * V.COTIZACION1))" & _
            "- ((V.TOTALDESCUENTO * V.COTIZACION1))) AS TOTALFACTURAINFORME, " & _
            " (SELECT CONVERT(VARCHAR(10),MAX(AM.FECHA),103) FROM AUDITORIAMOVIMIENTOS AM WHERE AM.MOVIMIENTO = 'Ventas' " & _
            " AND AM.ELIMINAR = 1 AND AM.OBSERVACION LIKE '%ANULACIÓN%' AND RTRIM(AM.NUMERO) = RTRIM(V.NUMVENTA)) AS FECHAANULACION, " & _
            " (SELECT RTRIM(MAX(AM.USUARIO)) FROM AUDITORIAMOVIMIENTOS AM WHERE AM.MOVIMIENTO = 'Ventas' " & _
            " AND AM.ELIMINAR = 1 AND AM.OBSERVACION LIKE '%ANULACIÓN%' AND RTRIM(AM.NUMERO) = RTRIM(V.NUMVENTA)) AS USUARIO " & _
            "FROM SUCURSAL S, TIPOCOMPROBANTE TC, CLIENTES CL, VENTAS V, VENDEDOR VE " & _
            "WHERE V.CODEMPRESA = " & empCodigo & " AND V.CODSUCURSAL = S.CODSUCURSAL " & _
            "AND V.CODCOMPROBANTE = TC.CODCOMPROBANTE AND " & _
            "V.CODVENDEDOR = VE.CODVENDEDOR AND " & _
            "V.CODCLIENTE = CL.CODCLIENTE AND V.ESTADO = 1 " & condiciones & " "

        sql = sql + " ORDER BY NUMSUCURSAL, FECHAVENTAORDEN, NUMTIPOCOMPRO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try

                Do While dr.Read
                    row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                    row.Item("Campo6") = dr("NUMFACTURA")
                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo3") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo7") = dr("SUCURSAL")
                    row.Item("Campo2") = dr("FECHAVENTA")
                    row.Item("Campo10") = dr("USUARIO")
                    row.Item("Campo11") = dr("FECHAANULACION")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero1") = dr("TOTALEXENTA")
                        row.Item("Numero2") = dr("TOTALGRAVADA") - dr("IMPORTEDESCUENTO")
                        row.Item("Numero3") = dr("TOTALIVA")
                        row.Item("Numero4") = dr("TOTALFACTURA")
                        row.Item("Numero9") = dr("IMPORTEDESCUENTO")
                    Else
                        row.Item("Numero1") = dr("TOTALEXENTAINFORME") / CotizacionMonedaInf
                        row.Item("Numero2") = (dr("TOTALGRAVADAINFORME") - dr("IMPORTEDESCUENTOINFORME")) / CotizacionMonedaInf
                        row.Item("Numero3") = dr("TOTALIVAINFORME") / CotizacionMonedaInf
                        row.Item("Numero4") = dr("TOTALFACTURAINFORME") / CotizacionMonedaInf
                        row.Item("Numero9") = dr("IMPORTEDESCUENTOINFORME") / CotizacionMonedaInf
                    End If

                    row.Item("Numero7") = dr("PORCENTAJEDESCUENTO")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()
                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = RTrim(DesdeSucursal) + " " + RTrim(DesSuc1)
                row.Item("Campo3") = RTrim(HastaSucursal) + " " + RTrim(DesSuc2)
                row.Item("Campo4") = DesdeNumero
                row.Item("Campo5") = HastaNumero
                row.Item("Campo6") = RTrim(DesdeComprobante) + " " + RTrim(DesComprobante1)
                row.Item("Campo7") = RTrim(HastaComprobante) + " " + RTrim(DesComprobante2)
                row.Item("Campo8") = DesdeFecha
                row.Item("Campo11") = HastaFecha
                row.Item("Campo12") = desdevendedor
                row.Item("Campo13") = hastavendedor
                row.Item("Campo9") = MonedaInforme

                ds.Tables("Cabecera").Rows.Add(row)
            Catch ex As Exception
                MsgBox("Error" & vbCrLf & ex.Message)
            Finally
                dr.Close()
                sqlc.Close()
                ser.Cerrar(sqlc)
            End Try
        Catch ex As Exception
            MsgBox("Error" & vbCrLf & ex.Message)
        Finally
        End Try
        Return ds
    End Function

    Public Function InfPresupuestosAnulados(ByVal DesdeFecha As String, ByVal HastaFecha As String, _
    ByVal DesdeSucursal As String, ByVal HastaSucursal As String, _
    ByVal DesdeNumero As String, ByVal HastaNumero As String, _
    ByVal MonedaInforme As String, _
    ByVal DesdeComprobante As String, ByVal HastaComprobante As String, _
    ByVal CotizacionMonedaInf As String, ByVal codMoneda As Long, _
    ByVal DesSuc1 As String, ByVal DesSuc2 As String, _
    ByVal DesComprobante1 As String, ByVal DesComprobante2 As String, _
    ByVal candecimales As Integer, ByVal desdevendedor As String, ByVal hastavendedor As String, _
    Optional ByVal condiciones As String = "") As DataSet

        ds.Clear()

        sql = "SELECT PV.NUMPRESUPUESTO AS NUMPRESUPUESTO, RTRIM(TC.NUMTIPOCOMPRO)AS NUMCOMPROBANTE, " & _
        "PV.CODMONEDA AS CODMONEDA, " & _
        "RTRIM(TC.DESCOMPROBANTE)AS TIPOCOMPROBANTE, ISNULL(PV.PORCENTAJEDESCUENTO, 0) AS PORCENTAJEDESCUENTO, " & _
        "RTRIM(S.NUMSUCURSAL)AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        "CONVERT(VARCHAR(10), PV.FECHAPRESUPUESTO, 103) AS FECHAPRESUPUESTO, " & _
        "PV.TOTALEXENTA AS TOTALEXENTA, (PV.TOTALEXENTA * PV.COTIZACION1)AS TOTALEXENTAINFORME, " & _
        "PV.TOTALGRAVADA AS TOTALGRAVADA, (PV.TOTALGRAVADA * PV.COTIZACION1)AS TOTALGRAVADAINFORME, " & _
        "PV.TOTALIVA AS TOTALIVA, (PV.TOTALIVA * PV.COTIZACION1) AS TOTALIVAINFORME, " & _
        "(RTRIM(CL.APELLIDO) + ', ' + RTRIM(CL.NOMBRE))AS CLIENTE, " & _
        "PV.TOTALDESCUENTO AS IMPORTEDESCUENTO, (PV.TOTALDESCUENTO * PV.COTIZACION1) AS IMPORTEDESCUENTOINFORME, " & _
        "PV.TOTALEXENTA + PV.TOTALGRAVADA + PV.TOTALIVA - PV.TOTALDESCUENTO AS TOTALFACTURA, " & _
        "(((PV.TOTALEXENTA * PV.COTIZACION1) + (PV.TOTALGRAVADA * PV.COTIZACION1) + (PV.TOTALIVA * PV.COTIZACION1))" & _
        "- ((PV.TOTALDESCUENTO * PV.COTIZACION1))) AS TOTALFACTURAINFORME " & _
        "FROM SUCURSAL S, TIPOCOMPROBANTE TC, CLIENTES CL, PRESUPUESTOVENTAS PV, VENDEDOR VE " & _
        "WHERE PV.CODEMPRESA = " & empCodigo & " AND PV.CODSUCURSAL = S.CODSUCURSAL " & _
        "AND PV.CODCOMPROBANTE = TC.CODCOMPROBANTE AND " & _
        "PV.CODVENDEDOR = VE.CODVENDEDOR AND " & _
        "PV.CODCLIENTE = CL.CODCLIENTE AND PV.ESTADO = 1 " & condiciones & " "

        sql = sql + " ORDER BY NUMSUCURSAL, PV.FECHAPRESUPUESTO, NUMTIPOCOMPRO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try

                Do While dr.Read
                    row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                    row.Item("Campo6") = dr("NUMPRESUPUESTO")
                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo3") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo7") = dr("SUCURSAL")
                    row.Item("Campo2") = dr("FECHAPRESUPUESTO")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero1") = dr("TOTALEXENTA")
                        row.Item("Numero2") = dr("TOTALGRAVADA")
                        row.Item("Numero3") = dr("TOTALIVA")
                        row.Item("Numero4") = dr("TOTALFACTURA")
                        row.Item("Numero9") = dr("IMPORTEDESCUENTO")
                    Else
                        row.Item("Numero1") = dr("TOTALEXENTAINFORME") / CotizacionMonedaInf
                        row.Item("Numero2") = dr("TOTALGRAVADAINFORME") / CotizacionMonedaInf
                        row.Item("Numero3") = dr("TOTALIVAINFORME") / CotizacionMonedaInf
                        row.Item("Numero4") = dr("TOTALFACTURAINFORME") / CotizacionMonedaInf
                        row.Item("Numero9") = dr("IMPORTEDESCUENTO") / CotizacionMonedaInf
                    End If

                    row.Item("Numero7") = dr("PORCENTAJEDESCUENTO")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()
                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = RTrim(DesdeSucursal) + " " + RTrim(DesSuc1)
                row.Item("Campo3") = RTrim(HastaSucursal) + " " + RTrim(DesSuc2)
                row.Item("Campo4") = DesdeNumero
                row.Item("Campo5") = HastaNumero
                row.Item("Campo6") = RTrim(DesdeComprobante) + " " + RTrim(DesComprobante1)
                row.Item("Campo7") = RTrim(HastaComprobante) + " " + RTrim(DesComprobante2)
                row.Item("Campo8") = DesdeFecha
                row.Item("Campo11") = HastaFecha
                row.Item("Campo12") = desdevendedor
                row.Item("Campo13") = hastavendedor
                row.Item("Campo9") = MonedaInforme

                ds.Tables("Cabecera").Rows.Add(row)
            Catch ex As Exception
                MsgBox("Error" & vbCrLf & ex.Message)
            Finally
                dr.Close()
                sqlc.Close()
                ser.Cerrar(sqlc)
            End Try
        Catch ex As Exception
            MsgBox("Error" & vbCrLf & ex.Message)
        Finally
        End Try
        Return ds
    End Function

    Public Function InfFacturasEmitidas(ByVal DesdeFecha As String, ByVal HastaFecha As String, _
    ByVal DesdeSucursal As String, ByVal HastaSucursal As String, ByVal DesdeNumero As String, _
    ByVal HastaNumero As String, ByVal MonedaInforme As Long, ByVal desmoneda As String, _
    ByVal DesdeComprobante As String, _
    ByVal HastaComprobante As String, ByVal CotizacionMonedaInf As Decimal, ByVal DesSuc1 As String, _
    ByVal DesSuc2 As String, ByVal DesComprobante1 As String, ByVal DesComprobante2 As String, _
    ByVal candecimales As Integer, ByVal condiciones As String, ByVal titulo As Byte) As DataSet

        ds.Clear()

        sql = ""
        sql = " Select MAX(V.NUMVENTA) AS NUMFACTURA, MAX(RTRIM(TC.NUMTIPOCOMPRO))AS NUMCOMPROBANTE, " & _
             " MAX(RTRIM(TC.DESCOMPROBANTE))AS TIPOCOMPROBANTE,MAX(V.PORCENTAJEDESCUENTO) AS PORCENTAJEDESCUENTO, " & _
             " replicate('0',10-len(MAX(V.NUMVENTA)))+ltrim(rtrim(MAX(V.NUMVENTA))) as NUMFACTURAORDEN,  " & _
             " MAX(RTRIM(S.NUMSUCURSAL))AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
             " MAX(CONVERT(VARCHAR(10),V.FECHAVENTA,103)) AS FECHAVENTA, " & _
             " MAX(CAST(V.FECHAVENTA AS DATETIME)) AS FECHAVENTAORDEN, MAX(RTRIM(CL.NUMCLIENTE)) AS CODIGO, " & _
             " MAX((RTRIM(CL.APELLIDO)+', '+RTRIM(CL.NOMBRE)))AS CLIENTE,MAX(V.COTIZACION1) AS COTIZACION1, " & _
             " MAX(V.COTIZACION2) AS COTIZACION2, MAX(V.TOTALEXENTA)AS TOTALEXENTA, " & _
             " MAX(V.TOTALGRAVADA) AS TOTALGRAVADAS, MAX(V.TOTALIVA) AS TOTALIVA,  " & _
             " MAX(V.TOTALDESCUENTO) AS IMPORTEDESCUENTO, MAX(V.TOTALEXENTA  + V.TOTALGRAVADA) AS TOTALBRUTO,  " & _
             " MAX(V.TOTALEXENTA  + (V.TOTALGRAVADA) - (V.TOTALDESCUENTO)) AS TOTALNETO, " & _
             " MAX((V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA)- (V.TOTALDESCUENTO)) AS IMPORTETOTALFACTURA,  " & _
             " MAX(V.CODMONEDA) AS CODMONEDA, ISNULL(MAX(P.COSTOPP), 0) AS COSTOPP, MAX(P.CODMONEDA) AS CODMONEDAPRO,  " & _
             " ISNULL((SELECT CT.FACTORVENTA FROM COTIZACION CT, MONEDA M WHERE CT.FECHAMOVIMIENTO = " & _
             "(SELECT  MAX(CT.FECHAMOVIMIENTO) AS MAXIMO FROM COTIZACION CT, MONEDA M WHERE CT.CODEMPRESA = " & empCodigo & " " & _
             " AND M.CODMONEDA = MAX(P.CODMONEDA) AND CT.CODMONEDA=M.CODMONEDA AND CT.FECHAMOVIMIENTO <= '" & HastaFecha & "') " & _
             " AND CT.CODEMPRESA =" & empCodigo & " AND M.CODMONEDA=CT.CODMONEDA AND M.CODMONEDA = MAX(P.CODMONEDA)), 0) AS ULTIMACOTIZACION,  " & _
             " MAX(P.CODPRODUCTO) AS CODPRODUCTO,  SUM(VD.CANTIDADVENTA) AS CANTIDAD,  " & _
             " SUM((ISNULL(VD.COSTOPROMEDIO, 0) * VD.CANTIDADVENTA)) AS COSTOPPPORCANTIDAD  " & _
             " FROM VENTAS V, SUCURSAL S, TIPOCOMPROBANTE TC, CLIENTES CL, VENTASDETALLE VD, PRODUCTOS P  " & _
             " WHERE V.CODSUCURSAL = S.CODSUCURSAL And V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
             " AND V.CODCLIENTE = CL.CODCLIENTE AND V.CODVENTA = VD.CODVENTA  " & _
             " AND VD.CODPRODUCTO = P.CODPRODUCTO  AND V.CODEMPRESA = " & empCodigo & " " & _
             " AND V.ESTADO = 0 " & condiciones & " " & _
             " GROUP BY V.CODVENTA,P.CODPRODUCTO " & _
             " ORDER BY NUMSUCURSAL,FECHAVENTAORDEN,NUMCOMPROBANTE,NUMFACTURA"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Dim COSTOTOTALPP As Decimal
                Dim COSTONETO As Decimal
                Dim RESULTADO As Decimal
                Dim COD As String
                Dim COD2 As String
                Dim ventatotal As Decimal
                Dim utilidad As Decimal
                Dim sum As Decimal
                Dim fechaventa As String
                Dim codigo As String

                sum = 0
                COD = "0"
                Do While dr.Read
                    ventatotal = 0.0 : utilidad = 0.0
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo6") = dr("NUMFACTURA")
                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo3") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo7") = dr("SUCURSAL")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo2") = dr("FECHAVENTA")
                    fechaventa = dr("FECHAVENTA")
                    row.Item("Numero7") = dr("PORCENTAJEDESCUENTO")

                    If MonedaInforme = dr("CODMONEDA") Then
                        row.Item("Numero1") = dr("TOTALEXENTA")
                        row.Item("Numero2") = dr("TOTALGRAVADAS")
                        row.Item("Numero3") = dr("TOTALIVA")
                        row.Item("Numero4") = dr("IMPORTETOTALFACTURA")
                        row.Item("Numero9") = dr("IMPORTEDESCUENTO")
                        row.Item("Numero13") = dr("TOTALBRUTO")
                        row.Item("Numero14") = dr("TOTALNETO")
                        COSTOTOTALPP = dr("COSTOPPPORCANTIDAD")
                    Else
                        row.Item("Numero1") = Math.Round(((dr("TOTALEXENTA") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        row.Item("Numero2") = Math.Round(((dr("TOTALGRAVADAS") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        row.Item("Numero3") = Math.Round(((dr("TOTALIVA") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        row.Item("Numero4") = Math.Round(((dr("IMPORTETOTALFACTURA") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        row.Item("Numero9") = Math.Round(((dr("IMPORTEDESCUENTO") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        row.Item("Numero13") = Math.Round(((dr("TOTALBRUTO") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        row.Item("Numero14") = Math.Round(((dr("TOTALNETO") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                        COSTOTOTALPP = Math.Round((dr("COSTOPPPORCANTIDAD") * dr("COTIZACION1")) / CotizacionMonedaInf, candecimales)
                    End If


                    'If MonedaInforme = dr("CODMONEDAPRO") Then

                    ' Else
                    'End If

                    row.Item("Numero16") = COSTOTOTALPP
                    ds.Tables("Detalle").Rows.Add(row)
                Loop
                '###################
                '#    CABECERA     #
                '###################

                row = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = RTrim(DesdeSucursal) + " " + RTrim(DesSuc1)
                row.Item("Campo3") = RTrim(HastaSucursal) + " " + RTrim(DesSuc2)
                row.Item("Campo4") = DesdeNumero
                row.Item("Campo5") = HastaNumero
                row.Item("Campo6") = RTrim(DesdeComprobante) + " " + RTrim(DesComprobante1)
                row.Item("Campo7") = RTrim(HastaComprobante) + " " + RTrim(DesComprobante2)
                row.Item("Campo8") = DesdeFecha
                row.Item("Campo9") = desmoneda
                row.Item("Campo11") = HastaFecha


                ds.Tables("Cabecera").Rows.Add(row)

            Catch ex As Exception
                MsgBox("Error" & vbCrLf & ex.Message)
            Finally
                dr.Close()         'Cierra el SQL DataReader
                'Cierra la SqlConecction
                ser.Cerrar(sqlc)     'Cierra Definitivamente la coneccion
            End Try
        Catch ex As Exception
            MsgBox("Error" & vbCrLf & ex.Message)
        Finally
        End Try
        'Una vez que tenemos todos los datos en el dataset, vamos a llamar al nuevo 
        'formulario y le vamos a pasar el dataset:
        Return ds
    End Function

    Public Function InfFacturasEmitidasPorTipo(ByVal DesdeFecha As String, ByVal HastaFecha As String, _
  ByVal DesdeSucursal As String, ByVal HastaSucursal As String, ByVal DesdeNumero As String, _
  ByVal HastaNumero As String, ByVal MonedaInforme As Long, ByVal desmoneda As String, ByVal DesdeComprobante As String, _
  ByVal HastaComprobante As String, ByVal CotizacionMonedaInf As Decimal, ByVal DesSuc1 As String, _
  ByVal DesSuc2 As String, ByVal DesComprobante1 As String, ByVal DesComprobante2 As String, _
  ByVal desdeVendedor As String, ByVal hastaVendedor As String, _
  ByVal desdeTipoCliente As String, ByVal hastaTipoCliente As String, ByVal candecimales As Integer, _
  ByVal Orden As String, ByVal codigoempresa As Long, _
  ByVal titulo As Byte, Optional ByVal condiciones As String = "") As DataSet

        ds.Clear()
        ds.Dispose()

        sql = ""

        sql = "Select V.CODVENTA AS CODIGOVENTA, (V.NUMVENTA) AS NUMFACTURA, RTRIM(TC.NUMTIPOCOMPRO)AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE)AS TIPOCOMPROBANTE, " & _
             "V.PORCENTAJEDESCUENTO AS PORCENTAJEDESCUENTO, VD.CODVENDEDOR, VD.NUMVENDEDOR, VD.DESVENDEDOR, " & _
             "replicate('0',10-len(V.NUMVENTA))+ltrim(rtrim(V.NUMVENTA)) as NUMFACTURAORDEN, " & _
             "RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
             "CAST(V.FECHAVENTA AS DATETIME) AS FECHAVENTAORDEN, " & _
             "RTRIM(CL.NUMCLIENTE) AS CODIGO, (RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE, " & _
             "V.COTIZACION1 AS COTIZACION1, V.COTIZACION2 AS COTIZACION2, " & _
             "V.TOTALEXENTA AS TOTALEXENTA, V.TOTALGRAVADA AS TOTALGRAVADAS, V.TOTALIVA AS TOTALIVA, " & _
             "V.TOTALDESCUENTO AS IMPORTEDESCUENTO, " & _
             "(V.TOTALEXENTA + V.TOTALGRAVADA) AS TOTALBRUTO, " & _
             "(V.TOTALEXENTA + V.TOTALGRAVADA) - (V.TOTALDESCUENTO) AS TOTALNETO, " & _
             "(V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA)- (V.TOTALDESCUENTO) AS IMPORTETOTALFACTURA, " & _
             "V.CODMONEDA AS CODMONEDA " & _
             "FROM VENTAS V " & _
             "INNER JOIN  SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
             "INNER JOIN TIPOCOMPROBANTE TC ON  V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
             "INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
             "INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
             "LEFT OUTER JOIN TIPOCLIENTE TCL ON CL.CODTIPOCLIENTE = TCL.CODTIPOCLIENTE " & _
             "WHERE V.CODEMPRESA = " & codigoempresa & " " & _
             "AND V.ESTADO = 0 " & condiciones & " " & _
             "ORDER BY NUMSUCURSAL, FECHAVENTAORDEN, NUMCOMPROBANTE, NUMFACTURA"


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Dim COSTOTOTALPP As Decimal
                Dim COSTONETO As Decimal
                Dim RESULTADO As Decimal
                Dim COD As String
                Dim COD2 As String
                Dim ventatotal As Decimal
                Dim utilidad As Decimal
                Dim sum As Decimal
                Dim fechaventa As String
                Dim codigo As String
                Dim imprime As Boolean

                sum = 0
                COD = "0"
                Do While dr.Read

                    ventatotal = 0.0 : utilidad = 0.0
                    row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    row.Item("Campo6") = dr("NUMFACTURA")
                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo3") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo7") = dr("SUCURSAL")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo2") = dr("FECHAVENTA")
                    row.Item("Campo9") = dr("NUMVENDEDOR")
                    row.Item("Campo10") = dr("DESVENDEDOR")
                    fechaventa = dr("FECHAVENTA")

                    If MonedaInforme = dr("CODMONEDA") Then
                        row.Item("Numero4") = dr("IMPORTETOTALFACTURA")
                    Else
                        row.Item("Numero4") = Math.Round(((dr("IMPORTETOTALFACTURA") * dr("COTIZACION1")) / CotizacionMonedaInf), candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)

                Loop
                '###################
                '#    CABECERA     #
                '###################

                row = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = RTrim(DesdeSucursal) + " " + RTrim(DesSuc1)
                row.Item("Campo3") = RTrim(HastaSucursal) + " " + RTrim(DesSuc2)
                row.Item("Campo4") = DesdeNumero
                row.Item("Campo5") = HastaNumero
                row.Item("Campo6") = RTrim(DesdeComprobante) + " " + RTrim(DesComprobante1)
                row.Item("Campo7") = RTrim(HastaComprobante) + " " + RTrim(DesComprobante2)
                row.Item("Campo8") = DesdeFecha
                row.Item("Campo9") = desmoneda
                row.Item("Campo11") = HastaFecha
                row.Item("Campo13") = desdeVendedor
                row.Item("Campo14") = hastaVendedor
                row.Item("Campo15") = desdeTipoCliente
                row.Item("Campo16") = hastaTipoCliente

                ds.Tables("Cabecera").Rows.Add(row)

            Catch ex As Exception
                MsgBox("Error" & vbCrLf & ex.Message)
            Finally
                dr.Close()
                sqlc.Close()
                ser.Cerrar(sqlc)
            End Try
        Catch ex As Exception
            MsgBox("Error" & vbCrLf & ex.Message)
        Finally
        End Try
        Return ds
    End Function

    Public Function infFacturasEmitidasSimple_ANTES(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipoVenta As Byte, ByVal modalidad As Byte, ByVal usuario As String, _
    ByVal resumen As Byte, Optional ByVal orden As String = "", _
    Optional ByVal tipo As Byte = 0) As DataSet
        ds.Clear()

        sql = ""
        sql = " DECLARE @CODEMPRESA NUMERIC(18) " & _
        " SET @CODEMPRESA = " & empCodigo & " " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " MONTH(V.FECHAVENTA) AS MES, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.MODALIDADPAGO, " & _
        " REPLICATE('0',5-LEN(RTRIM(VE.NUMVENDEDOR)))+LTRIM(RTRIM(VE.NUMVENDEDOR)) AS NUMVENDEDORORDEN, " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS DESVENDEDOR, " & _
        " RTRIM(TCL.NUMTIPOCLIENTE) AS NUMTIPOCLIENTE, RTRIM(TCL.DESTIPOCLIENTE) AS DESTIPOCLIENTE, " & _
        " V.NUMVENTA AS NUMVENTA, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " ISNULL(V.TOTALGRAVADA,0) AS TOTALGRAVADA, " & _
        " ISNULL(V.TOTALGRAVADA*V.COTIZACION1,0) AS TOTALGRAVADAINFORME, " & _
        " ISNULL(V.TOTALEXENTA,0) AS TOTALEXENTA, " & _
        " ISNULL(V.TOTALEXENTA*V.COTIZACION1,0) AS TOTALEXENTAINFORME, " & _
        " ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
        " ISNULL(V.TOTALDESCUENTO*V.COTIZACION1,0) AS TOTALDESCUENTOINFORME, " & _
        " ISNULL(V.TOTALIVA,0) AS TOTALIVA, " & _
        " ISNULL(V.TOTALIVA*V.COTIZACION1,0) AS TOTALIVAINFORME, " & _
        " ISNULL(V.TOTALGRAVADA,0) + ISNULL(V.TOTALEXENTA,0)+ ISNULL(V.TOTALIVA,0) - ISNULL(V.TOTALDESCUENTO,0) AS TOTALFACTURA, " & _
        " ISNULL(V.TOTALGRAVADA*V.COTIZACION1,0) + ISNULL(V.TOTALEXENTA*V.COTIZACION1,0)+ ISNULL(V.TOTALIVA*V.COTIZACION1,0) - ISNULL(V.TOTALDESCUENTO*V.COTIZACION1,0) AS TOTALFACTURAINFORME, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(U.DESUSUARIO) AS DESUSUARIO " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON  V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN USUARIO U ON U.CODUSUARIO = V.CODUSUARIO " & _
        " AND U.CODEMPRESA = V.CODEMPRESA " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR " & _
        " INNER JOIN TIPOCLIENTE TCL ON TCL.CODTIPOCLIENTE = CL.CODTIPOCLIENTE " & _
        " WHERE V.CODEMPRESA = @CODEMPRESA " & condiciones & " "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, CAST(V.FECHAVENTA AS DATETIME), " & orden & ", NUMVENTA "
        Else
            sql = sql & " ORDER BY NUMSUCURSAL, MES, " & orden & ", CAST(V.FECHAVENTA AS DATETIME), NUMVENTA "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo15") = dr("DESSUCURSAL")

                    If tipo = 0 Then
                        row.Item("Campo2") = dr("FECHAVENTA")
                    Else
                        row.Item("Campo2") = funcion.textomes(dr("MES")).ToUpper
                    End If

                    If orden = "NUMVENDEDORORDEN" Then
                        row.Item("Campo3") = dr("NUMVENDEDOR")
                        row.Item("Campo17") = dr("NUMVENDEDOR") & " - " & dr("DESVENDEDOR")
                        row.Item("Campo20") = "Vendedor"
                    ElseIf orden = "DESCOMPROBANTE" Then
                        row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                        row.Item("Campo17") = dr("DESCOMPROBANTE")
                        row.Item("Campo20") = "Comprobante"
                    Else
                        row.Item("Campo3") = dr("NUMTIPOCLIENTE")
                        row.Item("Campo17") = dr("DESTIPOCLIENTE")
                        row.Item("Campo20") = "Tipo Cliente"
                    End If

                    row.Item("Campo18") = dr("NUMVENTA")
                    row.Item("Campo8") = dr("NUMCLIENTE")
                    row.Item("Campo9") = dr("CLIENTE")

                    If dr("MODALIDADPAGO") = 0 Then
                        row.Item("Campo4") = "CONTADO"
                    Else
                        row.Item("Campo4") = "CRÉDITO"
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero2") = dr("TOTALGRAVADA")
                        row.Item("Numero3") = dr("TOTALEXENTA")
                        row.Item("Numero4") = dr("TOTALDESCUENTO")
                        row.Item("Numero6") = dr("TOTALIVA")
                        row.Item("Numero5") = dr("TOTALFACTURA")
                    Else
                        row.Item("Numero2") = Math.Round(dr("TOTALGRAVADAINFORME") / cotizacion, candecimales)
                        row.Item("Numero3") = Math.Round(dr("TOTALEXENTAINFORME") / cotizacion, candecimales)
                        row.Item("Numero4") = Math.Round(dr("TOTALDESCUENTOINFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("TOTALIVAINFORME") / cotizacion, candecimales)
                        row.Item("Numero5") = Math.Round(dr("TOTALFACTURAINFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                row.Item("Numero3") = resumen

                If usuario <> "" Then
                    row.Item("Campo4") = "por " & usuario
                End If

                If tipoVenta = 1 Then
                    row.Item("campo3") = "Minoristas"
                ElseIf tipoVenta = 2 Then
                    row.Item("campo3") = "Mayoristas"
                End If

                If tipo = 0 Then
                    row.Item("campo30") = "Fecha"
                Else
                    row.Item("campo30") = "Mes"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infFacturasEmitidasSimple(ByVal codMoneda As Long, ByVal moneda_informe As String, _
        ByVal cotizacion As String, ByVal candecimales As Integer, _
        ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
        ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
        ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
        ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
        ByVal vendedor_desde As String, ByVal ve_descripcion_desde As String, _
        ByVal vendedor_hasta As String, ByVal ve_descripcion_hasta As String, _
        ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
        ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
        ByVal numeroDesde As String, ByVal numeroHasta As String, _
        ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
        ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
        ByVal fechaDesde As String, ByVal fechaHasta As String, _
        ByVal condiciones As String, _
        ByVal titulo As Byte, ByVal tipoVenta As Byte, ByVal modalidad As Byte, ByVal usuario As String, _
        ByVal resumen As Byte, Optional ByVal orden As String = "", _
        Optional ByVal tipo As Byte = 0) As DataSet
        ds.Clear()

        sql = ""
        sql = " DECLARE @CODEMPRESA NUMERIC(18) " & _
        " SET @CODEMPRESA = " & empCodigo & " " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " MONTH(V.FECHAVENTA) AS MES, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.MODALIDADPAGO, " & _
        " REPLICATE('0',5-LEN(RTRIM(VE.NUMVENDEDOR)))+LTRIM(RTRIM(VE.NUMVENDEDOR)) AS NUMVENDEDORORDEN, " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS DESVENDEDOR, " & _
        " RTRIM(TCL.NUMTIPOCLIENTE) AS NUMTIPOCLIENTE, RTRIM(TCL.DESTIPOCLIENTE) AS DESTIPOCLIENTE, " & _
        " V.NUMVENTA AS NUMVENTA, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " ISNULL(V.TOTALGRAVADA,0) AS TOTALGRAVADA, " & _
        " ISNULL(V.TOTALGRAVADA*V.COTIZACION1,0) AS TOTALGRAVADAINFORME, " & _
        " ISNULL(V.TOTALEXENTA,0) AS TOTALEXENTA, " & _
        " ISNULL(V.TOTALEXENTA*V.COTIZACION1,0) AS TOTALEXENTAINFORME, " & _
        " ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
        " ISNULL(V.TOTALDESCUENTO*V.COTIZACION1,0) AS TOTALDESCUENTOINFORME, " & _
        " ISNULL(V.TOTALIVA,0) AS TOTALIVA, " & _
        " ISNULL(V.TOTALIVA*V.COTIZACION1,0) AS TOTALIVAINFORME, " & _
        " ISNULL(V.TOTALGRAVADA,0) + ISNULL(V.TOTALEXENTA,0)+ ISNULL(V.TOTALIVA,0) - ISNULL(V.TOTALDESCUENTO,0) AS TOTALFACTURA, " & _
        " ISNULL(V.TOTALGRAVADA*V.COTIZACION1,0) + ISNULL(V.TOTALEXENTA*V.COTIZACION1,0)+ ISNULL(V.TOTALIVA*V.COTIZACION1,0) - ISNULL(V.TOTALDESCUENTO*V.COTIZACION1,0) AS TOTALFACTURAINFORME, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(U.DESUSUARIO) AS DESUSUARIO " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON  V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN USUARIO U ON U.CODUSUARIO = V.CODUSUARIO " & _
        " AND U.CODEMPRESA = V.CODEMPRESA " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR " & _
        " INNER JOIN TIPOCLIENTE TCL ON TCL.CODTIPOCLIENTE = CL.CODTIPOCLIENTE " & _
        " WHERE V.CODEMPRESA = @CODEMPRESA " & condiciones & " "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, CAST(V.FECHAVENTA AS DATETIME), " & orden & ", NUMVENTA "
        Else
            sql = sql & " ORDER BY NUMSUCURSAL, MES, " & orden & ", CAST(V.FECHAVENTA AS DATETIME), NUMVENTA "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo15") = dr("DESSUCURSAL")

                    If tipo = 0 Then
                        row.Item("Campo2") = dr("FECHAVENTA")
                    Else
                        row.Item("Campo2") = funcion.textomes(dr("MES")).ToUpper
                    End If

                    If orden = "NUMVENDEDORORDEN" Then
                        row.Item("Campo3") = dr("NUMVENDEDOR")
                        row.Item("Campo17") = dr("NUMVENDEDOR") & " - " & dr("DESVENDEDOR")
                        row.Item("Campo20") = "Vendedor"
                    ElseIf orden = "DESCOMPROBANTE" Then
                        row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                        row.Item("Campo17") = dr("DESCOMPROBANTE")
                        row.Item("Campo20") = "Comprobante"
                    Else
                        row.Item("Campo3") = dr("NUMTIPOCLIENTE")
                        row.Item("Campo17") = dr("DESTIPOCLIENTE")
                        row.Item("Campo20") = "Tipo Cliente"
                    End If

                    row.Item("Campo18") = dr("NUMVENTA")
                    row.Item("Campo8") = dr("NUMCLIENTE")
                    row.Item("Campo9") = dr("CLIENTE")

                    If dr("MODALIDADPAGO") = 0 Then
                        row.Item("Campo4") = "CONTADO"
                    Else
                        row.Item("Campo4") = "CRÉDITO"
                    End If

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero2") = dr("TOTALGRAVADA")
                        row.Item("Numero3") = dr("TOTALEXENTA")
                        row.Item("Numero4") = dr("TOTALDESCUENTO")
                        row.Item("Numero6") = dr("TOTALIVA")
                        row.Item("Numero5") = dr("TOTALFACTURA")
                    Else
                        row.Item("Numero2") = Math.Round(dr("TOTALGRAVADAINFORME") / cotizacion, candecimales)
                        row.Item("Numero3") = Math.Round(dr("TOTALEXENTAINFORME") / cotizacion, candecimales)
                        row.Item("Numero4") = Math.Round(dr("TOTALDESCUENTOINFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("TOTALIVAINFORME") / cotizacion, candecimales)
                        row.Item("Numero5") = Math.Round(dr("TOTALFACTURAINFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                row.Item("Numero3") = resumen

                If usuario <> "" Then
                    row.Item("Campo4") = "por " & usuario
                End If

                If tipoVenta = 1 Then
                    row.Item("campo3") = "Minoristas"
                ElseIf tipoVenta = 2 Then
                    row.Item("campo3") = "Mayoristas"
                End If

                If tipo = 0 Then
                    row.Item("campo30") = "Fecha"
                Else
                    row.Item("campo30") = "Mes"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function


    Public Function infFamilia(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMFAMILIA)))+LTRIM(RTRIM(NUMFAMILIA)) AS NUMERO, " & _
        "RTRIM(NUMFAMILIA) AS CODIGO, RTRIM(DESFAMILIA) AS DESCRIPCION FROM FAMILIA " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = "Listado de " & TITULO & "s"

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfFichaArticulo(ByVal moneda_informe As String, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal familia_desde As String, ByVal fam_descripcion_desde As String, _
    ByVal familia_hasta As String, ByVal fam_descripcion_hasta As String, _
    ByVal linea_desde As String, ByVal linea_descripcion_desde As String, _
    ByVal linea_hasta As String, ByVal linea_descripcion_hasta As String, _
    ByVal rubro_desde As String, ByVal rubro_descripcion_desde As String, _
    ByVal rubro_hasta As String, ByVal rubro_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, ByVal productos1 As String, ByVal productos2 As String, _
    ByVal productos3 As String, ByVal tipo As Byte, ByVal titulo As Byte, _
    ByVal CODPOLLITO As Long, ByVal CODPOLLO As Long, _
    ByVal codMonedaPrincipal As Long, ByVal canDecimalesImporte As Integer, _
    Optional ByVal condiciones As String = "", Optional ByVal orden As String = "") As DataSet
        ds.Clear()
        ds.Dispose()

        Dim saldo As Decimal
        Dim saldoanterior As Decimal
        Dim pri_vez As Boolean = True
        Dim sql2 As String
        Dim cmd2 As New SqlCommand
        Dim dar2 As SqlDataReader
        Dim cnn2 As New SqlConnection


        'Para guardar los datos de la cabecera
        Try
            sql = ""
            sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, S.CODSUCURSAL AS CODSUCURSAL, " & _
            " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS FAMILIA, " & _
            " RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA) AS LINEA, " & _
            " RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS RUBRO, " & _
            " ISNULL(REPLICATE('0',5-LEN(RTRIM(CP.NUMCATEGORIA)))+LTRIM(RTRIM(CP.NUMCATEGORIA)),'') AS CATEGORIAORDEN, " & _
            " ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
            " ISNULL(REPLICATE('0',5-LEN(RTRIM(SC.NUMSUBCATEGORIA)))+LTRIM(RTRIM(SC.NUMSUBCATEGORIA)),'') AS SUBCATEGORIAORDEN, " & _
            " ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
            " ISNULL(REPLICATE('0',5-LEN(RTRIM(MC.NUMMARCA)))+LTRIM(RTRIM(MC.NUMMARCA)),'') AS MARCAORDEN, " & _
            " ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA, " & _
            " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRAORDEN, " & _
            " RTRIM(P.CODPRODUCTO) AS CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
            " CONVERT(VARCHAR(10), ULTIMOINVENTARIO,103) AS FECHAINVENTARIO, " & _
            " STOCKINICIAL AS STOCKINICIAL, PS.CANTIDAD AS CANTIDAD, " & _
            " M.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            " P.ULTIMOCOSTO AS ULTIMOCOSTO, (P.ULTIMOCOSTO * I.COHEFICIENTE) AS ULTIMOCOSTOIVA  " & _
            " FROM PRODUCTOSUCURSAL PS INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PS.CODSUCURSAL " & _
            " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PS.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = P.CODMONEDA " & _
            " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
            " INNER JOIN LINEA L ON L.CODLINEA = P.CODLINEA " & _
            " INNER JOIN RUBRO R ON R.CODRUBRO = P.CODRUBRO " & _
            " INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
            " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
            " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
            " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
            " WHERE P.ACTUALIZARSTOCK = 1 AND P.CODEMPRESA = " & empCodigo

            If condiciones.Trim.Length > 0 Then
                sql = sql & condiciones
            End If


            'If orden.Trim.Length > 0 Then
            '    orden = "," & orden
            'End If

            'If tipo = 1 Then
            '    sql = sql & " ORDER BY ORDENNUMSUCURSAL, ORDENNUMFAMILIA, ORDENNUMLINEA, ORDENNUMRUBRO, ORDENCODIGOBARRA " & orden
            'Else
            '    sql = sql & " ORDER BY S.NUMSUCURSAL, F.NUMFAMILIA, L.NUMLINEA, R.NUMRUBRO, P.CODIGOBARRA " & orden
            'End If

            sql = sql & " ORDER BY S.NUMSUCURSAL " & orden

            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            ser.Abrir(cnn2)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd2.Connection = cnn2

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    '###################
                    '#     DETALLE     #
                    '###################

                    ''###################################################################################################
                    ''SALDO ANTERIOR
                    ''###################################################################################################

                    Dim condicionv, condicionc, condiciona, condiciont, condiciond, condicionop, condicionpt, condicionpp As String

                    ''Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condicionv = ""
                    Else
                        If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                            If dr("STOCKINICIAL") = 0 Then
                                condicionv = " V.FECHAVENTA >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND V.FECHAVENTA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condicionv = " V.FECHAVENTA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND V.FECHAVENTA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                            End If

                        Else
                            If fecha_desde.Trim = "" Then
                                condicionv = " V.FECHAVENTA < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                            Else
                                condicionv = " V.FECHAVENTA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                            End If
                        End If
                    End If
                    condicionv = condicionv & " V.ESTADO = 0 AND "

                    ''Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condicionc = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condicionc = " C.FECHACOMPRA >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND  C.FECHACOMPRA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condicionc = " C.FECHACOMPRA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND  C.FECHACOMPRA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    Else
                        If fecha_desde.Trim = "" Then
                            condicionc = " C.FECHACOMPRA < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condicionc = " C.FECHACOMPRA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condiciona = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condiciona = " A.FECHAAJUSTE >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND A.FECHAAJUSTE < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condiciona = " A.FECHAAJUSTE > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND A.FECHAAJUSTE < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If

                    Else
                        If fecha_desde.Trim = "" Then
                            condiciona = " A.FECHAAJUSTE < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condiciona = " A.FECHAAJUSTE < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If

                    ''Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condiciont = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condiciont = " T.FECHATRANSFERENCIA >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND T.FECHATRANSFERENCIA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condiciont = " T.FECHATRANSFERENCIA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND T.FECHATRANSFERENCIA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    Else
                        If fecha_desde.Trim = "" Then
                            condiciont = " T.FECHATRANSFERENCIA < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condiciont = " T.FECHATRANSFERENCIA < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If

                    ''Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condicionop = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condicionop = " OP.FECHAOP >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND OP.FECHAOP < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condicionop = " OP.FECHAOP > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND OP.FECHAOP < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    Else
                        If fecha_desde.Trim = "" Then
                            condicionop = " OP.FECHAOP < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condicionop = " OP.FECHAOP < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If

                    ''Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condicionpt = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condicionpt = " PIC.FECHACOMPROBANTE >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND PIC.FECHACOMPROBANTE < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condicionpt = " PIC.FECHACOMPROBANTE > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND PIC.FECHACOMPROBANTE < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    Else
                        If fecha_desde.Trim = "" Then
                            condicionpt = " PIC.FECHACOMPROBANTE < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condicionpt = " PIC.FECHACOMPROBANTE < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If

                    'Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condiciond = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condiciond = " D.FECHADEVOLUCION >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND D.FECHADEVOLUCION < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condiciond = " D.FECHADEVOLUCION > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND D.FECHADEVOLUCION < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    Else
                        If fecha_desde.Trim = "" Then
                            condiciond = " D.FECHADEVOLUCION < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condiciond = " D.FECHADEVOLUCION < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If

                    'Sin rango de Fecha, asignar el ultimo inventario o sino 0.
                    If Len(dr("FECHAINVENTARIO")) = 0 And fecha_desde.Trim = "" Then
                        condicionpp = ""
                    End If
                    If Not fecha_desde.Trim = "" And Not Len(dr("FECHAINVENTARIO")) = 0 Then
                        If dr("STOCKINICIAL") = 0 Then
                            condicionpp = " PP.FECHAINICIO >= CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND PP.FECHAINICIO < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        Else
                            condicionpp = " PP.FECHAINICIO > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND PP.FECHAINICIO < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If

                    Else
                        If fecha_desde.Trim = "" Then
                            condicionpp = " PP.FECHAINICIO < CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        Else
                            condicionpp = " PP.FECHAINICIO < CAST('" & fecha_desde & "' AS DATETIME) AND "
                        End If
                    End If

                    If fecha_desde = "" Then
                        sql2 = ""
                        sql2 = "SELECT PS.STOCKINICIAL AS SALDOANTERIOR " & _
                        " FROM PRODUCTOSUCURSAL PS " & _
                        " WHERE PS.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND PS.CODSUCURSAL = " & dr("CODSUCURSAL") & " "
                    Else
                        sql2 = ""
                        sql2 = "SELECT PS.STOCKINICIAL " & _
                        " + ISNULL((SELECT SUM(CD.CANTIDADCOMPRA) FROM COMPRASDETALLE CD, COMPRAS C " & _
                        " WHERE " & condicionc & " CD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND C.CODCOMPRA = CD.CODCOMPRA AND PS.CODSUCURSAL = C.CODSUCURSAL),0) " & _
                        " - ISNULL((SELECT SUM(VD.CANTIDADVENTA) FROM VENTASDETALLE VD, VENTAS V " & _
                        " WHERE " & condicionv & " VD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND V.CODVENTA = VD.CODVENTA AND PS.CODSUCURSAL = V.CODSUCURSAL),0) " & _
                        " - ISNULL((SELECT SUM(AD.CANTIDADAJUSTE) FROM AJUSTEDETALLE AD, AJUSTE A " & _
                        " WHERE " & condiciona & " AD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND A.TIPOAJUSTE = 0 AND A.CODAJUSTE = AD.CODAJUSTE AND A.CODSUCURSAL = PS.CODSUCURSAL),0) " & _
                        " - ISNULL((SELECT SUM(OPD.CANTIDAD) FROM ORDENPRODUCCIONMATERIAPRIMA OPD, ORDENPRODUCCION OP " & _
                        " WHERE " & condicionop & " OPD.CODPRODUCTOMATERIAPRIMA = " & dr("CODPRODUCTO") & " AND  OP.CODORDENPRODUCCION = OPD.CODORDENPRODUCCION AND OPD.CODSUCURSAL = PS.CODSUCURSAL),0) " & _
                        " +  ISNULL((SELECT SUM(AD.CANTIDADAJUSTE) FROM AJUSTEDETALLE AD, AJUSTE A " & _
                        " WHERE " & condiciona & " AD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND A.TIPOAJUSTE = 1 AND A.CODAJUSTE = AD.CODAJUSTE AND A.CODSUCURSAL = PS.CODSUCURSAL),0) " & _
                        " - ISNULL((SELECT SUM(CANTIDADTRANFERENCIA) FROM TRANSFERENCIASDETALLE TD, TRANFERENCIA T " & _
                        " WHERE " & condiciont & " TD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND T.CODTRANSFERENCIA = TD.CODTRANSFERENCIA AND T.CODSUCURSAL = PS.CODSUCURSAL),0) " & _
                        " + ISNULL((SELECT SUM(CANTIDADTRANFERENCIA) FROM TRANSFERENCIASDETALLE TD, TRANFERENCIA T " & _
                        " WHERE " & condiciont & " TD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND T.CODTRANSFERENCIA = TD.CODTRANSFERENCIA AND T.SUCURSALDESTINO = PS.CODSUCURSAL),0) " & _
                        " + ISNULL((SELECT SUM(CANTIDAD) FROM PRODUCCIONINGRESOPRODUCTODET PID, PRODUCCIONINGRESOPRODUCTO PIC " & _
                        " WHERE " & condicionpt & " PID.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND PIC.CODINGRESOPROTER = PID.CODINGRESOPROTER AND PIC.CODSUCURSAL = PS.CODSUCURSAL),0) " & _
                        " + ISNULL((SELECT SUM(CANTIDADDEVUELTA) FROM DEVOLUCIONDETALLE DD, DEVOLUCION D " & _
                        " WHERE " & condiciond & " DD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND D.CODDEVOLUCION = DD.CODDEVOLUCION AND D.CODSUCURSAL = PS.CODSUCURSAL AND D.ESTADO = 0 ),0) " & _
                        " - ISNULL((SELECT SUM(CANTIDADDEVUELTA) FROM DEVOLUCIONCOMPRADETALLE DD, DEVOLUCIONCOMPRA D " & _
                        " WHERE " & condiciond & " DD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND D.CODDEVOLUCION = DD.CODDEVOLUCION AND D.CODSUCURSAL = PS.CODSUCURSAL),0) " & _
                        " - ISNULL((SELECT SUM(CANTIDAD) FROM PRODUCCIONPOLLODETALLE PPD, PRODUCCIONPOLLO PP " & _
                        " WHERE " & condicionpp & " PPD.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND PP.CODPRODUCCION = PPD.CODPRODUCCION AND PP.CODSUCURSAL = PS.CODSUCURSAL AND PPD.CODPRODUCTO NOT IN(" & CODPOLLITO & ", " & CODPOLLO & ")),0) AS SALDOANTERIOR " & _
                        " FROM PRODUCTOSUCURSAL PS " & _
                        " WHERE PS.CODPRODUCTO = " & dr("CODPRODUCTO") & " AND PS.CODSUCURSAL = " & dr("CODSUCURSAL") & " "
                    End If

                    cmd2 = New SqlCommand(sql2, cnn2)
                    cmd2.CommandTimeout = 300
                    dar2 = cmd2.ExecuteReader()
                    Try
                        'Comienza a cargar el detalle de la cuenta
                        Do While dar2.Read()
                            saldoanterior = dar2("SALDOANTERIOR")
                        Loop
                    Catch E As Exception
                        MsgBox(E.Message)
                    Finally
                        dar2.Close()
                    End Try

                    saldo = saldoanterior

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condicionv = ""
                        Else
                            condicionv = " V.FECHAVENTA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condicionv = " V.FECHAVENTA BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condicionv = " V.FECHAVENTA > CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condicionv = " V.FECHAVENTA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND V.FECHAVENTA <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If
                    condicionv = condicionv & " V.ESTADO = 0 AND "

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condicionc = ""
                        Else
                            condicionc = " C.FECHACOMPRA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condicionc = " C.FECHACOMPRA BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condicionc = " C.FECHACOMPRA >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condicionc = " C.FECHACOMPRA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND C.FECHACOMPRA  <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condiciona = ""
                        Else
                            condiciona = " A.FECHAAJUSTE > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condiciona = " A.FECHAAJUSTE BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condiciona = " A.FECHAAJUSTE >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condiciona = " A.FECHAAJUSTE > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND  A.FECHAAJUSTE <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condiciont = ""
                        Else
                            condiciont = " TRA.FECHATRANSFERENCIA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condiciont = " TRA.FECHATRANSFERENCIA BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condiciont = " TRA.FECHATRANSFERENCIA >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condiciont = " TRA.FECHATRANSFERENCIA > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND TRA.FECHATRANSFERENCIA <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condicionop = ""
                        Else
                            condicionop = " OP.FECHAOP > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condicionop = " OP.FECHAOP BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condicionop = " OP.FECHAOP >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condicionop = " OP.FECHAOP > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND OP.FECHAOP <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condicionpt = ""
                        Else
                            condicionpt = " PIC.FECHACOMPROBANTE > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condicionpt = " PIC.FECHACOMPROBANTE BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condicionpt = " PIC.FECHACOMPROBANTE >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condicionpt = " PIC.FECHACOMPROBANTE > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND PIC.FECHACOMPROBANTE <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condiciond = ""
                        Else
                            condiciond = " D.FECHADEVOLUCION > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condiciond = " D.FECHADEVOLUCION BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condiciond = " D.FECHADEVOLUCION >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condiciond = " D.FECHADEVOLUCION > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND  D.FECHADEVOLUCION <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    If fecha_desde.Trim = "" And fecha_hasta.Trim = "" Then
                        If Len(dr("FECHAINVENTARIO")) = 0 Then
                            condicionpp = ""
                        Else
                            condicionpp = " PP.FECHAINICIO > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND "
                        End If
                    Else
                        If Not fecha_desde.Trim = "" And Not fecha_hasta.Trim = "" Then
                            condicionpp = " PP.FECHAINICIO BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME) AND "
                        Else
                            If fecha_hasta.Trim = "" Then
                                condicionpp = " PP.FECHAINICIO >= CAST('" & fecha_desde & "' AS DATETIME) AND "
                            Else
                                condicionpp = " PP.FECHAINICIO > CAST('" & dr("FECHAINVENTARIO") & "' AS DATETIME) AND PP.FECHAINICIO <= CAST('" & fecha_hasta & "' AS DATETIME) AND "
                            End If
                        End If
                    End If

                    sql2 = ""
                    sql2 = "SELECT V.FECHAVENTA AS FECHAORDEN, V.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAMOVIMIENTO, RTRIM(V.NUMVENTA) AS NUMMOVIMIENTO, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  VD.CANTIDADVENTA AS CANTIDAD, 0 AS TIPOMOVIMIENTO, 'Venta' AS TIPOMOV, " & _
                    "ISNULL((SELECT SUM(VE.CANTIDAD) FROM VENTASENTREGA VE WHERE VE.CODVENTA = VD.CODVENTA AND VE.CODPRODUCTO = VD.CODPRODUCTO),0) AS ENTREGA " & _
                    "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON VD.CODVENTA = V.CODVENTA " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = V.CODCOMPROBANTE " & _
                    "INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
                    "WHERE " & condicionv & " " & _
                    "VD.CODPRODUCTO = " & dr("CODPRODUCTO") & "  " & _
                    "AND V.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND V.CODEMPRESA = " & empCodigo & " " & _
     "UNION ALL " & _
                    "SELECT C.FECHACOMPRA AS FECHAORDEN, C.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHAMOVIMIENTO, RTRIM(C.NUMCOMPRA) AS NUMMOVIMIENTO, RTRIM(PRO.APELLIDO) + ' ' + RTRIM(PRO.NOMBRE) AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  CD.CANTIDADCOMPRA AS CANTIDAD, 1 AS TIPOMOVIMIENTO, 'Compra' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON CD.CODCOMPRA = C.CODCOMPRA " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = C.CODCOMPROBANTE " & _
                    "INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = C.CODPROVEEDOR " & _
                    "WHERE " & condicionc & " " & _
                    "CD.CODPRODUCTO = " & dr("CODPRODUCTO") & "  " & _
                    "AND C.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND C.CODEMPRESA = " & empCodigo & " " & _
    "UNION ALL " & _
                    "SELECT A.FECHAAJUSTE AS FECHAORDEN, A.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), A.FECHAAJUSTE, 103) AS FECHAMOVIMIENTO, RTRIM(A.NUMAJUSTE) AS NUMMOVIMIENTO, '' AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  AD.CANTIDADAJUSTE AS CANTIDAD, A.TIPOAJUSTE AS TIPOMOVIMIENTO, 'Ajuste' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM AJUSTE A INNER JOIN AJUSTEDETALLE AD ON AD.CODAJUSTE = A.CODAJUSTE " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = A.CODCOMPROBANTE " & _
                    "WHERE " & condiciona & " " & _
                    "AD.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND A.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND A.CODEMPRESA = " & empCodigo & " " & _
    "UNION ALL " & _
                    "SELECT TRA.FECHATRANSFERENCIA AS FECHAORDEN, TRA.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), TRA.FECHATRANSFERENCIA, 103) AS FECHAMOVIMIENTO, RTRIM(TRA.NUMTRANSFERENCIA) AS NUMMOVIMIENTO, RTRIM(SU.NUMSUCURSAL) + ' ' + RTRIM(SU.DESSUCURSAL) AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  TRAD.CANTIDADTRANFERENCIA AS CANTIDAD, 0 AS TIPOMOVIMIENTO, 'Transferencia' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM TRANFERENCIA TRA INNER JOIN TRANSFERENCIASDETALLE TRAD ON TRAD.CODTRANSFERENCIA = TRA.CODTRANSFERENCIA " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = TRA.CODCOMPROBANTE " & _
                    "INNER JOIN SUCURSAL SU ON SU.CODSUCURSAL = TRA.SUCURSALDESTINO " & _
                    "WHERE " & condiciont & "  " & _
                    "TRAD.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND TRA.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND TRA.CODEMPRESA = " & empCodigo & " " & _
     "UNION ALL " & _
                    "SELECT TRA.FECHATRANSFERENCIA AS FECHAORDEN, TRA.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), TRA.FECHATRANSFERENCIA, 103) AS FECHAMOVIMIENTO, RTRIM(TRA.NUMTRANSFERENCIA) AS NUMMOVIMIENTO, RTRIM(SU.NUMSUCURSAL) + ' ' + RTRIM(SU.DESSUCURSAL) AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  TRAD.CANTIDADTRANFERENCIA AS CANTIDAD, 1 AS TIPOMOVIMIENTO, 'Transferencia' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM TRANFERENCIA TRA INNER JOIN TRANSFERENCIASDETALLE TRAD ON TRAD.CODTRANSFERENCIA = TRA.CODTRANSFERENCIA " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = TRA.CODCOMPROBANTE " & _
                    "INNER JOIN SUCURSAL SU ON SU.CODSUCURSAL = TRA.CODSUCURSAL " & _
                    "WHERE " & condiciont & " " & _
                    "TRAD.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND TRA.SUCURSALDESTINO = " & dr("CODSUCURSAL") & " " & _
                    "AND TRA.CODEMPRESA = " & empCodigo & " " & _
    "UNION ALL " & _
                    "SELECT OP.FECHAOP AS FECHAORDEN, OP.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHAMOVIMIENTO, RTRIM(OP.NUMEROOP) AS NUMMOVIMIENTO,  '' AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  OPD.CANTIDAD AS CANTIDAD, 0 AS TIPOMOVIMIENTO, 'Orden Producción' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM ORDENPRODUCCION OP INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
                    "INNER JOIN ORDENPRODUCCIONDETALLE OPDE ON OPDE.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
                    "INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPD ON OPD.CODORDENPRODUCCION = OPDE.CODORDENPRODUCCION " & _
                    "AND OPD.CODPRODUCTO = OPDE.CODPRODUCTO " & _
                    "WHERE " & condicionop & " " & _
                    "OPD.CODPRODUCTOMATERIAPRIMA = " & dr("CODPRODUCTO") & " " & _
                    "AND OPD.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND OP.CODEMPRESA = " & empCodigo & " " & _
     "UNION ALL " & _
                    "SELECT PIC.FECHACOMPROBANTE AS FECHAORDEN, PIC.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), PIC.FECHACOMPROBANTE, 103) AS FECHAMOVIMIENTO, RTRIM(PIC.NUMCOMPROBANTE) AS NUMMOVIMIENTO,  '' AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  PID.CANTIDAD AS CANTIDAD, 1 AS TIPOMOVIMIENTO, 'Ingreso Productos' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM PRODUCCIONINGRESOPRODUCTO PIC INNER JOIN PRODUCCIONINGRESOPRODUCTODET PID ON PID.CODINGRESOPROTER = PIC.CODINGRESOPROTER " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = PIC.CODCOMPROBANTE " & _
                    "WHERE " & condicionpt & " " & _
                    "PID.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND PIC.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND PIC.CODEMPRESA = " & empCodigo & " " & _
        "UNION ALL " & _
                    "SELECT D.FECHADEVOLUCION AS FECHAORDEN, D.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), D.FECHADEVOLUCION, 103) AS FECHAMOVIMIENTO, RTRIM(D.NUMDEVOLUCION) AS NUMMOVIMIENTO, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  DD.CANTIDADDEVUELTA AS CANTIDAD, 1 AS TIPOMOVIMIENTO, 'Devolución' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM DEVOLUCION D INNER JOIN DEVOLUCIONDETALLE DD ON DD.CODDEVOLUCION = D.CODDEVOLUCION " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = D.CODCOMPROBANTE " & _
                    "INNER JOIN CLIENTES CL ON CL.CODCLIENTE = D.CODCLIENTE " & _
                    "WHERE " & condiciond & " " & _
                    "DD.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND D.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    " AND D.ESTADO = 0 AND D.CODEMPRESA = " & empCodigo & " " & _
       "UNION ALL /*DEVOLUCION COMPRA*/ " & _
                    "SELECT D.FECHADEVOLUCION AS FECHAORDEN, D.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), D.FECHADEVOLUCION, 103) AS FECHAMOVIMIENTO, RTRIM(D.NUMDEVOLUCION) AS NUMMOVIMIENTO, RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROPIETARIO, " & _
                    "T.DESCOMPROBANTE AS COMPROBANTE,  DD.CANTIDADDEVUELTA AS CANTIDAD, 0 AS TIPOMOVIMIENTO, 'Devolución de Compra' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM DEVOLUCIONCOMPRA D INNER JOIN DEVOLUCIONCOMPRADETALLE DD ON DD.CODDEVOLUCION = D.CODDEVOLUCION " & _
                    "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = D.CODCOMPROBANTE " & _
                    "INNER JOIN PROVEEDOR PR ON D.CODPROVEEDOR = PR.CODPROVEEDOR " & _
                    "WHERE " & condiciond & " " & _
                    "DD.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND D.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND D.CODEMPRESA = " & empCodigo & " " & _
       "UNION ALL " & _
                    "SELECT PPD.FECHA AS FECHAORDEN, PP.FECGRA AS FECHAORDEN1, CONVERT(VARCHAR(10), PPD.FECHA, 103) AS FECHAMOVIMIENTO, RTRIM(PP.NUMPRODUCCION) AS NUMMOVIMIENTO, '' AS PROPIETARIO, " & _
                    "'PRODUCCIÓN DE POLLOS' AS COMPROBANTE, PPD.CANTIDAD AS CANTIDAD, 0 AS TIPOMOVIMIENTO, 'Producción de Pollos' AS TIPOMOV, 0 AS ENTREGA " & _
                    "FROM PRODUCCIONPOLLO PP INNER JOIN PRODUCCIONPOLLODETALLE PPD ON PPD.CODPRODUCCION = PP.CODPRODUCCION " & _
                    "WHERE " & condicionpp & " " & _
                    "PPD.CODPRODUCTO = " & dr("CODPRODUCTO") & " " & _
                    "AND PP.CODSUCURSAL = " & dr("CODSUCURSAL") & " " & _
                    "AND PP.CODEMPRESA = " & empCodigo & " " & _
                    "AND PPD.CODPRODUCTO NOT IN (" & CODPOLLITO & ", " & CODPOLLO & ") " & _
                    "ORDER BY FECHAORDEN, FECHAORDEN1"

                    cmd2 = New SqlCommand(sql2, cnn2)
                    cmd2.CommandTimeout = 300
                    dar2 = cmd2.ExecuteReader()

                    Try
                        'Comienza a cargar el detalle de la cuenta
                        If dar2.HasRows = True Then
                            Do While dar2.Read()
                                row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                                row.Item("Campo1") = dr("SUCURSAL")
                                row.Item("Campo13") = dr("NUMSUCURSAL")
                                row.Item("Campo2") = dr("FAMILIA")
                                row.Item("Campo14") = dr("NUMFAMILIA")
                                row.Item("Campo3") = dr("LINEA")
                                row.Item("Campo15") = dr("NUMLINEA")
                                row.Item("Campo4") = dr("RUBRO")
                                row.Item("Campo16") = dr("NUMRUBRO")
                                row.Item("Campo5") = dr("CODIGO")
                                row.Item("Campo6") = dr("DESCRIPCION")
                                row.Item("Campo7") = dr("FECHAINVENTARIO")
                                row.Item("Numero1") = dr("STOCKINICIAL")
                                row.Item("Numero2") = dr("CANTIDAD")
                                row.Item("Campo8") = dar2("FECHAMOVIMIENTO")
                                row.Item("Campo9") = dar2("COMPROBANTE")
                                row.Item("Campo10") = dar2("NUMMOVIMIENTO")
                                row.Item("Numero9") = dar2("TIPOMOVIMIENTO")
                                row.Item("Campo11") = dar2("TIPOMOV")
                                row.Item("Campo12") = dar2("PROPIETARIO")
                                row.Item("Campo21") = dr("NUMMONEDA")
                                row.Item("Campo22") = dr("DESMONEDA")

                                If dr("CODMONEDA") = codMonedaPrincipal Then
                                    row.Item("Numero15") = dr("ULTIMOCOSTO")
                                    row.Item("Numero16") = dr("ULTIMOCOSTOIVA")
                                Else
                                    row.Item("Numero15") = Math.Round(dr("ULTIMOCOSTO"), canDecimalesImporte)
                                    row.Item("Numero16") = Math.Round(dr("ULTIMOCOSTOIVA"), canDecimalesImporte)
                                End If

                                If dar2("TIPOMOVIMIENTO") = 1 Then
                                    row.Item("Numero3") = 0
                                    row.Item("Numero7") = dar2("CANTIDAD")

                                    If CDate(dar2("FECHAMOVIMIENTO")) < CDate(dr("FECHAINVENTARIO")) Then
                                        'saldo = 0
                                        row.Item("Numero4") = 0
                                    Else
                                        saldo = saldo + dar2("CANTIDAD")
                                        row.Item("Numero4") = saldo
                                    End If
                                Else
                                    row.Item("Numero3") = dar2("CANTIDAD")
                                    row.Item("Numero7") = 0

                                    If CDate(dar2("FECHAMOVIMIENTO")) < CDate(dr("FECHAINVENTARIO")) Then
                                        'saldo = 0
                                        row.Item("Numero4") = 0
                                    Else
                                        saldo = saldo - dar2("CANTIDAD")
                                        row.Item("Numero4") = saldo
                                    End If
                                End If

                                row.Item("Numero5") = saldoanterior

                                row.Item("Numero6") = dar2("ENTREGA")

                                row.Item("Campo20") = dar2("FECHAORDEN1")

                                ds.Tables("Detalle").Rows.Add(row)
                            Loop

                        Else 'Si no tiene stock para que igual se visualice el producto
                            row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                            row.Item("Campo1") = dr("SUCURSAL")
                            row.Item("Campo13") = dr("NUMSUCURSAL")
                            row.Item("Campo2") = dr("FAMILIA")
                            row.Item("Campo14") = dr("NUMFAMILIA")
                            row.Item("Campo3") = dr("LINEA")
                            row.Item("Campo15") = dr("NUMLINEA")
                            row.Item("Campo4") = dr("RUBRO")
                            row.Item("Campo16") = dr("NUMRUBRO")
                            row.Item("Campo5") = dr("CODIGO")
                            row.Item("Campo6") = dr("DESCRIPCION")
                            row.Item("Campo7") = dr("FECHAINVENTARIO")
                            row.Item("Numero1") = dr("STOCKINICIAL")
                            row.Item("Numero2") = dr("CANTIDAD")
                            row.Item("Campo8") = ""
                            'row.Item("Campo9") = dar2("COMPROBANTE")
                            'row.Item("Campo10") = dar2("NUMMOVIMIENTO")
                            'row.Item("Numero9") = dar2("TIPOMOVIMIENTO")
                            'row.Item("Campo11") = dar2("TIPOMOV")
                            'row.Item("Campo12") = dar2("PROPIETARIO")
                            row.Item("Campo21") = dr("NUMMONEDA")
                            row.Item("Campo22") = dr("DESMONEDA")

                            If dr("CODMONEDA") = codMonedaPrincipal Then
                                row.Item("Numero15") = dr("ULTIMOCOSTO")
                                row.Item("Numero16") = dr("ULTIMOCOSTOIVA")
                            Else
                                row.Item("Numero15") = Math.Round(dr("ULTIMOCOSTO"), canDecimalesImporte)
                                row.Item("Numero16") = Math.Round(dr("ULTIMOCOSTOIVA"), canDecimalesImporte)
                            End If

                            row.Item("Numero3") = 0
                            row.Item("Numero7") = 0

                            row.Item("Numero5") = saldoanterior

                            ds.Tables("Detalle").Rows.Add(row)
                        End If

                    Catch E As Exception
                        MsgBox(E.ToString)
                    End Try
                    saldo = 0
                    pri_vez = True
                    dar2.Close()
                Loop

                '###################
                '#    CABECERA     #
                '###################
                row = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea
                row.Item("Numero1") = titulo
                row.Item("Campo28") = RTrim(productos1)
                row.Item("Campo29") = RTrim(productos2)
                row.Item("Campo30") = RTrim(productos3)
                row.Item("Campo31") = RTrim(productos1)
                row.Item("Campo32") = RTrim(productos2)
                row.Item("Campo33") = RTrim(productos3)
                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = sucursal_desde
                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo3") = sucursal_hasta
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo4") = codigo_desde
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo5") = codigo_hasta
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo8") = familia_desde
                row.Item("Campo22") = fam_descripcion_desde
                row.Item("Campo9") = familia_hasta
                row.Item("Campo23") = fam_descripcion_hasta
                row.Item("Campo10") = linea_desde
                row.Item("Campo24") = linea_descripcion_desde
                row.Item("Campo11") = linea_hasta
                row.Item("Campo25") = linea_descripcion_hasta
                row.Item("Campo12") = rubro_desde
                row.Item("Campo26") = rubro_descripcion_desde
                row.Item("Campo13") = rubro_hasta
                row.Item("Campo27") = rubro_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta

                row.Item("Campo2") = desdecategoria
                row.Item("Campo3") = hastacategoria
                row.Item("Campo4") = desdesubcategoria
                row.Item("Campo5") = hastasubcategoria
                row.Item("Campo6") = desdemarca
                row.Item("Campo7") = hastamarca

                ds.Tables("Cabecera").Rows.Add(row)
            Catch e As Exception
                MsgBox(e.Message)
            Finally
                dr.Close()
                ser.Cerrar(sqlc)
                cnn2.Close()
                ser.Cerrar(cnn2)
            End Try
        Catch e As SqlException
            MsgBox(e.Message)
        Finally
        End Try

        Return ds
    End Function

    Public Function infGastoCompra(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMGASTO)))+LTRIM(RTRIM(NUMGASTO)) AS NUMERO, " & _
              "NUMGASTO AS CODIGO, DESGASTO AS DESCRIPCION FROM GASTOCOMPRA " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infIVA(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(I.NUMIVA)))+LTRIM(RTRIM(I.NUMIVA)) AS NUMERO, " & _
              "RTRIM(I.NUMIVA) AS CODIGO, RTRIM(I.DESIVA) AS DESCRIPCION, " & _
              "'PRIORIDAD' = CASE " & _
              "WHEN I.PRIORIDAD = 1 THEN 'SI' " & _
              "WHEN I.PRIORIDAD = 0 THEN 'NO' " & _
              "END, " & _
              "I.PORCENTAJEIVA AS PORCENTAJEIVA, I.COHEFICIENTE AS COHEFICIENTE, " & _
              "ISNULL(RTRIM(PD.NUMPLANCUENTA), ' ') AS NUMCUENTADEBE, " & _
              "ISNULL(RTRIM(PD.DESPLANCUENTA), ' ') AS DESCUENTADEBE, " & _
              "ISNULL(RTRIM(PH.NUMPLANCUENTA), ' ') AS NUMCUENTAHABER, " & _
              "ISNULL(RTRIM(PH.DESPLANCUENTA),' ') AS DESCUENTAHABER " & _
              "FROM IVA I LEFT OUTER JOIN PLANCUENTAS PD ON I.CUENTADEBE = PD.CODPLANCUENTA " & _
              "LEFT OUTER JOIN PLANCUENTAS PH ON I.CUENTAHABER = PH.CODPLANCUENTA " & _
              "WHERE I.CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Numero1") = dr("PORCENTAJEIVA")
                row.Item("Numero2") = dr("COHEFICIENTE")
                row.Item("Campo3") = dr("PRIORIDAD")
                row.Item("Campo4") = dr("NUMCUENTADEBE")
                row.Item("Campo5") = dr("DESCUENTADEBE")
                row.Item("Campo6") = dr("NUMCUENTAHABER")
                row.Item("Campo7") = dr("DESCUENTAHABER")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infLinea(ByVal tipo As Byte, ByVal nombre_listado As String) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMLINEA)))+LTRIM(RTRIM(NUMLINEA)) AS NUMERO, " & _
        "RTRIM(NUMLINEA) AS CODIGO, RTRIM(DESLINEA) AS DESCRIPCION FROM LINEA " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = nombre_listado

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfListaPrecio(ByVal sucursal_desde As String, ByVal sucursal_hasta As String, _
    ByVal codigo_desde As String, ByVal codigo_hasta As String, _
    ByVal familia_desde As String, ByVal familia_hasta As String, _
    ByVal linea_desde As String, ByVal linea_hasta As String, _
    ByVal rubro_desde As String, ByVal rubro_hasta As String, _
    ByVal tipocliente_desde As String, ByVal tipocliente_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_hasta As String, _
    ByVal desdeLista As String, ByVal hastaLista As String, _
    ByVal familia As String, ByVal linea As String, ByVal rubro As String, ByVal titulo As Byte, ByVal tipo As Byte, _
    ByVal CANDECIMALESIMPORTE As Integer, Optional ByVal condiciones As String = "", Optional ByVal orden As String = "", _
    Optional ByVal canDecimales As Integer = 0) As DataSet

        ds.Clear()


        sql = ""
        sql = " SELECT REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
        " REPLICATE('0',5-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS ORDENSUCURSAL, " & _
        " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA, " & _
        " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA, " & _
        " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO, " & _
        " REPLICATE('0',5-LEN(RTRIM(T.NUMTIPOCLIENTE)))+LTRIM(RTRIM(T.NUMTIPOCLIENTE)) AS ORDENTIPOCLIENTE, " & _
        " REPLICATE('0',5-LEN(RTRIM(TL.NUMLISTA)))+LTRIM(RTRIM(TL.NUMLISTA)) AS ORDENTIPOLISTA, " & _
        " REPLICATE('0',5-LEN(RTRIM(M.NUMMONEDA)))+LTRIM(RTRIM(M.NUMMONEDA)) AS ORDENMONEDA, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS FAMILIA, " & _
        " RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA) AS LINEA, " & _
        " RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS RUBRO, " & _
        " (PR.PRECIOVENTA * I.COHEFICIENTE) AS PRECIOVENTA, " & _
        " RTRIM(I.CODIVA) AS CODIGOIVA,  I.COHEFICIENTE AS COHEFICIENTE, " & _
        " RTRIM(T.CODTIPOCLIENTE) AS CODIGOTIPOCLIENTE,RTRIM(T.NUMTIPOCLIENTE) AS NUMTIPOCLIENTE, " & _
        " RTRIM(T.DESTIPOCLIENTE) AS TIPOCLIENTE, " & _
        " RTRIM(TL.NUMLISTA) AS NUMLISTA, " & _
        " RTRIM(TL.DESLISTA) AS DESLISTA, " & _
        " (PR.PRECIOVENTA*I.COHEFICIENTE*(SELECT FACTORVENTA FROM COTIZACION WHERE CODMONEDA = M.CODMONEDA " & _
        " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA = M.CODMONEDA))) AS PRECIOVENTAINFORME, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, M.CODMONEDA, " & _
        " RTRIM(PP.DESPRIORIDAD) AS PRIORIDAD " & _
        " FROM PRODUCTOS P " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON  P.CODRUBRO = R.CODRUBRO " & _
        " INNER JOIN ESTADOPRODUCTO E ON P.CODESTADOPRODUCTO = E.CODESTADOPRODUCTO " & _
        " INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        " INNER JOIN PRECIO PR ON PR.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN PRECIOPRIORIDAD PP ON PR.CODPRIORIDAD = PP.CODPRIORIDAD " & _
        " INNER JOIN TIPOCLIENTE T ON PR.CODTIPOCLIENTE = T.CODTIPOCLIENTE " & _
        " INNER JOIN TIPOLISTA TL ON PR.CODLISTA = TL.CODLISTA " & _
        " INNER JOIN SUCURSAL S ON PR.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON   PR.CODMONEDA = M.CODMONEDA " & _
        " WHERE P.CODEMPRESA = " & empCodigo & "  AND P.PRODUCTOACTIVO = 1 " & condiciones & " " & _
        " ORDER BY   "

        If tipo = 1 Then
            sql = sql + " ORDENTIPOLISTA, ORDENMONEDA  " & orden & " "
        Else
            sql = sql + " NUMLISTA, NUMMONEDA " & orden & " "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("SUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("FAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("LINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("RUBRO")
                row.Item("Campo9") = dr("NUMLISTA")
                row.Item("Campo10") = dr("DESLISTA")
                row.Item("Campo11") = dr("NUMMONEDA")
                row.Item("Campo12") = dr("MONEDA")
                row.Item("Campo13") = dr("CODIGO")
                row.Item("Campo14") = dr("DESCRIPCION")
                row.Item("Campo15") = dr("PRIORIDAD")
                row.Item("Numero1") = dr("PRECIOVENTA")

                ds.Tables("Detalle").Rows.Add(row)

                If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("CODMONEDA"), empCodigo) = "0" Then
                    row.Item("Numero20") = 0
                Else
                    row.Item("Numero20") = CANDECIMALESIMPORTE
                End If

            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            If condiciones <> "" Then
                row.Item("Campo5") = codigo_desde
                row.Item("Campo6") = codigo_hasta
                row.Item("Campo7") = familia_desde
                row.Item("Campo8") = familia_hasta
                row.Item("Campo9") = linea_desde
                row.Item("Campo10") = linea_hasta
                row.Item("Campo11") = rubro_desde
                row.Item("Campo12") = rubro_hasta
                row.Item("Campo13") = desdeLista
                row.Item("Campo14") = hastaLista
                row.Item("Campo15") = moneda_desde
                row.Item("Campo16") = moneda_hasta
                row.Item("Campo17") = sucursal_desde
                row.Item("Campo18") = sucursal_hasta
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infUsuarios() As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT S.CODUSUARIO, RTRIM(S.DESUSUARIO) AS DESUSUARIO, " & _
              " CASE " & _
              " WHEN S.NIVELCUENTA = 1 THEN 'ADMINISTRADOR' " & _
              " WHEN S.NIVELCUENTA = 2 THEN 'SUPERVISOR' " & _
              " WHEN S.NIVELCUENTA = 3 THEN 'OPERADOR' " & _
              " END AS NIVELCUENTA, " & _
              " CONVERT(VARCHAR(10),S.FECGRA,103) AS FECHA , " & _
              " (SELECT DESUSUARIO FROM USUARIO U  WHERE S.USUGRA = U.CODUSUARIO) AS USUARIOGRA " & _
              " FROM USUARIO S  WHERE S.CODEMPRESA =  " & empCodigo & " " & _
              " ORDER BY  S.DESUSUARIO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo2") = dr("DESUSUARIO")
                row.Item("Campo3") = dr("NIVELCUENTA")
                row.Item("Campo4") = dr("FECHA")
                row.Item("Campo5") = dr("USUARIOGRA")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infMoneda(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMMONEDA)))+LTRIM(RTRIM(NUMMONEDA)) AS NUMERO, " & _
        "RTRIM(NUMMONEDA) AS CODIGO, RTRIM(DESMONEDA) AS DESCRIPCION, RTRIM(SIMBOLO) AS SIMBOLO, " & _
        "CASE DECIMALES WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END AS DECIMALES, " & _
        "CASE PRIORIDAD WHEN 0 THEN 'NO' WHEN 1 THEN 'SI' END AS PREDETERMINADO FROM MONEDA " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("SIMBOLO")
                row.Item("Campo4") = dr("DECIMALES")
                row.Item("Campo5") = dr("PREDETERMINADO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoAjustes(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, ByVal tipoCosto As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
            "CONVERT(VARCHAR(10),A.FECHAAJUSTE,103) AS FECHAAJUSTE, " & _
            "RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
            "RTRIM (A.NUMAJUSTE) AS NUMERO, " & _
            "M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, A.COTIZACION1 AS COTIZACION, " & _
            "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, AD.CANTIDADAJUSTE AS CANTIDAD, " & _
            "AD.COSTOULTIMO AS COSTOULTIMO, " & _
            "AD.CANTIDADAJUSTE * AD.COSTOULTIMO AS TOTAL,  " & _
            "ISNULL(AD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO, " & _
            "AD.CANTIDADAJUSTE * ISNULL(AD.COSTOPROMEDIO,0) AS TOTALCOSTOPPRECALCULADO, " & _
            "A.TOTALCOSTOAJUSTE, " & _
            "CASE TIPOAJUSTE " & _
            "WHEN 0 THEN '(-)' " & _
            "WHEN 1 THEN '(+)' " & _
            "END AS TIPO " & _
            "FROM AJUSTE A INNER JOIN SUCURSAL S ON A.CODSUCURSAL = S.CODSUCURSAL " & _
            "INNER JOIN MONEDA M ON A.CODMONEDA = M.CODMONEDA " & _
            "INNER JOIN TIPOCOMPROBANTE T ON A.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
            "INNER JOIN AJUSTEDETALLE AD ON A.CODAJUSTE = AD.CODAJUSTE " & _
            "INNER JOIN PRODUCTOS P ON AD.CODPRODUCTO = P.CODPRODUCTO " & _
            "WHERE A.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
            "ORDER BY NUMSUCURSAL, CODIGOBARRA, NUMMONEDA"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Campo7") = dr("CODIGOBARRA")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo4") = dr("NUMERO")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo10") = dr("TIPO")
                row.Item("Campo2") = dr("FECHAAJUSTE")

                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Numero5") = dr("CANTIDAD")

                If tipoCosto = 0 Then
                    row.Item("Numero6") = dr("COSTOPPRECALCULADO")
                    row.Item("Numero7") = dr("TOTALCOSTOPPRECALCULADO")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero8") = dr("TOTALCOSTOPPRECALCULADO")
                    Else
                        row.Item("Numero8") = dr("TOTALCOSTOPPRECALCULADO") * dr("COTIZACION") / cotizacion
                    End If
                Else
                    row.Item("Numero6") = dr("COSTOULTIMO")
                    row.Item("Numero7") = dr("TOTAL")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero8") = dr("TOTAL")
                    Else
                        row.Item("Numero8") = dr("TOTAL") * dr("COTIZACION") / cotizacion
                    End If
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja        
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = producto_descripcion_desde
            row.Item("Campo19") = producto_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo28") = moneda_informe
            row.Item("Numero2") = cotizacion

            If tipoCosto = 0 Then
                row.Item("Campo20") = "Promedio"
            Else
                row.Item("Campo20") = "Unitario"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoCompras(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal TARJETA As Long, _
    ByVal ESN As Long, ByVal SIMCARD As Long, _
    ByVal titulo As Byte, ByVal tipoTotal As Byte) As DataSet
        ds.Clear()
        Dim codproductoaux As String = ""
        Dim numcompraaux As String = ""
        Dim sql1 As String

        Dim cnn As New SqlConnection
        Dim cmd1 As New SqlCommand
        Dim dr1 As SqlDataReader
        Dim cad As String = ""

        sql = ""
        sql = " SELECT RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(T.NUMTIPOCOMPRO))+LTRIM(RTRIM(T.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',10-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " RTRIM(T.NUMTIPOCOMPRO) AS TIPOCOMPROBANTE, RTRIM (C.NUMCOMPRA) AS NROCOMPROBANTE, " & _
        " RTRIM(PRO.APELLIDO)+' '+RTRIM(PRO.NOMBRE) AS PROVEEDOR, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, C.TOTALIVA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, " & _
        " C.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " CD.CANTIDADCOMPRA AS CANTIDAD, CD.COSTOUNITARIO AS COSTOUNITARIO, CD.COSTOBRUTO, " & _
        " ISNULL(CD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO,  " & _
        " CASE WHEN CD.FACTORPROMEDIO > 0 THEN (CD.COSTOUNITARIO + CD.FACTORPROMEDIO) " & _
        " ELSE 0 END AS COSTOFINAL, " & _
        " ISNULL((SELECT FACTORVENTA FROM COTIZACION WHERE FECHAMOVIMIENTO = " & _
        " (SELECT  MAX(FECHAMOVIMIENTO) AS MAXIMO FROM COTIZACION WHERE CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO <= C.FECHACOMPRA)AND CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION, " & _
        " (CD.CANTIDADCOMPRA * CD.COSTOUNITARIO) AS TOTALCOMPRANETO, " & _
        " (CD.CANTIDADCOMPRA * CD.COSTOBRUTO) AS TOTALCOMPRABRUTO, " & _
        " CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * C.COTIZACION1 AS TOTALCOMPRAINFORMENETO, " & _
        " CD.CANTIDADCOMPRA * CD.COSTOBRUTO * C.COTIZACION1 AS TOTALCOMPRAINFORMEBRUTO " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE T ON C.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON C.CODPROVEEDOR = PRO.CODPROVEEDOR " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE P.CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY NUMSUCURSALORDEN, NUMTIPOCOMPROORDEN, NROCOMPROBANTE, P.CODIGOBARRA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            ser.Abrir(cnn)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd1.Connection = cnn

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("SUCURSAL")
                row.Item("Campo2") = dr("FECHACOMPRA")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo4") = dr("NROCOMPROBANTE")
                row.Item("Campo5") = dr("PROVEEDOR")
                row.Item("Numero1") = dr("TOTALEXENTA")
                row.Item("Numero2") = dr("TOTALGRAVADA")
                row.Item("Numero3") = dr("TOTALIVA")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("COSTOBRUTO")
                row.Item("Numero9") = dr("COSTOUNITARIO")
                row.Item("Numero10") = dr("COSTOFINAL")

                If moneda_informe = dr("CODMONEDA") Then
                    If tipoTotal = 0 Then
                        row.Item("Numero7") = Math.Round(dr("TOTALCOMPRANETO"), candecimales)
                    Else
                        row.Item("Numero7") = Math.Round(dr("TOTALCOMPRABRUTO"), candecimales)
                    End If

                    If tipoTotal = 0 Then
                        row.Item("Numero8") = Math.Round(dr("TOTALCOMPRANETO"), candecimales)
                    Else
                        row.Item("Numero8") = Math.Round(dr("TOTALCOMPRABRUTO"), candecimales)
                    End If

                Else

                    If tipoTotal = 0 Then
                        row.Item("Numero7") = dr("TOTALCOMPRANETO")
                    Else
                        row.Item("Numero7") = dr("TOTALCOMPRABRUTO")
                    End If

                    If tipoTotal = 0 Then
                        row.Item("Numero8") = Math.Round(dr("TOTALCOMPRAINFORMENETO") / cotizacion, candecimales)
                    Else
                        row.Item("Numero8") = Math.Round(dr("TOTALCOMPRAINFORMEBRUTO") / cotizacion, candecimales)
                    End If
                End If

                'If codproductoaux <> dr("CODIGO") Or numcompraaux <> dr("NROCOMPROBANTE") Then
                '    'TARJETAS
                '    If dr("CODLINEA") = TARJETA Then
                '        sql1 = ""
                '        sql1 = "SELECT RANGO1 AS RANGO1, RANGO2 AS RANGO2, CANTIDAD FROM COMPRASDETALLERANGOS WHERE CODCOMPRA = " & dr("CODCOMPRA") & " AND CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                '        cad = ""
                '        Try
                '            cmd1.CommandText = sql1
                '            dr1 = cmd1.ExecuteReader
                '            cad = "-----------------------------------------------------------------------------------------" & vbCrLf
                '            cad = cad & "                          RANGOS DE TPY`S GENERADOS.." & vbCrLf
                '            cad = cad & "-----------------------------------------------------------------------------------------" & vbCrLf & vbCrLf
                '            cad = cad & "DESDE          -          HASTA          -          CANTIDAD " & vbCrLf
                '            cad = cad & "-----------------------------------------------------------------------------------------" & vbCrLf & vbCrLf

                '            Do While dr1.Read
                '                cad = cad & " " & CStr(dr1("RANGO1")) & "    -    " & CStr(dr1("RANGO2")) & "        -          (" & CStr(Math.Round(dr1("CANTIDAD"), candecimales)) & ".00) " & vbCrLf
                '            Loop
                '            cad = cad & vbCrLf
                '            cad = cad & "         " & vbCrLf
                '            row.Item("Campo10") = cad
                '        Catch ex As Exception
                '            MsgBox(ex.ToString)
                '        Finally
                '            dr1.Close()
                '        End Try
                '        'EQUIPOS - ESN`S
                '    ElseIf dr("CODLINEA") = ESN Then
                '        sql1 = ""
                '        sql1 = "SELECT ESN FROM EQUIPOS WHERE CODCOMPRA = " & dr("CODCOMPRA") & " AND CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                '        cad = ""
                '        Try
                '            cmd1.CommandText = sql1
                '            dr1 = cmd1.ExecuteReader
                '            cad = "---------------------------------------------------------------------" & vbCrLf
                '            cad = cad & "                 ESN DE LOS EQUIPOS CARGADOS " & vbCrLf
                '            cad = cad & "--------------------------------------------------------------------" & vbCrLf & vbCrLf
                '            Dim c As String = ""
                '            Dim i As Integer
                '            Do While dr1.Read
                '                c = "*" & CStr(dr1("ESN"))
                '                'For i = 1 To 25 - Len(CStr(dr1("ESN")).Trim)
                '                '    If i = Len(CStr(dr1("ESN")).Trim) Then
                '                '        c = c + "*"
                '                '    Else
                '                '        c = c + " "
                '                '    End If
                '                'Next
                '                cad = cad & c & " /// " : TAB()
                '            Loop
                '            cad = cad & vbCrLf
                '            cad = cad & "         " & vbCrLf
                '            row.Item("Campo10") = cad
                '        Catch ex As Exception
                '            MsgBox(ex.ToString)
                '        Finally
                '            dr1.Close()
                '        End Try

                '        'SIMCARD
                '    ElseIf dr("CODLINEA") = SIMCARD Then
                '        sql1 = ""
                '        sql1 = "SELECT NUMSIMCARD FROM SIMCARD WHERE CODCOMPRA = " & dr("CODCOMPRA") & " AND CODPRODUCTO = " & dr("CODPRODUCTO") & " "
                '        cad = ""
                '        Try
                '            cmd1.CommandText = sql1
                '            dr1 = cmd1.ExecuteReader
                '            cad = "---------------------------------------------------------------------" & vbCrLf
                '            cad = cad & "                 NÚMEROS DE SIMCARD´S " & vbCrLf
                '            cad = cad & "--------------------------------------------------------------------" & vbCrLf & vbCrLf

                '            Do While dr1.Read
                '                cad = cad & "*" & CStr(dr1("NUMSIMCARD")) & "* /// " : TAB()
                '            Loop
                '            cad = cad & vbCrLf
                '            cad = cad & "         " & vbCrLf
                '            row.Item("Campo10") = cad
                '        Catch ex As Exception
                '            MsgBox(ex.ToString)
                '        Finally
                '            dr1.Close()
                '        End Try
                '    Else
                '        row.Item("Campo10") = "0"
                '    End If


                '    codproductoaux = dr("CODIGO")
                '    numcompraaux = dr("NROCOMPROBANTE")
                'End If

                'Dim cc As String = row.Item("Campo10")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion

            If tipoTotal = 0 Then
                row.Item("Campo2") = "Unitario"
            Else
                row.Item("Campo2") = "Bruto"
            End If

            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cod_descripcion_desde
            row.Item("Campo19") = cod_descripcion_hasta
            row.Item("Campo24") = comprobante_descripcion_desde
            row.Item("Campo25") = comprobante_descripcion_hasta
            row.Item("Campo20") = producto_descripcion_desde
            row.Item("Campo21") = producto_descripcion_hasta
            row.Item("Campo26") = moneda_descripcion_desde
            row.Item("Campo27") = moneda_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo28") = moneda_descripcion
            row.Item("Campo29") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)

        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoInventario(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
         " CONVERT(VARCHAR(10),I.FECHAINVENTARIO,103) AS FECHAINVENTARIO, RTRIM(T.DESCOMPROBANTE) AS DESCOMPRO, " & _
         " RTRIM(T.NUMTIPOCOMPRO) AS TIPOCOMPROBANTE, RTRIM (I.NUMINVENTARIO) AS NROINVENTARIO, " & _
         " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, I.COTIZACION1 AS COTIZACION, " & _
         " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
         " INVD.CANTIDAD AS CANTIDAD, INVD.COSTOULTIMO AS COSTO, " & _
         " INVD.CANTIDAD * INVD.COSTOULTIMO AS TOTALCOSTO, INVD.CANTIDAD * INVD.COSTOULTIMO * I.COTIZACION1 AS TOTALCOSTOINFORME, " & _
         " ISNULL(INVD.COSTOPP, 0) AS COSTOPP, (ISNULL(INVD.COSTOPP, 0) * I.COTIZACION1) AS COSTOPPINFORME, " & _
         " CASE M.DECIMALES WHEN 0 THEN ROUND(INVD.CANTIDAD * INVD.COSTOPP, 0) " & _
         " ELSE ROUND(INVD.CANTIDAD * INVD.COSTOPP, " & canDecimales & ") END AS TOTALINVENTARIO, INVD.CANTIDAD * INVD.COSTOPP * I.COTIZACION1 AS TOTALINFORME " & _
         " FROM INVENTARIO I INNER JOIN SUCURSAL S ON I.CODSUCURSAL = S.CODSUCURSAL " & _
         " INNER JOIN TIPOCOMPROBANTE T ON I.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
         " INNER JOIN MONEDA M ON I.CODMONEDA = M.CODMONEDA " & _
         " INNER JOIN INVENTARIODETALLE INVD ON I.CODINVENTARIO = INVD.CODINVENTARIO " & _
         " INNER JOIN PRODUCTOS P ON INVD.CODPRODUCTO = P.CODPRODUCTO " & _
         " WHERE I.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
         " ORDER BY NUMSUCURSAL, CODIGO, NUMMONEDA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo11") = dr("DESSUCURSAL")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo4") = dr("NROINVENTARIO")
                row.Item("Campo3") = dr("DESCOMPRO")
                row.Item("Campo2") = dr("FECHAINVENTARIO")

                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("COSTO")
                row.Item("Numero7") = dr("TOTALCOSTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero8") = Math.Round(dr("TOTALCOSTO"), canDecimales)
                Else
                    row.Item("Numero8") = Math.Round(dr("TOTALCOSTOINFORME") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            Dim loco As Byte = row.Item("Numero1")

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = producto_descripcion_desde
            row.Item("Campo19") = producto_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo28") = moneda_informe
            row.Item("Numero2") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function InfMovimientoOrden(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
              " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
              " RTRIM(PRO.NUMPROVEEDOR) AS NUMPROVEEDOR, " & _
              " RTRIM(PRO.APELLIDO)+' '+RTRIM(PRO.APELLIDO) AS PROVEEDOR, " & _
              " RTRIM(TC.NUMTIPOCOMPRO) AS TIPOCOMPROBANTE, " & _
              " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
              " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, " & _
              " RTRIM(OC.NUMORDENCOMPRA) AS NROORDEN, " & _
              " OC.CODMONEDA AS CODMONEDA, OC.COTIZACION1 AS COTIZACION, " & _
              " OC.COTIZACION2 AS COTIZACION2, " & _
              " CONVERT(VARCHAR(10),OC.FECHAORDEN,103) AS FECHAORDEN, " & _
              " OCD.CANTIDAD AS CANTIDAD, OCD.COSTO AS COSTO, " & _
              " ISNULL(OCD.CANTIDADAUTORI,0) AS CANTAUTORIZADA, " & _
              " (OCD.CANTIDAD*OCD.COSTO) AS TOTAL, " & _
              " ((OCD.CANTIDAD*OCD.COSTO)*OC.COTIZACION1) AS TOTALINFORME " & _
              " FROM ORDENCOMPRA OC " & _
              " INNER JOIN ORDENCOMPRADETALLE OCD ON OC.CODORDENCOMPRA = OCD.CODORDENCOMPRA " & _
              " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = OCD.CODPRODUCTO " & _
              " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = OC.CODSUCURSAL " & _
              " INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = OC.CODPROVEEDOR " & _
              " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OC.CODCOMPROBANTE " & _
              " INNER JOIN MONEDA M ON M.CODMONEDA = OC.CODMONEDA " & _
              " WHERE OC.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
              " ORDER BY NUMSUCURSAL, CODIGO, TIPOCOMPROBANTE, NROORDEN "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("SUCURSAL")
                row.Item("Campo2") = dr("FECHAORDEN")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo4") = dr("NROORDEN")
                row.Item("Campo5") = dr("PROVEEDOR")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("CANTAUTORIZADA")
                row.Item("Numero7") = dr("TOTAL")


                If moneda_informe = dr("CODMONEDA") Then
                    row.Item("Numero8") = dr("TOTAL")
                Else
                    row.Item("Numero8") = Math.Round(dr("TOTALINFORME") / cotizacion, candecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion

            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cod_descripcion_desde
            row.Item("Campo19") = cod_descripcion_hasta
            row.Item("Campo24") = comprobante_descripcion_desde
            row.Item("Campo25") = comprobante_descripcion_hasta
            row.Item("Campo20") = producto_descripcion_desde
            row.Item("Campo21") = producto_descripcion_hasta
            row.Item("Campo26") = moneda_descripcion_desde
            row.Item("Campo27") = moneda_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo28") = moneda_descripcion
            row.Item("Campo29") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)

        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoTransferencias(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde_origen As String, ByVal suc_descripcion_desde_origen As String, _
    ByVal sucursal_hasta_origen As String, ByVal suc_descripcion_hasta_origen As String, _
    ByVal sucursal_desde_destino As String, ByVal suc_descripcion_desde_destino As String, _
    ByVal sucursal_hasta_destino As String, ByVal suc_descripcion_hasta_destino As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(SO.NUMSUCURSAL) AS NUMSUCURSALORIGEN, RTRIM(SO.DESSUCURSAL) AS SUCURSALORIGEN, " & _
        "RTRIM(SD.NUMSUCURSAL) AS NUMSUCURSALDESTINO, RTRIM(SD.DESSUCURSAL) AS SUCURSALDESTINO, " & _
        "CONVERT(VARCHAR(10),T.FECHATRANSFERENCIA,103) AS FECHATRANSFERENCIA, " & _
        "RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        "RTRIM (T.NUMTRANSFERENCIA) AS NUMERO, " & _
        "M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, T.COTIZACION1 AS COTIZACION, " & _
        "RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        "TD.CANTIDADTRANFERENCIA AS CANTIDAD, TD.COSTOULTIMO AS COSTOULTIMO, TD.COSTOPROMEDIO AS COSTOPROMEDIO " & _
        "FROM TRANFERENCIA T INNER JOIN SUCURSAL SO ON T.CODSUCURSAL = SO.CODSUCURSAL " & _
        "INNER JOIN SUCURSAL SD ON T.SUCURSALDESTINO = SD.CODSUCURSAL " & _
        "INNER JOIN TIPOCOMPROBANTE TC ON T.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        "INNER JOIN MONEDA M ON T.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN TRANSFERENCIASDETALLE TD ON T.CODTRANSFERENCIA = TD.CODTRANSFERENCIA " & _
        "INNER JOIN PRODUCTOS P ON TD.CODPRODUCTO = P.CODPRODUCTO " & _
        "WHERE T.CODEMPRESA = " & empCodigo & " " & condiciones & _
        "ORDER BY NUMSUCURSALORIGEN, NUMSUCURSALDESTINO, P.CODIGOBARRA, M.NUMMONEDA, NUMCOMPROBANTE, NUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSALORIGEN")
                row.Item("Campo15") = dr("SUCURSALORIGEN")
                row.Item("Campo14") = dr("NUMSUCURSALDESTINO")
                row.Item("Campo16") = dr("SUCURSALDESTINO")
                row.Item("Campo2") = dr("FECHATRANSFERENCIA")
                row.Item("Campo3") = dr("NUMCOMPROBANTE")
                row.Item("Campo4") = dr("NUMERO")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("COSTOPROMEDIO")
                row.Item("Numero7") = dr("CANTIDAD") * dr("COSTOPROMEDIO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTOPROMEDIO"), canDecimales)
                Else
                    row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTOPROMEDIO") * dr("COTIZACION") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = sucursal_desde_origen
            row.Item("Campo16") = suc_descripcion_desde_origen
            row.Item("Campo3") = sucursal_hasta_origen
            row.Item("Campo10") = sucursal_desde_destino
            row.Item("Campo11") = suc_descripcion_desde_destino
            row.Item("Campo12") = sucursal_hasta_destino
            row.Item("Campo17") = suc_descripcion_hasta_origen
            row.Item("campo13") = suc_descripcion_hasta_destino
            row.Item("Campo4") = producto_desde
            row.Item("Campo18") = producto_descripcion_desde
            row.Item("Campo5") = producto_hasta
            row.Item("Campo19") = producto_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo28") = moneda_informe
            row.Item("Campo29") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoVenta(ByVal codMoneda As Long, ByVal moneda_informe As String, _
  ByVal cotizacion As String, ByVal canDecimales As Integer, _
  ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
  ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
  ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
  ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
  ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
  ByVal vendedor_hastas As String, ByVal vend_descripcion_hasta As String, _
  ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
  ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
  ByVal fecha_desde As String, ByVal fecha_hasta As String, _
  ByVal condiciones As String, ByVal titulo As Byte, _
  ByVal tipoVenta As Byte, ByVal modalidad As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, V.MODALIDADPAGO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (V.NUMVENTA) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE, RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " VD.CANTIDADVENTA AS CANTIDAD, VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO, " & _
        " VD.PRECIOVENTANETO AS PRECIOVENTANETO, ISNULL(Vd.PORCENCOMI,0) AS PROMEDIOCOMISION, " & _
        " ((VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * VD.[DESC]) / 100) AS MONTODESCUENTO, " & _
        " ((VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * VD.[DESC] * V.COTIZACION1) / 100) AS MONTODESCUENTOINFORME, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, M.CODMONEDA AS CODMONEDA " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " WHERE V.ESTADO = 0 AND V.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, CODIGO, NUMMONEDA, CAST(FECHAVENTA AS DATETIME), TIPOCOMPROBANTE, NROCOMPROBANTE "
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Campo10") = dr("CODIGO")
                row.Item("Campo6") = dr("DESCRIPCION")
                row.Item("Campo8") = dr("NUMMONEDA")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo4") = dr("NROCOMPROBANTE")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo5") = dr("CLIENTE")
                row.Item("Campo7") = dr("VENDEDOR")
                row.Item("Campo2") = dr("FECHAVENTA")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("PRECIOVENTABRUTO")
                row.Item("Numero3") = dr("PRECIOVENTANETO")
                row.Item("Numero4") = dr("CANTIDAD") * dr("PRECIOVENTABRUTO")
                row.Item("Numero5") = dr("MONTODESCUENTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero6") = dr("CANTIDAD") * dr("PRECIOVENTABRUTO")
                    row.Item("Numero7") = dr("MONTODESCUENTO")
                Else
                    row.Item("Numero6") = dr("CANTIDAD") * dr("PRECIOVENTABRUTO") _
                    * dr("COTIZACION") / cotizacion
                    row.Item("Numero7") = dr("MONTODESCUENTOINFORME") / cotizacion
                End If

                row.Item("Numero8") = dr("PROMEDIOCOMISION")

                If dr("MODALIDADPAGO") = 0 Then
                    row.Item("Campo12") = "CONTADO"
                Else
                    row.Item("Campo12") = "CRÉDITO"
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            Dim loco As Byte = row.Item("Numero1")

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cli_descripcion_desde
            row.Item("Campo19") = cli_descripcion_hasta
            row.Item("Campo20") = vend_descripcion_desde
            row.Item("Campo21") = vend_descripcion_hasta
            row.Item("Campo22") = producto_descripcion_desde
            row.Item("Campo23") = producto_descripcion_hasta
            row.Item("Campo24") = fecha_desde
            row.Item("Campo25") = fecha_hasta
            row.Item("Campo14") = moneda_informe
            row.Item("Numero2") = cotizacion

            If tipoVenta = 1 Then
                row.Item("campo3") = "Minorista"
            ElseIf tipoVenta = 2 Then
                row.Item("campo3") = "Mayorista"
            End If

            If modalidad = 1 Then
                row.Item("campo4") = "CONTADO"
            ElseIf modalidad = 2 Then
                row.Item("campo4") = "CRÉDITO"
            Else
                row.Item("campo4") = "TODOS"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoPresupuesto(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hastas As String, ByVal vend_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),PV.FECHAPRESUPUESTO,103) AS FECHAPRESUPUESTO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (PV.NUMPRESUPUESTO) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE, RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " PV.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " PVD.CANTIDAD AS CANTIDAD, PVD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO, " & _
        " PVD.PRECIOVENTANETO AS PRECIOVENTANETO, (PVD.CANTIDAD * PVD.PRECIOVENTANETO) AS TOTALNETO, " & _
        " (PVD.CANTIDAD * PVD.PRECIOVENTANETO * PV.COTIZACION1) AS TOTALNETOINFORME, " & _
        " ((PVD.PRECIOVENTABRUTO * PVD.CANTIDAD * PVD.DESCUENTO) / 100) AS MONTODESCUENTO, " & _
        " ((PVD.PRECIOVENTABRUTO * PVD.CANTIDAD * PVD.DESCUENTO * PV.COTIZACION1) / 100) AS MONTODESCUENTOINFORME, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, M.CODMONEDA AS CODMONEDA " & _
        " FROM PRESUPUESTOVENTAS PV " & _
        " INNER JOIN CLIENTES CL ON PV.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON PV.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN TIPOCOMPROBANTE T ON PV.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON PV.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENDEDOR VE ON PV.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN PRESUPUESTOVENTASDETALLE PVD ON PV.CODPRESUPUESTO = PVD.CODPRESUPUESTO " & _
        " INNER JOIN PRODUCTOS P ON PVD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE PV.ESTADO = 0 AND PV.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, CODIGO, NUMMONEDA "
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Campo10") = dr("CODIGO")
                row.Item("Campo6") = dr("DESCRIPCION")
                row.Item("Campo8") = dr("NUMMONEDA")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo4") = dr("NROCOMPROBANTE")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo5") = dr("CLIENTE")
                row.Item("Campo7") = dr("VENDEDOR")
                row.Item("Campo2") = dr("FECHAPRESUPUESTO")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("PRECIOVENTABRUTO")
                row.Item("Numero3") = dr("PRECIOVENTANETO")
                row.Item("Numero4") = dr("TOTALNETO")
                row.Item("Numero5") = dr("MONTODESCUENTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero6") = dr("TOTALNETO")
                    row.Item("Numero7") = dr("MONTODESCUENTO")
                Else
                    row.Item("Numero6") = Math.Round(dr("TOTALNETOINFORME") / cotizacion, canDecimales)
                    row.Item("Numero7") = Math.Round(dr("MONTODESCUENTOINFORME") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            Dim loco As Byte = row.Item("Numero1")

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cli_descripcion_desde
            row.Item("Campo19") = cli_descripcion_hasta
            row.Item("Campo20") = vend_descripcion_desde
            row.Item("Campo21") = vend_descripcion_hasta
            row.Item("Campo22") = producto_descripcion_desde
            row.Item("Campo23") = producto_descripcion_hasta
            row.Item("Campo24") = fecha_desde
            row.Item("Campo25") = fecha_hasta
            row.Item("Campo14") = moneda_informe
            row.Item("Numero2") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoDevolucion(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hastas As String, ByVal vend_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (D.NUMDEVOLUCION) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE, RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " D.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " DD.CANTIDADDEVUELTA AS CANTIDAD, DD.PRECIOBRUTO AS PRECIOBRUTO, " & _
        " DD.PRECIONETO AS PRECIONETO, (DD.CANTIDADDEVUELTA * DD.PRECIONETO) AS TOTALNETO, (DD.CANTIDADDEVUELTA * DD.PRECIOBRUTO) AS TOTALBRUTO, " & _
        " (DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1) AS TOTALNETOINFORME, " & _
        " (DD.CANTIDADDEVUELTA * DD.PRECIOBRUTO * D.COTIZACION1) AS TOTALBRUTOINFORME, " & _
        " ((DD.PRECIOBRUTO * DD.CANTIDADDEVUELTA * DD.[DESC]) / 100) AS MONTODESCUENTO, " & _
        " ((DD.PRECIOBRUTO * DD.CANTIDADDEVUELTA * DD.[DESC] * D.COTIZACION1) / 100) AS MONTODESCUENTOINFORME, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, M.CODMONEDA AS CODMONEDA " & _
        " FROM DEVOLUCION D " & _
        " INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN TIPOCOMPROBANTE T ON D.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENDEDOR VE ON D.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN PRODUCTOS P ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE D.CODEMPRESA = " & empCodigo & "  AND D.ESTADO = 0  " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, CODIGO, NUMMONEDA "
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Campo10") = dr("CODIGO")
                row.Item("Campo6") = dr("DESCRIPCION")
                row.Item("Campo8") = dr("NUMMONEDA")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo4") = dr("NROCOMPROBANTE")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo5") = dr("CLIENTE")
                row.Item("Campo7") = dr("VENDEDOR")
                row.Item("Campo2") = dr("FECHADEVOLUCION")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("PRECIONETO")
                row.Item("Numero3") = dr("PRECIOBRUTO")
                row.Item("Numero4") = dr("TOTALBRUTO")
                row.Item("Numero5") = dr("MONTODESCUENTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero6") = dr("TOTALBRUTO")
                    row.Item("Numero7") = dr("MONTODESCUENTO")
                Else
                    row.Item("Numero6") = Math.Round(dr("TOTALBRUTOINFORME") / cotizacion, canDecimales)
                    row.Item("Numero7") = Math.Round(dr("MONTODESCUENTOINFORME") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            Dim loco As Byte = row.Item("Numero1")

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cli_descripcion_desde
            row.Item("Campo19") = cli_descripcion_hasta
            row.Item("Campo20") = vend_descripcion_desde
            row.Item("Campo21") = vend_descripcion_hasta
            row.Item("Campo22") = producto_descripcion_desde
            row.Item("Campo23") = producto_descripcion_hasta
            row.Item("Campo24") = fecha_desde
            row.Item("Campo25") = fecha_hasta
            row.Item("Campo14") = moneda_informe
            row.Item("Numero2") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfOrdenPago(ByVal compra As Long) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT S.CODSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " O.NROORDEN, CONVERT(VARCHAR(10), O.FECORDEN, 103)AS FECORDEN, " & _
        " P.CODPROVEEDOR, RTRIM(P.NUMPROVEEDOR) AS NUMPROVEEDOR, " & _
        " LTRIM(RTRIM(P.APELLIDO)+' '+RTRIM(P.NOMBRE)) AS PROVEEDOR, RTRIM(RUC) AS RUC, " & _
        " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, " & _
        " O.COTIZACION1 AS COTIZACION, O.IMPORTE, O.CONCEPTO, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS COMPROBANTE, RTRIM(C.NUMCOMPRA) AS COMPRA, " & _
        " ISNULL((SELECT RTRIM(B.DESBANCO) AS BANCO " & _
        " FROM ORDENPAGOCHEQUE OPC INNER JOIN DEBITOS DC ON OPC.CODDEBITO = DC.CODDEBITO " & _
        " INNER JOIN BANCO B ON DC.CODBANCO = B.CODBANCO " & _
        " WHERE OPC.CODEMPRESA = O.CODEMPRESA " & _
        " AND OPC.NROORDEN = O.NROORDEN), '') AS BANCO, " & _
        " ISNULL((SELECT RTRIM(CB.NUMCUENTA) AS CUENTA " & _
        " FROM ORDENPAGOCHEQUE OPC INNER JOIN DEBITOS DC ON OPC.CODDEBITO = DC.CODDEBITO " & _
        " INNER JOIN CUENTABANCARIA CB ON DC.CODBANCO = CB.CODBANCO AND DC.NUMCUENTA = CB.NUMCUENTA " & _
        " WHERE OPC.CODEMPRESA = O.CODEMPRESA " & _
        " AND OPC.NROORDEN = O.NROORDEN), '') AS CUENTA, " & _
        " ISNULL((SELECT CONVERT(VARCHAR, DC.FECHA, 103) AS FECHA " & _
        " FROM ORDENPAGOCHEQUE OPC INNER JOIN DEBITOS DC ON OPC.CODDEBITO = DC.CODDEBITO " & _
        " WHERE OPC.CODEMPRESA = O.CODEMPRESA " & _
        " AND OPC.NROORDEN = O.NROORDEN), '') AS FECHACHEQUE, " & _
        " ISNULL((SELECT CONVERT(VARCHAR, DC.NUMBOLETA, 103) AS CHEQUE " & _
        " FROM ORDENPAGOCHEQUE OPC INNER JOIN DEBITOS DC ON OPC.CODDEBITO = DC.CODDEBITO " & _
        " WHERE OPC.CODEMPRESA = O.CODEMPRESA " & _
        " AND OPC.NROORDEN = O.NROORDEN), '') AS NUMCHEQUE " & _
        " FROM ORDENPAGO O INNER JOIN SUCURSAL S ON O.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON O.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN PROVEEDOR P ON O.CODPROVEEDOR = P.CODPROVEEDOR " & _
        " INNER JOIN COMPRAS C ON O.CODCOMPRA = C.CODCOMPRA " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " WHERE O.CODCOMPRA = " & compra & " "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NROORDEN")
                    row.Item("Campo2") = dr("DESSUCURSAL")
                    row.Item("Campo3") = dr("NUMPROVEEDOR")
                    row.Item("Campo4") = dr("PROVEEDOR")
                    row.Item("Campo5") = dr("RUC")
                    row.Item("Campo6") = dr("COMPROBANTE")
                    row.Item("Campo7") = dr("COMPRA")
                    row.Item("Campo8") = dr("MONEDA")
                    row.Item("Numero1") = dr("COTIZACION")
                    row.Item("Numero2") = dr("IMPORTE")
                    row.Item("Campo9") = dr("CONCEPTO")
                    row.Item("Campo10") = dr("BANCO")
                    row.Item("Campo11") = dr("CUENTA")
                    row.Item("Campo12") = dr("FECHACHEQUE")
                    row.Item("Campo13") = dr("FECORDEN")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion

                ds.Tables("Cabecera").Rows.Add(row)
            Catch

            Finally
                ser.Cerrar(sqlc)
            End Try
        Finally

        End Try

        Return ds
    End Function

    Public Function infPais(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMPAIS)))+LTRIM(RTRIM(NUMPAIS)) AS NUMERO, " & _
              "RTRIM(NUMPAIS) AS CODIGO, RTRIM(DESPAIS) AS DESCRIPCION FROM PAIS " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoClientes(ByVal desdecliente As String, ByVal hastacliente As String, _
  ByVal desdevendedor As String, ByVal hastavendedor As String, ByVal desdecobrador As String, ByVal hastacobrador As String, _
  ByVal desdetipocli As String, ByVal hastatipocli As String, _
  ByVal desdefecha As String, ByVal hastafecha As String, ByVal desdezona As String, _
  ByVal hastazona As String, ByVal desderubro As String, ByVal hastarubro As String, _
  ByVal desdelista As String, ByVal hastalista As String, _
  ByVal titulo As Byte, ByVal condiciones As String, ByVal orden As String, ByVal detalle As Byte, ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(C.NUMCLIENTE) AS ORDENCLIENTE, " & _
        "RTRIM(Z.NUMZONA) AS ORDENZONA, " & _
        "CONVERT(DATETIME, C.FECHAINGRESO) AS ORDENFECHAINGRESO, " & _
        "ISNULL(V.CODVENDEDOR, 0) AS CODVENDEDOR, " & _
        "ISNULL(RTRIM(V.NUMVENDEDOR), ' ') AS NUMVENDEDOR, " & _
        "ISNULL(RTRIM(V.DESVENDEDOR), ' ') AS DESVENDEDOR, " & _
        "ISNULL(CO.CODCOBRADOR, 0) AS CODCOBRADOR, " & _
        "ISNULL(RTRIM(CO.NUMCOBRADOR), ' ') AS NUMCOBRADOR, " & _
        "ISNULL(RTRIM(CO.DESCOBRADOR), ' ') AS DESCOBRADOR, " & _
        "ISNULL(TC.CODTIPOCLIENTE, 0) AS CODTIPOCLIENTE, " & _
        "ISNULL(RTRIM(TC.NUMTIPOCLIENTE), ' ') AS NUMTIPOCLIENTE, " & _
        "ISNULL(RTRIM(TC.DESTIPOCLIENTE), ' ') AS DESTIPOCLIENTE, " & _
        "ISNULL(RC.CODRUBROCLIENTE, 0) AS CODRUBROCLIENTE, " & _
        "ISNULL(RTRIM(RC.NUMRUBROCLIENTE), ' ') AS NUMRUBROCLIENTE, " & _
        "ISNULL(RTRIM(RC.DESRUBROCLIENTE), ' ') AS DESRUBROCLIENTE, " & _
        "ISNULL(Z.CODZONA, 0) AS CODZONA, " & _
        "ISNULL(RTRIM(Z.NUMZONA), '') AS NUMZONA, " & _
        "ISNULL(RTRIM(Z.DESZONA), '') AS DESZONA, " & _
        "ISNULL(LTRIM(RTRIM(U.DESCIUDAD)),'') AS ORDENCIUDAD, " & _
        "ISNULL(RTRIM(U.NUMCIUDAD), '') AS NUMCIUDAD, " & _
        "ISNULL(RTRIM(U.DESCIUDAD), 'SIN CIUDAD') AS DESCIUDAD, " & _
        "ISNULL(PC.CODPLANCUENTA, 0) AS CODPLANCUENTA, " & _
        "ISNULL(RTRIM(PC.NUMPLANCUENTA), ' ') AS NUMPLANCUENTA, " & _
        "ISNULL(RTRIM(PC.DESPLANCUENTA), ' ') AS DESPLANCUENTA, " & _
        "ISNULL(C.CODIGOCOMISION, ' ') AS CODIGOCOMISION, " & _
        "RTRIM(C.NUMCLIENTE) AS NUMCLIENTE, " & _
        "RTRIM(RTRIM(C.APELLIDO) + ' ' + RTRIM(C.NOMBRE)) AS DESCLIENTE, " & _
        "RTRIM(C.NUMCEDULA) AS DNI, " & _
        "RTRIM(C.RUC) AS RUC, " & _
        "RTRIM(C.DIRECCION) AS DIRECCION, " & _
        "RTRIM(C.DIRENVIO) AS DIRENVIO, " & _
        "RTRIM(C.TELEFONO) AS TELEFONO, " & _
        "RTRIM(C.CELULAR) AS CELULAR, " & _
        "RTRIM(C.FAX) AS FAX, " & _
        "RTRIM(C.EMAIL) AS MAIL, " & _
        "RTRIM(C.WEB) AS WEB, " & _
        "C.LIMCREDITO AS LIMITECREDITO, " & _
        "C.PORCENTAJE AS PORCENTAJE, " & _
        "C.DIASVENCIMIENTO AS DIASVENCIMIENTO, " & _
        "RTRIM(C.CONDICIONVENTA) AS CONDICIONVENTA, " & _
        "'EXENTO' = " & _
        "CASE " & _
        "WHEN C.CLIENTEEXENTO = 0 THEN 'NO' " & _
        "WHEN C.CLIENTEEXENTO = 1 THEN 'SI' " & _
        "END, " & _
        "RTRIM(C.OBSERVACION) AS OBS, ISNULL(RTRIM(TL.DESLISTA),'') AS LISTA, " & _
        "CONVERT(VARCHAR(10), C.FECHAINGRESO, 103) AS FECHAINGRESO " & _
        "FROM CLIENTES C " & _
        "LEFT OUTER JOIN ZONA Z ON C.CODZONA = Z.CODZONA " & _
        "LEFT OUTER JOIN CIUDAD U ON C.CODCIUDAD = U.CODCIUDAD " & _
        "LEFT OUTER JOIN PLANCUENTAS PC ON C.CODPLANCUENTA = PC.CODPLANCUENTA " & _
        "LEFT OUTER JOIN TIPOCLIENTE TC ON C.CODTIPOCLIENTE = TC.CODTIPOCLIENTE " & _
        "LEFT OUTER JOIN VENDEDOR V ON C.CODVENDEDOR = V.CODVENDEDOR " & _
        "LEFT OUTER JOIN COBRADOR CO ON C.CODCOBRADOR = CO.CODCOBRADOR " & _
        "LEFT OUTER JOIN RUBROCLIENTE RC ON C.CODRUBROCLIENTE = RC.CODRUBROCLIENTE " & _
        "LEFT OUTER JOIN TIPOLISTA TL ON C.CODLISTA = TL.CODLISTA " & _
        "WHERE C.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        "ORDER BY " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMCLIENTE")

                If tipo = 0 Then
                    row.Item("Campo2") = ""
                End If
                If tipo = 1 Then
                    row.Item("Campo2") = "VENDEDOR " & dr("NUMVENDEDOR") & " " & dr("DESVENDEDOR")
                End If
                If tipo = 2 Then
                    row.Item("Campo2") = "ZONA " & dr("NUMZONA") & " " & dr("DESZONA")
                End If
                If tipo = 3 Then
                    row.Item("Campo2") = "RUBRO " & dr("NUMRUBROCLIENTE") & " " & dr("DESRUBROCLIENTE")
                End If
                If tipo = 4 Then
                    row.Item("Campo2") = "TIPO " & dr("DESRUBROCLIENTE") & " " & dr("DESTIPOCLIENTE")
                End If
                If tipo = 5 Then
                    row.Item("Campo2") = " CIUDAD " & dr("NUMCIUDAD") & "   " & dr("DESCIUDAD")
                End If

                row.Item("Campo3") = dr("DESCLIENTE")
                row.Item("Campo4") = dr("DNI")
                row.Item("Campo5") = dr("RUC")
                row.Item("Campo6") = dr("DIRECCION")
                row.Item("Campo7") = dr("DESZONA")
                row.Item("Campo8") = dr("TELEFONO")
                row.Item("Campo9") = dr("CELULAR")
                row.Item("Campo10") = dr("FAX")
                row.Item("Campo11") = dr("MAIL")
                row.Item("Campo12") = dr("LISTA") ''dr("WEB")
                row.Item("Campo13") = dr("DESCOBRADOR")
                row.Item("Campo14") = dr("DESVENDEDOR")
                row.Item("Campo16") = dr("OBS")
                row.Item("Campo17") = dr("NUMPLANCUENTA")
                row.Item("Campo18") = dr("DESPLANCUENTA")
                row.Item("Campo20") = dr("FECHAINGRESO")
                row.Item("Campo21") = dr("NUMZONA")

                row.Item("Numero1") = dr("LIMITECREDITO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdecliente
            row.Item("Campo5") = hastacliente
            row.Item("Campo3") = desdezona
            row.Item("Campo6") = hastazona
            row.Item("Campo4") = desdefecha
            row.Item("Campo7") = hastafecha

            row.Item("Campo8") = desdetipocli
            row.Item("Campo9") = hastatipocli
            row.Item("Campo10") = desdecobrador
            row.Item("Campo11") = hastacobrador
            row.Item("Campo12") = desdevendedor
            row.Item("Campo13") = hastavendedor
            row.Item("Campo14") = desderubro
            row.Item("Campo15") = hastarubro
            row.Item("Campo16") = desdelista
            row.Item("Campo17") = hastalista
            row.Item("Numero1") = detalle

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoExistenciaDetallado(ByVal desdesucursal As String, ByVal hastasucursal As String, ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, ByVal desdefechaingreso As String, ByVal hastafechaingreso As String, _
    ByVal titulo As Byte, ByVal condiciones As String, ByVal orden As String, ByVal tipo As Byte, ByVal cortefamilia As Byte, ByVal cortelinea As Byte, ByVal corterubro As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
        " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA, " & _
        " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA, " & _
        " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO, " & _
        " REPLICATE('0',5-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS ORDENSUCURSAL, " & _
        " CONVERT(DATETIME, P.FECHAINGRESO) AS ORDENFECHAINGRESO, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, ISNULL(RTRIM(F.DESFAMILIA), '') AS DESFAMILIA, " & _
        " RTRIM(L.NUMLINEA) AS NUMLINEA, ISNULL(RTRIM(L.DESLINEA), '') AS DESLINEA, " & _
        " RTRIM(R.NUMRUBRO) AS NUMRUBRO, ISNULL(RTRIM(R.DESRUBRO),'') AS DESRUBRO, " & _
        " CONVERT(VARCHAR(10), P.FECHAINGRESO, 103) AS FECHAINGRESO, " & _
        " RTRIM(P.CODIGOORIGINAL) AS ORIGINAL,  RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADO, " & _
        " RTRIM(E.DESESTADOPRODUCTO) AS DESESTADO, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " PS.CANTIDAD AS CANTIDAD, P.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, " & _
        " RTRIM(M.DESMONEDA) AS MONEDA, P.ULTIMOCOSTO AS ULTIMOCOSTO, " & _
        " (P.ULTIMOCOSTO * PS.CANTIDAD) AS TOTALULTIMOCOSTO, " & _
        " P.ULTIMOCOSTO * (SELECT ISNULL(FACTORVENTA,0) FROM COTIZACION WHERE CODMONEDA =   P.CODMONEDA  " & _
        " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA =   P.CODMONEDA  )) AS ULTIMOCOSTOINFORME, " & _
        " (P.ULTIMOCOSTO * PS.CANTIDAD) * (SELECT ISNULL(FACTORVENTA,0) FROM COTIZACION WHERE CODMONEDA =   P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA = P.CODMONEDA )) AS TOTALULTIMOCOSTOINFORME, " & _
        " P.COSTOPP AS COSTOPROMEDIO, " & _
        " (ISNULL(P.COSTOPP,0) * PS.CANTIDAD) AS TOTALCOSTOPROMEDIO, " & _
        " ISNULL(P.COSTOPP,0) * (SELECT ISNULL(FACTORVENTA,0) FROM COTIZACION WHERE CODMONEDA =  P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA =  P.CODMONEDA )) AS COSTOPROMEDIOINFORME, " & _
        " (ISNULL(P.COSTOPP,0) * PS.CANTIDAD) * (SELECT ISNULL(FACTORVENTA,0) FROM COTIZACION WHERE CODMONEDA =   P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO = (SELECT MAX(FECHAMOVIMIENTO) FROM COTIZACION WHERE CODMONEDA =  P.CODMONEDA )) AS TOTALCOSTOPROMEDIOINFORME, " & _
        " ISNULL(RTRIM(T.NUMPTY), '') AS NUMTPY, " & _
        " ISNULL(CONVERT(VARCHAR(10),T.FECHAULTIMOMOV,103),'') AS FECHATPY, " & _
        " ISNULL(RTRIM(Q.ESN), '') AS ESN, " & _
        " ISNULL(CONVERT(VARCHAR(10),Q.FECHAULTIMOMOV,103),'') AS FECHAESN, " & _
        " ISNULL(SI.NUMSINCARD, '') AS NUMSIMCARD, " & _
        " ISNULL(CONVERT(VARCHAR(10),SI.FECHAULTIMOMOV,103),'') AS FECHASIMCARD, " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),A.FECHAAJUSTE,103) FROM AJUSTE A WHERE A.CODAJUSTE = T.CODAJUSTE),'') AS FECHAAJUSTETPY , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),TT.FECHATRANSFERENCIA,103) FROM TRANFERENCIA TT  WHERE TT.CODTRANSFERENCIA = T.CODTRANSFERENCIA),'') AS FECHATRANSFERENCIATPY , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),V.FECHAVENTA,103) FROM VENTAS V  WHERE V.CODVENTA = T.CODVENTA),'') AS FECHAVENTATPY , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),C.FECHACOMPRA,103) FROM COMPRAS C  WHERE C.CODCOMPRA = T.CODCOMPRA),'') AS FECHACOMPRATPY, " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) FROM DEVOLUCION D  WHERE D.CODDEVOLUCION = T.CODDEVOLUCION AND D.ESTADO = 0 ),'') AS FECHADEVOLUCIONTPY, " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),A.FECHAAJUSTE,103) FROM AJUSTE A WHERE A.CODAJUSTE = Q.CODAJUSTE),'') AS FECHAAJUSTEESN , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),TT.FECHATRANSFERENCIA,103) FROM TRANFERENCIA TT  WHERE TT.CODTRANSFERENCIA = Q.CODTRANSFERENCIA),'') AS FECHATRANSFERENCIAESN , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),V.FECHAVENTA,103) FROM VENTAS V  WHERE V.CODVENTA = Q.CODVENTA),'') AS FECHAVENTAESN , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),C.FECHACOMPRA,103) FROM COMPRAS C  WHERE C.CODCOMPRA = Q.CODCOMPRA),'') AS FECHACOMPRAESN, " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) FROM DEVOLUCION D  WHERE D.CODDEVOLUCION = Q.CODDEVOLUCION AND D.ESTADO = 0 ),'') AS FECHADEVOLUCIONESN, " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),A.FECHAAJUSTE,103) FROM AJUSTE A WHERE A.CODAJUSTE = SI.CODAJUSTE),'') AS FECHAAJUSTESIMCARD , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),T.FECHATRANSFERENCIA,103) FROM TRANFERENCIA T  WHERE T.CODTRANSFERENCIA = SI.CODTRANSFERENCIA),'') AS FECHATRANSFERENCIASIMCARD , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),V.FECHAVENTA,103) FROM VENTAS V  WHERE V.CODVENTA = SI.CODVENTA),'') AS FECHAVENTASIMCARD , " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),C.FECHACOMPRA,103) FROM COMPRAS C  WHERE C.CODCOMPRA = SI.CODCOMPRA),'') AS FECHACOMPRASIMCARD, " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) FROM DEVOLUCION D  WHERE D.CODDEVOLUCION = SI.CODDEVOLUCION AND D.ESTADO = 0 ),'') AS FECHADEVOLUCIONSIMCARD " & _
        " FROM PRODUCTOS P " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " INNER JOIN MONEDA M ON P.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN PRODUCTOSUCURSAL PS ON P.CODPRODUCTO = PS.CODPRODUCTO " & _
        " INNER JOIN SUCURSAL S ON PS.CODSUCURSAL = S.CODSUCURSAL " & _
        " LEFT OUTER JOIN ESTADOPRODUCTO E ON P.CODESTADOPRODUCTO = E.CODESTADOPRODUCTO " & _
        " LEFT OUTER JOIN TPYSTOCK T ON P.CODPRODUCTO = T.CODPRODUCTO AND S.CODSUCURSAL = T.CODSUCURSAL " & _
        " LEFT OUTER JOIN EQUIPOSSTOCK Q ON P.CODPRODUCTO = Q.CODPRODUCTO AND S.CODSUCURSAL = Q.CODSUCURSAL " & _
        " LEFT OUTER JOIN SIMCCARDSTOCK SI ON P.CODPRODUCTO = SI.CODPRODUCTO AND S.CODSUCURSAL = SI.CODSUCURSAL " & _
        " WHERE P.PRODUCTOACTIVO = 1 AND P.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " AND ISNULL(T.ESTADO, 0) = 0 " & _
        " AND ISNULL(Q.ESTADO, 0) = 0 " & _
        " AND ISNULL(SI.ESTADO, 0) = 0 " & _
        " ORDER BY "

        If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA, ORDENLINEA, ORDENRUBRO " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL,  NUMFAMILIA, NUMLINEA, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA, ORDENLINEA " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMFAMILIA, NUMLINEA " & orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA  " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMFAMILIA " & orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA, ORDENRUBRO   " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMFAMILIA, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENLINEA, ORDENRUBRO " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMLINEA, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENLINEA " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMLINEA " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENRUBRO " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL " & orden & " "
            Else
                sql = sql + " NUMSUCURSAL " & orden & " "
            End If
        End If

        sql = sql & ",FECHATPY,NUMTPY, FECHAESN, ESN,FECHASIMCARD, NUMSIMCARD  "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                End If
                row.Item("Campo9") = dr("NUMSUCURSAL")
                row.Item("Campo10") = dr("SUCURSAL")
                'row.Item("Campo11") = dr("FECHAINGRESO")
                row.Item("Campo12") = dr("NUMMONEDA")
                row.Item("Numero1") = dr("CANTIDAD")

                'If monedainforme = dr("CODMONEDA") Then
                '    If tipocosto = 1 Then
                '        row.Item("Numero2") = dr("COSTOPROMEDIO")
                '        row.Item("Numero3") = dr("TOTALCOSTOPROMEDIO")
                '    Else
                '        row.Item("Numero2") = dr("ULTIMOCOSTO")
                '        row.Item("Numero3") = dr("TOTALULTIMOCOSTO")
                '    End If
                'Else
                '    If tipocosto = 1 Then
                '        row.Item("Numero2") = Math.Round(dr("COSTOPROMEDIOINFORME") / cotizacion, canDecimales)
                '        row.Item("Numero3") = Math.Round(dr("TOTALCOSTOPROMEDIOINFORME") / cotizacion, canDecimales)
                '    Else
                '        row.Item("Numero2") = Math.Round(dr("ULTIMOCOSTOINFORME") / cotizacion, canDecimales)
                '        row.Item("Numero3") = Math.Round(dr("TOTALULTIMOCOSTOINFORME") / cotizacion, canDecimales)
                '    End If
                'End If

                If dr("NUMTPY") <> "" Then
                    Dim tipomovimiento As String = ""
                    Dim fecha As String
                    Dim fechaajuste As String = dr("FECHAAJUSTETPY")
                    Dim fechatranferencia As String = dr("FECHATRANSFERENCIATPY")
                    Dim fechadevolucion As String = dr("FECHADEVOLUCIONTPY")
                    Dim fechaventa As String = dr("FECHAVENTATPY")
                    Dim fechacompra As String = dr("FECHACOMPRATPY")

                    If fechacompra.Trim = "" Then
                        fechacompra = "01/01/1900"
                    End If
                    If fechaventa.Trim = "" Then
                        fechaventa = "01/01/1900"
                    End If
                    If fechaajuste.Trim = "" Then
                        fechaajuste = "01/01/1900"
                    End If
                    If fechadevolucion.Trim = "" Then
                        fechadevolucion = "01/01/1900"
                    End If
                    If fechatranferencia.Trim = "" Then
                        fechatranferencia = "01/01/1900"
                    End If

                    fecha = fechacompra
                    tipomovimiento = "Compra"

                    If CDate(fecha) < CDate(fechaajuste) Then
                        fecha = fechaajuste
                        tipomovimiento = "Ajuste"
                    End If
                    If CDate(fecha) < CDate(fechatranferencia) Then
                        fecha = fechatranferencia
                        tipomovimiento = "Transferencia"
                    End If
                    If CDate(fecha) < CDate(fechadevolucion) Then
                        fecha = fechadevolucion
                        tipomovimiento = "Devolucion"
                    End If
                    If CDate(fecha) < CDate(fechaventa) Then
                        fecha = fechaventa
                        tipomovimiento = "Venta"
                    End If

                    row.Item("Campo13") = dr("NUMTPY") & " - " & CDate(fecha).ToShortDateString & " " & tipomovimiento
                ElseIf dr("ESN") <> "" Then
                    Dim tipomovimiento As String = ""
                    Dim fecha As String
                    Dim fechaajuste As String = dr("FECHAAJUSTEESN")
                    Dim fechatranferencia As String = dr("FECHATRANSFERENCIAESN")
                    Dim fechadevolucion As String = dr("FECHADEVOLUCIONESN")
                    Dim fechaventa As String = dr("FECHAVENTAESN")
                    Dim fechacompra As String = dr("FECHACOMPRAESN")

                    If fechacompra.Trim = "" Then
                        fechacompra = "01/01/1900"
                    End If
                    If fechaventa.Trim = "" Then
                        fechaventa = "01/01/1900"
                    End If
                    If fechaajuste.Trim = "" Then
                        fechaajuste = "01/01/1900"
                    End If
                    If fechadevolucion.Trim = "" Then
                        fechadevolucion = "01/01/1900"
                    End If
                    If fechatranferencia.Trim = "" Then
                        fechatranferencia = "01/01/1900"
                    End If

                    fecha = fechacompra
                    tipomovimiento = "Compra"

                    If CDate(fecha) < CDate(fechaajuste) Then
                        fecha = fechaajuste
                        tipomovimiento = "Ajuste"
                    End If
                    If CDate(fecha) < CDate(fechatranferencia) Then
                        fecha = fechatranferencia
                        tipomovimiento = "Transferencia"
                    End If
                    If CDate(fecha) < CDate(fechadevolucion) Then
                        fecha = fechadevolucion
                        tipomovimiento = "Devolucion"
                    End If
                    If CDate(fecha) < CDate(fechaventa) Then
                        fecha = fechaventa
                        tipomovimiento = "Venta"
                    End If

                    row.Item("Campo13") = dr("ESN") & " - " & CDate(FECHA).ToShortDateString & " " & TIPOMOVIMIENTO
                ElseIf dr("NUMSIMCARD") <> "" Then

                    Dim tipomovimiento As String = ""
                    Dim fecha As String
                    Dim fechaajuste As String = dr("FECHAAJUSTESIMCARD")
                    Dim fechatranferencia As String = dr("FECHATRANSFERENCIASIMCARD")
                    Dim fechadevolucion As String = dr("FECHADEVOLUCIONSIMCARD")
                    Dim fechaventa As String = dr("FECHAVENTASIMCARD")
                    Dim fechacompra As String = dr("FECHACOMPRASIMCARD")

                    If fechacompra.Trim = "" Then
                        fechacompra = "01/01/1900"
                    End If
                    If fechaventa.Trim = "" Then
                        fechaventa = "01/01/1900"
                    End If
                    If fechaajuste.Trim = "" Then
                        fechaajuste = "01/01/1900"
                    End If
                    If fechadevolucion.Trim = "" Then
                        fechadevolucion = "01/01/1900"
                    End If
                    If fechatranferencia.Trim = "" Then
                        fechatranferencia = "01/01/1900"
                    End If

                    fecha = fechacompra
                    tipomovimiento = "Compra"
                    If CDate(fecha) < CDate(fechaajuste) Then
                        fecha = fechaajuste
                        tipomovimiento = "Ajuste"
                    End If
                    If CDate(fecha) < CDate(fechatranferencia) Then
                        fecha = fechatranferencia
                        tipomovimiento = "Transferencia"
                    End If
                    If CDate(fecha) < CDate(fechadevolucion) Then
                        fecha = fechadevolucion
                        tipomovimiento = "Devolucion"
                    End If
                    If CDate(fecha) < CDate(fechaventa) Then
                        fecha = fechaventa
                        tipomovimiento = "Venta"
                    End If

                    row.Item("Campo13") = dr("NUMSIMCARD") & " - " & CDate(fecha).ToShortDateString & " " & tipomovimiento
                Else
                    row.Item("Campo13") = ""
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            'Numero2 = 0 No se hace el corte por familia
            'Numero2 = 1 Se hace el corte por familia
            row.Item("Numero2") = cortefamilia

            'Numero3 = 0 No se hace el corte por linea
            'Numero3 = 1 Se hace el corte por linea
            row.Item("Numero3") = cortelinea

            'Numero4 = 0 No se hace el corte por rubro
            'Numero4 = 1 Se hace el corte por rubro
            row.Item("Numero4") = corterubro

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdeproducto
            row.Item("Campo6") = hastaproducto
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo25") = desdefechaingreso
            row.Item("Campo26") = hastafechaingreso
            row.Item("Campo27") = desdesucursal
            row.Item("Campo28") = hastasucursal
            'row.Item("Campo29") = monedadescripcion
            'row.Item("Campo30") = cotizacion

            'If tipocosto = 1 Then
            '    row.Item("Campo31") = "Costo Promedio"
            '    row.Item("Campo32") = "Total"
            'Else
            '    row.Item("Campo31") = "Costo Unitario"
            '    row.Item("Campo32") = "Total"
            'End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfRangoMonedaCotizacion(ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condicion As String) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(M.NUMMONEDA)))+LTRIM(RTRIM(M.NUMMONEDA)) AS NUMERO, " & _
        "RTRIM(M.NUMMONEDA)AS CODIGO, RTRIM(M.DESMONEDA) AS DESCRIPCION, " & _
        "C.FACTORCOBRO AS COMPRA, C.FACTORVENTA AS VENTA, CONVERT(VARCHAR (10), C.FECHAMOVIMIENTO, 103) AS FECHA " & _
        "FROM MONEDA M INNER JOIN COTIZACION C ON C.CODMONEDA = M.CODMONEDA " & _
        "AND C.CODEMPRESA = " & empCodigo & " " & condicion & _
        "ORDER BY NUMERO, C.FECHAMOVIMIENTO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Numero1") = dr("COMPRA")
                row.Item("Numero2") = dr("VENTA")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeMoneda
            row.Item("Campo3") = hastaMoneda
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoProducto(ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, ByVal color As String, ByVal desdecolor As String, ByVal hastacolor As String, _
    ByVal talle As String, ByVal desdetalle As String, ByVal hastatalle As String, ByVal desdeiva As String, ByVal hastaiva As String, _
    ByVal desdemoneda As String, ByVal hastamoneda As String, ByVal desdeestado As String, ByVal hastaestado As String, _
    ByVal desdedescuento As String, ByVal hastadescuento As String, ByVal desdefechaingreso As String, ByVal hastafechaingreso As String, _
    ByVal titulo As Byte, ByVal condiciones As String, ByVal orden As String, ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
        " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA, " & _
        " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA, " & _
        " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO, " & _
        " REPLICATE('0',5-LEN(RTRIM(C.NUMCOLOR)))+LTRIM(RTRIM(C.NUMCOLOR)) AS ORDENCOLOR, " & _
        " REPLICATE('0',5-LEN(RTRIM(T.NUMTALLE)))+LTRIM(RTRIM(T.NUMTALLE)) AS ORDENTALLE, " & _
        " REPLICATE('0',5-LEN(RTRIM(E.NUMESTADOPRODUCTO)))+LTRIM(RTRIM(E.NUMESTADOPRODUCTO)) AS ORDENESTADO, " & _
        " REPLICATE('0',5-LEN(RTRIM(D.NUMDESCUENTO)))+LTRIM(RTRIM(D.NUMDESCUENTO)) AS ORDENDESCUENTO, " & _
        " REPLICATE('0',5-LEN(RTRIM(I.NUMIVA)))+LTRIM(RTRIM(I.NUMIVA)) AS ORDENIVA, " & _
        " REPLICATE('0',5-LEN(RTRIM(M.NUMMONEDA)))+LTRIM(RTRIM(M.NUMMONEDA)) AS ORDENMONEDA, " & _
        " CONVERT(DATETIME, P.FECHAINGRESO) AS ORDENFECHAINGRESO, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, ISNULL(RTRIM(F.DESFAMILIA), '') AS DESFAMILIA, " & _
        " RTRIM(L.NUMLINEA) AS NUMLINEA, ISNULL(RTRIM(L.DESLINEA), '') AS DESLINEA, " & _
        " RTRIM(R.NUMRUBRO) AS NUMRUBRO, ISNULL(RTRIM(R.DESRUBRO),'') AS DESRUBRO, " & _
        " RTRIM(C.NUMCOLOR) AS NUMCOLOR, RTRIM(T.NUMTALLE) AS NUMTALLE, RTRIM(I.NUMIVA) AS NUMIVA, " & _
        " ISNULL(RTRIM(C.DESCOLOR),'') AS COLOR, ISNULL(RTRIM(T.DESTALLE), '') AS TALLE, " & _
        " ISNULL(I.PORCENTAJEIVA, 0) AS IVA, " & _
        " RTRIM(M.NUMMONEDA) AS MONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        " CASE P.PRODUCTOACTIVO WHEN 1 THEN 'Si' ELSE 'No' END AS ACTIVO, " & _
        " RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADO , RTRIM(E.DESESTADOPRODUCTO) AS DESESTADO, " & _
        " ISNULL(D.PORCENTAJEDESCUENTO, 0) AS DESCUENTO, RTRIM(D.NUMDESCUENTO) AS NUMDESCUENTO, " & _
        " CONVERT(VARCHAR(10), P.FECHAINGRESO, 103) AS FECHAINGRESO, " & _
        " RTRIM(P.CODIGOORIGINAL) AS ORIGINAL, " & _
        " LTRIM(RTRIM(PRO.APELLIDO)+' '+RTRIM(PRO.NOMBRE)) AS PROVEEDOR " & _
        " FROM PRODUCTOS P INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " INNER JOIN PROVEEDOR PRO ON P.CODPROVEEDOR = PRO.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON P.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        " LEFT OUTER JOIN COLOR C ON P.NUMCOLOR = C.NUMCOLOR AND P.COL_CODEMPRESA = C.CODEMPRESA " & _
        " LEFT OUTER JOIN TALLE T ON P.NUMTALLE = T.NUMTALLE AND P.TAL_CODEMPRESA = T.CODEMPRESA " & _
        " LEFT OUTER JOIN DESCUENTOPRODUCTO D ON  P.CODDESCUENTO = D.CODDESCUENTO " & _
        " LEFT OUTER JOIN ESTADOPRODUCTO E ON P.CODESTADOPRODUCTO = E.CODESTADOPRODUCTO " & _
        " WHERE P.CODEMPRESA =  " & empCodigo & "  " & condiciones & " " & _
        " ORDER BY  "

        'If tipo = 1 Then
        '    sql = sql + " ORDENFAMILIA, ORDENLINEA, ORDENRUBRO " & orden & " "
        'Else
        '    sql = sql + " NUMFAMILIA, NUMLINEA, NUMRUBRO " & orden & " "
        'End If

        If tipo = 1 Then
            sql = sql + " ORDENFAMILIA, ORDENLINEA, " & orden & " "
        Else
            sql = sql + " NUMFAMILIA, NUMLINEA, " & orden & " "
        End If


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("DESESTADO")
                row.Item("Campo10") = dr("ORIGINAL")
                row.Item("Campo11") = dr("FECHAINGRESO")
                row.Item("Campo12") = dr("PROVEEDOR")
                row.Item("Campo13") = dr("DESMONEDA")
                row.Item("Campo14") = dr("COLOR")
                row.Item("Campo15") = dr("TALLE")
                row.Item("Campo16") = dr("ACTIVO")
                row.Item("Numero2") = dr("IVA")
                row.Item("Numero3") = dr("DESCUENTO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdeproducto
            row.Item("Campo6") = hastaproducto
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo13") = desdecolor
            row.Item("Campo14") = hastacolor
            row.Item("Campo15") = desdetalle
            row.Item("Campo16") = hastatalle
            row.Item("Campo17") = desdeiva
            row.Item("Campo18") = hastaiva
            row.Item("Campo19") = desdemoneda
            row.Item("Campo20") = hastamoneda
            row.Item("Campo21") = desdeestado
            row.Item("Campo22") = hastaestado
            row.Item("Campo23") = desdedescuento
            row.Item("Campo24") = hastadescuento
            row.Item("Campo25") = desdefechaingreso
            row.Item("Campo26") = hastafechaingreso

            row.Item("Campo27") = color
            row.Item("Campo28") = talle


            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoProductoPorSucursal(ByVal desdesucursal As String, ByVal hastasucursal As String, ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, ByVal desdefechaingreso As String, ByVal hastafechaingreso As String, _
    ByVal monedainforme As Long, ByVal monedadescripcion As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, ByVal tipocosto As Byte, _
    ByVal titulo As Byte, ByVal condiciones As String, ByVal orden As String, ByVal tipo As Byte, _
    ByVal cortefamilia As Byte, ByVal cortelinea As Byte, _
    ByVal corterubro As Byte, ByVal cortecategoria As Byte, ByVal cortesubcategoria As Byte, ByVal cortemarca As Byte, ByVal CODPOLLITO As Long, ByVal CODPOLLO As Long, _
    ByVal desdeProveedor As String, ByVal hastaProveedor As String, ByVal CANDECIMALESIMPORTE As Integer, ByVal otroorden As String) As DataSet

        ds.Clear()

        sql = ""
        sql = " SELECT P.CODPRODUCTO, REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
       " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA, " & _
       " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA, " & _
       " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO, " & _
       " REPLICATE('0',5-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS ORDENSUCURSAL, " & _
       " ISNULL(REPLICATE('0',5-LEN(RTRIM(CP.NUMCATEGORIA)))+LTRIM(RTRIM(CP.NUMCATEGORIA)),'') AS CATEGORIAORDEN, " & _
       " ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
       " ISNULL(REPLICATE('0',5-LEN(RTRIM(SC.NUMSUBCATEGORIA)))+LTRIM(RTRIM(SC.NUMSUBCATEGORIA)),'') AS SUBCATEGORIAORDEN, " & _
       " ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
       " ISNULL(REPLICATE('0',5-LEN(RTRIM(MC.NUMMARCA)))+LTRIM(RTRIM(MC.NUMMARCA)),'') AS MARCAORDEN, " & _
       " ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA, " & _
       " CAST(P.FECHAINGRESO AS DATETIME) AS ORDENFECHAINGRESO, " & _
       " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
       " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, ISNULL(RTRIM(F.DESFAMILIA), '') AS DESFAMILIA, " & _
       " RTRIM(L.NUMLINEA) AS NUMLINEA, ISNULL(RTRIM(L.DESLINEA), '') AS DESLINEA, " & _
       " RTRIM(R.NUMRUBRO) AS NUMRUBRO, ISNULL(RTRIM(R.DESRUBRO),'') AS DESRUBRO, " & _
       " CONVERT(VARCHAR(10), P.FECHAINGRESO, 103) AS FECHAINGRESO, " & _
       " RTRIM(P.CODIGOORIGINAL) AS ORIGINAL,  RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADO, " & _
       " RTRIM(E.DESESTADOPRODUCTO) AS DESESTADO, " & _
       " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
       " P.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, " & _
       " PS.CANTIDAD AS CANTIDAD, P.ULTIMOCOSTO AS ULTIMOCOSTO, ISNULL(P.COSTOPP, 0) AS COSTOPP, ISNULL(PS.COSTOPPALCIERRE, 0) AS CPPALCIERRE, " & _
       " (SELECT ISNULL(CO.FACTORVENTA,0) " & _
       " FROM COTIZACION CO " & _
       " WHERE CO.CODMONEDA = P.CODMONEDA " & _
       " AND CO.FECHAMOVIMIENTO = (SELECT MAX(CT.FECHAMOVIMIENTO) " & _
       " FROM COTIZACION CT " & _
       " WHERE CT.CODMONEDA = CO.CODMONEDA)) AS COTIZACION " & _
       " FROM PRODUCTOSUCURSAL PS INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PS.CODSUCURSAL " & _
       " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PS.CODPRODUCTO " & _
       " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
       " INNER JOIN LINEA L ON L.CODLINEA = P.CODLINEA " & _
       " INNER JOIN RUBRO R ON R.CODRUBRO = P.CODRUBRO " & _
       " INNER JOIN MONEDA M ON M.CODMONEDA = P.CODMONEDA " & _
       " INNER JOIN PROVEEDOR PR ON P.CODPROVEEDOR = PR.CODPROVEEDOR " & _
       " LEFT OUTER JOIN ESTADOPRODUCTO E ON E.CODESTADOPRODUCTO = P.CODESTADOPRODUCTO " & _
       " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
       " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
       " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
       " WHERE P.PRODUCTOACTIVO = 1 AND P.ACTUALIZARSTOCK = 1 " & _
       " AND P.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
       " ORDER BY "

        If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA, ORDENLINEA, ORDENRUBRO " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL,  NUMFAMILIA, NUMLINEA, NUMRUBRO " '''& orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA, ORDENLINEA " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMFAMILIA, NUMLINEA " ''& orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA  " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMFAMILIA " '''& orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENFAMILIA, ORDENRUBRO   " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMFAMILIA, NUMRUBRO " '''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENLINEA, ORDENRUBRO " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMLINEA, NUMRUBRO " '''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENLINEA " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMLINEA " '''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL, ORDENRUBRO " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL, NUMRUBRO " ''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENSUCURSAL " '''& orden & " "
            Else
                sql = sql + " NUMSUCURSAL " ''& orden & " "
            End If
        End If

        sql = sql + " " & otroorden & " " & orden & " "


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                End If

                If cortecategoria = 1 Then
                    row.Item("Campo13") = dr("NUMCATEGORIA")
                    row.Item("Campo14") = dr("DESCATEGORIA")
                Else
                    row.Item("Campo13") = ""
                    row.Item("Campo14") = ""
                End If
                If cortesubcategoria = 1 Then
                    row.Item("Campo15") = dr("NUMSUBCATEGORIA")
                    row.Item("Campo16") = dr("DESSUBCATEGORIA")
                Else
                    row.Item("Campo15") = ""
                    row.Item("Campo16") = ""
                End If
                If cortemarca = 1 Then
                    row.Item("Campo17") = dr("NUMMARCA")
                    row.Item("Campo18") = dr("DESMARCA")
                Else
                    row.Item("Campo17") = ""
                    row.Item("Campo18") = ""
                End If

                row.Item("Campo9") = dr("NUMSUCURSAL")
                row.Item("Campo10") = dr("SUCURSAL")
                row.Item("Campo11") = dr("FECHAINGRESO")
                row.Item("Campo12") = dr("NUMMONEDA")
                row.Item("Numero1") = dr("CANTIDAD")

                If monedainforme = dr("CODMONEDA") Then
                    If tipocosto = 1 Then
                        Select Case dr("CODPRODUCTO")
                            Case Is = CODPOLLITO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO")
                                    row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE")
                                    row.Item("Numero3") = dr("CPPALCIERRE") * dr("CANTIDAD")
                                End If
                            Case Is = CODPOLLO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO")
                                    row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE")
                                    row.Item("Numero3") = dr("CPPALCIERRE") * dr("CANTIDAD")
                                End If
                            Case Else
                                row.Item("Numero2") = dr("COSTOPP")
                                row.Item("Numero3") = dr("COSTOPP") * dr("CANTIDAD")
                        End Select
                    Else
                        Select Case dr("CODPRODUCTO")
                            Case Is = CODPOLLITO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO")
                                    row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE")
                                    row.Item("Numero3") = dr("CPPALCIERRE") * dr("CANTIDAD")
                                End If
                            Case Is = CODPOLLO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO")
                                    row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE")
                                    row.Item("Numero3") = dr("CPPALCIERRE") * dr("CANTIDAD")
                                End If
                            Case Else
                                row.Item("Numero2") = dr("ULTIMOCOSTO")
                                row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("CANTIDAD")
                        End Select
                    End If
                Else
                    If tipocosto = 1 Then
                        Select Case dr("CODPRODUCTO")
                            Case Is = CODPOLLITO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                End If
                            Case Is = CODPOLLO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                End If
                            Case Else
                                row.Item("Numero2") = dr("COSTOPP") * dr("COTIZACION") / CDec(cotizacion)
                                row.Item("Numero3") = (dr("COSTOPP") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                        End Select
                    Else
                        Select Case dr("CODPRODUCTO")
                            Case Is = CODPOLLITO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                End If
                            Case Is = CODPOLLO
                                If dr("CPPALCIERRE") = 0 Then
                                    row.Item("Numero2") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                Else
                                    row.Item("Numero2") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)
                                    row.Item("Numero3") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                                End If
                            Case Else
                                row.Item("Numero2") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)
                                row.Item("Numero3") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(cotizacion)) * dr("CANTIDAD")
                        End Select
                    End If
                End If

                If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("CODMONEDA"), empCodigo) = "0" Then
                    row.Item("Numero20") = 0
                Else
                    row.Item("Numero20") = CANDECIMALESIMPORTE
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            'Numero2 = 0 No se hace el corte por familia
            'Numero2 = 1 Se hace el corte por familia
            row.Item("Numero2") = cortefamilia

            'Numero3 = 0 No se hace el corte por linea
            'Numero3 = 1 Se hace el corte por linea
            row.Item("Numero3") = cortelinea

            'Numero4 = 0 No se hace el corte por rubro
            'Numero4 = 1 Se hace el corte por rubro
            row.Item("Numero4") = corterubro

            row.Item("Numero15") = cortecategoria
            row.Item("Numero16") = cortesubcategoria
            row.Item("Numero17") = cortemarca

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro
            row.Item("Campo15") = "Categoria"
            row.Item("Campo16") = "Sub Categoria"
            row.Item("Campo17") = "Marca"

            row.Item("Campo5") = desdeproducto
            row.Item("Campo6") = hastaproducto
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo25") = desdefechaingreso
            row.Item("Campo26") = hastafechaingreso
            row.Item("Campo27") = desdesucursal
            row.Item("Campo28") = hastasucursal
            row.Item("Campo29") = monedadescripcion
            row.Item("Campo30") = cotizacion
            row.Item("Campo13") = desdeProveedor
            row.Item("Campo14") = hastaProveedor

            row.Item("Campo18") = desdecategoria
            row.Item("Campo19") = hastacategoria
            row.Item("Campo20") = desdesubcategoria
            row.Item("Campo21") = hastasubcategoria
            row.Item("Campo22") = desdemarca
            row.Item("Campo23") = hastamarca

            If tipocosto = 1 Then
                row.Item("Campo31") = "Costo Promedio"
                row.Item("Campo32") = "Total"
            Else
                row.Item("Campo31") = "Costo Unitario"
                row.Item("Campo32") = "Total"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoProveedores(ByVal desdeproveedor As String, ByVal hastaproveedor As String, _
    ByVal desdefecha As String, ByVal hastafecha As String, ByVal desdezona As String, _
    ByVal hastazona As String, ByVal titulo As Byte, ByVal condiciones As String, ByVal orden As String, ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(P.NUMPROVEEDOR) AS PROVEEDOR, " & _
        "REPLICATE('0',5-LEN(RTRIM(Z.NUMZONA)))+LTRIM(RTRIM(Z.NUMZONA)) AS ZONA," & _
        "REPLICATE('0',10-LEN(RTRIM(P.NUMCEDULA)))+LTRIM(RTRIM(P.NUMCEDULA)) AS DNI," & _
        "REPLICATE('0',10-LEN(RTRIM(P.RUC)))+LTRIM(RTRIM(P.RUC)) AS RUC," & _
        "RTRIM(P.RUC) AS ORDENRUC, " & _
        "CONVERT(DATETIME, P.FECGRA) AS ORDENFECHA, " & _
        "P.CODPROVEEDOR AS CODPROVEEDOR, RTRIM(P.NUMPROVEEDOR) AS ORNUMPROVEEDOR, " & _
        "RTRIM(RTRIM(P.APELLIDO)+ ' '+RTRIM(P.NOMBRE)) AS DESPROVEEDOR, " & _
        "RTRIM(P.NUMCEDULA) AS NUMCEDULA, " & _
        "RTRIM(P.RUC) AS ORRUC, ISNULL(RTRIM(P.DIRECCION), ' ') AS DIRECCION, " & _
        "RTRIM(P.TELEFONO) AS TELEFONO, RTRIM(P.CELULAR) AS CELULAR, " & _
        "RTRIM(P.FAX) AS FAX, ISNULL(RTRIM(P.EMAIL), ' ') AS EMAIL, " & _
        "ISNULL(RTRIM(P.WEB), ' ') AS WEB, " & _
        "ISNULL(Z.CODZONA, 0) AS CODZONA, " & _
        "ISNULL(RTRIM(Z.NUMZONA), '') AS NUMZONA, " & _
        "ISNULL(RTRIM(Z.DESZONA), '') AS DESZONA, " & _
        "ISNULL(PC.CODPLANCUENTA, 0) AS CODPLANCUENTA, " & _
        "ISNULL(RTRIM(PC.NUMPLANCUENTA), ' ') AS NUMPLANCUENTA, " & _
        "ISNULL(RTRIM(PC.DESPLANCUENTA), ' ') AS DESPLANCUENTA, " & _
        "CONVERT(VARCHAR(10), P.FECGRA, 103) AS FECHAGRA, " & _
        "RTRIM(P.OBSERVACION) AS OBSERVACION " & _
        "FROM PROVEEDOR P " & _
        "LEFT OUTER JOIN ZONA Z ON P.CODZONA = Z.CODZONA " & _
        "LEFT OUTER JOIN PLANCUENTAS PC ON P.CODPLANCUENTA = PC.CODPLANCUENTA " & _
        "WHERE P.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        "ORDER BY " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("ORNUMPROVEEDOR")
                row.Item("Campo2") = dr("DESPROVEEDOR")
                row.Item("Campo3") = dr("NUMCEDULA")
                row.Item("Campo4") = dr("ORRUC")
                row.Item("Campo5") = dr("DIRECCION")
                row.Item("Campo6") = dr("DESZONA")
                row.Item("Campo7") = dr("TELEFONO")
                row.Item("Campo8") = dr("CELULAR")
                row.Item("Campo9") = dr("FAX")
                row.Item("Campo10") = dr("EMAIL")
                row.Item("Campo11") = dr("WEB")
                row.Item("Campo12") = dr("NUMPLANCUENTA")
                row.Item("Campo13") = dr("DESPLANCUENTA")
                row.Item("Campo14") = dr("OBSERVACION")
                row.Item("Campo15") = dr("FECHAGRA")
                row.Item("Campo16") = dr("NUMZONA")
                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeproveedor
            row.Item("Campo5") = hastaproveedor
            row.Item("Campo3") = desdezona
            row.Item("Campo6") = hastazona
            row.Item("Campo4") = desdefecha
            row.Item("Campo7") = hastafecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResponsableCompra(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMRESPONSABLE)))+LTRIM(RTRIM(NUMRESPONSABLE)) AS NUMERO, " & _
              "RTRIM(NUMRESPONSABLE) AS CODIGO, RTRIM(DESRESPONSABLE) AS DESCRIPCION FROM RESPONSABLE " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY  "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfResumenVentasCliente(ByVal moneda_descripcion As String, ByVal cotizacion As Decimal, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal mon_descripcion_desde As String, ByVal moneda_hasta As String, ByVal mon_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, ByVal desdevendedor As String, ByVal hastavendedor As String, _
    ByVal desdetipocliente As String, ByVal hastatipocliente As String, ByVal desdezona As String, ByVal hastazona As String, _
    ByVal resumen As Integer, ByVal titulo As Byte, ByVal tipo As Byte, _
    ByVal condicion As String, ByVal cortevendedor As Integer, ByVal cortezona As Integer, ByVal cortecliente As Integer, _
    ByVal corteciudad As Integer, ByVal orden As String, ByVal FiltroCliente As Integer, ByVal CondicionCliente As String, Optional ByVal grupo As String = "") As DataSet

        Dim valor As Decimal
        ds.Clear()

        sql = ""
        sql = "SELECT MAX(RTRIM(S.NUMSUCURSAL)) AS  NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA), 103) AS FECHAVENTA, " & _
        " MAX(MONTH(V.FECHAVENTA)) AS MESFECHAVENTA, " & _
        " MAX(RTRIM(M.NUMMONEDA)) AS NUMMONEDA, MAX(RTRIM(M.DESMONEDA)) AS DESMONEDA, " & _
        " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, ISNULL(MAX(LTRIM(RTRIM(CL.APELLIDO))),'') + ' ' + ISNULL(MAX(LTRIM(RTRIM(CL.NOMBRE))),'') AS CLIENTE, " & _
        " MAX(RTRIM(VN.NUMVENDEDOR)) AS NUMVENDEDOR, MAX(RTRIM(VN.DESVENDEDOR)) AS DESVENDEDOR, " & _
        " MAX(RTRIM(TC.NUMTIPOCLIENTE)) AS NUMTIPOCLIENTE, MAX(RTRIM(TC.NUMTIPOCLIENTE)) AS DESTIPOCLIENTE, " & _
        " ISNULL(MAX(RTRIM(Z.NUMZONA)),'') AS NUMZONA, ISNULL(MAX(RTRIM(Z.DESZONA)),'') AS DESZONA, " & _
        " ISNULL(MAX(RTRIM(U.NUMCIUDAD)),'') AS NUMCIUDAD, ISNULL(MAX(RTRIM(U.DESCIUDAD)),' SIN CIUDAD') AS DESCIUDAD, " & _
        " ISNULL((SELECT SUM(VD.CANTIDADVENTA) FROM VENTASDETALLE VD WHERE V.CODVENTA = VD.CODVENTA),0) AS CANTIDAD, " & _
        " (SUM(V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) *  SUM(V.COTIZACION1))AS IMPORTE " & _
        " FROM VENTAS V " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN VENDEDOR VN ON V.CODVENDEDOR = VN.CODVENDEDOR " & _
        " INNER JOIN TIPOCLIENTE TC ON CL.CODTIPOCLIENTE = TC.CODTIPOCLIENTE " & _
        " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " LEFT OUTER JOIN CIUDAD U ON CL.CODCIUDAD = U.CODCIUDAD " & _
        " WHERE V.ESTADO = 0 AND  V.CODEMPRESA = " & empCodigo & " " & condicion & " " & vbCrLf

        If grupo = "" Then
            sql = sql & " GROUP BY CL.NUMCLIENTE,  MONTH(V.FECHAVENTA), V.CODVENTA "
        Else
            sql = sql & " GROUP BY " & grupo & " , CL.NUMCLIENTE,  MONTH(V.FECHAVENTA), V.CODVENTA "
        End If

        If FiltroCliente = 1 Then
            sql = sql & " UNION ALL " & _
            " SELECT '' AS  NUMSUCURSAL, '' AS DESSUCURSAL, " & _
            " '' AS FECHAVENTA, " & _
            " '' AS MESFECHAVENTA, " & _
            " '' AS NUMMONEDA, '' AS DESMONEDA, " & _
            " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, ISNULL(MAX(LTRIM(RTRIM(CL.APELLIDO))),'') + ' ' + ISNULL(MAX(LTRIM(RTRIM(CL.NOMBRE))),'') AS CLIENTE, " & _
            " MAX(RTRIM(VN.NUMVENDEDOR)) AS NUMVENDEDOR, MAX(RTRIM(VN.DESVENDEDOR)) AS DESVENDEDOR, " & _
            " MAX(RTRIM(TC.NUMTIPOCLIENTE)) AS NUMTIPOCLIENTE, MAX(RTRIM(TC.NUMTIPOCLIENTE)) AS DESTIPOCLIENTE, " & _
            " ISNULL(MAX(RTRIM(Z.NUMZONA)),'') AS NUMZONA, ISNULL(MAX(RTRIM(Z.DESZONA)),' SIN ZONA') AS DESZONA, " & _
            " ISNULL(MAX(RTRIM(U.NUMCIUDAD)),'') AS NUMCIUDAD, ISNULL(MAX(RTRIM(U.DESCIUDAD)),' SIN CIUDAD') AS DESCIUDAD, " & _
            " 0 AS CANTIDAD, " & _
            " 0 AS IMPORTE " & _
            " FROM CLIENTES CL " & _
            " INNER JOIN VENDEDOR VN ON CL.CODVENDEDOR = VN.CODVENDEDOR " & _
            " INNER JOIN TIPOCLIENTE TC ON CL.CODTIPOCLIENTE = TC.CODTIPOCLIENTE " & _
            " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
            " LEFT OUTER JOIN CIUDAD U ON CL.CODCIUDAD = U.CODCIUDAD " & _
            " WHERE CL.ESTADOCLIENTE = 0 " & CondicionCliente & " " & _
            " AND CL.CODEMPRESA = " & empCodigo & " " & _
            " AND CL.CODCLIENTE NOT IN (SELECT DISTINCT CODCLIENTE " & _
            " FROM VENTAS WHERE FECHAVENTA BETWEEN CAST('" & fecha_desde & "' AS DATETIME) AND CAST('" & fecha_hasta & "' AS DATETIME)) " & vbCrLf

            If grupo = "" Then
                sql = sql & " GROUP BYCL.NUMCLIENTE "
            Else
                sql = sql & " GROUP BY " & grupo & " , CL.NUMCLIENTE "
            End If

        End If

        sql = sql & " ORDER BY " & orden & ", MESFECHAVENTA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                If cortevendedor = 1 Then
                    row.Item("Campo1") = dr("NUMVENDEDOR")
                    row.Item("Campo2") = dr("DESVENDEDOR")
                Else
                    row.Item("Campo1") = ""
                    row.Item("Campo2") = ""
                End If
                If cortezona = 1 Then
                    row.Item("Campo7") = dr("NUMZONA")
                    row.Item("Campo8") = dr("DESZONA")
                Else
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                End If

                If corteciudad = 1 Then
                    row.Item("Campo10") = dr("DESCIUDAD")
                    row.Item("Campo11") = dr("DESCIUDAD")
                Else
                    row.Item("Campo10") = ""
                    row.Item("Campo11") = ""
                End If

                row.Item("Campo3") = dr("NUMCLIENTE")
                row.Item("Campo4") = dr("CLIENTE")

                If resumen = 0 Then
                    valor = dr("CANTIDAD")
                Else
                    valor = Math.Round(dr("IMPORTE") / cotizacion, canDecimales)
                End If

                row.Item("Numero1") = 0
                row.Item("Numero2") = 0
                row.Item("Numero3") = 0
                row.Item("Numero4") = 0
                row.Item("Numero5") = 0
                row.Item("Numero6") = 0
                row.Item("Numero7") = 0
                row.Item("Numero8") = 0
                row.Item("Numero9") = 0
                row.Item("Numero10") = 0
                row.Item("Numero11") = 0
                row.Item("Numero12") = 0

                Select Case CType(dr("MESFECHAVENTA"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = valor
                    Case Is = 2
                        row.Item("Numero2") = valor
                    Case Is = 3
                        row.Item("Numero3") = valor
                    Case Is = 4
                        row.Item("Numero4") = valor
                    Case Is = 5
                        row.Item("Numero5") = valor
                    Case Is = 6
                        row.Item("Numero6") = valor
                    Case Is = 7
                        row.Item("Numero7") = valor
                    Case Is = 8
                        row.Item("Numero8") = valor
                    Case Is = 9
                        row.Item("Numero9") = valor
                    Case Is = 10
                        row.Item("Numero10") = valor
                    Case Is = 11
                        row.Item("Numero11") = valor
                    Case Is = 12
                        row.Item("Numero12") = valor
                End Select

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            row.Item("Campo1") = empDescripcion

            row.Item("Numero2") = cortevendedor
            row.Item("Numero3") = cortezona
            row.Item("Numero4") = cortecliente
            row.Item("Numero6") = corteciudad
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = desdevendedor
            row.Item("Campo19") = hastavendedor
            row.Item("Campo20") = cli_descripcion_desde
            row.Item("Campo21") = cli_descripcion_hasta
            row.Item("Campo22") = desdetipocliente
            row.Item("Campo23") = hastatipocliente
            row.Item("Campo24") = desdezona
            row.Item("Campo25") = hastazona
            row.Item("Campo26") = mon_descripcion_desde
            row.Item("Campo27") = mon_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo13") = moneda_descripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch E As Exception
            MsgBox(E.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfResumenGeneralCompras(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet

        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        " RTRIM (C.NUMCOMPRA) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(PRO.APELLIDO)+', '+RTRIM(PRO.NOMBRE)) AS PROVEEDOR, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, C.TOTALIVA, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, " & _
        " C.CODCOMPRA AS CODCOMPRA, " & _
        " C.COTIZACION1 AS COTIZACION, " & _
        " C.COTIZACION2 AS COTIZACION2, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(T.NUMTIPOCOMPRO))+LTRIM(RTRIM(T.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',20-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, " & _
        " RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " CD.CANTIDADCOMPRA AS CANTIDAD, " & _
        " CD.COSTOUNITARIO AS COSTOUNITARIO, " & _
        " CD.CANTIDADCOMPRA*CD.COSTOUNITARIO AS TOTAL, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, " & _
        " P.CODMONEDA AS CODMONEDAPRODUCTO, " & _
        " P.CODPRODUCTO AS CODPRODUCTO, " & _
        " P.CODLINEA AS CODLINEA, " & _
        " ISNULL(CD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO, " & _
        " P.ULTIMOCOSTO AS COSTO, " & _
        " ISNULL((SELECT FACTORVENTA FROM COTIZACION WHERE FECHAMOVIMIENTO = " & _
        " (SELECT  MAX(FECHAMOVIMIENTO) AS MAXIMO FROM COTIZACION WHERE CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO <= C.FECHACOMPRA)AND CODEMPRESA = " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECGRA,103) AS FECHAINGRESO, M.CODMONEDA AS CODMONEDA " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE T ON C.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON C.CODPROVEEDOR = PRO.CODPROVEEDOR " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE P.CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY CAST(C.FECHACOMPRA AS DATETIME), NUMTIPOCOMPROORDEN, NROCOMPROBANTE, P.CODIGOBARRA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)

            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo3") = dr("NUMCOMPROBANTE")
                row.Item("Campo4") = dr("NROCOMPROBANTE")
                row.Item("Campo2") = dr("FECHACOMPRA")
                row.Item("Campo5") = dr("PROVEEDOR")
                row.Item("Campo6") = dr("NUMMONEDA")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")

                row.Item("Numero1") = dr("TOTALEXENTA")
                row.Item("Numero2") = dr("TOTALGRAVADA")
                row.Item("Numero3") = dr("TOTALIVA")
                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("COSTO")
                row.Item("Numero7") = Math.Round(dr("COSTO") * dr("CANTIDAD"), candecimales)
                row.Item("Numero8") = dr("TOTALDESCUENTO")
                row.Item("Numero9") = dr("TOTALCOMPRA")

                If dr("CODMONEDA") = moneda_informe Then
                    row.Item("Numero10") = dr("TOTALCOMPRA")
                    'row.Item("Numero11") = Math.Round(dr("COSTOPPRECALCULADO") * dr("CANTIDAD"), candecimales)
                Else
                    row.Item("Numero10") = Math.Round((dr("TOTALCOMPRA") * dr("COTIZACION")) / cotizacion, candecimales)
                    'row.Item("Numero11") = Math.Round((dr("COSTOPPRECALCULADO") * dr("COTIZACION")) / cotizacion, candecimales) * dr("CANTIDAD")
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cod_descripcion_desde
            row.Item("Campo19") = cod_descripcion_hasta
            row.Item("Campo24") = comprobante_descripcion_desde
            row.Item("Campo25") = comprobante_descripcion_hasta
            row.Item("Campo26") = moneda_descripcion_desde
            row.Item("Campo27") = moneda_descripcion_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo28") = moneda_descripcion
            row.Item("Campo29") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As SqlException

        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRubro(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMRUBRO)))+LTRIM(RTRIM(NUMRUBRO)) AS NUMERO, " & _
              "RTRIM(NUMRUBRO) AS CODIGO, RTRIM(DESRUBRO) AS DESCRIPCION FROM RUBRO " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = " Listado de " & TITULO & "s"

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRubroCliente(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMRUBROCLIENTE)))+LTRIM(RTRIM(NUMRUBROCLIENTE)) AS NUMERO, " & _
              "RTRIM(NUMRUBROCLIENTE) AS CODIGO, RTRIM(DESRUBROCLIENTE) AS DESCRIPCION FROM RUBROCLIENTE " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = " Listado de " & TITULO & "s"

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfStockValorizadoConOpciones(ByVal HastaFecha As String, _
    ByVal DesSuc1 As String, ByVal DesSuc2 As String, ByVal DesFami1 As String, ByVal DesFami2 As String, _
    ByVal DesLin1 As String, ByVal DesLin2 As String, ByVal DesRub1 As String, ByVal DesRub2 As String, _
    ByVal DesProd1 As String, ByVal DesProd2 As String, ByVal DesUnidad As String, ByVal HasUnidad As String, _
    ByVal DesCuenta As String, ByVal HasCuenta As String, ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal MonedaInforme As String, ByVal CotizacionMonedaInf As String, _
    ByVal codMoneda As Long, ByVal canDecimales As Integer, _
    ByVal mostrarStockCero As Boolean, ByVal CotizafactorIngresado As Decimal, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal condiciones As String, ByVal condicionesSucursal As String, _
    ByVal Orden As String, ByVal resumen As Boolean, ByVal recalcular As Boolean, _
    ByVal titulo As Byte, ByVal tipo As Byte, _
    ByVal CODPOLLITO As Long, ByVal CODPOLLO As Long) As DataSet
        ds.Clear()

        Dim costoPromedio As Decimal
        Dim cantidadStock As Decimal
        Dim condicion As Boolean

        sql = ""
        sql = " DECLARE	@EMPRESA NUMERIC(9,0), " & _
        " @FECHAHASTA DATETIME " & _
        " SET @EMPRESA = " & empCodigo & _
        " SET @FECHAHASTA = CAST('" & HastaFecha & "' AS DATETIME) " & _
        " SELECT S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRAORDEN, " & _
        " P.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        " P.CODFAMILIA, RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS DESFAMILIA, " & _
        " P.CODLINEA, RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA)AS DESLINEA, " & _
        " P.CODRUBRO, RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS DESRUBRO, " & _
        " ISNULL(CP.CODCATEGORIA,0) AS CODCATEGORIA, ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
        " ISNULL(SC.CODSUBCATEGORIA,0) AS CODSUBCATEGORIA, ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
        " ISNULL(MC.CODMARCA,0) AS CODMARCA, ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'CUENTA NO ASIGNADA') AS DESPLANCUENTA, " & _
        " P.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        " ISNULL((SELECT C.FACTORVENTA " & _
        " FROM COTIZACION C " & _
        " WHERE C.CODMONEDA = P.CODMONEDA " & _
        " AND C.FECHAMOVIMIENTO = (SELECT MAX(CO.FECHAMOVIMIENTO) " & _
        " FROM COTIZACION CO " & _
        " WHERE CO.CODMONEDA = C.CODMONEDA " & _
        " AND CO.FECHAMOVIMIENTO <= @FECHAHASTA)), 0) AS COTIZACION, " & _
        " ISNULL(P.ULTIMOCOSTO,0) AS ULTIMOCOSTO, ISNULL(P.COSTOPP,0) AS COSTOPP, " & _
        " ISNULL(PS.COSTOPPALCIERRE, 0) AS CPPALCIERRE, " & _
        " RTRIM(UM.DESMEDIDA) AS UNIDAD, " & _
        " PS.STOCKINICIAL AS CANTIDADINICIAL, " & _
        " PS.CANTIDAD AS CANTIDADACTUAL, " & _
        " /*COMPRA*/ " & _
        " ISNULL((SELECT SUM(CD.CANTIDADCOMPRA) " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " WHERE C.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND CD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND C.FECHACOMPRA >= PS.ULTIMOINVENTARIO " & _
        " AND C.FECHACOMPRA <= @FECHAHASTA), 0) AS CANTIDADCOMPRADA, " & _
        " /*VENTAS*/ " & _
        " ISNULL((SELECT SUM(VD.CANTIDADVENTA) " & _
        " FROM VENTAS V INNER JOIN VENTASDETALLE VD ON VD.CODVENTA = V.CODVENTA " & _
        " WHERE V.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND VD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND V.ESTADO = 0 " & _
        " AND V.FECHAVENTA >= PS.ULTIMOINVENTARIO " & _
        " AND V.FECHAVENTA <= @FECHAHASTA), 0) AS CANTIDADVENDIDA, " & _
        " /*AJUSTE POSITIVO*/ " & _
        " ISNULL((SELECT SUM(AD.CANTIDADAJUSTE) " & _
        " FROM AJUSTE A INNER JOIN AJUSTEDETALLE AD ON AD.CODAJUSTE = A.CODAJUSTE " & _
        " WHERE A.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND AD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND A.TIPOAJUSTE = 1 " & _
        " AND A.FECHAAJUSTE >= PS.ULTIMOINVENTARIO " & _
        " AND A.FECHAAJUSTE <= @FECHAHASTA), 0) AS CANTIDADAJUSTEPOSITIVO, " & _
        " /*AJUSTE NEGATIVO*/ " & _
        " ISNULL((SELECT SUM(AD.CANTIDADAJUSTE) " & _
        " FROM AJUSTE A INNER JOIN AJUSTEDETALLE AD ON AD.CODAJUSTE = A.CODAJUSTE " & _
        " WHERE A.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND AD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND A.TIPOAJUSTE = 0 " & _
        " AND A.FECHAAJUSTE >= PS.ULTIMOINVENTARIO " & _
        " AND A.FECHAAJUSTE <= @FECHAHASTA), 0) AS CANTIDADAJUSTENEGATIVO, " & _
        " /*TRANSFERENCIA DE SALIDA*/ " & _
        " ISNULL((SELECT SUM(TD.CANTIDADTRANFERENCIA) " & _
        " FROM TRANFERENCIA T INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        " WHERE T.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND TD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND T.FECHATRANSFERENCIA >= PS.ULTIMOINVENTARIO " & _
        " AND T.FECHATRANSFERENCIA <= @FECHAHASTA), 0) AS CANTIDADTRANSFERENCIASALIDA, " & _
        " /*TRANSFERENCIA DE ENTRADA*/ " & _
        " ISNULL((SELECT SUM(TD.CANTIDADTRANFERENCIA) " & _
        " FROM TRANFERENCIA T INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        " WHERE T.SUCURSALDESTINO = PS.CODSUCURSAL " & _
        " AND TD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND T.FECHATRANSFERENCIA >= PS.ULTIMOINVENTARIO " & _
        " AND T.FECHATRANSFERENCIA <= @FECHAHASTA), 0) AS CANTIDADTRANSFERENCIAENTRADA, " & _
        " /*DEVOLUCION DE VENTA*/ " & _
        " ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA) " & _
        " FROM DEVOLUCION D INNER JOIN DEVOLUCIONDETALLE DD ON DD.CODDEVOLUCION = D.CODDEVOLUCION " & _
        " WHERE D.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND DD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND D.FECHADEVOLUCION >= PS.ULTIMOINVENTARIO " & _
        " AND D.FECHADEVOLUCION <= @FECHAHASTA AND D.ESTADO = 0 ), 0) AS CANTIDADDEVUELTA, " & _
        " /*ORDEN PRODUCCION*/ " & _
        " ISNULL((SELECT SUM(OPM.CANTIDAD) " & _
        " FROM ORDENPRODUCCION OP " & _
        " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPM ON OPD.CODORDENPRODUCCION = OPM.CODORDENPRODUCCION " & _
        " AND OPD.CODPRODUCTO = OPM.CODPRODUCTO " & _
        " WHERE OPM.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND OPM.CODPRODUCTOMATERIAPRIMA = PS.CODPRODUCTO " & _
        " AND OP.FECHAOP >= PS.ULTIMOINVENTARIO " & _
        " AND OP.FECHAOP <= @FECHAHASTA), 0) AS CANTIDADORDENPRODUCCION, " & _
        " /*INGRESO DE PRODUCCION*/ " & _
        " ISNULL((SELECT SUM(IPD.CANTIDAD) " & _
        " FROM PRODUCCIONINGRESOPRODUCTO IP INNER JOIN PRODUCCIONINGRESOPRODUCTODET IPD ON IP.CODINGRESOPROTER = IPD.CODINGRESOPROTER " & _
        " WHERE IP.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND IPD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND IP.FECHACOMPROBANTE >= PS.ULTIMOINVENTARIO " & _
        " AND IP.FECHACOMPROBANTE <= @FECHAHASTA), 0) AS CANTIDADINGRESOPRODUCCION, " & _
        " /*PRODUCCION DE POLLITOS*/ " & _
        " ISNULL((SELECT SUM(PPD.CANTIDAD) " & _
        " FROM PRODUCCIONPOLLODETALLE PPD INNER JOIN PRODUCCIONPOLLO PP ON PP.CODPRODUCCION = PPD.CODPRODUCCION " & _
        " WHERE PP.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND PPD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND PPD.CODPRODUCTO NOT IN(" & CODPOLLITO & ", " & CODPOLLO & ") " & _
        " AND PPD.FECHA >= PS.ULTIMOINVENTARIO " & _
        " AND PPD.FECHA <= @FECHAHASTA), 0) AS CANTIDADPRODUCCIONPOLLO, " & _
        " /*PREPARACION PARA TRANSFERENCIA EN PRODUCCION*/ " & _
        " ISNULL((SELECT SUM(TD.CANTIDADTRANFERENCIA) " & _
        " FROM TRANFERENCIA T INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        " WHERE T.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND TD.CODPRODUCTO = " & CODPOLLO & " " & _
        " AND T.FECHATRANSFERENCIA >= PS.ULTIMOINVENTARIO " & _
        " AND T.FECHATRANSFERENCIA <= @FECHAHASTA), 0) AS CANTIDADPARASALIDA " & _
        " FROM PRODUCTOSUCURSAL PS INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PS.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PS.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " INNER JOIN UNIDADMEDIDA UM ON P.CODMEDIDA = UM.CODMEDIDA " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = P.CODMONEDA " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON P.CUENTAMERCADERIA = PL.CODPLANCUENTA " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
        " WHERE P.ACTUALIZARSTOCK = 1 AND P.CODEMPRESA = @EMPRESA " & condiciones & condicionesSucursal & _
        " ORDER BY NUMSUCURSAL, NUMPLANCUENTA " & Orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            cmd.CommandTimeout = 5000
            dr = cmd.ExecuteReader

            Do While dr.Read
                cantidadStock = ( _
                CDec(dr("CANTIDADINICIAL")) + _
                CDec(dr("CANTIDADCOMPRADA")) + _
                CDec(dr("CANTIDADDEVUELTA")) + _
                CDec(dr("CANTIDADAJUSTEPOSITIVO")) + _
                CDec(dr("CANTIDADTRANSFERENCIAENTRADA")) + _
                CDec(dr("CANTIDADINGRESOPRODUCCION")) _
                ) - _
                ( _
                CDec(dr("CANTIDADVENDIDA")) + _
                CDec(dr("CANTIDADAJUSTENEGATIVO")) + _
                CDec(dr("CANTIDADTRANSFERENCIASALIDA")) + _
                CDec(dr("CANTIDADORDENPRODUCCION")) + _
                CDec(dr("CANTIDADPRODUCCIONPOLLO")) _
                )

                'If cantidadStock <> dr("CANTIDADACTUAL") Then
                If (dr("CODPRODUCTO") = CODPOLLITO) Or (dr("CODPRODUCTO") = CODPOLLO) Then
                    cantidadStock = dr("CANTIDADACTUAL")
                End If

                'Para mostrar productos con stock 0
                If cantidadStock <> 0 Then
                    condicion = True
                Else
                    If mostrarStockCero = True Then
                        condicion = True
                    Else
                        condicion = False
                    End If
                End If

                If condicion = True Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMFAMILIA")
                    row.Item("Campo2") = dr("NUMLINEA")
                    row.Item("Campo3") = dr("NUMRUBRO")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("DESLINEA")
                    row.Item("Campo6") = dr("DESRUBRO")
                    row.Item("Campo7") = dr("CODIGOBARRA")
                    row.Item("Campo8") = dr("DESPRODUCTO")
                    row.Item("Campo9") = dr("NUMPLANCUENTA")
                    row.Item("Campo10") = dr("DESPLANCUENTA")
                    row.Item("Campo11") = dr("UNIDAD")
                    row.Item("Campo12") = dr("NUMSUCURSAL")
                    row.Item("Campo13") = dr("DESSUCURSAL")

                    'If CDate(HastaFecha) = Today Then
                    row.Item("Numero1") = dr("CANTIDADACTUAL")
                    'Else
                    'row.Item("Numero1") = cantidadStock
                    'End If

                row.Item("Numero2") = cantidadStock

                Select Case dr("CODPRODUCTO")
                    Case Is = CODPOLLITO
                        If dr("CPPALCIERRE") = 0 Then
                            row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            row.Item("Numero4") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                        Else
                            row.Item("Numero3") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            row.Item("Numero4") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                        End If
                    Case Is = CODPOLLO
                        If dr("CPPALCIERRE") = 0 Then
                            row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            row.Item("Numero4") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                        Else
                            row.Item("Numero3") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            row.Item("Numero4") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                        End If
                    Case Else
                        row.Item("Numero3") = dr("COSTOPP") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            'row.Item("Numero4") = (dr("COSTOPP") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                            row.Item("Numero4") = (dr("COSTOPP") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * row.Item("Numero1")
                End Select

                ds.Tables("Detalle").Rows.Add(row)
                End If
                'End If
            Loop

            row = ds.Tables("Cabecera").NewRow()
            row.Item("Numero2") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo3") = RTrim(DesSuc1)
            row.Item("Campo4") = RTrim(DesSuc2)
            row.Item("Campo5") = RTrim(DesProd1)
            row.Item("Campo6") = RTrim(DesProd2)
            row.Item("Campo7") = RTrim(DesFami1)
            row.Item("Campo8") = RTrim(DesFami2)
            row.Item("Campo9") = RTrim(DesLin1)
            row.Item("Campo11") = RTrim(DesLin2)
            row.Item("Campo17") = RTrim(DesRub1)
            row.Item("Campo18") = RTrim(DesRub2)
            row.Item("Campo23") = desdecategoria
            row.Item("Campo24") = hastacategoria
            row.Item("Campo25") = desdesubcategoria
            row.Item("Campo26") = hastasubcategoria
            row.Item("Campo27") = desdemarca
            row.Item("Campo28") = hastamarca
            row.Item("Campo13") = MonedaInforme
            row.Item("Campo14") = PRODUCTO1
            row.Item("Campo15") = PRODUCTO2
            row.Item("Campo16") = PRODUCTO3
            row.Item("Campo10") = HastaFecha
            row.Item("Campo19") = DesUnidad
            row.Item("Campo20") = HasUnidad
            row.Item("Campo21") = DesCuenta
            row.Item("Campo22") = HasCuenta

            If resumen Then
                row.Item("Campo2") = "0"
            Else
                row.Item("Campo2") = "1"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfStockValorizadoConOpciones2(ByVal HastaFecha As String, _
    ByVal DesSuc1 As String, ByVal DesSuc2 As String, ByVal DesFami1 As String, ByVal DesFami2 As String, _
    ByVal DesLin1 As String, ByVal DesLin2 As String, ByVal DesRub1 As String, ByVal DesRub2 As String, _
    ByVal DesProd1 As String, ByVal DesProd2 As String, ByVal DesUnidad As String, ByVal HasUnidad As String, _
    ByVal DesCuenta As String, ByVal HasCuenta As String, ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal MonedaInforme As String, ByVal CotizacionMonedaInf As String, _
    ByVal codMoneda As Long, ByVal canDecimales As Integer, _
    ByVal mostrarStockCero As Boolean, ByVal CotizafactorIngresado As Decimal, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal condiciones As String, ByVal condicionesSucursal As String, _
    ByVal Orden As String, ByVal resumen As Boolean, ByVal recalcular As Boolean, _
    ByVal titulo As Byte, ByVal tipo As Byte, _
    ByVal CODPOLLITO As Long, ByVal CODPOLLO As Long) As DataSet
        ds.Clear()

        Dim costoPromedio As Decimal
        Dim cantidadStock As Decimal
        Dim condicion As Boolean
        Dim porcCompra As Decimal = 0
        Dim porcVenta As Decimal = 0

        sql = ""
        sql = " DECLARE	@EMPRESA NUMERIC(9,0), " & _
        " @FECHAHASTA DATETIME " & _
        " SET @EMPRESA = " & empCodigo & _
        " SET @FECHAHASTA = CAST('" & HastaFecha & "' AS DATETIME) " & _
        " SELECT S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRAORDEN, " & _
        " P.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        " P.CODFAMILIA, RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS DESFAMILIA, " & _
        " P.CODLINEA, RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA)AS DESLINEA, " & _
        " P.CODRUBRO, RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS DESRUBRO, " & _
        " ISNULL(CP.CODCATEGORIA,0) AS CODCATEGORIA, ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
        " ISNULL(SC.CODSUBCATEGORIA,0) AS CODSUBCATEGORIA, ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
        " ISNULL(MC.CODMARCA,0) AS CODMARCA, ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'CUENTA NO ASIGNADA') AS DESPLANCUENTA, " & _
        " P.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, I.COHEFICIENTE, " & _
        " ISNULL((SELECT C.FACTORVENTA " & _
        " FROM COTIZACION C " & _
        " WHERE C.CODMONEDA = P.CODMONEDA " & _
        " AND C.FECHAMOVIMIENTO = (SELECT MAX(CO.FECHAMOVIMIENTO) " & _
        " FROM COTIZACION CO " & _
        " WHERE CO.CODMONEDA = C.CODMONEDA " & _
        " AND CO.FECHAMOVIMIENTO <= @FECHAHASTA)), 0) AS COTIZACION, " & _
        " ISNULL(P.ULTIMOCOSTO,0) AS ULTIMOCOSTO, ISNULL(P.COSTOPP,0) AS COSTOPP, " & _
        " ISNULL(PS.COSTOPPALCIERRE, 0) AS CPPALCIERRE, " & _
        " RTRIM(UM.DESMEDIDA) AS UNIDAD, " & _
        " PS.STOCKINICIAL AS CANTIDADINICIAL, " & _
        " PS.CANTIDAD AS CANTIDADACTUAL, " & _
        " /*COMPRA*/ " & _
        " ISNULL((SELECT SUM(CD.CANTIDADCOMPRA) " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " WHERE C.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND CD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND C.FECHACOMPRA >= PS.ULTIMOINVENTARIO " & _
        " AND C.FECHACOMPRA <= @FECHAHASTA), 0) AS CANTIDADCOMPRADA, " & _
        " /*VENTAS*/ " & _
        " ISNULL((SELECT SUM(VD.CANTIDADVENTA) " & _
        " FROM VENTAS V INNER JOIN VENTASDETALLE VD ON VD.CODVENTA = V.CODVENTA " & _
        " WHERE V.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND VD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND V.ESTADO = 0 " & _
        " AND V.FECHAVENTA >= PS.ULTIMOINVENTARIO " & _
        " AND V.FECHAVENTA <= @FECHAHASTA), 0) AS CANTIDADVENDIDA, " & _
        " /*AJUSTE POSITIVO*/ " & _
        " ISNULL((SELECT SUM(AD.CANTIDADAJUSTE) " & _
        " FROM AJUSTE A INNER JOIN AJUSTEDETALLE AD ON AD.CODAJUSTE = A.CODAJUSTE " & _
        " WHERE A.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND AD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND A.TIPOAJUSTE = 1 " & _
        " AND A.FECHAAJUSTE >= PS.ULTIMOINVENTARIO " & _
        " AND A.FECHAAJUSTE <= @FECHAHASTA), 0) AS CANTIDADAJUSTEPOSITIVO, " & _
        " /*AJUSTE NEGATIVO*/ " & _
        " ISNULL((SELECT SUM(AD.CANTIDADAJUSTE) " & _
        " FROM AJUSTE A INNER JOIN AJUSTEDETALLE AD ON AD.CODAJUSTE = A.CODAJUSTE " & _
        " WHERE A.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND AD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND A.TIPOAJUSTE = 0 " & _
        " AND A.FECHAAJUSTE >= PS.ULTIMOINVENTARIO " & _
        " AND A.FECHAAJUSTE <= @FECHAHASTA), 0) AS CANTIDADAJUSTENEGATIVO, " & _
        " /*TRANSFERENCIA DE SALIDA*/ " & _
        " ISNULL((SELECT SUM(TD.CANTIDADTRANFERENCIA) " & _
        " FROM TRANFERENCIA T INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        " WHERE T.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND TD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND T.FECHATRANSFERENCIA >= PS.ULTIMOINVENTARIO " & _
        " AND T.FECHATRANSFERENCIA <= @FECHAHASTA), 0) AS CANTIDADTRANSFERENCIASALIDA, " & _
        " /*TRANSFERENCIA DE ENTRADA*/ " & _
        " ISNULL((SELECT SUM(TD.CANTIDADTRANFERENCIA) " & _
        " FROM TRANFERENCIA T INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        " WHERE T.SUCURSALDESTINO = PS.CODSUCURSAL " & _
        " AND TD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND T.FECHATRANSFERENCIA >= PS.ULTIMOINVENTARIO " & _
        " AND T.FECHATRANSFERENCIA <= @FECHAHASTA), 0) AS CANTIDADTRANSFERENCIAENTRADA, " & _
        " /*DEVOLUCION DE VENTA*/ " & _
        " ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA) " & _
        " FROM DEVOLUCION D INNER JOIN DEVOLUCIONDETALLE DD ON DD.CODDEVOLUCION = D.CODDEVOLUCION " & _
        " WHERE D.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND DD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND D.FECHADEVOLUCION >= PS.ULTIMOINVENTARIO " & _
        " AND D.FECHADEVOLUCION <= @FECHAHASTA AND D.ESTADO = 0 ), 0) AS CANTIDADDEVUELTA, " & _
        " /*ORDEN PRODUCCION*/ " & _
        " ISNULL((SELECT SUM(OPM.CANTIDAD) " & _
        " FROM ORDENPRODUCCION OP " & _
        " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPM ON OPD.CODORDENPRODUCCION = OPM.CODORDENPRODUCCION " & _
        " AND OPD.CODPRODUCTO = OPM.CODPRODUCTO " & _
        " WHERE OPM.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND OPM.CODPRODUCTOMATERIAPRIMA = PS.CODPRODUCTO " & _
        " AND OP.FECHAOP >= PS.ULTIMOINVENTARIO " & _
        " AND OP.FECHAOP <= @FECHAHASTA), 0) AS CANTIDADORDENPRODUCCION, " & _
        " /*INGRESO DE PRODUCCION*/ " & _
        " ISNULL((SELECT SUM(IPD.CANTIDAD) " & _
        " FROM PRODUCCIONINGRESOPRODUCTO IP INNER JOIN PRODUCCIONINGRESOPRODUCTODET IPD ON IP.CODINGRESOPROTER = IPD.CODINGRESOPROTER " & _
        " WHERE IP.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND IPD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND IP.FECHACOMPROBANTE >= PS.ULTIMOINVENTARIO " & _
        " AND IP.FECHACOMPROBANTE <= @FECHAHASTA), 0) AS CANTIDADINGRESOPRODUCCION, " & _
        " /*PRODUCCION DE POLLITOS*/ " & _
        " ISNULL((SELECT SUM(PPD.CANTIDAD) " & _
        " FROM PRODUCCIONPOLLODETALLE PPD INNER JOIN PRODUCCIONPOLLO PP ON PP.CODPRODUCCION = PPD.CODPRODUCCION " & _
        " WHERE PP.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND PPD.CODPRODUCTO = PS.CODPRODUCTO " & _
        " AND PPD.CODPRODUCTO NOT IN(" & CODPOLLITO & ", " & CODPOLLO & ") " & _
        " AND PPD.FECHA >= PS.ULTIMOINVENTARIO " & _
        " AND PPD.FECHA <= @FECHAHASTA), 0) AS CANTIDADPRODUCCIONPOLLO, " & _
        " /*PREPARACION PARA TRANSFERENCIA EN PRODUCCION*/ " & _
        " ISNULL((SELECT SUM(TD.CANTIDADTRANFERENCIA) " & _
        " FROM TRANFERENCIA T INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        " WHERE T.CODSUCURSAL = PS.CODSUCURSAL " & _
        " AND TD.CODPRODUCTO = " & CODPOLLO & " " & _
        " AND T.FECHATRANSFERENCIA >= PS.ULTIMOINVENTARIO " & _
        " AND T.FECHATRANSFERENCIA <= @FECHAHASTA), 0) AS CANTIDADPARASALIDA, " & _
        " /*PRECIO DE VENTA*/ " & _
        " ISNULL((SELECT MAX(PR.PRECIOVENTA) " & _
        " FROM PRECIO PR " & _
        " WHERE PR.CODSUCURSAL = PS.CODSUCURSAL AND " & _
        " PR.CODPRODUCTO = PS.CODPRODUCTO), 0) AS PRECIOVENTA " & _
        " FROM PRODUCTOSUCURSAL PS INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PS.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PS.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " INNER JOIN UNIDADMEDIDA UM ON P.CODMEDIDA = UM.CODMEDIDA " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = P.CODMONEDA " & _
        " INNER JOIN IVA I ON I.CODIVA = P.CODIVA " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON P.CUENTAMERCADERIA = PL.CODPLANCUENTA " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
        " WHERE P.ACTUALIZARSTOCK = 1 AND P.CODEMPRESA = @EMPRESA " & condiciones & condicionesSucursal & _
        " ORDER BY NUMSUCURSAL, NUMPLANCUENTA " & Orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            cmd.CommandTimeout = 5000
            dr = cmd.ExecuteReader

            Do While dr.Read
                cantidadStock = ( _
                CDec(dr("CANTIDADINICIAL")) + _
                CDec(dr("CANTIDADCOMPRADA")) + _
                CDec(dr("CANTIDADDEVUELTA")) + _
                CDec(dr("CANTIDADAJUSTEPOSITIVO")) + _
                CDec(dr("CANTIDADTRANSFERENCIAENTRADA")) + _
                CDec(dr("CANTIDADINGRESOPRODUCCION")) _
                ) - _
                ( _
                CDec(dr("CANTIDADVENDIDA")) + _
                CDec(dr("CANTIDADAJUSTENEGATIVO")) + _
                CDec(dr("CANTIDADTRANSFERENCIASALIDA")) + _
                CDec(dr("CANTIDADORDENPRODUCCION")) + _
                CDec(dr("CANTIDADPRODUCCIONPOLLO")) _
                )

                'If cantidadStock <> dr("CANTIDADACTUAL") Then
                If (dr("CODPRODUCTO") = CODPOLLITO) Or (dr("CODPRODUCTO") = CODPOLLO) Then
                    cantidadStock = dr("CANTIDADACTUAL")
                End If

                'Para mostrar productos con stock 0
                If cantidadStock <> 0 Then
                    condicion = True
                Else
                    If mostrarStockCero = True Then
                        condicion = True
                    Else
                        condicion = False
                    End If
                End If

                If condicion = True Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMFAMILIA")
                    row.Item("Campo2") = dr("NUMLINEA")
                    row.Item("Campo3") = dr("NUMRUBRO")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("DESLINEA")
                    row.Item("Campo6") = dr("DESRUBRO")
                    row.Item("Campo7") = dr("CODIGOBARRA")
                    row.Item("Campo8") = dr("DESPRODUCTO")
                    row.Item("Campo9") = dr("NUMPLANCUENTA")
                    row.Item("Campo10") = dr("DESPLANCUENTA")
                    row.Item("Campo11") = dr("UNIDAD")
                    row.Item("Campo12") = dr("NUMSUCURSAL")
                    row.Item("Campo13") = dr("DESSUCURSAL")

                    'If CDate(HastaFecha) = Today Then
                    row.Item("Numero1") = dr("CANTIDADACTUAL")
                    'Else
                    'row.Item("Numero1") = cantidadStock
                    'End If

                    row.Item("Numero2") = cantidadStock

                    Select Case dr("CODPRODUCTO")
                        Case Is = CODPOLLITO
                            If dr("CPPALCIERRE") = 0 Then
                                row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                                row.Item("Numero4") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                            Else
                                row.Item("Numero3") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                                row.Item("Numero4") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                            End If
                        Case Is = CODPOLLO
                            If dr("CPPALCIERRE") = 0 Then
                                row.Item("Numero3") = dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                                row.Item("Numero4") = (dr("ULTIMOCOSTO") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                            Else
                                row.Item("Numero3") = dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                                row.Item("Numero4") = (dr("CPPALCIERRE") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * cantidadStock
                            End If
                        Case Else
                            row.Item("Numero3") = dr("COSTOPP") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            row.Item("Numero4") = (dr("COSTOPP") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * row.Item("Numero1")
                            row.Item("Numero5") = dr("PRECIOVENTA") * dr("COTIZACION") / CDec(CotizacionMonedaInf)
                            row.Item("Numero6") = (dr("PRECIOVENTA") * dr("COTIZACION") / CDec(CotizacionMonedaInf)) * row.Item("Numero1")
                    End Select

                    'CALCULO DE %COSTO Y %VENTA
                    '--------------------------
                    If dr("COSTOPP") > 0 Then
                        porcCompra = 100 * ((dr("PRECIOVENTA") / dr("COSTOPP")) - 1)
                    End If

                    If dr("PRECIOVENTA") > 0 Then
                        porcVenta = 100 * (1 - (dr("COSTOPP") / dr("PRECIOVENTA")))
                    End If
                    row.Item("Numero7") = porcCompra
                    row.Item("Numero8") = porcVenta
                    '--------------------------

                    row.Item("Numero10") = dr("COHEFICIENTE")

                    ds.Tables("Detalle").Rows.Add(row)
                End If
                'End If
            Loop

            row = ds.Tables("Cabecera").NewRow()
            row.Item("Numero2") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo3") = RTrim(DesSuc1)
            row.Item("Campo4") = RTrim(DesSuc2)
            row.Item("Campo5") = RTrim(DesProd1)
            row.Item("Campo6") = RTrim(DesProd2)
            row.Item("Campo7") = RTrim(DesFami1)
            row.Item("Campo8") = RTrim(DesFami2)
            row.Item("Campo9") = RTrim(DesLin1)
            row.Item("Campo11") = RTrim(DesLin2)
            row.Item("Campo17") = RTrim(DesRub1)
            row.Item("Campo18") = RTrim(DesRub2)
            row.Item("Campo23") = desdecategoria
            row.Item("Campo24") = hastacategoria
            row.Item("Campo25") = desdesubcategoria
            row.Item("Campo26") = hastasubcategoria
            row.Item("Campo27") = desdemarca
            row.Item("Campo28") = hastamarca
            row.Item("Campo13") = MonedaInforme
            row.Item("Campo14") = PRODUCTO1
            row.Item("Campo15") = PRODUCTO2
            row.Item("Campo16") = PRODUCTO3
            row.Item("Campo10") = HastaFecha
            row.Item("Campo19") = DesUnidad
            row.Item("Campo20") = HasUnidad
            row.Item("Campo21") = DesCuenta
            row.Item("Campo22") = HasCuenta

            If resumen Then
                row.Item("Campo2") = "0"
            Else
                row.Item("Campo2") = "1"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infSucursalLimiteProd(ByVal orden As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS ORDENSUCURSAL, " & _
              " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENPRODUCTO, " & _
              " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
              " RTRIM(P.CODIGOBARRA) AS NUMPRODUCTO, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
              " SL.CANTIDADMAXIMA AS CANTIDADMAXIMA FROM SUCURSALLIMITEPROD SL " & _
              " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = SL.CODSUCURSAL " & _
              " INNER JOIN PRODUCTOS  P ON P.CODPRODUCTO = SL.CODPRODUCTO " & _
              " WHERE P.CODEMPRESA = " & empCodigo & " " & _
              " ORDER BY  " & orden & " "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMPRODUCTO")
                row.Item("Campo4") = dr("DESPRODUCTO")
                row.Item("Numero1") = dr("CANTIDADMAXIMA")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '################### 
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTalle(ByVal tipo As Byte, Optional ByVal titulo As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMTALLE)))+LTRIM(RTRIM(NUMTALLE)) AS NUMERO, " & _
              "RTRIM(NUMTALLE) AS CODIGO, RTRIM(DESTALLE) AS DESCRIPCION FROM TALLE " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = "Listado de " & titulo & "s"

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTipoCliente(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMTIPOCLIENTE)))+LTRIM(RTRIM(NUMTIPOCLIENTE)) AS NUMERO, " & _
              "RTRIM(NUMTIPOCLIENTE) AS CODIGO, RTRIM(DESTIPOCLIENTE) AS DESCRIPCION FROM TIPOCLIENTE " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTipoComprobante(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(NUMTIPOCOMPRO)))+LTRIM(RTRIM(NUMTIPOCOMPRO)) AS NUMERO, " & _
              "RTRIM(TC.NUMTIPOCOMPRO) AS CODIGO, RTRIM(TC.DESCOMPROBANTE) AS DESCRIPCION, " & _
              " 'COMPRAS' = " & _
              " CASE " & _
              " WHEN TC.COMPRAS = 1 THEN 'X' " & _
              " WHEN TC.COMPRAS = 0 THEN ' ' " & _
              " END, " & _
              " 'VENTAS' = " & _
              " CASE " & _
              " WHEN TC.VENTAS = 1 THEN 'X' " & _
              " WHEN TC.VENTAS = 0 THEN ' ' " & _
              " END, " & _
              " 'COBROS' = " & _
              " CASE " & _
              " WHEN TC.COBROS = 1 THEN 'X' " & _
              " WHEN TC.COBROS = 0 THEN ' ' " & _
              " END, " & _
              " 'PAGOS' = " & _
              " CASE " & _
              " WHEN TC.PAGOS = 1 THEN 'X' " & _
              " WHEN TC.PAGOS = 0 THEN ' ' " & _
              " END, " & _
              " 'INVENTARIO' = " & _
              " CASE " & _
              " WHEN TC.INVENTARIO = 1 THEN 'X' " & _
              " WHEN TC.INVENTARIO = 0 THEN ' ' " & _
              " END, " & _
              " 'NCREDITO' = " & _
              " CASE " & _
              " WHEN TC.NCREDITO = 1 THEN 'X' " & _
              " WHEN TC.NCREDITO = 0 THEN ' ' " & _
              " END, " & _
              " 'NDEBITO' = " & _
              " CASE " & _
              " WHEN TC.NDEBITO = 1 THEN 'X' " & _
              " WHEN TC.NDEBITO = 0 THEN ' ' " & _
              " END, " & _
              " 'OTROS' = " & _
              " CASE " & _
              " WHEN TC.OTROS = 1 THEN 'X' " & _
              " WHEN TC.OTROS = 0 THEN ' ' " & _
              " END, " & _
              " ISNULL(RTRIM(PC.NUMPLANCUENTA),' ') AS CUENTA, " & _
              " ISNULL(RTRIM(PC.DESPLANCUENTA), ' ') AS DESCUENTA " & _
              " FROM TIPOCOMPROBANTE TC " & _
              " LEFT OUTER JOIN PLANCUENTAS PC ON PC.CODPLANCUENTA = TC.CODPLANCUENTA " & _
              " WHERE TC.CODEMPRESA = " & empCodigo & " " & _
              " ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("COMPRAS")
                row.Item("Campo6") = dr("VENTAS")
                row.Item("Campo7") = dr("COBROS")
                row.Item("Campo8") = dr("PAGOS")
                row.Item("Campo9") = dr("INVENTARIO")
                row.Item("Campo10") = dr("NCREDITO")
                row.Item("Campo11") = dr("NDEBITO")
                row.Item("Campo12") = dr("OTROS")
                row.Item("Campo13") = dr("CUENTA")
                row.Item("Campo14") = dr("DESCUENTA")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTipoTransporte(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(NUMTRANSPORTE)))+LTRIM(RTRIM(NUMTRANSPORTE)) AS NUMERO, " & _
              " RTRIM(NUMTRANSPORTE) AS CODIGO, RTRIM(DESTRANSPORTE) AS DESCRIPCION FROM TIPOTRANSPORTE " & _
              " WHERE CODEMPRESA = " & empCodigo & " " & _
              " ORDER BY  "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTipoVendedor(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMTIPOVENDEDOR)))+LTRIM(RTRIM(NUMTIPOVENDEDOR)) AS NUMERO, " & _
        "RTRIM(NUMTIPOVENDEDOR) AS CODIGO, RTRIM(DESTIPOVENDEDOR) AS DESCRIPCION FROM TIPOVENDEDOR " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTomaInventario(ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, ByVal desdefechaingreso As String, ByVal hastafechaingreso As String, _
    ByVal titulo As Byte, ByVal condiciones As String, ByVal orden As String, ByVal tipo As Byte, ByVal cortefamilia As Byte, ByVal cortelinea As Byte, ByVal corterubro As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
            " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA, " & _
            " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA, " & _
            " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO, " & _
            " CONVERT(DATETIME, P.FECHAINGRESO) AS ORDENFECHAINGRESO, " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
            " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, ISNULL(RTRIM(F.DESFAMILIA), '') AS DESFAMILIA, " & _
            " RTRIM(L.NUMLINEA) AS NUMLINEA, ISNULL(RTRIM(L.DESLINEA), '') AS DESLINEA, " & _
            " RTRIM(R.NUMRUBRO) AS NUMRUBRO, ISNULL(RTRIM(R.DESRUBRO),'') AS DESRUBRO, " & _
            " CONVERT(VARCHAR(10), P.FECHAINGRESO, 103) AS FECHAINGRESO, " & _
            " RTRIM(P.CODIGOORIGINAL) AS ORIGINAL, " & _
            " RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADO, " & _
            " RTRIM(E.DESESTADOPRODUCTO) AS DESESTADO " & _
            " FROM PRODUCTOS P " & _
            " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
            " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
            " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
            " LEFT OUTER JOIN ESTADOPRODUCTO E ON P.CODESTADOPRODUCTO = E.CODESTADOPRODUCTO " & _
            " WHERE P.PRODUCTOACTIVO = 1 AND P.CODEMPRESA = " & empCodigo & "  " & condiciones & " " & _
            " ORDER BY  "

        If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA, ORDENLINEA, ORDENRUBRO " & orden & " "
            Else
                sql = sql + " NUMFAMILIA, NUMLINEA, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA, ORDENLINEA " & orden & " "
            Else
                sql = sql + " NUMFAMILIA, NUMLINEA " & orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA  " & orden & " "
            Else
                sql = sql + " NUMFAMILIA " & orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA, ORDENRUBRO   " & orden & " "
            Else
                sql = sql + " NUMFAMILIA, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENLINEA, ORDENRUBRO " & orden & " "
            Else
                sql = sql + "  NUMLINEA, NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENLINEA " & orden & " "
            Else
                sql = sql + "  NUMLINEA " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENRUBRO " & orden & " "
            Else
                sql = sql + "  NUMRUBRO " & orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
            sql = sql & orden & " "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                End If

                row.Item("Campo9") = dr("DESESTADO")
                row.Item("Campo10") = dr("ORIGINAL")
                row.Item("Campo11") = dr("FECHAINGRESO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            'Numero2 = 0 No se hace el corte por familia
            'Numero2 = 1 Se hace el corte por familia
            row.Item("Numero2") = cortefamilia

            'Numero3 = 0 No se hace el corte por linea
            'Numero3 = 1 Se hace el corte por linea
            row.Item("Numero3") = cortelinea

            'Numero4 = 0 No se hace el corte por rubro
            'Numero4 = 1 Se hace el corte por rubro
            row.Item("Numero4") = corterubro

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdeproducto
            row.Item("Campo6") = hastaproducto
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo25") = desdefechaingreso
            row.Item("Campo26") = hastafechaingreso

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infUnidadMedida(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMMEDIDA)))+LTRIM(RTRIM(NUMMEDIDA)) AS NUMERO, " & _
        "RTRIM(NUMMEDIDA) AS CODIGO, RTRIM(DESMEDIDA) AS DESCRIPCION FROM UNIDADMEDIDA " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infVendedor(ByVal tipo As Byte, ByVal nombre_listado As String) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT REPLICATE('0',5-LEN(RTRIM(V.NUMVENDEDOR)))+LTRIM(RTRIM(V.NUMVENDEDOR)) AS NUMERO, " & _
       " RTRIM(V.NUMVENDEDOR) AS CODIGO, RTRIM(V.DESVENDEDOR) AS DESCRIPCION, " & _
       " RTRIM(V.NUMVENDEDOR) AS CODIGO, RTRIM(V.CEDULA) AS CEDULA, " & _
       " RTRIM(V.DIRECCION)AS DIRECCION, RTRIM(V.TELEFONO)AS TELEFONO, " & _
       " RTRIM(V.CELULAR)AS CELULAR, " & _
       " ISNULL(RTRIM(U.DESUSUARIO),'') AS DESUSUARIO, " & _
       " ISNULL(RTRIM(SV.NUMSUPERVISOR),'')  AS NUMSUPERVISOR, " & _
       " ISNULL(RTRIM(SV.DESCRIPCION),'') AS DESSUPERVISOR, " & _
       " V.PORCENCOMI,CASE V.ESTADOVENDEDOR WHEN 0 THEN 'ACTIVO' WHEN 1 THEN 'NO ACTIVO' END AS ESTADO, " & _
       " CASE V.TIENEDESCUENTO WHEN 1 THEN 'SI' WHEN 0 THEN 'NO' END AS REALIZADESCUENTO  " & _
       " FROM VENDEDOR V " & _
       " LEFT OUTER JOIN  USUARIO U ON  V.USUARIO = U.CODUSUARIO " & _
       " LEFT OUTER JOIN SUPERVISORVENTA SV ON SV.CODSUPERVISOR = V.CODSUPERVISOR " & _
       " WHERE V.CODEMPRESA =  " & empCodigo & " " & _
       " ORDER BY DESCRIPCION"

        'If tipo = 1 Then
        '    sql = sql + " V.NUMERO"
        'Else
        '    sql = sql + " V.CODIGO"
        'End If


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("DIRECCION")
                row.Item("Campo4") = dr("TELEFONO")
                row.Item("Campo5") = dr("CELULAR")
                row.Item("Campo6") = dr("DESUSUARIO")
                row.Item("Campo7") = dr("CEDULA")
                row.Item("Campo9") = dr("REALIZADESCUENTO")
                row.Item("Campo10") = dr("ESTADO")
                row.Item("Campo11") = dr("DESSUPERVISOR")
                row.Item("Numero1") = dr("PORCENCOMI")


                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infVentasConfig() As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT V.VENCIMIENTOFACTURA AS VENCIMIENTOFACTURA, " & _
        " V.PORCIENTODESCUENTO AS PORCIENTODESCUENTO, " & _
        " CASE " & _
        " WHEN V.CONTROLLIMITE = 1 THEN 'Si' " & _
        " WHEN V.CONTROLLIMITE = 0 THEN 'No' " & _
        " END AS CONTROLLIMITE, " & _
        " CASE " & _
        " WHEN V.MODIFICAPRECIO = 2 THEN 'Solo Aumentar Precio' " & _
        " WHEN V.MODIFICAPRECIO = 1 THEN 'Aumentar o disminuir precio' " & _
        " WHEN V.MODIFICAPRECIO = 0 THEN ' ' " & _
        " END AS MODIFICAPRECIO, " & _
        " CASE " & _
        " WHEN V.STOCKNEGATIVO = 1 THEN 'Si' " & _
        " WHEN V.STOCKNEGATIVO = 0 THEN 'No' " & _
        " END AS STOCKNEGATIVO, " & _
        " ISNULL(V.CLIENTE,0) AS CODCLIENTE, " & _
        " RTRIM(ISNULL(C.NUMCLIENTE, '')) AS NUMCLIENTE, " & _
        " RTRIM(ISNULL(C.NOMBRE, '')) + ' '+ RTRIM(ISNULL(C.APELLIDO,'')) AS DESCRIPCIONCLIENTE, " & _
        " RTRIM(ISNULL(P.DESPRODUCTO, '')) AS PRODUCTO " & _
        " FROM VENTASCONFIG V LEFT OUTER JOIN CLIENTES C ON V.CLIENTE = C.CODCLIENTE " & _
        " LEFT OUTER JOIN PRODUCTOS P ON V.PRODUCTODESCUENTO = P.CODPRODUCTO " & _
        " WHERE V.CODEMPRESA = " & empCodigo & " "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Numero1") = dr("VENCIMIENTOFACTURA")
                row.Item("Numero2") = dr("PORCIENTODESCUENTO")
                row.Item("Campo1") = dr("CONTROLLIMITE")
                row.Item("Campo2") = dr("MODIFICAPRECIO")
                row.Item("Campo3") = dr("STOCKNEGATIVO")
                row.Item("Campo7") = dr("NUMCLIENTE")
                row.Item("Campo8") = dr("DESCRIPCIONCLIENTE")
                row.Item("Campo9") = dr("PRODUCTO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '################### 
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infZona(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(C.NUMZONA)))+LTRIM(RTRIM(C.NUMZONA)) AS NUMERO, " & _
              "RTRIM(C.NUMZONA) AS CODIGO, RTRIM(C.DESZONA) AS DESCRIPCION, " & _
              "REPLICATE('0',5-LEN(RTRIM(D.NUMDEPARTAMENTO)))+LTRIM(RTRIM(D.NUMDEPARTAMENTO)) AS DEPARTAMENTO, " & _
              "RTRIM(D.NUMDEPARTAMENTO) AS CODIGODEPARTAMENTO, " & _
              "RTRIM(D.DESDEPARTAMENTO) AS DESDEPARTAMENTO FROM ZONA C INNER JOIN DEPARTAMENTO D ON C.CODDEPARTAMENTO = D.CODDEPARTAMENTO " & _
              "WHERE D.CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " DEPARTAMENTO, NUMERO"
        Else
            sql = sql + " CODIGODEPARTAMENTO, CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo3") = dr("DESDEPARTAMENTO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '################### 
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function textomes(ByRef mes As Integer) As String
        Dim texto As String
        Dim meses(12) As String
        meses(1) = "Enero"
        meses(2) = "Febrero"
        meses(3) = "Marzo"
        meses(4) = "Abril"
        meses(5) = "Mayo"
        meses(6) = "Junio"
        meses(7) = "Julio"
        meses(8) = "Agosto"
        meses(9) = "Setiembre"
        meses(10) = "Octubre"
        meses(11) = "Noviembre"
        meses(12) = "Diciembre"
        texto = meses(mes)
        Return texto
    End Function

    Public Function infResultadoPorcentajePrecio(ByVal sucCodigo As Long, ByVal sucDescripcion As String, _
    ByVal ProvDescripcion As String, ByVal comprobante As String, ByVal numero As String, _
    ByVal codMoneda As Long, ByVal moneda As String, ByVal canDecimales As Integer, _
    ByVal detDetalle As DataTable, ByVal detPorcentaje As DataTable) As DataSet
        ds.Clear()

        Dim i As Integer
        Dim ii As Integer

        Dim costo As Decimal
        Dim porcentaje As Decimal
        Dim resultado As Decimal
        Dim precio As Decimal

        ds.ReadXml(direccion)

        Try
            For i = 0 To detDetalle.Rows.Count - 1
                For ii = 0 To detPorcentaje.Rows.Count - 1
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = detDetalle.Rows(i)("CODIGO")
                    row.Item("Campo2") = detDetalle.Rows(i)("DESCRIPCION")
                    row.Item("Numero1") = detDetalle.Rows(i)("COSTO")
                    row.Item("Campo4") = detPorcentaje.Rows(ii)("TIPOCLIENTE")
                    row.Item("Campo5") = detPorcentaje.Rows(ii)("DESTIPOCLIENTE")
                    row.Item("Numero2") = detPorcentaje.Rows(ii)("PORCENTAJE")

                    precio = funcion.Descripcion_Tabla("1), (PRECIOVENTA", _
                    "PRECIO WHERE CODTIPOCLIENTE = " & detPorcentaje.Rows(ii)("CODTIPOCLIENTE") & " " & _
                    "AND CODSUCURSAL = " & sucCodigo & " " & _
                    "AND CODPRODUCTO = " & detDetalle.Rows(i)("CODPRODUCTO") & " " & _
                    "AND CODMONEDA = " & codMoneda & " AND CODEMPRESA = " & empCodigo & " " & _
                    "--", "", "", empCodigo)

                    row.Item("Numero3") = precio

                    costo = detDetalle.Rows(i)("COSTO")
                    porcentaje = detPorcentaje.Rows(ii)("PORCENTAJE")

                    resultado = costo + Math.Round((costo * porcentaje / 100), canDecimales)

                    row.Item("Numero4") = resultado

                    ds.Tables("Detalle").Rows.Add(row)
                Next
            Next

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = sucCodigo
            row.Item("Campo3") = sucDescripcion
            row.Item("Campo4") = moneda
            row.Item("Campo5") = ProvDescripcion
            row.Item("Campo6") = comprobante
            row.Item("Campo7") = numero

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infControlCargaPresupuesto(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal vendedor_desde As String, ByVal vend_descripcion_desde As String, _
    ByVal vendedor_hasta As String, ByVal vend_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal zona_desde As String, ByVal zona_descripcion_desde As String, _
    ByVal zona_hasta As String, ByVal zona_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, ByVal total As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT PV.CODPRESUPUESTO AS CODPRESUPUESTO, RTRIM (PV.NUMPRESUPUESTO) AS NUMERO, RTRIM(T.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " PV.PORCENTAJEDESCUENTO AS DESCUENTO, PV.COTIZACION1 AS COTIZACION, " & _
        " CONVERT(VARCHAR(10), PV.FECGRA, 103) AS FECHAINGRESO, " & _
        " CONVERT(VARCHAR(10),PV.FECHAPRESUPUESTO,103) AS FECHAPRESUPUESTO, " & _
        " PV.TOTALEXENTA AS TOTALEXENTA, PV.TOTALGRAVADA AS TOTALGRAVADA, " & _
        " PV.TOTALIVA AS TOTALIVA, PV.ESTADO AS ESTADO, PV.TOTALDESCUENTO AS MONTODESCUENTO, " & _
        " (PV.TOTALEXENTA + PV.TOTALGRAVADA + PV.TOTALIVA - PV.TOTALDESCUENTO) AS TOTALFACTURA, " & _
        " PVD.CANTIDAD AS CANTIDAD, " & _
        " PVD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO, PVD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
        " PVD.CANTIDAD * PVD.PRECIOVENTABRUTO AS TOTALBRUTO, " & _
        " PVD.CANTIDAD * PVD.PRECIOVENTANETO AS TOTALNETO, " & _
        " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CODPRODUCTO AS CODPRODUCTO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(VE.NUMVENDEDOR) + ' - ' + RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(Z.DESZONA) AS ZONA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " CL.LIMCREDITO AS LIMITECREDITO, " & _
        " ISNULL(RTRIM(TC.NUMTIPOCOMPRO), '') AS NUMTIPOCOMPROVENTA, ISNULL(RTRIM(V.NUMVENTA), '') AS NUMVENTA " & _
        " FROM PRESUPUESTOVENTAS PV INNER JOIN TIPOCOMPROBANTE T ON PV.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON PV.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON PV.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON PV.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN CLIENTES CL ON PV.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " INNER JOIN PRESUPUESTOVENTASDETALLE PVD ON PV.CODPRESUPUESTO = PVD.CODPRESUPUESTO " & _
        " INNER JOIN PRODUCTOS P ON PVD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN VENTASPRESUPUESTO VP ON VP.CODPRESUPUESTO = PV.CODPRESUPUESTO " & _
        " LEFT OUTER JOIN VENTAS V ON VP.CODVENTA = V.CODVENTA " & _
        " LEFT OUTER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " WHERE PV.CODEMPRESA = " & empCodigo & " AND PV.ESTADO = 0 " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, CAST(PV.FECHAPRESUPUESTO AS DATETIME), NUMTIPOCOMPRO, NUMERO, LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo2") = dr("FECHAPRESUPUESTO")
                    row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo15") = dr("SUCURSAL")
                    row.Item("Campo17") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo6") = dr("VENDEDOR")
                    row.Item("Campo7") = dr("MONEDA")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Campo10") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo12") = dr("ZONA")
                    row.Item("Campo14") = dr("NUMCLIENTE")
                    row.Item("Numero1") = dr("COTIZACION")
                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("PRECIOVENTABRUTO")
                    row.Item("Numero4") = dr("PRECIOVENTANETO")

                    If total = 1 Then
                        row.Item("Numero13") = Math.Round(dr("TOTALBRUTO"), candecimales)
                    Else
                        row.Item("Numero13") = Math.Round(dr("TOTALNETO"), candecimales)
                    End If

                    row.Item("Numero6") = dr("TOTALEXENTA")
                    row.Item("Numero7") = dr("TOTALGRAVADA")
                    row.Item("Numero8") = dr("TOTALIVA")
                    row.Item("Numero9") = dr("MONTODESCUENTO")
                    row.Item("Numero10") = dr("TOTALFACTURA")
                    row.Item("Numero11") = dr("DESCUENTO")

                    row.Item("Campo13") = "NORMAL"

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero12") = dr("TOTALFACTURA")
                        row.Item("Numero5") = dr("TOTALNETO")
                    Else
                        row.Item("Numero12") = (dr("TOTALFACTURA") * dr("COTIZACION")) / cotizacion
                        row.Item("Numero5") = (dr("TOTALNETO") * dr("COTIZACION")) / cotizacion
                    End If

                    row.Item("Campo20") = dr("NUMTIPOCOMPROVENTA") & " " & dr("NUMVENTA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo20") = vend_descripcion_desde
                row.Item("Campo21") = vend_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo26") = zona_descripcion_desde
                row.Item("Campo27") = zona_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infRankingVentaCantidad(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeFamilia As String, ByVal hastaFamilia As String, _
    ByVal desdeLinea As String, ByVal hastaLinea As String, _
    ByVal desdeRubro As String, ByVal hastaRubro As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
    ByVal cantidad As Integer, ByVal orden As String, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, _
    ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal condiciones As String) As DataSet
        ds.Clear()

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = " SELECT TOP " & cantidad & " MAX(DESPRODUCTO) AS PRODUCTO, " & _
        " SUM(VD1.CANTIDADVENTA) AS CANTIDAD, MAX(RTRIM(U.DESMEDIDA)) AS UNIDAD, " & _
        " (SELECT CASE MAX(VD1.CANTIDADMINIMA) WHEN 0 THEN 0 ELSE SUM(VD1.CANTIDADENVASE) END) AS BOLSA, " & _
        " " & _
        " (ISNULL((SELECT SUM(VD.PRECIOVENTANETO * VD.CANTIDADVENTA * V.COTIZACION1) " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " AND VD.CODPRODUCTO = VD1.CODPRODUCTO), 0)) " & _
        " AS IMPORTENETO, " & _
        " " & _
        " " & _
        " (ISNULL((SELECT SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " AND VD.CANTIDADMINIMA = 0 " & _
        " AND VD.CODPRODUCTO = VD1.CODPRODUCTO), 0)) " & _
        " AS IMPORTEBRUTO " & _
        " " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD1 ON V.CODVENTA = VD1.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD1.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " GROUP BY VD1.CODPRODUCTO " & _
        " ORDER BY CANTIDAD " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("PRODUCTO")
                    row.Item("Campo2") = dr("UNIDAD")

                    row.Item("Numero1") = dr("CANTIDAD")
                    row.Item("Numero4") = dr("BOLSA")

                    total = total + CDec(dr("CANTIDAD"))

                    row.Item("Numero2") = dr("IMPORTENETO") / cotizacion
                    row.Item("Numero3") = dr("IMPORTEBRUTO") / cotizacion

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = PRODUCTO1
                row.Item("Campo3") = PRODUCTO2
                row.Item("Campo4") = PRODUCTO3
                row.Item("Campo5") = desdeSucursal
                row.Item("Campo6") = hastaSucursal
                row.Item("Campo7") = desdeFamilia
                row.Item("Campo8") = hastaFamilia
                row.Item("Campo9") = desdeLinea
                row.Item("Campo10") = hastaLinea
                row.Item("Campo11") = desdeRubro
                row.Item("Campo12") = hastaRubro
                row.Item("Campo19") = desdecategoria
                row.Item("Campo20") = hastacategoria
                row.Item("Campo21") = desdesubcategoria
                row.Item("Campo22") = hastasubcategoria
                row.Item("Campo23") = desdemarca
                row.Item("Campo24") = hastamarca
                row.Item("Campo13") = desdeProducto
                row.Item("Campo14") = hastaProducto
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                If orden = "ASC" Then
                    row.Item("campo18") = "Los " & cantidad.ToString & " menos vendidos"
                Else
                    row.Item("campo18") = "Los " & cantidad.ToString & " más vendidos"
                End If

                row.Item("Numero1") = total / cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infRankingVentaImporte(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeFamilia As String, ByVal hastaFamilia As String, _
    ByVal desdeLinea As String, ByVal hastaLinea As String, _
    ByVal desdeRubro As String, ByVal hastaRubro As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
    ByVal cantidad As Integer, ByVal orden As String, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, ByVal condiciones As String) As DataSet
        ds.Clear()

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = " SELECT TOP " & cantidad & " MAX(DESPRODUCTO) AS PRODUCTO, " & _
        " SUM(VD1.CANTIDADVENTA) AS CANTIDAD, MAX(RTRIM(U.DESMEDIDA)) AS UNIDAD, " & _
        " (SELECT CASE MAX(VD1.CANTIDADMINIMA) WHEN 0 THEN 0 ELSE SUM(VD1.CANTIDADENVASE) END) AS BOLSA, " & _
        " " & _
        " (ISNULL((SELECT SUM(VD.PRECIOVENTANETO * VD.CANTIDADVENTA * V.COTIZACION1) " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " AND VD.CODPRODUCTO = VD1.CODPRODUCTO), 0)) " & _
        " AS IMPORTENETO, " & _
        " " & _
        " " & _
        " (ISNULL((SELECT SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " AND VD.CODPRODUCTO = VD1.CODPRODUCTO), 0)) " & _
        " AS IMPORTEBRUTO " & _
        " " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD1 ON V.CODVENTA = VD1.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD1.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " GROUP BY VD1.CODPRODUCTO " & _
        " ORDER BY IMPORTEBRUTO " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("PRODUCTO")
                    row.Item("Campo2") = dr("UNIDAD")

                    row.Item("Numero1") = dr("CANTIDAD")

                    row.Item("Numero2") = dr("IMPORTENETO")
                    row.Item("Numero3") = dr("IMPORTEBRUTO")
                    row.Item("Numero4") = dr("BOLSA")

                    total = total + (dr("IMPORTEBRUTO") / cotizacion)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = PRODUCTO1
                row.Item("Campo3") = PRODUCTO2
                row.Item("Campo4") = PRODUCTO3
                row.Item("Campo5") = desdeSucursal
                row.Item("Campo6") = hastaSucursal
                row.Item("Campo7") = desdeFamilia
                row.Item("Campo8") = hastaFamilia
                row.Item("Campo9") = desdeLinea
                row.Item("Campo10") = hastaLinea
                row.Item("Campo11") = desdeRubro
                row.Item("Campo12") = hastaRubro
                row.Item("Campo19") = desdecategoria
                row.Item("Campo20") = hastacategoria
                row.Item("Campo21") = desdesubcategoria
                row.Item("Campo22") = hastasubcategoria
                row.Item("Campo23") = desdemarca
                row.Item("Campo24") = hastamarca
                row.Item("Campo13") = desdeProducto
                row.Item("Campo14") = hastaProducto
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                If orden = "ASC" Then
                    row.Item("campo18") = "Los " & cantidad.ToString & " menos vendidos"
                Else
                    row.Item("campo18") = "Los " & cantidad.ToString & " más vendidos"
                End If

                row.Item("Numero1") = total

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infRankingMejorHoraVenta(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeFamilia As String, ByVal hastaFamilia As String, _
    ByVal desdeLinea As String, ByVal hastaLinea As String, _
    ByVal desdeRubro As String, ByVal hastaRubro As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, _
    ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal condiciones As String) As DataSet
        ds.Clear()

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = " SELECT MAX(SUBSTRING(CONVERT(VARCHAR, V1.FECGRA, 108), 1, 2)) AS HORA, " & _
        " MAX(CAST(SUBSTRING(CONVERT(VARCHAR, V1.FECGRA, 108), 1, 2) AS NUMERIC(2))) AS HORAORDEN, " & _
        " " & _
        " (ISNULL((SELECT SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " AND CAST(SUBSTRING(CONVERT(VARCHAR, V.FECGRA, 108), 1, 2) AS NUMERIC(2)) " & _
        " = CAST(SUBSTRING(CONVERT(VARCHAR, V1.FECGRA, 108), 1, 2) AS NUMERIC(2))), 0)) " & _
        " AS TOTALHORA " & _
        " FROM VENTAS V1 " & _
        " GROUP BY CAST(SUBSTRING(CONVERT(VARCHAR, V1.FECGRA, 108), 1, 2) AS NUMERIC(2)) " & _
        " ORDER BY TOTALHORA DESC "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = "De " & dr("HORAORDEN") & " a " & (dr("HORA") + 1)

                    row.Item("Numero1") = dr("TOTALHORA") / cotizacion

                    total = total + (dr("TOTALHORA") / cotizacion)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = PRODUCTO1
                row.Item("Campo3") = PRODUCTO2
                row.Item("Campo4") = PRODUCTO3
                row.Item("Campo5") = desdeSucursal
                row.Item("Campo6") = hastaSucursal
                row.Item("Campo7") = desdeFamilia
                row.Item("Campo8") = hastaFamilia
                row.Item("Campo9") = desdeLinea
                row.Item("Campo10") = hastaLinea
                row.Item("Campo11") = desdeRubro
                row.Item("Campo12") = hastaRubro
                row.Item("Campo19") = desdecategoria
                row.Item("Campo20") = hastacategoria
                row.Item("Campo21") = desdesubcategoria
                row.Item("Campo22") = hastasubcategoria
                row.Item("Campo23") = desdemarca
                row.Item("Campo24") = hastamarca
                row.Item("Campo13") = desdeProducto
                row.Item("Campo14") = hastaProducto
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                row.Item("Numero1") = total

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infRankingMejorDiaVenta(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeFamilia As String, ByVal hastaFamilia As String, _
    ByVal desdeLinea As String, ByVal hastaLinea As String, _
    ByVal desdeRubro As String, ByVal hastaRubro As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, _
    ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, ByVal condiciones As String) As DataSet
        ds.Clear()

        Dim totalDomingo As Decimal
        Dim totalLunes As Decimal
        Dim totalMartes As Decimal
        Dim totalMiercoles As Decimal
        Dim totalJueves As Decimal
        Dim totalViernes As Decimal
        Dim totalSabado As Decimal

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = " SELECT CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHA, " & _
        " V.FECHAVENTA AS FECHAORDEN, " & _
        " SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) AS TOTALFECHA " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
        " AND V.ESTADO = 0 " & _
        " GROUP BY V.FECHAVENTA " & _
        " ORDER BY FECHAORDEN ASC "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Sunday Then
                        totalDomingo = totalDomingo + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If

                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Monday Then
                        totalLunes = totalLunes + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If

                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Tuesday Then
                        totalMartes = totalMartes + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If

                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Wednesday Then
                        totalMiercoles = totalMiercoles + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If

                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Thursday Then
                        totalJueves = totalJueves + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If

                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Friday Then
                        totalViernes = totalViernes + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If

                    If CDate(dr("FECHA")).DayOfWeek = DayOfWeek.Saturday Then
                        totalSabado = totalSabado + (CDec(dr("TOTALFECHA")) / cotizacion)
                    End If
                Loop

                'Un detalle para cada dia
                '''''''''''''''''''''''''
                'Domingo
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Domingo"

                row.Item("Numero1") = totalDomingo

                total = total + totalDomingo

                ds.Tables("Detalle").Rows.Add(row)

                'Lunes
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Lunes"

                row.Item("Numero1") = totalLunes

                total = total + totalLunes

                ds.Tables("Detalle").Rows.Add(row)

                'Martes
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Martes"

                row.Item("Numero1") = totalMartes

                total = total + totalMartes

                ds.Tables("Detalle").Rows.Add(row)

                'Miercoles
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Miércoles"

                row.Item("Numero1") = totalMiercoles

                total = total + totalMiercoles

                ds.Tables("Detalle").Rows.Add(row)

                'Jueves
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Jueves"

                row.Item("Numero1") = totalJueves

                total = total + totalJueves

                ds.Tables("Detalle").Rows.Add(row)

                'Viernes
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Viernes"

                row.Item("Numero1") = totalViernes

                total = total + totalViernes

                ds.Tables("Detalle").Rows.Add(row)

                'Sabado
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "Sabado"

                row.Item("Numero1") = totalSabado

                total = total + totalSabado

                ds.Tables("Detalle").Rows.Add(row)
                '''''''''''''''''''''''''

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = PRODUCTO1
                row.Item("Campo3") = PRODUCTO2
                row.Item("Campo4") = PRODUCTO3
                row.Item("Campo5") = desdeSucursal
                row.Item("Campo6") = hastaSucursal
                row.Item("Campo7") = desdeFamilia
                row.Item("Campo8") = hastaFamilia
                row.Item("Campo9") = desdeLinea
                row.Item("Campo10") = hastaLinea
                row.Item("Campo11") = desdeRubro
                row.Item("Campo12") = hastaRubro
                row.Item("Campo19") = desdecategoria
                row.Item("Campo20") = hastacategoria
                row.Item("Campo21") = desdesubcategoria
                row.Item("Campo22") = hastasubcategoria
                row.Item("Campo23") = desdemarca
                row.Item("Campo24") = hastamarca
                row.Item("Campo13") = desdeProducto
                row.Item("Campo14") = hastaProducto
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                row.Item("Numero1") = total

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infEnvase(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMENVASE)))+LTRIM(RTRIM(NUMENVASE)) AS NUMERO, " & _
              "NUMENVASE AS CODIGO, DESENVASE AS DESCRIPCION FROM ENVASE " & _
              "WHERE CODEMPRESA = " & empCodigo & " " & _
              "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpFormula(ByVal codFormula As Long, _
     ByVal canDecimales As Integer, _
     ByVal tipo As Byte) As DataSet
        Dim fecha As String
        Dim numero As String
        Dim producto As String
        Dim activo As String
        Dim moneda As String

        ds.Clear()

        sql = ""

        If tipo = 0 Then
            sql = " SELECT PF.CODFORMULA AS CODFORMULA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHAFORMULA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONFORMULA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONFORMULADETALLE PFD ON PFD.CODFORMULA = PF.CODFORMULA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODFORMULA = " & codFormula & " " & _
            " ORDER BY PFD.CODLINEA"
        Else
            sql = " SELECT PF.CODFORMULA AS CODFORMULA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHAFORMULA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONDERIVADOFORMULA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONDERIVADOFORMULADETALLE PFD ON PFD.CODFORMULA = PF.CODFORMULA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODFORMULA = " & codFormula & " " & _
            " ORDER BY PFD.CODLINEA"
        End If

        Try
            Dim rendimiento As Decimal

            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            rendimiento = 0

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                fecha = dr("FECHA")
                numero = dr("CODFORMULA")
                producto = dr("DESPRODUCTO")
                moneda = dr("DESMONEDA")
                activo = dr("ACTIVO")

                row.Item("Campo1") = dr("CODIGOBARRAMP")
                row.Item("Campo2") = dr("DESPRODUCTOMP")

                row.Item("Numero1") = dr("CANTIDAD")

                If dr("CODMONEDA") = dr("CODMONEDAMP") Then
                    row.Item("Numero2") = dr("COSTOPROMEDIO")
                    row.Item("Numero3") = Math.Round(dr("CANTIDAD") * dr("COSTOPROMEDIO"), canDecimales)
                Else
                    Dim cotizacionProducto As Decimal
                    Dim cotizacionMateriaPrima As Decimal
                    Dim costoPromedio As Decimal

                    cotizacionProducto = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                    dr("CODMONEDA"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                    cotizacionMateriaPrima = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                    dr("CODMONEDAMP"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                    costoPromedio = Math.Round((dr("COSTOPROMEDIO") * cotizacionMateriaPrima / cotizacionProducto), canDecimales)

                    row.Item("Numero2") = costoPromedio
                    row.Item("Numero3") = Math.Round(dr("CANTIDAD") * costoPromedio, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)

                rendimiento = dr("RENDIMIENTO")
            Loop
            dr.Close()

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = moneda
            row.Item("Campo4") = numero
            row.Item("Campo5") = fecha
            row.Item("Campo6") = producto
            row.Item("Campo7") = activo

            row.Item("NUMERO1") = rendimiento

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfFormula(ByVal canDecimales As Integer, _
       ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""

        If tipo = 0 Then
            sql = " SELECT PF.CODFORMULA AS CODFORMULA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHAFORMULA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONFORMULA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONFORMULADETALLE PFD ON PFD.CODFORMULA = PF.CODFORMULA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY PF.CODFORMULA, PFD.CODLINEA"
        Else
            sql = " SELECT PF.CODFORMULA AS CODFORMULA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHAFORMULA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONDERIVADOFORMULA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONDERIVADOFORMULADETALLE PFD ON PFD.CODFORMULA = PF.CODFORMULA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY PF.CODFORMULA, PFD.CODLINEA"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo9") = dr("CODFORMULA")
                    row.Item("Campo10") = dr("DESPRODUCTO")
                    row.Item("Campo2") = dr("FECHA")
                    row.Item("Campo6") = dr("DESMONEDA")
                    row.Item("Campo12") = dr("ACTIVO")
                    row.Item("Campo7") = dr("CODIGOBARRAMP")
                    row.Item("Campo8") = dr("DESPRODUCTOMP")
                    row.Item("Numero5") = dr("CANTIDAD")

                    If dr("CODMONEDA") = dr("CODMONEDAMP") Then
                        row.Item("Numero6") = dr("COSTOPROMEDIO")
                        row.Item("Numero7") = Math.Round(dr("CANTIDAD") * dr("COSTOPROMEDIO"), canDecimales)
                    Else
                        Dim cotizacionProducto As Decimal
                        Dim cotizacionMateriaPrima As Decimal
                        Dim costoPromedio As Decimal

                        cotizacionProducto = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                        dr("CODMONEDA"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                        cotizacionMateriaPrima = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                        dr("CODMONEDAMP"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                        costoPromedio = Math.Round((dr("COSTOPROMEDIO") * cotizacionMateriaPrima / cotizacionProducto), canDecimales)

                        row.Item("Numero6") = costoPromedio
                        row.Item("Numero7") = Math.Round(dr("CANTIDAD") * costoPromedio, canDecimales)
                    End If

                    row.Item("Numero1") = dr("RENDIMIENTO")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function



    Public Function infResumenComprasIVA(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal compra As Byte) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " /*COMPRAS DEL SISTEMA DE PROVEEDORES*/ " & _
        " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & _
        " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN MI.IMPUESTO END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN MI.IMPUESTO END), 0) AS IVA10, " & _
        " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN MAGICIVA MI ON C.CODCOMPRA = MI.CODCOMPRA " & _
        " INNER JOIN IVA I ON MI.CODIVA = I.CODIVA " & _
        " WHERE C.ESTADO = 5 " & _
        " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " UNION ALL " & _
        " /*COMPRAS DEL SISTEMA DE STOCK*/ " & _
        " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & _
        " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA10, " & _
        " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & _
        " WHERE C.ESTADO IS NULL  AND C.IMPORTACION = 0 " & _
        " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " UNION ALL " & _
        " /*COMPRAS DEL SISTEMA DE STOCK -  IMPORTACIONES */ " & _
        " SELECT DISTINCT C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & _
        " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, " & _
        " 0 AS IVA5, " & _
        " C.TOTALIVA AS IVA10, " & _
        " C.TOTALIVA, C.TOTALCOMPRA AS TOTALFACTURA " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE C.ESTADO IS NULL AND C.IMPORTACION = 1 " & _
        " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " ORDER BY NUMCOMPROBANTE, NUMPROVEEDOR, FECHAORDEN, NUMERO "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMPROVEEDOR")
                row.Item("Campo4") = dr("PROVEEDOR")
                row.Item("Campo7") = dr("CODCOMPRA")
                row.Item("Campo8") = dr("NUMCOMPROBANTE") + " - " + dr("DESCOMPROBANTE")
                row.Item("Campo9") = dr("NUMERO")
                row.Item("Campo10") = dr("FECHACOMPRA")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("TOTALGRAVADA")
                    row.Item("Numero3") = dr("IVA5")
                    row.Item("Numero4") = dr("IVA10")
                    row.Item("Numero5") = dr("TOTALIVA")
                    row.Item("Numero6") = dr("TOTALFACTURA")
                Else
                    row.Item("Numero1") = Math.Round(dr("TOTALEXENTA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(dr("TOTALGRAVADA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(dr("IVA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero4") = Math.Round(dr("IVA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero5") = Math.Round(dr("TOTALIVA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero6") = Math.Round(dr("TOTALFACTURA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeProveedor
            row.Item("Campo9") = hastaProveedor
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case compra
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenClienteEnvase(ByVal desdeCliente As String, ByVal hastaCliente As String, _
    ByVal desdeEnvase As String, ByVal hastaEnvase As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal condicionesVenta As String, _
    ByVal condicionesDevolucion As String) As DataSet
        ds.Clear()

        sql = ""
        'sql = " SELECT RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
        '" RTRIM(E.NUMENVASE) AS NUMENVASE, RTRIM(E.DESENVASE) AS ENVASE, " & _
        '" EC.CANTIDAD AS CANTIDAD " & _
        '" FROM ENVASECLIENTE EC INNER JOIN CLIENTES CL ON CL.CODCLIENTE = EC.CODCLIENTE " & _
        '" INNER JOIN ENVASE E ON E.CODENVASE = EC.CODENVASE " & _
        '" WHERE CANTIDAD > 0 " & condiciones & _
        '" ORDER BY CLIENTE, ENVASE "

        sql = " SELECT MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, " & _
        " MAX(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
        " MAX(RTRIM(E.NUMENVASE)) AS NUMENVASE, MAX(RTRIM(E.DESENVASE)) AS ENVASE, " & _
        " SUM(VE.CANTIDAD) AS CANTIDAD, 0 AS ORDEN " & _
        " FROM VENTAS V INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN VENTASDETALLE VD ON VD.CODVENTA = V.CODVENTA " & _
        " INNER JOIN VENTASENVASE VE ON VE.CODVENTA = VD.CODVENTA " & _
        " AND VE.CODPRODUCTO = VD.CODPRODUCTO " & _
        " AND VE.LINEANUMERO = VD.LINEANUMERO " & _
        " INNER JOIN ENVASE E ON E.CODENVASE = VE.CODENVASE " & _
        " WHERE V.CODEMPRESA = " & empCodigo & " " & _
        " AND V.ESTADO = 0 " & _
        " AND VE.CONTROLARSTOCK = 1 " & condicionesVenta & _
        " GROUP BY V.CODCLIENTE, VE.CODENVASE " & _
        " UNION ALL " & _
        " SELECT MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, " & _
        " MAX(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
        " MAX(RTRIM(E.NUMENVASE)) AS NUMENVASE, MAX(RTRIM(E.DESENVASE)) AS ENVASE, " & _
        " SUM(DD.CANTIDAD) AS CANTIDAD, 1 AS ORDEN " & _
        " FROM DEVOLUCIONENVASE D INNER JOIN CLIENTES CL ON CL.CODCLIENTE = D.CODCLIENTE " & _
        " INNER JOIN DEVOLUCIONENVASEDETALLE DD ON DD.CODDEVOLUCION = D.CODDEVOLUCION " & _
        " INNER JOIN ENVASE E ON E.CODENVASE = DD.CODENVASE " & _
        " WHERE D.CODEMPRESA = " & empCodigo & condicionesDevolucion & _
        " GROUP BY D.CODCLIENTE, DD.CODENVASE " & _
        " ORDER BY NUMCLIENTE, NUMENVASE, ORDEN "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMCLIENTE")
                    row.Item("Campo2") = dr("CLIENTE")
                    row.Item("Campo3") = dr("NUMENVASE")
                    row.Item("Campo4") = dr("ENVASE")

                    If dr("ORDEN") = 0 Then
                        row.Item("Numero1") = dr("CANTIDAD")
                    Else
                        row.Item("Numero2") = dr("CANTIDAD")
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = desdeCliente
                row.Item("Campo3") = hastaCliente
                row.Item("Campo4") = desdeEnvase
                row.Item("Campo5") = hastaEnvase
                row.Item("Campo6") = desdeFecha
                row.Item("Campo7") = hastaFecha

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infControlCargaDevolucionEnvase(ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        " RTRIM (D.NUMDEVOLUCION) AS NUMDEVOLUCION, " & _
        " RTRIM(RTRIM(CL.APELLIDO)+', '+RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
        " D.CODDEVOLUCION AS CODDEVOLUCION, " & _
        " REPLICATE('0',5-LEN(T.NUMTIPOCOMPRO))+LTRIM(RTRIM(T.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',10-LEN(D.NUMDEVOLUCION))+LTRIM(RTRIM(D.NUMDEVOLUCION)) AS NUMDEVOLUCIONORDEN, " & _
        " RTRIM(E.NUMENVASE) AS NUMENVASE, " & _
        " RTRIM(E.DESENVASE) AS DESENVASE, " & _
        " DD.CANTIDAD AS CANTIDAD " & _
        " FROM DEVOLUCIONENVASE D INNER JOIN DEVOLUCIONENVASEDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN TIPOCOMPROBANTE T ON D.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN ENVASE E ON DD.CODENVASE = E.CODENVASE " & _
        " WHERE D.CODEMPRESA = " & empCodigo & " " & condiciones & "" & _
        " ORDER BY  NUMTIPOCOMPROORDEN,NUMDEVOLUCIONORDEN, E.NUMENVASE "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMDEVOLUCION")
                    row.Item("Campo2") = dr("FECHADEVOLUCION")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo7") = dr("NUMENVASE")
                    row.Item("Campo8") = dr("DESENVASE")
                    row.Item("Numero5") = dr("CANTIDAD")
                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo
                row.Item("Campo1") = empDescripcion
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function ImpDevolucionEnvase(ByVal codDevolucion As Long) As DataSet
        Dim ii As Integer
        Dim dtDevolucionEnvase As DataTable

        Dim fecha As Date
        Dim cantidad As Integer
        Dim total As Integer
        Dim espacio As Integer

        ds.Clear()

        sql = ""
        sql = "/*CABECERA*/ " & _
        "SELECT RTRIM(D.NUMDEVOLUCION) AS NUMERO, " & _
        "CONVERT(VARCHAR(10), D.FECHADEVOLUCION, 103) AS FECHADEVOLUCION, " & _
        "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, " & _
        "RTRIM(CL.DIRECCION) AS DIRECCION, RTRIM(CL.CONDICIONVENTA) AS CONDICION, " & _
        "RTRIM(US.DESUSUARIO) AS USUARIO, " & _
        "/*DETALLE*/ " & _
        "DD.CANTIDAD, RTRIM(E.NUMENVASE) AS NUMENVASE, RTRIM(E.DESENVASE) AS DESENVASE " & _
        "FROM DEVOLUCIONENVASE D INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
        "INNER JOIN DEVOLUCIONENVASEDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "INNER JOIN ENVASE E ON DD.CODENVASE = E.CODENVASE " & _
        "INNER JOIN USUARIO US ON D.CODUSUARIO = US.CODUSUARIO " & _
        "AND US.CODEMPRESA = D.CODEMPRESA " & _
        "WHERE D.CODDEVOLUCION = " & codDevolucion & " " & _
        "ORDER BY E.NUMENVASE"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtDevolucionEnvase = New DataTable("DEVOLUCIONENVASE")

            da = New SqlDataAdapter(cmd)
            da.Fill(dtDevolucionEnvase)

            For ii = 0 To dtDevolucionEnvase.Rows.Count - 1
                row = ds.Tables("Detalle").NewRow()

                'Numero de Factura
                row.Item("Campo1") = 1
                row.Item("Campo2") = "( " & dtDevolucionEnvase.Rows(ii)("NUMERO") & " )"

                'Usuario que hizo la factura y hora de Venta
                row.Item("Campo10") = "( OPERADOR :" & dtDevolucionEnvase.Rows(ii)("USUARIO") & " )"

                'Fecha de Factura
                fecha = CDate(dtDevolucionEnvase.Rows(ii)("FECHADEVOLUCION"))

                'Datos del Cliente
                row.Item("Campo4") = funcion.Descripcion_Tabla("DIRECCION", "EMPRESA", "CODEMPRESA", empCodigo, empCodigo)
                row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                row.Item("Campo6") = dtDevolucionEnvase.Rows(ii)("CLIENTE") & " ( " & dtDevolucionEnvase.Rows(ii)("NUMCLIENTE") & " )"
                row.Item("Campo9") = dtDevolucionEnvase.Rows(ii)("CONDICION")
                If dtDevolucionEnvase.Rows(ii)("RUC") = "" Then
                    row.Item("Campo7") = dtDevolucionEnvase.Rows(ii)("NUMCEDULA")
                Else
                    row.Item("Campo7") = dtDevolucionEnvase.Rows(ii)("RUC")
                End If

                'Datos del Producto
                row.Item("Numero1") = dtDevolucionEnvase.Rows(ii)("CANTIDAD")
                row.Item("Campo3") = dtDevolucionEnvase.Rows(ii)("NUMENVASE")
                row.Item("Campo8") = dtDevolucionEnvase.Rows(ii)("DESENVASE")

                ds.Tables("Detalle").Rows.Add(row)

                cantidad = CInt(dtDevolucionEnvase.Rows(ii)("CANTIDAD"))
                total = total + cantidad
            Next

            espacio = 15 - dtDevolucionEnvase.Rows.Count

            For ii = 1 To espacio
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = 1
                row.Item("Campo8") = ""

                ds.Tables("Detalle").Rows.Add(row)
            Next

            'Para imprimir los totales
            row = ds.Tables("Detalle").NewRow()

            row.Item("Campo1") = 1
            row.Item("Campo8") = "PIE"
            row.Item("Numero9") = total

            ds.Tables("Detalle").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRangoClienteSinMovimiento(ByVal desdecliente As String, ByVal hastacliente As String, _
    ByVal desdevendedor As String, ByVal hastavendedor As String, _
    ByVal desdecobrador As String, ByVal hastacobrador As String, _
    ByVal desdetipocli As String, ByVal hastatipocli As String, _
    ByVal desdefecha As String, ByVal hastafecha As String, _
    ByVal condiciones As String, ByVal orden As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(CL.TELEFONO) AS TELEFONO, " & _
        " RTRIM(CL.FAX) AS FAX, " & _
        " RTRIM(CL.TELEFONO) AS CELULAR, " & _
        " RTRIM(CL.DIRECCION) AS DIRECCION, " & _
        " /*ULTIMA VENTA*/ " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10), MAX(V.FECHAVENTA), 103) " & _
        " FROM VENTAS V WHERE V.CODCLIENTE = CL.CODCLIENTE), '') AS ULTIMAVENTA, " & _
        " /*ULTIMO PAGO*/ " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10), MAX(C.FECHACOBRO), 103) " & _
        " FROM COBRANZAS C WHERE C.CODCLIENTE = CL.CODCLIENTE), '') AS ULTIMOPAGO, " & _
        " /*SALDO*/ " & _
        " ISNULL((SELECT SUM(FC.SALDOCUOTA) " & _
        " FROM FACTURACOBRAR FC INNER JOIN VENTAS V ON V.CODVENTA = FC.CODVENTA " & _
        " WHERE V.CODCLIENTE = CL.CODCLIENTE " & _
        " AND FC.SALDOCUOTA > 0), 0) AS SALDO " & _
        " FROM CLIENTES CL INNER JOIN TIPOCLIENTE TC ON TC.CODTIPOCLIENTE = CL.CODTIPOCLIENTE " & _
        " INNER JOIN VENDEDOR V ON V.CODVENDEDOR = CL.CODVENDEDOR " & _
        " INNER JOIN COBRADOR CO ON CO.CODCOBRADOR = CL.CODCOBRADOR " & _
        " WHERE " & _
        " /*QUE ESTE EN VENTAS*/ " & _
        " (SELECT COUNT(*) FROM VENTAS V " & _
        " WHERE V.CODCLIENTE = CL.CODCLIENTE " & _
        " AND V.FECHAVENTA <= CAST('" & hastafecha & "' AS DATETIME)) > 0 " & _
        " /*QUE NO HAYA COMPRADO EN UN RANGO DE FECHA*/ " & _
        " AND CL.CODCLIENTE NOT IN (SELECT DISTINCT CODCLIENTE " & _
        " FROM VENTAS WHERE FECHAVENTA BETWEEN CAST('" & desdefecha & "' AS DATETIME) AND CAST('" & hastafecha & "' AS DATETIME)) " & _
        " ORDER BY " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMCLIENTE")
                row.Item("Campo2") = dr("CLIENTE")
                row.Item("Campo3") = dr("DIRECCION")

                If dr("TELEFONO") <> "" Then
                    row.Item("Campo4") = dr("TELEFONO")
                ElseIf dr("FAX") <> "" Then
                    row.Item("Campo4") = dr("FAX")
                ElseIf dr("CELULAR") <> "" Then
                    row.Item("Campo4") = dr("CELULAR")
                Else
                    row.Item("Campo4") = ""
                End If

                row.Item("Campo5") = dr("ULTIMAVENTA")
                row.Item("Campo6") = dr("ULTIMOPAGO")

                If dr("SALDO") > 0 Then
                    row.Item("Campo7") = "SI"
                Else
                    row.Item("Campo7") = "NO"
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdecliente
            row.Item("Campo5") = hastacliente
            row.Item("Campo4") = desdefecha
            row.Item("Campo7") = hastafecha
            row.Item("Campo8") = desdetipocli
            row.Item("Campo9") = hastatipocli
            row.Item("Campo10") = desdecobrador
            row.Item("Campo11") = hastacobrador
            row.Item("Campo12") = desdevendedor
            row.Item("Campo13") = hastavendedor

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCargaOrdenProduccion(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
     ByVal desdeTipoComprobante As String, ByVal hastaTipoComprobante As String, _
     ByVal desdeNumero As String, ByVal hastaNumero As String, _
     ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
     ByVal desdeFecha As String, ByVal hastaFecha As String, _
     ByVal codMoneda As Long, ByVal moneda As String, ByVal cotizacion As String, _
     ByVal canDecimales As Integer, _
     ByVal condiciones As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALODEN, RTRIM(S.DESSUCURSAL) AS DESSUCURSALORDEN, " & _
        " CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(OP.NUMEROOP) AS NUMERO, " & _
        " RTRIM(PRO.APELLIDO) + ' ' + RTRIM(PRO.NOMBRE) AS PROVEEDOR, " & _
        " RTRIM(OP.OBSERVACION) AS OBSERVACION, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1, " & _
        " F.CODFORMULA, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        " OPD.CANTIDAD, OPD.COSTO, " & _
        " RTRIM(SMP.DESSUCURSAL) AS DESSUCURSALMATERIAPRIMA, " & _
        " RTRIM(PMP.CODIGOBARRA) AS CODIGOBARRAMATERIAPRIMA, " & _
        " RTRIM(PMP.DESPRODUCTO) AS DESPRODUCTOMATERIAPRIMA, " & _
        " OPMP.CANTIDAD AS CANTIDADMATERIAPRIMA, OPMP.COSTO AS COSTOMATERIAPRIMA " & _
        " , PIP.NUMCOMPROBANTE AS NUMINGRESO, CONVERT(VARCHAR(10), PIP.FECHACOMPROBANTE , 103) AS FECHAINGRESO, " & _
        " LTRIM(RTRIM(TCPI.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROINGRESO, LTRIM(RTRIM(TCPI.DESCOMPROBANTE)) AS DESCOMPROBANTEINGRESO " & _
        " FROM ORDENPRODUCCION OP INNER JOIN SUCURSAL S ON S.CODSUCURSAL = OP.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = OP.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = OP.CODMONEDA " & _
        " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN PRODUCCIONFORMULA F ON F.CODFORMULA = OPD.CODFORMULA " & _
        " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = OPD.CODPRODUCTO " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPMP ON OPD.CODORDENPRODUCCION = OPMP.CODORDENPRODUCCION " & _
        " LEFT OUTER JOIN PRODUCCIONINGRESOPRODUCTODET PIPD ON PIPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " LEFT OUTER JOIN PRODUCCIONINGRESOPRODUCTO PIP ON PIP.CODINGRESOPROTER = PIPD.CODINGRESOPROTER " & _
        " LEFT OUTER JOIN TIPOCOMPROBANTE TCPI ON TCPI.CODCOMPROBANTE = PIP.CODCOMPROBANTE   " & _
        " AND OPD.CODPRODUCTO = OPMP.CODPRODUCTO " & _
        " INNER JOIN SUCURSAL SMP ON SMP.CODSUCURSAL = OPMP.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS PMP ON PMP.CODPRODUCTO = OPMP.CODPRODUCTOMATERIAPRIMA " & _
        " WHERE OP.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " ORDER BY DESSUCURSALORDEN, CAST(OP.FECHAOP AS DATETIME), DESCOMPROBANTE, NUMERO, OPD.CODLINEA, OPMP.CODLINEA "


        'sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALODEN, RTRIM(S.DESSUCURSAL) AS DESSUCURSALORDEN, " & _
        '" CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
        '" RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        '" RTRIM(OP.NUMEROOP) AS NUMERO, " & _
        '" RTRIM(PRO.APELLIDO) + ' ' + RTRIM(PRO.NOMBRE) AS PROVEEDOR, " & _
        '" RTRIM(OP.OBSERVACION) AS OBSERVACION, " & _
        '" M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1, " & _
        '" F.CODFORMULA, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        '" OPD.CANTIDAD, OPD.COSTO, " & _
        '" RTRIM(SMP.DESSUCURSAL) AS DESSUCURSALMATERIAPRIMA, " & _
        '" RTRIM(PMP.CODIGOBARRA) AS CODIGOBARRAMATERIAPRIMA, " & _
        '" RTRIM(PMP.DESPRODUCTO) AS DESPRODUCTOMATERIAPRIMA, " & _
        '" OPMP.CANTIDAD AS CANTIDADMATERIAPRIMA, OPMP.COSTO AS COSTOMATERIAPRIMA " & _
        '" FROM ORDENPRODUCCION OP INNER JOIN SUCURSAL S ON S.CODSUCURSAL = OP.CODSUCURSAL " & _
        '" INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
        '" INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = OP.CODPROVEEDOR " & _
        '" INNER JOIN MONEDA M ON M.CODMONEDA = OP.CODMONEDA " & _
        '" INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        '" INNER JOIN PRODUCCIONFORMULA F ON F.CODFORMULA = OPD.CODFORMULA " & _
        '" INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = OPD.CODPRODUCTO " & _
        '" INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPMP ON OPD.CODORDENPRODUCCION = OPMP.CODORDENPRODUCCION " & _
        '" AND OPD.CODPRODUCTO = OPMP.CODPRODUCTO " & _
        '" INNER JOIN SUCURSAL SMP ON SMP.CODSUCURSAL = OPMP.CODSUCURSAL " & _
        '" INNER JOIN PRODUCTOS PMP ON PMP.CODPRODUCTO = OPMP.CODPRODUCTOMATERIAPRIMA " & _
        '" WHERE OP.CODEMPRESA = " & empCodigo & " " & condiciones & _
        '" ORDER BY DESSUCURSALORDEN, CAST(OP.FECHAOP AS DATETIME), DESCOMPROBANTE, NUMERO, OPD.CODLINEA, OPMP.CODLINEA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo2") = dr("DESSUCURSALORDEN")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("NUMTIPOCOMPRO") & " " & dr("DESCOMPROBANTE")
                row.Item("Campo6") = dr("NUMERO")
                row.Item("Campo8") = dr("PROVEEDOR")
                row.Item("Campo13") = dr("OBSERVACION")
                row.Item("Campo12") = dr("DESMONEDA")
                row.Item("Numero5") = dr("COTIZACION1")
                row.Item("Campo7") = dr("CODFORMULA")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESPRODUCTO")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("COSTO")
                row.Item("Numero3") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                row.Item("Campo14") = dr("DESSUCURSALMATERIAPRIMA")

                row.Item("Campo20") = dr("NUMTIPOCOMPROINGRESO") & " " & dr("DESCOMPROBANTEINGRESO")
                row.Item("Campo21") = dr("NUMINGRESO")
                row.Item("Campo22") = dr("FECHAINGRESO")

                row.Item("Campo15") = dr("CODIGOBARRAMATERIAPRIMA")
                row.Item("Campo16") = dr("DESPRODUCTOMATERIAPRIMA")
                row.Item("Numero6") = dr("CANTIDADMATERIAPRIMA")
                row.Item("Numero7") = dr("COSTOMATERIAPRIMA")
                row.Item("Numero8") = Math.Round(dr("CANTIDADMATERIAPRIMA") * dr("COSTOMATERIAPRIMA"), canDecimales)

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero9") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                Else
                    row.Item("Numero9") = Math.Round(dr("CANTIDAD") * dr("COSTO") * dr("COTIZACION1") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo3") = desdeSucursal
            row.Item("Campo5") = hastaSucursal
            row.Item("Campo7") = desdeTipoComprobante
            row.Item("Campo9") = hastaTipoComprobante
            row.Item("Campo10") = desdeNumero
            row.Item("Campo11") = hastaNumero
            row.Item("Campo13") = desdeProveedor
            row.Item("Campo15") = hastaProveedor
            row.Item("Campo16") = desdeFecha
            row.Item("Campo17") = hastaFecha
            row.Item("Campo18") = moneda

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function ImpOrdenProduccion(ByVal codOrdenProduccion As Long, ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALODEN, RTRIM(S.DESSUCURSAL) AS DESSUCURSALORDEN, " & _
        " CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(OP.NUMEROOP) AS NUMERO, " & _
        " RTRIM(PRO.APELLIDO) + ' ' + RTRIM(PRO.NOMBRE) AS PROVEEDOR, " & _
        " RTRIM(OP.OBSERVACION) AS OBSERVACION, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1, " & _
        " F.CODFORMULA, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        " OPD.CANTIDAD, OPD.COSTO, " & _
        " RTRIM(SMP.DESSUCURSAL) AS DESSUCURSALMATERIAPRIMA, " & _
        " RTRIM(PMP.CODIGOBARRA) AS CODIGOBARRAMATERIAPRIMA, " & _
        " RTRIM(PMP.DESPRODUCTO) AS DESPRODUCTOMATERIAPRIMA, " & _
        " OPMP.CANTIDAD AS CANTIDADMATERIAPRIMA, OPMP.COSTO AS COSTOMATERIAPRIMA " & _
        " FROM ORDENPRODUCCION OP INNER JOIN SUCURSAL S ON S.CODSUCURSAL = OP.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = OP.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = OP.CODMONEDA " & _
        " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN PRODUCCIONFORMULA F ON F.CODFORMULA = OPD.CODFORMULA " & _
        " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = OPD.CODPRODUCTO " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPMP ON OPD.CODORDENPRODUCCION = OPMP.CODORDENPRODUCCION " & _
        " AND OPD.CODPRODUCTO = OPMP.CODPRODUCTO " & _
        " INNER JOIN SUCURSAL SMP ON SMP.CODSUCURSAL = OPMP.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS PMP ON PMP.CODPRODUCTO = OPMP.CODPRODUCTOMATERIAPRIMA " & _
        " WHERE OP.CODORDENPRODUCCION = " & codOrdenProduccion & " " & _
        " ORDER BY DESSUCURSALORDEN, CAST(OP.FECHAOP AS DATETIME), DESCOMPROBANTE, NUMERO, OPD.CODLINEA, OPMP.CODLINEA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo2") = dr("DESSUCURSALORDEN")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("DESCOMPROBANTE")
                row.Item("Campo6") = dr("NUMERO")
                row.Item("Campo8") = dr("PROVEEDOR")
                row.Item("Campo13") = dr("OBSERVACION")
                row.Item("Campo12") = dr("DESMONEDA")
                row.Item("Numero5") = dr("COTIZACION1")
                row.Item("Campo7") = dr("CODFORMULA")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESPRODUCTO")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("COSTO")
                row.Item("Numero3") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                row.Item("Campo14") = dr("DESSUCURSALMATERIAPRIMA")

                row.Item("Campo15") = dr("CODIGOBARRAMATERIAPRIMA")
                row.Item("Campo16") = dr("DESPRODUCTOMATERIAPRIMA")
                row.Item("Numero6") = dr("CANTIDADMATERIAPRIMA")
                row.Item("Numero7") = dr("COSTOMATERIAPRIMA")
                row.Item("Numero8") = Math.Round(dr("CANTIDADMATERIAPRIMA") * dr("COSTOMATERIAPRIMA"), canDecimales)

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoProduccion(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal sucursal_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_hasta As String, _
    ByVal proveedor_desde As String, ByVal proveedor_hasta As String, _
    ByVal producto_desde As String, ByVal producto_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    Optional ByVal condiciones As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        "CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
        "RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        "RTRIM (OP.NUMEROOP) AS NUMERO, " & _
        "M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, OP.COTIZACION1 AS COTIZACION, " & _
        "RTRIM(PR.CODIGOBARRA) AS CODIGO, RTRIM(PR.DESPRODUCTO) AS DESCRIPCION, OPM.CANTIDAD AS CANTIDAD, " & _
        "OPM.COSTO AS COSTO, " & _
        "OP.OBSERVACION AS OBSERVACION, " & _
        "RTRIM(P.APELLIDO)+' '+RTRIM(P.NOMBRE) AS PROVEEDOR " & _
        "FROM ORDENPRODUCCION OP INNER JOIN MONEDA M ON OP.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN TIPOCOMPROBANTE T ON OP.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        "INNER JOIN PROVEEDOR P ON OP.CODPROVEEDOR = P.CODPROVEEDOR " & _
        "INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OP.CODORDENPRODUCCION = OPD.CODORDENPRODUCCION " & _
        "INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPM ON OPD.CODORDENPRODUCCION = OPM.CODORDENPRODUCCION " & _
        "AND OPD.CODPRODUCTO = OPM.CODPRODUCTO " & _
        "INNER JOIN SUCURSAL S ON OPM.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN PRODUCTOS PR ON OPM.CODPRODUCTOMATERIAPRIMA = PR.CODPRODUCTO " & _
        "WHERE OP.CODEMPRESA = " & empCodigo & " " & condiciones & _
        "ORDER BY NUMSUCURSAL, CODIGOBARRA, NUMMONEDA, CAST(FECHAOP AS DATETIME), NUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("FECHA")
                row.Item("Campo3") = dr("NUMCOMPROBANTE")
                row.Item("Campo4") = dr("NUMERO")
                row.Item("Campo5") = dr("PROVEEDOR")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("COSTO")
                row.Item("Numero7") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                Else
                    row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTO") * dr("COTIZACION") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = sucursal_desde
            row.Item("Campo3") = sucursal_hasta
            row.Item("Campo4") = comprobante_desde
            row.Item("Campo5") = comprobante_hasta
            row.Item("Campo8") = proveedor_desde
            row.Item("Campo9") = proveedor_hasta
            row.Item("Campo10") = producto_desde
            row.Item("Campo12") = producto_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo6") = "Materia Prima"
            row.Item("Campo28") = moneda_informe

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function ImpIngresoProducto(ByVal codIngresoProducto As Long, ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT PIP.CODINGRESOPROTER, RTRIM(PIP.NUMCOMPROBANTE) AS NUMCOMPROBANTE, CONVERT(VARCHAR(10), PIP.FECHACOMPROBANTE, 103) AS FECHA, " & _
        "T.CODCOMPROBANTE, RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        "S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        "P.CODPROVEEDOR, RTRIM(P.NUMPROVEEDOR) AS NUMPROVEEDOR, RTRIM(RTRIM(P.APELLIDO)+' '+RTRIM(P.NOMBRE)) AS DESPROVEEDOR, " & _
        "PR.CODPRODUCTO, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTO, " & _
        "PIPD.CANTIDAD, PIPD.COSTO, PIPD.CANTIDAD * PIPD.COSTO AS TOTAL, " & _
        "RTRIM(OP.NUMEROOP) AS NUMERO, TC.CODCOMPROBANTE, RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTEORDEN, " & _
        "RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTEORDEN, M.DESMONEDA, PIP.COTIZACION1 " & _
        "FROM PRODUCCIONINGRESOPRODUCTO PIP INNER JOIN TIPOCOMPROBANTE T ON PIP.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        "INNER JOIN SUCURSAL S ON PIP.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN PROVEEDOR P ON PIP.CODPROVEEDOR = P.CODPROVEEDOR " & _
        "INNER JOIN MONEDA M ON M.CODMONEDA = PIP.CODMONEDA " & _
        "INNER JOIN PRODUCCIONINGRESOPRODUCTODET PIPD ON PIPD.CODINGRESOPROTER = PIP.CODINGRESOPROTER " & _
        "INNER JOIN PRODUCTOS PR ON PIPD.CODPRODUCTO = PR.CODPRODUCTO " & _
        "INNER JOIN ORDENPRODUCCION OP ON PIPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        "INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
        "WHERE PIP.CODINGRESOPROTER = " & codIngresoProducto & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("DESCOMPROBANTE")
                row.Item("Campo6") = dr("NUMERO")
                row.Item("Campo8") = dr("DESPROVEEDOR")
                row.Item("Campo12") = dr("DESMONEDA")
                row.Item("Campo14") = dr("NUMCOMPROBANTEORDEN") + " - " + dr("NUMERO")
                row.Item("Numero5") = dr("COTIZACION1")

                row.Item("Campo15") = dr("CODIGOBARRA")
                row.Item("Campo16") = dr("DESPRODUCTO")
                row.Item("Numero6") = dr("CANTIDAD")
                row.Item("Numero7") = dr("COSTO")
                row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCargaIngresoProduccion(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
   ByVal desdeTipoComprobante As String, ByVal hastaTipoComprobante As String, _
   ByVal desdeNumero As String, ByVal hastaNumero As String, _
   ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
   ByVal desdeFecha As String, ByVal hastaFecha As String, _
   ByVal codMoneda As Long, ByVal moneda As String, ByVal cotizacion As String, ByVal canDecimales As Integer, _
   ByVal condiciones As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT IP.CODINGRESOPROTER, IP.NUMCOMPROBANTE, CONVERT(VARCHAR(10), IP.FECHACOMPROBANTE, 103) AS FECHA, " & _
        " T.CODCOMPROBANTE, RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTEIP, RTRIM(T.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " P.CODPROVEEDOR, RTRIM(P.NUMPROVEEDOR) AS NUMPROVEEDOR, RTRIM(RTRIM(P.APELLIDO)+' '+RTRIM(P.NOMBRE)) AS DESPROVEEDOR, " & _
        " PR.CODPRODUCTO, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTO, " & _
        " IP.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, IP.COTIZACION1 AS COTIZACION, " & _
        " IPD.CANTIDAD, IPD.COSTO, RTRIM(OP.NUMEROOP) AS NUMEROOP, RTRIM(TP.NUMTIPOCOMPRO) AS NUMCOMPROBANTEOP " & _
        " FROM PRODUCCIONINGRESOPRODUCTO IP INNER JOIN TIPOCOMPROBANTE T ON IP.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON IP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR P ON IP.CODPROVEEDOR = P.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON IP.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN PRODUCCIONINGRESOPRODUCTODET IPD ON IPD.CODINGRESOPROTER = IP.CODINGRESOPROTER " & _
        " INNER JOIN PRODUCTOS PR ON IPD.CODPRODUCTO = PR.CODPRODUCTO " & _
        " INNER JOIN ORDENPRODUCCION OP ON IPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN TIPOCOMPROBANTE TP ON OP.CODCOMPROBANTE = TP.CODCOMPROBANTE " & _
        " WHERE IP.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " ORDER BY NUMSUCURSAL, IP.FECHACOMPROBANTE, NUMCOMPROBANTEIP, IP.NUMCOMPROBANTE "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo4") = dr("NUMCOMPROBANTEIP")
                row.Item("Campo5") = dr("DESCOMPROBANTE")
                row.Item("Campo6") = dr("NUMCOMPROBANTE")
                row.Item("Campo7") = dr("NUMPROVEEDOR")
                row.Item("Campo8") = dr("DESPROVEEDOR")

                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESPRODUCTO")
                row.Item("Campo11") = dr("NUMMONEDA")
                row.Item("Campo12") = dr("DESMONEDA")

                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("COSTO")
                row.Item("Numero3") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                row.Item("Numero5") = dr("COTIZACION")

                row.Item("Campo13") = dr("NUMCOMPROBANTEOP") + " - " + dr("NUMEROOP")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero4") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                Else
                    row.Item("Numero4") = Math.Round(dr("CANTIDAD") * dr("COSTO") * dr("COTIZACION") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo3") = desdeSucursal
            row.Item("Campo5") = hastaSucursal
            row.Item("Campo7") = desdeTipoComprobante
            row.Item("Campo9") = hastaTipoComprobante
            row.Item("Campo10") = desdeNumero
            row.Item("Campo11") = hastaNumero
            row.Item("Campo13") = desdeProveedor
            row.Item("Campo15") = hastaProveedor
            row.Item("Campo16") = desdeFecha
            row.Item("Campo17") = hastaFecha
            row.Item("Campo18") = moneda

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCargaComprasFormaPago(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, _
    ByVal tipoCosto As Byte, ByVal agrupar As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " /*EFECTIVO  Y OTROS*/ " & _
        " SELECT C.CODCOMPRA AS CODCOMPRA, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(TC.NUMTIPOCOMPRO))+LTRIM(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',20-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPROBANTE, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(C.NUMCOMPRA) AS NUMCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " C.CODMONEDA AS CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        " C.TOTALGRAVADA AS TOTALGRAVADA, C.TOTALGRAVADA * C.COTIZACION1  AS TOTALGRAVADAINFORME, " & _
        " C.TOTALEXENTA AS TOTALEXENTA, C.TOTALEXENTA * C.COTIZACION1 AS TOTALEXENTAINFORME, " & _
        " C.TOTALIVA AS TOTALIVA, C.TOTALIVA * C.COTIZACION1 AS TOTALIVA, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, C.TOTALCOMPRA * C.COTIZACION1 AS TOTALCOMPRAINFORME, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, C.TOTALDESCUENTO * C.COTIZACION1 AS TOTALDESCUENTO, " & _
        " RTRIM(TP.NUMTIPOPAGO) AS NUMTIPOPAGO, RTRIM(TP.DESTIPOPAGO) AS DESTIPOPAGO, " & _
        " '' AS NUMERO, '' AS NUMCUENTA, " & _
        " '' AS DESBANCO, '' AS FECHAVENCIMIENTO, " & _
        " (FP.IMPORTE * FP.COTIZACION1) / C.COTIZACION1  AS IMPORTE, " & _
        " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
        " C.MODALIDADPAGO, C.COTIZACION1 AS COTIZACION " & _
        " FROM COMPRAS C " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASFORMAPAGO FP ON C.CODCOMPRA = FP.CODCOMPRA " & _
        " INNER JOIN TIPOPAGO TP ON FP.CODTIPOPAGO = TP.CODTIPOPAGO " & _
        " AND (SELECT COUNT(CODPAGO) FROM COMPRASCHEQUESEMITIDOS WHERE CODPAGO = FP.CODPAGO AND CODCOMPRA = C.CODCOMPRA) = 0 " & _
        " AND (SELECT COUNT(CODPAGO) FROM COMPRASTARJETAS WHERE CODPAGO = FP.CODPAGO AND CODCOMPRA = C.CODCOMPRA) = 0 " & _
        " AND (SELECT COUNT(CODPAGO) FROM COMPRASNOTACREDITO WHERE CODPAGO = FP.CODPAGO AND CODCOMPRA = C.CODCOMPRA) = 0 " & _
        " WHERE C.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " UNION ALL /*CHEQUES*/ " & _
        " SELECT C.CODCOMPRA AS CODCOMPRA, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(TC.NUMTIPOCOMPRO))+LTRIM(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',20-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPROBANTE, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(C.NUMCOMPRA) AS NUMCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " C.CODMONEDA AS CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        " C.TOTALGRAVADA AS TOTALGRAVADA, C.TOTALGRAVADA * C.COTIZACION1  AS TOTALGRAVADAINFORME, " & _
        " C.TOTALEXENTA AS TOTALEXENTA, C.TOTALEXENTA * C.COTIZACION1 AS TOTALEXENTAINFORME, " & _
        " C.TOTALIVA AS TOTALIVA, C.TOTALIVA * C.COTIZACION1 AS TOTALIVA, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, C.TOTALCOMPRA * C.COTIZACION1 AS TOTALCOMPRAINFORME, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, C.TOTALDESCUENTO * C.COTIZACION1 AS TOTALDESCUENTO, " & _
        " RTRIM(TP.NUMTIPOPAGO) AS NUMTIPOPAGO, RTRIM(TP.DESTIPOPAGO) AS DESTIPOPAGO, " & _
        " 'Numero = ' + CONVERT(VARCHAR,D.NUMBOLETA) AS NUMERO, 'Cuenta = ' + ISNULL(RTRIM(D.NUMCUENTA),'') AS NUMCUENTA, " & _
        " 'Banco = ' + ISNULL(RTRIM(B.DESBANCO),'') AS DESBANCO, 'Vcto = ' + ISNULL(CONVERT(VARCHAR(10),D.FECHAVENCIMIENTO,103),'') AS FECHAVENCIMIENTO, " & _
        " (FP.IMPORTE * FP.COTIZACION1) / C.COTIZACION1  AS IMPORTE, " & _
        " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
        " C.MODALIDADPAGO, C.COTIZACION1 AS COTIZACION " & _
        " FROM COMPRAS C " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASFORMAPAGO FP ON C.CODCOMPRA = FP.CODCOMPRA " & _
        " INNER JOIN TIPOPAGO TP ON FP.CODTIPOPAGO = TP.CODTIPOPAGO " & _
        " INNER JOIN COMPRASCHEQUESEMITIDOS CHE ON CHE.CODPAGO = FP.CODPAGO AND CHE.CODCOMPRA = FP.CODCOMPRA " & _
        " INNER JOIN DEBITOS D ON CHE.CODDEBITO = D.CODDEBITO " & _
        " INNER JOIN BANCO B ON D.CODBANCO = B.CODBANCO " & _
        " WHERE C.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " UNION ALL /*TARJETAS*/ " & _
        " SELECT C.CODCOMPRA AS CODCOMPRA, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(TC.NUMTIPOCOMPRO))+LTRIM(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',20-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPROBANTE, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(C.NUMCOMPRA) AS NUMCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " C.CODMONEDA AS CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        " C.TOTALGRAVADA AS TOTALGRAVADA, C.TOTALGRAVADA * C.COTIZACION1  AS TOTALGRAVADAINFORME, " & _
        " C.TOTALEXENTA AS TOTALEXENTA, C.TOTALEXENTA * C.COTIZACION1 AS TOTALEXENTAINFORME, " & _
        " C.TOTALIVA AS TOTALIVA, C.TOTALIVA * C.COTIZACION1 AS TOTALIVA, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, C.TOTALCOMPRA * C.COTIZACION1 AS TOTALCOMPRAINFORME, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, C.TOTALDESCUENTO * C.COTIZACION1 AS TOTALDESCUENTO, " & _
        " RTRIM(TP.NUMTIPOPAGO) AS NUMTIPOPAGO, RTRIM(TP.DESTIPOPAGO) AS DESTIPOPAGO, " & _
        " 'Numero = ' + RTRIM(CT.NUMTARJETA) AS NUMERO, '' AS NUMCUENTA, " & _
        " 'Tarjeta = ' + ISNULL(RTRIM(TT.DESTARJETA),'') AS DESBANCO, '' AS FECHAVENCIMIENTO, " & _
        " (FP.IMPORTE * FP.COTIZACION1) / C.COTIZACION1  AS IMPORTE, " & _
        " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
        " C.MODALIDADPAGO, C.COTIZACION1 AS COTIZACION " & _
        " FROM COMPRAS C " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASFORMAPAGO FP ON C.CODCOMPRA = FP.CODCOMPRA " & _
        " INNER JOIN TIPOPAGO TP ON FP.CODTIPOPAGO = TP.CODTIPOPAGO " & _
        " INNER JOIN COMPRASTARJETAS CT ON FP.CODPAGO = CT.CODPAGO AND FP.CODCOMPRA = CT.CODCOMPRA " & _
        " INNER JOIN TIPOTARJETA TT ON CT.CODTARJETA = TT.CODTARJETA " & _
        " WHERE C.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " UNION ALL /*NOTA DE CREDITO*/ " & _
        " SELECT C.CODCOMPRA AS CODCOMPRA, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(TC.NUMTIPOCOMPRO))+LTRIM(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',20-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPROBANTE, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(C.NUMCOMPRA) AS NUMCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " C.CODMONEDA AS CODMONEDA,  RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        " C.TOTALGRAVADA AS TOTALGRAVADA, C.TOTALGRAVADA * C.COTIZACION1  AS TOTALGRAVADAINFORME, " & _
        " C.TOTALEXENTA AS TOTALEXENTA, C.TOTALEXENTA * C.COTIZACION1 AS TOTALEXENTAINFORME, " & _
        " C.TOTALIVA AS TOTALIVA, C.TOTALIVA * C.COTIZACION1 AS TOTALIVA, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, C.TOTALCOMPRA * C.COTIZACION1 AS TOTALCOMPRAINFORME, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, C.TOTALDESCUENTO * C.COTIZACION1 AS TOTALDESCUENTO, " & _
        " RTRIM(TP.NUMTIPOPAGO) AS NUMTIPOPAGO, RTRIM(TP.DESTIPOPAGO) AS DESTIPOPAGO, " & _
        " 'Numero = ' + CONVERT(VARCHAR, NC.NUMNOTACREDITO) AS NUMERO, '' AS NUMCUENTA, " & _
        " '' AS DESBANCO, '' AS FECHAVENCIMIENTO, " & _
        " (FP.IMPORTE * FP.COTIZACION1) / C.COTIZACION1  AS IMPORTE, " & _
        " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
        " C.MODALIDADPAGO, C.COTIZACION1 AS COTIZACION " & _
        " FROM COMPRAS C " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASFORMAPAGO FP ON C.CODCOMPRA = FP.CODCOMPRA " & _
        " INNER JOIN TIPOPAGO TP ON FP.CODTIPOPAGO = TP.CODTIPOPAGO " & _
        " INNER JOIN COMPRASNOTACREDITO NC ON FP.CODPAGO = NC.CODPAGO AND FP.CODCOMPRA = NC.CODCOMPRA " & _
        " WHERE C.CODEMPRESA =  " & empCodigo & " " & condiciones & " "

        If agrupar = 0 Then
            sql = sql & " ORDER BY NUMSUCURSALORDEN, NUMTIPOCOMPROORDEN, NUMCOMPRA, NUMTIPOPAGO, NUMERO "
        Else
            sql = sql & " ORDER BY C.CODCOMPRA, NUMTIPOPAGO, NUMERO "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo3") = dr("NUMTIPOCOMPROBANTE")
                    row.Item("Campo17") = dr("DESCOMPROBANTE")
                    row.Item("Campo18") = dr("CODCOMPRA")
                    row.Item("Campo4") = dr("NUMCOMPRA")
                    row.Item("Campo7") = dr("NUMTIPOPAGO")
                    row.Item("Campo9") = "0"
                    row.Item("Campo2") = dr("FECHACOMPRA")
                    row.Item("Campo5") = dr("PROVEEDOR")
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("TOTALGRAVADA")
                    row.Item("Numero3") = dr("TOTALIVA")
                    row.Item("Campo6") = dr("DESMONEDA")
                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Campo8") = dr("DESTIPOPAGO")
                    row.Item("Numero8") = dr("TOTALDESCUENTO")
                    row.Item("Numero9") = dr("TOTALCOMPRA")
                    row.Item("Campo13") = dr("NUMERO")
                    row.Item("Campo14") = dr("NUMCUENTA")
                    row.Item("Campo15") = dr("DESBANCO")
                    row.Item("Campo16") = dr("FECHAVENCIMIENTO")
                    row.Item("Numero7") = dr("IMPORTE")

                    If dr("MODALIDADPAGO") = "0" Then
                        row.Item("Campo12") = "Contado"
                    Else
                        row.Item("Campo12") = "Crédito"
                    End If

                    If dr("CODMONEDA") = moneda_informe Then
                        row.Item("Numero10") = dr("TOTALCOMPRA")
                    Else
                        row.Item("Numero10") = Math.Round(dr("TOTALCOMPRAINFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo26") = moneda_descripcion_desde
                row.Item("Campo27") = moneda_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta
                row.Item("Campo28") = moneda_descripcion
                row.Item("Campo29") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function ImpTransferenciaProducto(ByVal codTransferencia As Long, ByVal totalBruto As Decimal) As DataSet
        Dim ii As Integer
        Dim dtTransferencia As DataTable

        Dim fecha As Date
        Dim cantidad As Integer
        Dim espacio As Integer

        ds.Clear()

        sql = ""
        sql = "/*CABECERA*/ " & _
        "SELECT RTRIM(T.NUMTRANSFERENCIA) AS NUMERO, " & _
        "CONVERT(VARCHAR(10), T.FECHATRANSFERENCIA, 103) AS FECHATRANSFERENCIA, " & _
        "RTRIM(SD.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(SD.DESSUCURSAL) AS SUCURSAL, " & _
        "RTRIM(US.DESUSUARIO) AS USUARIO, " & _
        "/*DETALLE*/ " & _
        "TD.CANTIDADBRUTA AS CANTIDADBRUTA, TD.CANTIDADTRANFERENCIA AS CANTIDAD, TD.CANTIDADMINIMA, TD.CANTIDADENVASE, " & _
        "TD.CODPRODUCTO, TD.LINEANUMERO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
        "FROM TRANFERENCIA T INNER JOIN SUCURSAL SD ON SD.CODSUCURSAL = T.SUCURSALDESTINO " & _
        "INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA = T.CODTRANSFERENCIA " & _
        "INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = TD.CODPRODUCTO " & _
        "INNER JOIN USUARIO US ON US.CODUSUARIO = T.CODUSUARIO " & _
        "AND T.CODEMPRESA = US.CODEMPRESA " & _
        "WHERE T.CODTRANSFERENCIA = " & codTransferencia & " " & _
        "ORDER BY TD.LINEANUMERO"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtTransferencia = New DataTable("TRANSFERENCIA")

            da = New SqlDataAdapter(cmd)
            da.Fill(dtTransferencia)

            For ii = 0 To dtTransferencia.Rows.Count - 1
                row = ds.Tables("Detalle").NewRow()

                'Numero de Factura
                row.Item("Campo1") = 1
                row.Item("Campo2") = "( " & dtTransferencia.Rows(ii)("NUMERO") & " )"

                'Usuario que hizo la factura y hora de Venta
                row.Item("Campo10") = "( OPERADOR :" & dtTransferencia.Rows(ii)("USUARIO") & " )"

                'Fecha de Factura
                fecha = CDate(dtTransferencia.Rows(ii)("FECHATRANSFERENCIA"))

                'Datos del Cliente
                row.Item("Campo4") = funcion.Descripcion_Tabla("DIRECCION", "EMPRESA", "CODEMPRESA", empCodigo, empCodigo)
                row.Item("Campo5") = fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                row.Item("Campo6") = dtTransferencia.Rows(ii)("SUCURSAL") & " ( " & dtTransferencia.Rows(ii)("NUMSUCURSAL") & " )"
                row.Item("Campo9") = "EFECTIVO/CHEQUE AL DIA"
                row.Item("Campo7") = dtTransferencia.Rows(ii)("NUMSUCURSAL")

                'Datos del Producto
                row.Item("Numero1") = dtTransferencia.Rows(ii)("CANTIDAD")
                row.Item("Campo3") = dtTransferencia.Rows(ii)("CODIGOBARRA")

                'Si los productos son por bolsa imprime
                'la cantidad de bolsas seguido de la descripcion
                If CDec(dtTransferencia.Rows(ii)("CANTIDADMINIMA")) = 0 Then
                    row.Item("Campo8") = dtTransferencia.Rows(ii)("PRODUCTO")
                Else
                    row.Item("Campo8") = dtTransferencia.Rows(ii)("PRODUCTO") & "(" & Math.Round(dtTransferencia.Rows(ii)("CANTIDADENVASE")) & ")"
                End If

                ds.Tables("Detalle").Rows.Add(row)

                cantidad = CInt(dtTransferencia.Rows(ii)("CANTIDAD"))

                '''''''''''''''''
                'Para mostrar el resumen de envases por linea de producto
                Dim strEnvase As String
                Dim cantidadEnvase As Integer
                Dim pesoPromedio As Decimal

                strEnvase = ""
                cantidadEnvase = 0
                pesoPromedio = 0

                sql = " SELECT RTRIM(E.NUMENVASE) AS NUMENVASE, RTRIM(E.DESENVASE) AS DESENVASE, " & _
                " TE.CANTIDAD, TE.PESO, " & _
                " TE.CONTROLARPESO, TE.CONTROLARSTOCK " & _
                " FROM TRANSFERENCIAENVASE TE INNER JOIN ENVASE E ON E.CODENVASE = TE.CODENVASE " & _
                " WHERE TE.CODTRANSFERENCIA = " & codTransferencia & " " & _
                " AND TE.CODPRODUCTO = " & dtTransferencia.Rows(ii)("CODPRODUCTO") & " " & _
                " AND TE.LINEANUMERO = " & dtTransferencia.Rows(ii)("LINEANUMERO")

                cmd.CommandText = sql
                dr = cmd.ExecuteReader

                If dr.HasRows = False Then
                    row.Item("Campo11") = "BRUTO: " & Math.Round(dtTransferencia.Rows(ii)("CANTIDADBRUTA"), 2)
                Else
                    Do While dr.Read
                        If dr("CONTROLARPESO") = 1 Then
                            cantidadEnvase = cantidadEnvase + CDec(dr("CANTIDAD"))
                        End If

                        If strEnvase.Equals("") = False Then
                            strEnvase = strEnvase & " - "
                        End If

                        strEnvase = strEnvase & dr("NUMENVASE") & _
                        " = " & Math.Round(dr("CANTIDAD"), 0) & " x " & _
                        Math.Round(dr("PESO"), 2)
                    Loop

                    'Obtener el peso promedio
                    If cantidadEnvase > 0 Then
                        pesoPromedio = CDec(dtTransferencia.Rows(ii)("CANTIDAD")) / cantidadEnvase
                    Else
                        pesoPromedio = 0
                    End If

                    If pesoPromedio > 0 Then
                        strEnvase = strEnvase & " PP= " & Math.Round(pesoPromedio, 2)
                    End If

                    row.Item("Campo11") = "BRUTO: " & Math.Round(dtTransferencia.Rows(ii)("CANTIDADBRUTA"), 2) & " " & strEnvase
                End If

                dr.Close()
                '''''''''''''''''
            Next

            espacio = 16 - dtTransferencia.Rows.Count

            For ii = 1 To espacio
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = 1
                row.Item("Campo8") = ""

                ds.Tables("Detalle").Rows.Add(row)
            Next

            '''''''''''''''''
            'Para mostrar el resumen de envases 
            Dim envase As String

            envase = ""

            sql = " SELECT MAX(RTRIM(E.NUMENVASE)) AS NUMENVASE, MAX(RTRIM(E.DESENVASE)) AS DESENVASE, " & _
            " SUM(TE.CANTIDAD) AS CANTIDAD " & _
            " FROM TRANSFERENCIAENVASE TE INNER JOIN ENVASE E ON E.CODENVASE = TE.CODENVASE " & _
            " WHERE TE.CODTRANSFERENCIA = " & codTransferencia & " " & _
            " AND TE.CONTROLARPESO = 1 " & _
            " GROUP BY TE.CODENVASE " & _
            " ORDER BY NUMENVASE "

            cmd.CommandText = sql
            dr = cmd.ExecuteReader

            If dr.HasRows = True Then
                Do While dr.Read
                    If envase.Equals("") = False Then
                        envase = envase & " - "
                    Else
                        envase = "TOTAL CAJAS: "
                    End If

                    envase = envase & dr("NUMENVASE") & _
                    " = " & Math.Round(dr("CANTIDAD"), 0)
                Loop

                'Para imprimir los totales
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = 1
                row.Item("Campo8") = "PIE"
                row.Item("Campo12") = envase
                row.Item("Numero9") = totalBruto

                ds.Tables("Detalle").Rows.Add(row)
            Else
                'Para imprimir los totales
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = 1
                row.Item("Campo8") = "PIE"
                row.Item("Campo12") = ""
                row.Item("Numero9") = totalBruto

                ds.Tables("Detalle").Rows.Add(row)
            End If

            dr.Close()
            '''''''''''''''''
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRankingTransferenciaCantidad(ByVal desdeOrigen As String, ByVal hastaOrigen As String, _
    ByVal desdeDestino As String, ByVal hastaDestino As String, _
    ByVal desdeFamilia As String, ByVal hastaFamilia As String, _
    ByVal desdeLinea As String, ByVal hastaLinea As String, _
    ByVal desdeRubro As String, ByVal hastaRubro As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal codMoneda As Long, ByVal moneda As String, _
    ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
    ByVal cantidad As Integer, ByVal orden As String, _
    ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
    ByVal condiciones As String) As DataSet
        ds.Clear()

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = " SELECT TOP " & cantidad & " MAX(DESPRODUCTO) AS PRODUCTO, " & _
        " SUM(TD.CANTIDADTRANFERENCIA) AS CANTIDAD, MAX(RTRIM(U.DESMEDIDA)) AS UNIDAD, " & _
        " SUM(TD.COSTOPROMEDIO * TD.CANTIDADTRANFERENCIA * T.COTIZACION1) AS COSTO, " & _
        " (SELECT CASE MAX(TD.CANTIDADMINIMA) WHEN 0 THEN 0 ELSE SUM(TD.CANTIDADENVASE) END) AS BOLSA " & _
        " FROM TRANFERENCIA T INNER JOIN SUCURSAL SO ON T.CODSUCURSAL = SO.CODSUCURSAL " & _
        " INNER JOIN SUCURSAL SD ON T.SUCURSALDESTINO = SD.CODSUCURSAL " & _
        " INNER JOIN TRANSFERENCIASDETALLE TD ON T.CODTRANSFERENCIA = TD.CODTRANSFERENCIA " & _
        " INNER JOIN PRODUCTOS P ON TD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        " WHERE T.CODEMPRESA = " & empCodigo & condiciones & _
        " GROUP BY P.CODPRODUCTO " & _
        " ORDER BY CANTIDAD " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("PRODUCTO")
                    row.Item("Campo2") = dr("UNIDAD")

                    row.Item("Numero1") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("BOLSA")

                    total = total + CDec(dr("CANTIDAD"))

                    row.Item("Numero2") = dr("COSTO") / cotizacion

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo2") = PRODUCTO1
                row.Item("Campo3") = PRODUCTO2
                row.Item("Campo4") = PRODUCTO3
                row.Item("Campo5") = desdeOrigen
                row.Item("Campo6") = hastaOrigen
                row.Item("Campo19") = desdeDestino
                row.Item("Campo20") = hastaDestino
                row.Item("Campo7") = desdeFamilia
                row.Item("Campo8") = hastaFamilia
                row.Item("Campo9") = desdeLinea
                row.Item("Campo10") = hastaLinea
                row.Item("Campo11") = desdeRubro
                row.Item("Campo12") = hastaRubro
                row.Item("Campo13") = desdeProducto
                row.Item("Campo14") = hastaProducto
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                If orden = "ASC" Then
                    row.Item("campo18") = "Los " & cantidad.ToString & " menos transferidos"
                Else
                    row.Item("campo18") = "Los " & cantidad.ToString & " más transferidos"
                End If

                row.Item("Numero1") = total

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infProduccionActualPollo(ByVal condiciones As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " /*LOTES VIGENTES CON STOCK DE POLLITOS*/ " & _
        " SELECT P.CODPRODUCCION, P.NUMPRODUCCION, " & _
        " RTRIM(SP.NUMSUCURSAL) AS NUMLOTE, RTRIM(SP.DESSUCURSAL) AS LOTE, " & _
        " S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10), P.FECHAINICIO, 103) AS FECHA, " & _
        " P.FECHAINICIO AS FECHAORDEN, " & _
        " PR.CODPRODUCTO, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS PRODUCTO, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CANTIDADACTUAL AS CANTIDAD, " & _
        " P.COSTOACTUAL AS COSTO, (P.CANTIDADACTUAL * P.COSTOACTUAL) AS COSTOTOTAL " & _
        " FROM PRODUCCIONPOLLO P INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = P.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
        " INNER JOIN SUCURSAL SP ON SP.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
        " WHERE P.FECHAFIN IS NULL " & _
        " AND P.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY NUMLOTE, MONEDA, NUMPRODUCCION "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("FECHA")
                    row.Item("Campo2") = dr("NUMSUCURSAL")
                    row.Item("Campo3") = dr("SUCURSAL")
                    row.Item("Campo4") = dr("CODIGOBARRA")
                    row.Item("Campo5") = dr("PRODUCTO")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Campo7") = dr("NUMPRODUCCION")
                    row.Item("Campo8") = dr("NUMLOTE")
                    row.Item("Campo9") = dr("LOTE")

                    row.Item("Numero1") = dr("CANTIDAD")
                    row.Item("Numero2") = dr("COSTO")
                    row.Item("Numero3") = dr("COSTOTOTAL")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infProduccionFinalizadaPollo(ByVal CODPOLLO As Long, _
    ByVal condiciones As String) As DataSet
        ds.Clear()

        sql = ""
        sql = " /*LOTES FINALES CON STOCK DE POLLITOS*/ " & _
        " SELECT P.CODPRODUCCION, P.NUMPRODUCCION, " & _
        " RTRIM(SP.NUMSUCURSAL) AS NUMLOTE, RTRIM(SP.DESSUCURSAL) AS LOTE, " & _
        " S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10), P.FECHAINICIO, 103) AS FECHAINICIO, " & _
        " CONVERT(VARCHAR(10), P.FECHAFIN, 103) AS FECHAFIN, " & _
        " P.FECHAINICIO AS FECHAORDEN, " & _
        " PR.CODPRODUCTO, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS PRODUCTO, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CANTIDADTRANSFERIDA AS CANTIDAD, " & _
        " P.COSTOACTUAL AS COSTO, ( " & _
        " ISNULL((SELECT SUM(PD.CANTIDAD * PD.COSTO * PD.COTIZACION1) / P.COTIZACION1 " & _
        " FROM PRODUCCIONPOLLODETALLE PD " & _
        " WHERE PD.CODCOMPRA IS NOT NULL " & _
        " AND PD.CODPRODUCCION = P.CODPRODUCCION), 0) " & _
        " + " & _
        " ISNULL((SELECT SUM(PD.CANTIDAD * PD.COSTO * PD.COTIZACION1) / P.COTIZACION1 " & _
        " FROM PRODUCCIONPOLLODETALLE PD " & _
        " WHERE PD.CODTRANSFERENCIA IS NOT NULL " & _
        " AND PD.CODPRODUCTO <> " & CODPOLLO & _
        " AND PD.CODPRODUCCION = P.CODPRODUCCION), 0) " & _
        " - " & _
        " ISNULL((SELECT SUM(PD.CANTIDAD * PD.COSTO * PD.COTIZACION1) / P.COTIZACION1 " & _
        " FROM PRODUCCIONPOLLODETALLE PD " & _
        " WHERE PD.CODAJUSTE IS NOT NULL " & _
        " AND PD.CODPRODUCCION = P.CODPRODUCCION), 0) " & _
        " ) AS COSTOTOTAL " & _
        " FROM PRODUCCIONPOLLO P INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = P.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
        " INNER JOIN SUCURSAL SP ON SP.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
        " WHERE P.FECHAFIN IS NOT NULL " & _
        " AND P.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY NUMLOTE, MONEDA, NUMPRODUCCION "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("FECHAINICIO")
                    row.Item("Campo14") = dr("FECHAFIN")
                    row.Item("Campo2") = dr("NUMSUCURSAL")
                    row.Item("Campo3") = dr("SUCURSAL")
                    row.Item("Campo4") = dr("CODIGOBARRA")
                    row.Item("Campo5") = dr("PRODUCTO")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Campo7") = dr("NUMPRODUCCION")
                    row.Item("Campo8") = dr("NUMLOTE")
                    row.Item("Campo9") = dr("LOTE")

                    row.Item("Numero1") = dr("CANTIDAD")
                    row.Item("Numero3") = Math.Round(dr("COSTOTOTAL"), 0)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infResumenVentasIVADiario(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeCliente As String, ByVal hastaCliente As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal venta As Byte, ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, ByVal grupo As Integer) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " /*VENTAS DEL SISTEMA DE STOCK*/ " & _
        " SELECT CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, " & _
        " CAST(V.FECHAVENTA AS DATETIME) AS FECHAORDEN, " & _
        " (CASE V.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA) ELSE 0 END), 0) AS EXENTA, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA) ELSE 0 END), 0) AS GRAVADA5, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100)) * VD.CANTIDADVENTA) ELSE 0 END), 0) AS GRAVADA10, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA10, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO, " & _
        " REPLICATE('0',30-LEN(RTRIM(CL.NUMCLIENTE)))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, ISNULL(LTRIM(RTRIM(CL.APELLIDO)),'') + ' ' + ISNULL(LTRIM(RTRIM(CL.NOMBRE)),'') AS DESCLIENTE, " & _
        " REPLICATE('0',5-LEN(RTRIM(VE.NUMVENDEDOR)))+LTRIM(RTRIM(VE.NUMVENDEDOR)) AS NUMVENDEDORORDEN, " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS DESVENDEDOR " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN IVA I ON VD.IVA = I.PORCENTAJEIVA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAVENTA " & _
        " WHERE V.ESTADO = 0 " & _
        " AND V.CODEMPRESA = " & empCodigo & condiciones & vbCrLf


        If grupo = 0 Then
            sql = sql & " ORDER BY FECHAORDEN, NUMVENDEDORORDEN, CODIGOBARRA"
        ElseIf grupo = 1 Then
            sql = sql & " ORDER BY FECHAORDEN, NUMPLANCUENTA, CODIGOBARRA"
        Else
            sql = sql & " ORDER BY FECHAORDEN, NUMCLIENTEORDEN, CODIGOBARRA"
        End If

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("FECHAVENTA")
                row.Item("Campo2") = dr("MODALIDAD")

                If grupo = 0 Then
                    row.Item("Campo3") = dr("NUMVENDEDOR")
                    row.Item("Campo4") = dr("DESVENDEDOR")
                ElseIf grupo = 1 Then
                    row.Item("Campo3") = dr("NUMPLANCUENTA")
                    row.Item("Campo4") = dr("DESPLANCUENTA")
                Else
                    row.Item("Campo3") = dr("NUMCLIENTE")
                    row.Item("Campo4") = dr("DESCLIENTE")
                End If

                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                Dim gravadaIncluido5 As Decimal
                Dim gravada5 As Decimal
                Dim gravadaIncluido10 As Decimal
                Dim gravada10 As Decimal

                gravadaIncluido5 = dr("GRAVADA5")
                gravada5 = dr("GRAVADA5") - dr("IVA5")

                gravadaIncluido10 = dr("GRAVADA10")
                gravada10 = dr("GRAVADA10") - dr("IVA10")


                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("EXENTA")
                    row.Item("Numero2") = gravadaIncluido5
                    row.Item("Numero3") = gravada5
                    row.Item("Numero4") = dr("IVA5")
                    row.Item("Numero5") = gravadaIncluido10
                    row.Item("Numero6") = gravada10
                    row.Item("Numero7") = dr("IVA10")
                Else
                    row.Item("Numero1") = Math.Round(dr("EXENTA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(gravadaIncluido5 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(gravada5 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero4") = Math.Round(dr("IVA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero5") = Math.Round(gravadaIncluido10 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero6") = Math.Round(gravada10 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero7") = Math.Round(dr("IVA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeCliente
            row.Item("Campo9") = hastaCliente
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case venta
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            If grupo = 0 Then
                row.Item("Campo20") = "Vendedor"
            ElseIf grupo = 1 Then
                row.Item("Campo20") = "Cuenta Contable"
            ElseIf grupo = 2 Then
                row.Item("Campo20") = "Cliente"
            Else
                row.Item("Campo20") = "Ciudad"
            End If

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenVentasIVAMensual(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeCliente As String, ByVal hastaCliente As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal venta As Byte, _
    ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String, ByVal grupo As Integer) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " /*VENTAS DEL SISTEMA DE STOCK*/ " & _
        " SELECT MONTH(V.FECHAVENTA) AS MES, " & _
        " (CASE V.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100)) * VD.CANTIDADVENTA) ELSE 0 END), 0) AS EXENTA, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA) ELSE 0 END), 0) AS GRAVADA5, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100)) * VD.CANTIDADVENTA) ELSE 0 END), 0) AS GRAVADA10, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
        " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA10, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO, " & _
        " REPLICATE('0',30-LEN(RTRIM(CL.NUMCLIENTE)))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, ISNULL(LTRIM(RTRIM(CL.APELLIDO)),'') + ' ' + ISNULL(LTRIM(RTRIM(CL.NOMBRE)),'') AS DESCLIENTE, " & _
        " REPLICATE('0',5-LEN(RTRIM(VE.NUMVENDEDOR)))+LTRIM(RTRIM(VE.NUMVENDEDOR)) AS NUMVENDEDORORDEN, " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS DESVENDEDOR " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN IVA I ON VD.IVA = I.PORCENTAJEIVA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAVENTA " & _
        " WHERE V.ESTADO = 0 " & _
        " AND V.CODEMPRESA = " & empCodigo & condiciones

        If grupo = 0 Then
            sql = sql & " ORDER BY MES, NUMVENDEDORORDEN, CODIGOBARRA"
        ElseIf grupo = 1 Then
            sql = sql & " ORDER BY MES, NUMPLANCUENTA, CODIGOBARRA"
        Else
            sql = sql & " ORDER BY MES, NUMCLIENTEORDEN, CODIGOBARRA"
        End If

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo2") = dr("MODALIDAD")

                If grupo = 0 Then
                    row.Item("Campo3") = dr("NUMVENDEDOR")
                    row.Item("Campo4") = dr("DESVENDEDOR")
                ElseIf grupo = 1 Then
                    row.Item("Campo3") = dr("NUMPLANCUENTA")
                    row.Item("Campo4") = dr("DESPLANCUENTA")
                Else
                    row.Item("Campo3") = dr("NUMCLIENTE")
                    row.Item("Campo4") = dr("DESCLIENTE")
                End If

                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                Dim gravadaIncluido5 As Decimal
                Dim gravada5 As Decimal
                Dim gravadaIncluido10 As Decimal
                Dim gravada10 As Decimal

                gravadaIncluido5 = dr("GRAVADA5")
                gravada5 = dr("GRAVADA5") - dr("IVA5")

                gravadaIncluido10 = dr("GRAVADA10")
                gravada10 = dr("GRAVADA10") - dr("IVA10")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("EXENTA")
                    row.Item("Numero2") = gravadaIncluido5
                    row.Item("Numero3") = gravada5
                    row.Item("Numero4") = dr("IVA5")
                    row.Item("Numero5") = gravadaIncluido10
                    row.Item("Numero6") = gravada10
                    row.Item("Numero7") = dr("IVA10")
                Else
                    row.Item("Numero1") = Math.Round(dr("EXENTA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(gravadaIncluido5 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(gravada5 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero4") = Math.Round(dr("IVA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero5") = Math.Round(gravadaIncluido10 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero6") = Math.Round(gravada10 * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero7") = Math.Round(dr("IVA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeCliente
            row.Item("Campo9") = hastaCliente
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case venta
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            If grupo = 0 Then
                row.Item("Campo20") = "Vendedor"
            ElseIf grupo = 1 Then
                row.Item("Campo20") = "Cuenta Contable"
            ElseIf grupo = 2 Then
                row.Item("Campo20") = "Cliente"
            Else
                row.Item("Campo20") = "Ciudad"
            End If

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCargaComprasGastosImportacion(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, _
    ByVal tipoCosto As Byte, ByVal agrupar As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = " /*GASTOS DE IMPORTACION*/ " & _
       " SELECT C.CODCOMPRA AS CODCOMPRA, " & _
       " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
       " REPLICATE('0',5-LEN(TC.NUMTIPOCOMPRO))+LTRIM(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
       " REPLICATE('0',20-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
       " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
       " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPROBANTE, " & _
       " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
       " RTRIM(C.NUMCOMPRA) AS NUMCOMPRA, " & _
       " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
       " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
       " C.CODMONEDA AS CODMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
       " C.TOTALGRAVADA AS TOTALGRAVADA, C.TOTALGRAVADA * C.COTIZACION1  AS TOTALGRAVADAINFORME, " & _
       " C.TOTALEXENTA AS TOTALEXENTA, C.TOTALEXENTA * C.COTIZACION1 AS TOTALEXENTAINFORME, " & _
       " C.TOTALIVA AS TOTALIVA, C.TOTALIVA * C.COTIZACION1 AS TOTALIVA, " & _
       " C.TOTALCOMPRA AS TOTALCOMPRA, C.TOTALCOMPRA * C.COTIZACION1 AS TOTALCOMPRAINFORME, " & _
       " C.TOTALDESCUENTO AS TOTALDESCUENTO, C.TOTALDESCUENTO * C.COTIZACION1 AS TOTALDESCUENTO, " & _
       " RTRIM(G.NUMGASTO) AS NUMGASTO, RTRIM(G.DESGASTO) AS DESGASTO, " & _
       " CASE WHEN CG.AFECTACOSTO = 1 THEN 'Si' ELSE 'No' END AS AFECTACOSTO, " & _
       " CG.CODMONEDA AS CODMONEDAGASTO, RTRIM(MG.DESMONEDA) AS DESMONEDAGASTO, " & _
       " CG.IMPORTE AS IMPORTE ,  CG.IMPORTE * CG.COTIZACION1 AS IMPORTEGASTO, " & _
       " (CG.IMPORTE * CG.COTIZACION1 / C.COTIZACION1) AS IMPORTECOMPROBANTE , " & _
       " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
       " C.MODALIDADPAGO, C.COTIZACION1 AS COTIZACION " & _
       " FROM COMPRAS C " & _
       " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
       " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
       " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
       " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
       " INNER JOIN COMPRASGASTOS CG ON C.CODCOMPRA = CG.CODCOMPRA " & _
       " INNER JOIN MONEDA MG ON CG.CODMONEDA = MG.CODMONEDA " & _
       " INNER JOIN GASTOCOMPRA G ON CG.CODGASTO = G.CODGASTO " & _
       " WHERE C.CODEMPRESA = " & empCodigo & "  " & condiciones & " "

        If agrupar = 0 Then
            sql = sql & " ORDER BY NUMSUCURSALORDEN, NUMTIPOCOMPROORDEN, NUMCOMPRA, NUMGASTO "
        Else
            sql = sql & " ORDER BY C.CODCOMPRA, NUMGASTO "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo3") = dr("NUMTIPOCOMPROBANTE")
                    row.Item("Campo17") = dr("DESCOMPROBANTE")
                    row.Item("Campo18") = dr("CODCOMPRA")
                    row.Item("Campo4") = dr("NUMCOMPRA")
                    row.Item("Campo7") = dr("NUMGASTO")
                    row.Item("Campo9") = "0"
                    row.Item("Campo2") = dr("FECHACOMPRA")
                    row.Item("Campo5") = dr("PROVEEDOR")
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("TOTALGRAVADA")
                    row.Item("Numero3") = dr("TOTALIVA")
                    row.Item("Campo6") = dr("DESMONEDA")
                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Campo8") = dr("DESGASTO")
                    row.Item("Numero8") = dr("TOTALDESCUENTO")
                    row.Item("Numero9") = dr("TOTALCOMPRA")
                    row.Item("Campo13") = dr("AFECTACOSTO")
                    row.Item("Campo14") = dr("DESMONEDAGASTO")
                    row.Item("Numero7") = dr("IMPORTE")
                    row.Item("Numero12") = dr("IMPORTECOMPROBANTE")

                    If dr("MODALIDADPAGO") = "0" Then
                        row.Item("Campo12") = "Contado"
                    Else
                        row.Item("Campo12") = "Crédito"
                    End If

                    If dr("CODMONEDA") = moneda_informe Then
                        row.Item("Numero10") = dr("TOTALCOMPRA")
                    Else
                        row.Item("Numero10") = Math.Round(dr("TOTALCOMPRAINFORME") / cotizacion, candecimales)
                    End If

                    If dr("CODMONEDAGASTO") = moneda_informe Then
                        row.Item("Numero13") = dr("IMPORTEGASTO")
                    Else
                        row.Item("Numero13") = Math.Round(dr("IMPORTEGASTO") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo26") = moneda_descripcion_desde
                row.Item("Campo27") = moneda_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta
                row.Item("Campo28") = moneda_descripcion
                row.Item("Campo29") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infResumenComprasDiario(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeCliente As String, ByVal hastaCliente As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal venta As Byte, ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " (CASE C.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " (CD.COSTOBRUTO * CD.CANTIDADCOMPRA) AS TOTALBRUTO, " & _
        " (CD.COSTOUNITARIO * CD.CANTIDADCOMPRA) AS TOTALNETO, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO, C.IMPORTACION " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE C.ESTADO IS NULL " & _
        " AND C.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY FECHAORDEN, MODALIDAD, NUMPLANCUENTA, CODIGOBARRA "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("FECHACOMPRA")
                row.Item("Campo2") = dr("MODALIDAD")
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("TOTALBRUTO")
                    row.Item("Numero2") = dr("TOTALNETO")
                Else
                    row.Item("Numero1") = Math.Round(dr("TOTALBRUTO") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(dr("TOTALNETO") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeCliente
            row.Item("Campo9") = hastaCliente
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case venta
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenComprasMensual(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal venta As Byte, _
    ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT MONTH(C.FECHACOMPRA) AS MES, " & _
        " (CASE C.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " (CD.COSTOBRUTO * CD.CANTIDADCOMPRA) AS TOTALBRUTO, " & _
        " (CD.COSTOUNITARIO * CD.CANTIDADCOMPRA) AS TOTALNETO, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO, C.IMPORTACION " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE C.ESTADO IS NULL " & _
        " AND C.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY MES, MODALIDAD, NUMPLANCUENTA, CODIGOBARRA "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo2") = dr("MODALIDAD")
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("TOTALBRUTO")
                    row.Item("Numero2") = dr("TOTALNETO")
                Else
                    row.Item("Numero1") = Math.Round(dr("TOTALBRUTO") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(dr("TOTALNETO") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeProveedor
            row.Item("Campo9") = hastaProveedor
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case venta
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infProduccionActualPolloDetalle(ByVal produccion As String, _
    ByVal sucursal As String, ByVal producto As String, _
    ByVal fechaInicio As String, ByVal fechaFin As String, _
    ByVal cantidadComprada As String, ByVal cantidadMuerta As String, _
    ByVal cantidadTransferida As String, ByVal cantidadATransferir As String, _
    ByVal cantidadProduccion As String, _
    ByVal moneda As String, ByVal costoInicial As String, ByVal variacionCosto As String, _
    ByVal costoProduccion As String, ByVal costoTotalProduccion As String, _
    ByVal costoCompra As String, ByVal costoGasto As String, _
    ByVal costoBalanceado As String, ByVal costoMortandad As String, _
    ByVal costoTotalPorProduccion As String, _
    ByVal dt As DataTable) As DataSet
        Dim i As Integer

        ds.Clear()

        Try
            ds.ReadXml(direccion)

            For i = 0 To dt.Rows.Count - 1
                If dt.Rows(i)("LIN") = "" Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = ""
                    row.Item("Campo2") = ""
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = dt.Rows(i)("PRODUCTO")
                    row.Item("Campo7") = ""

                    row.Item("Numero1") = 0
                    row.Item("Numero2") = 0
                    row.Item("Numero3") = 0

                    ds.Tables("Detalle").Rows.Add(row)
                Else
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dt.Rows(i)("LIN")
                    row.Item("Campo2") = dt.Rows(i)("FECHA")
                    row.Item("Campo3") = dt.Rows(i)("TIPO")
                    row.Item("Campo4") = dt.Rows(i)("COMPROBANTE")
                    row.Item("Campo5") = dt.Rows(i)("NUMERO")
                    row.Item("Campo6") = dt.Rows(i)("PRODUCTO")
                    row.Item("Campo7") = dt.Rows(i)("MONEDA")

                    row.Item("Numero1") = dt.Rows(i)("CANTIDAD")
                    row.Item("Numero2") = dt.Rows(i)("COSTOUNITARIO")
                    row.Item("Numero3") = dt.Rows(i)("COSTOTOTAL")

                    ds.Tables("Detalle").Rows.Add(row)
                End If
            Next

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = produccion
            row.Item("Campo3") = sucursal
            row.Item("Campo4") = producto
            row.Item("Campo5") = fechaInicio
            row.Item("Campo6") = fechaFin
            row.Item("Campo7") = moneda

            row.Item("Numero2") = cantidadComprada
            row.Item("Numero3") = cantidadMuerta
            row.Item("Numero4") = cantidadTransferida
            row.Item("Numero5") = cantidadATransferir
            row.Item("Numero6") = cantidadProduccion

            row.Item("Numero7") = costoInicial
            row.Item("Numero8") = variacionCosto
            row.Item("Numero9") = costoProduccion
            row.Item("Numero10") = costoTotalProduccion

            row.Item("Numero11") = costoCompra
            row.Item("Numero12") = costoGasto
            row.Item("Numero13") = costoBalanceado
            row.Item("Numero14") = costoMortandad
            row.Item("Numero15") = costoTotalPorProduccion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infProduccionFinalizadaPolloDetalle(ByVal produccion As String, _
    ByVal sucursal As String, ByVal producto As String, _
    ByVal fechaInicio As String, ByVal fechaFin As String, _
    ByVal cantidadComprada As String, ByVal cantidadMuerta As String, _
    ByVal cantidadTransferida As String, ByVal cantidadATransferir As String, _
    ByVal cantidadProduccion As String, _
    ByVal moneda As String, ByVal costoInicial As String, ByVal variacionCosto As String, _
    ByVal costoProduccion As String, ByVal costoTotalProduccion As String, _
    ByVal costoCompra As String, ByVal costoGasto As String, _
    ByVal costoBalanceado As String, ByVal costoMortandad As String, _
    ByVal costoTotalPorProduccion As String, _
    ByVal dt As DataTable) As DataSet
        Dim i As Integer

        ds.Clear()

        Try
            ds.ReadXml(direccion)

            For i = 0 To dt.Rows.Count - 1
                If dt.Rows(i)("LIN") = "" Then
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = ""
                    row.Item("Campo2") = ""
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = dt.Rows(i)("PRODUCTO")
                    row.Item("Campo7") = ""

                    row.Item("Numero1") = 0
                    row.Item("Numero2") = 0
                    row.Item("Numero3") = 0

                    ds.Tables("Detalle").Rows.Add(row)
                Else
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dt.Rows(i)("LIN")
                    row.Item("Campo2") = dt.Rows(i)("FECHA")
                    row.Item("Campo3") = dt.Rows(i)("TIPO")
                    row.Item("Campo4") = dt.Rows(i)("COMPROBANTE")
                    row.Item("Campo5") = dt.Rows(i)("NUMERO")
                    row.Item("Campo6") = dt.Rows(i)("PRODUCTO")
                    row.Item("Campo7") = dt.Rows(i)("MONEDA")

                    row.Item("Numero1") = dt.Rows(i)("CANTIDAD")
                    row.Item("Numero2") = dt.Rows(i)("COSTOUNITARIO")
                    row.Item("Numero3") = dt.Rows(i)("COSTOTOTAL")

                    ds.Tables("Detalle").Rows.Add(row)
                End If
            Next

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = produccion
            row.Item("Campo3") = sucursal
            row.Item("Campo4") = producto
            row.Item("Campo5") = fechaInicio
            row.Item("Campo6") = fechaFin
            row.Item("Campo7") = moneda

            row.Item("Numero2") = cantidadComprada
            row.Item("Numero3") = cantidadMuerta
            row.Item("Numero4") = cantidadTransferida
            row.Item("Numero5") = cantidadATransferir
            row.Item("Numero6") = cantidadProduccion

            row.Item("Numero7") = costoInicial
            row.Item("Numero8") = variacionCosto
            row.Item("Numero9") = costoProduccion
            row.Item("Numero10") = costoTotalProduccion

            row.Item("Numero11") = costoCompra
            row.Item("Numero12") = costoGasto
            row.Item("Numero13") = costoBalanceado
            row.Item("Numero14") = costoMortandad
            row.Item("Numero15") = costoTotalPorProduccion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infResumenAjustesDiario(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeConcepto As String, ByVal hastaConcepto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal ajuste As Byte, ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT CONVERT(VARCHAR(10), A.FECHAAJUSTE, 103) AS FECHAAJUSTE, " & _
        " CAST(A.FECHAAJUSTE AS DATETIME) AS FECHAORDEN, " & _
        " (CASE A.TIPOAJUSTE WHEN 0 THEN 'NEGATIVO' ELSE 'POSITIVO' END) AS TIPO, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, A.COTIZACION1 AS COTIZACION, " & _
        " AD.CANTIDADAJUSTE AS CANTIDAD, " & _
        " (AD.COSTOPROMEDIO * AD.CANTIDADAJUSTE) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
        " FROM AJUSTE A INNER JOIN SUCURSAL S ON A.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CONCEPTO CA ON A.CODCONCEPTO = CA.CODCONCEPTO " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON A.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON A.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN AJUSTEDETALLE AD ON A.CODAJUSTE = AD.CODAJUSTE " & _
        " INNER JOIN PRODUCTOS P ON AD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE A.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY FECHAORDEN, TIPO, NUMPLANCUENTA, CODIGOBARRA "

        Try
            cmd = New SqlCommand(sql, sqlc)
            dr = cmd.ExecuteReader()

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("FECHAAJUSTE")
                row.Item("Campo2") = dr("TIPO")
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeConcepto
            row.Item("Campo9") = hastaConcepto
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case ajuste
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "POSITIVO"
                Case Is = 2
                    row.Item("Campo14") = "NEGATIVO"
            End Select

            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenAjustesMensual(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeConcepto As String, ByVal hastaConcepto As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal ajuste As Byte, _
    ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT MONTH(A.FECHAAJUSTE) AS MES, " & _
        " (CASE A.TIPOAJUSTE WHEN 0 THEN 'NEGATIVO' ELSE 'POSITIVO' END) AS TIPO, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, A.COTIZACION1 AS COTIZACION, " & _
        " AD.CANTIDADAJUSTE AS CANTIDAD, " & _
        " (AD.COSTOPROMEDIO * AD.CANTIDADAJUSTE) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
        " FROM AJUSTE A INNER JOIN SUCURSAL S ON A.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN CONCEPTO CA ON A.CODCONCEPTO = CA.CODCONCEPTO " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON A.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON A.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN AJUSTEDETALLE AD ON A.CODAJUSTE = AD.CODAJUSTE " & _
        " INNER JOIN PRODUCTOS P ON AD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE A.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY MES, TIPO, NUMPLANCUENTA, CODIGOBARRA "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo2") = dr("TIPO")
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeConcepto
            row.Item("Campo9") = hastaConcepto
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case ajuste
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "POSITIVO"
                Case Is = 2
                    row.Item("Campo14") = "NEGATIVO"
            End Select

            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenTransferenciasDiario(ByVal desdeOrigen As String, ByVal hastaOrigen As String, _
    ByVal desdeDestino As String, ByVal hastaDestino As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal formato As Byte, ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT CONVERT(VARCHAR(10), TR.FECHATRANSFERENCIA, 103) AS FECHATRANSFERENCIA, " & _
        " CAST(TR.FECHATRANSFERENCIA AS DATETIME) AS FECHAORDEN, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, TR.COTIZACION1 AS COTIZACION, " & _
        " TRD.CANTIDADTRANFERENCIA AS CANTIDAD, " & _
        " (TRD.COSTOPROMEDIO * TRD.CANTIDADTRANFERENCIA) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
        " FROM TRANFERENCIA TR INNER JOIN SUCURSAL SO ON TR.CODSUCURSAL = SO.CODSUCURSAL " & _
        " INNER JOIN SUCURSAL SD ON TR.SUCURSALDESTINO = SD.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON TR.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON TR.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN TRANSFERENCIASDETALLE TRD ON TR.CODTRANSFERENCIA = TRD.CODTRANSFERENCIA " & _
        " INNER JOIN PRODUCTOS P ON TRD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE TR.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY FECHAORDEN, NUMPLANCUENTA, CODIGOBARRA "

        Try
            cmd = New SqlCommand(sql, sqlc)
            dr = cmd.ExecuteReader()

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("FECHATRANSFERENCIA")
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")
                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeOrigen
            row.Item("Campo3") = hastaOrigen
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeDestino
            row.Item("Campo9") = hastaDestino
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme
            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenTransferenciasMensual(ByVal desdeOrigen As String, ByVal hastaOrigen As String, _
    ByVal desdeDestino As String, ByVal hastaDestino As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal formato As Byte, ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT MONTH(TR.FECHATRANSFERENCIA) AS MES, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, TR.COTIZACION1 AS COTIZACION, " & _
        " TRD.CANTIDADTRANFERENCIA AS CANTIDAD, " & _
        " (TRD.COSTOPROMEDIO * TRD.CANTIDADTRANFERENCIA) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
        " FROM TRANFERENCIA TR INNER JOIN SUCURSAL SO ON TR.CODSUCURSAL = SO.CODSUCURSAL " & _
        " INNER JOIN SUCURSAL SD ON TR.SUCURSALDESTINO = SD.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON TR.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON TR.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN TRANSFERENCIASDETALLE TRD ON TR.CODTRANSFERENCIA = TRD.CODTRANSFERENCIA " & _
        " INNER JOIN PRODUCTOS P ON TRD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE TR.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY MES, NUMPLANCUENTA, CODIGOBARRA "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeOrigen
            row.Item("Campo3") = hastaOrigen
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeDestino
            row.Item("Campo9") = hastaDestino
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme
            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfMovimientoIngresoProduccion(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal sucursal_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_hasta As String, _
    ByVal proveedor_desde As String, ByVal proveedor_hasta As String, _
    ByVal producto_desde As String, ByVal producto_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    Optional ByVal condiciones As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        "CONVERT(VARCHAR(10), PIP.FECHACOMPROBANTE, 103) AS FECHA, " & _
        "RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        "RTRIM(PIP.NUMCOMPROBANTE) AS NUMERO, " & _
        "M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, PIP.COTIZACION1 AS COTIZACION, " & _
        "RTRIM(PR.CODIGOBARRA) AS CODIGO, RTRIM(PR.DESPRODUCTO) AS DESCRIPCION, PIPD.CANTIDAD AS CANTIDAD, " & _
        "PIPD.COSTO AS COSTO, " & _
        "RTRIM(P.APELLIDO)+' '+RTRIM(P.NOMBRE) AS PROVEEDOR " & _
        "FROM PRODUCCIONINGRESOPRODUCTO PIP INNER JOIN MONEDA M ON M.CODMONEDA = PIP.CODMONEDA " & _
        "INNER JOIN TIPOCOMPROBANTE T ON T.CODCOMPROBANTE = PIP.CODCOMPROBANTE " & _
        "INNER JOIN PROVEEDOR P ON P.CODPROVEEDOR = PIP.CODPROVEEDOR " & _
        "INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PIP.CODSUCURSAL " & _
        "INNER JOIN PRODUCCIONINGRESOPRODUCTODET PIPD ON PIPD.CODINGRESOPROTER = PIP.CODINGRESOPROTER " & _
        "INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PIPD.CODPRODUCTO " & _
        "WHERE PIP.CODEMPRESA = " & empCodigo & " " & condiciones & _
        "ORDER BY NUMSUCURSAL, CODIGOBARRA, NUMMONEDA, T.NUMTIPOCOMPRO, PIP.FECHACOMPROBANTE, PIP.NUMCOMPROBANTE"

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("FECHA")
                row.Item("Campo3") = dr("NUMCOMPROBANTE")
                row.Item("Campo4") = dr("NUMERO")
                row.Item("Campo5") = dr("PROVEEDOR")
                row.Item("Campo6") = dr("MONEDA")
                row.Item("Campo7") = dr("CODIGO")
                row.Item("Campo8") = dr("DESCRIPCION")
                row.Item("Campo9") = dr("NUMMONEDA")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Numero4") = dr("COTIZACION")
                row.Item("Numero5") = dr("CANTIDAD")
                row.Item("Numero6") = dr("COSTO")
                row.Item("Numero7") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                Else
                    row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTO") * dr("COTIZACION") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = sucursal_desde
            row.Item("Campo3") = sucursal_hasta
            row.Item("Campo4") = comprobante_desde
            row.Item("Campo5") = comprobante_hasta
            row.Item("Campo8") = proveedor_desde
            row.Item("Campo9") = proveedor_hasta
            row.Item("Campo10") = producto_desde
            row.Item("Campo12") = producto_hasta
            row.Item("Campo14") = fecha_desde
            row.Item("Campo15") = fecha_hasta
            row.Item("Campo6") = "Materia Prima"
            row.Item("Campo28") = moneda_informe

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenOrdenProduccionMensual(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
      ByVal desdeFecha As String, ByVal hastaFecha As String, _
      ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
      ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
      ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
      ByVal condiciones As String, _
      ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
      ByVal formato As Byte, _
      ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
      ByVal desdeProducto As String, ByVal hastaProducto As String, _
      ByVal mostrar As Integer) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""

        If mostrar = 0 Then
            sql = " SELECT MONTH(OP.FECHAOP) AS MES, " & _
            " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1 AS COTIZACION, " & _
            " OPD.CANTIDAD AS CANTIDAD, " & _
            " (OPD.COSTO * OPD.CANTIDAD) AS TOTAL, " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
            " FROM ORDENPRODUCCION OP INNER JOIN TIPOCOMPROBANTE TC ON OP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            " INNER JOIN SUCURSAL S ON OP.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN MONEDA M ON OP.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OP.CODORDENPRODUCCION = OPD.CODORDENPRODUCCION " & _
            " INNER JOIN PRODUCTOS P ON OPD.CODPRODUCTO = P.CODPRODUCTO " & _
            " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
            " WHERE OP.CODEMPRESA = " & empCodigo & condiciones & _
            " ORDER BY MES, NUMPLANCUENTA, CODIGOBARRA "
        Else
            sql = " SELECT MONTH(OP.FECHAOP) AS MES, " & _
            " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1 AS COTIZACION, " & _
            " OPM.CANTIDAD AS CANTIDAD, " & _
            " (OPM.COSTO * OPM.CANTIDAD) AS TOTAL, " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
            " FROM ORDENPRODUCCION OP INNER JOIN TIPOCOMPROBANTE TC ON OP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            " INNER JOIN MONEDA M ON OP.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OP.CODORDENPRODUCCION = OPD.CODORDENPRODUCCION " & _
            " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPM ON OPD.CODORDENPRODUCCION = OPM.CODORDENPRODUCCION " & _
            " AND OPD.CODPRODUCTO = OPM.CODPRODUCTO " & _
            " INNER JOIN SUCURSAL S ON OPM.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN PRODUCTOS P ON OPM.CODPRODUCTOMATERIAPRIMA = P.CODPRODUCTO " & _
            " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
            " WHERE OP.CODEMPRESA = " & empCodigo & condiciones & _
            " ORDER BY MES, NUMPLANCUENTA, CODIGOBARRA "
        End If

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme
            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            If mostrar = 0 Then
                row.Item("Campo19") = "Producto"
            Else
                row.Item("Campo19") = "Materia Prima"
            End If

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infSalidaMateriaPrimaMensual(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
  ByVal desdeFecha As String, ByVal hastaFecha As String, _
  ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
  ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
  ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
  ByVal condiciones As String, ByVal condicionesProducto As String, _
  ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
  ByVal formato As Byte, _
  ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT MONTH(OP.FECHAOP) AS MES, CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1 AS COTIZACION, " & _
        " OPM.CANTIDAD AS CANTIDAD, OPM.COSTO, " & _
        " (OPM.COSTO * OPM.CANTIDAD) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) + ' - ' + RTRIM(OP.NUMEROOP) AS COMPROBANTE " & _
        " FROM ORDENPRODUCCION OP INNER JOIN TIPOCOMPROBANTE TC ON OP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON OP.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OP.CODORDENPRODUCCION = OPD.CODORDENPRODUCCION " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPM ON OPD.CODORDENPRODUCCION = OPM.CODORDENPRODUCCION " & _
        " AND OPD.CODPRODUCTO = OPM.CODPRODUCTO " & _
        " INNER JOIN SUCURSAL S ON OPM.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS P ON OPM.CODPRODUCTOMATERIAPRIMA = P.CODPRODUCTO " & _
        " WHERE OP.CODEMPRESA = " & empCodigo & condiciones & condicionesProducto & _
        " ORDER BY MES, CODIGOBARRA, TC.NUMTIPOCOMPRO, OP.NUMEROOP "

        Try
            cmd = New SqlCommand(sql, sqlc)
            dr = cmd.ExecuteReader()

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo2") = dr("COMPROBANTE")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Campo9") = 0

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                    row.Item("Numero3") = dr("COSTO")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(dr("COSTO") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            REM PARA MOSTRAR LA CANTIDAD DE PRODUCTO FINAL A PRODUCIR POR CADA ORDEN EN EL MES
            ser.Abrir(sqlc1)
            sql = ""
            sql = " SELECT OP.CODORDENPRODUCCION, MONTH(OP.FECHAOP) AS MES, " & _
           " CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
           " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1 AS COTIZACION, " & _
           " OPD.CANTIDAD AS CANTIDAD, OPD.COSTO, " & _
           " (OPD.COSTO * OPD.CANTIDAD) AS TOTAL, " & _
           " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
           " RTRIM(P.DESPRODUCTO) AS PRODUCTO, " & _
           " RTRIM(TC.NUMTIPOCOMPRO) + ' - ' + RTRIM(OP.NUMEROOP) AS COMPROBANTE , OPD.CODPRODUCTO , OPD.CANTIDAD, OPD.COSTO, OP.COTIZACION1 " & _
           " FROM ORDENPRODUCCION OP " & _
           " INNER JOIN TIPOCOMPROBANTE TC ON OP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
           " INNER JOIN MONEDA M ON OP.CODMONEDA = M.CODMONEDA " & _
           " INNER JOIN ORDENPRODUCCIONDETALLE OPD ON OP.CODORDENPRODUCCION = OPD.CODORDENPRODUCCION " & _
           " INNER JOIN SUCURSAL S ON OP.CODSUCURSAL = S.CODSUCURSAL " & _
           " INNER JOIN PRODUCTOS P ON OPD.CODPRODUCTO= P.CODPRODUCTO " & _
        " WHERE OP.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY MES, CODIGOBARRA, TC.NUMTIPOCOMPRO, OP.NUMEROOP "

            cmd1 = New SqlCommand(sql, sqlc1)
            dr2 = cmd1.ExecuteReader()

            Do While dr2.Read()
                row = ds.Tables("Detalle").NewRow()
                row.Item("Campo10") = dr2("CODIGOBARRA")
                row.Item("Campo11") = dr2("PRODUCTO")
                row.Item("Numero10") = dr2("CANTIDAD")

                row.Item("Campo12") = dr2("COMPROBANTE")
                row.Item("Campo13") = dr2("FECHA")

                row.Item("Campo9") = 1


                If codMoneda = dr2("CODMONEDA") Then
                    row.Item("Numero12") = dr2("CANTIDAD") * dr2("COSTO")
                    row.Item("Numero11") = dr2("COSTO")
                Else
                    row.Item("Numero12") = Math.Round((dr2("CANTIDAD") * dr2("COSTO")) * dr2("COTIZACION1") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero11") = Math.Round(dr2("COSTO") * dr2("COTIZACION1") / CotizacionMonedaInf, decimalMonedaInf)
                End If


                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '******


            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto
            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)

        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr2.Close()
            ser.Cerrar(sqlc1)
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function infResumenIngresoProduccionMensual(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal formato As Byte, _
    ByVal desdeCuenta As String, ByVal hastaCuenta As String, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT MONTH(IP.FECHACOMPROBANTE) AS MES, " & _
        " ISNULL(RTRIM(PL.NUMPLANCUENTA), '0') AS NUMPLANCUENTA, ISNULL(RTRIM(PL.DESPLANCUENTA), 'SIN CUENTA - ' + RTRIM(P.DESPRODUCTO)) AS DESPLANCUENTA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, IP.COTIZACION1 AS COTIZACION, " & _
        " IPD.CANTIDAD AS CANTIDAD, " & _
        " (IPD.COSTO * IPD.CANTIDAD) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO " & _
        " FROM PRODUCCIONINGRESOPRODUCTO IP INNER JOIN TIPOCOMPROBANTE TC ON IP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON IP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON IP.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN PRODUCCIONINGRESOPRODUCTODET IPD ON IP.CODINGRESOPROTER = IPD.CODINGRESOPROTER " & _
        " INNER JOIN PRODUCTOS P ON IPD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PL ON PL.CODPLANCUENTA = P.CUENTAMERCADERIA " & _
        " WHERE IP.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY MES, NUMPLANCUENTA, CODIGOBARRA "

        Try
            cmd = New SqlCommand(sql, sqlc)
            dr = cmd.ExecuteReader()

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo3") = dr("NUMPLANCUENTA")
                row.Item("Campo4") = dr("DESPLANCUENTA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme
            row.Item("Campo15") = desdeCuenta
            row.Item("Campo16") = hastaCuenta
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto

            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infIngresoMensualBalanceado(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal formato As Byte, _
    ByVal desdeProducto As String, ByVal hastaProducto As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " SELECT MONTH(IP.FECHACOMPROBANTE) AS MES, CONVERT(VARCHAR(10), IP.FECHACOMPROBANTE, 103) AS FECHA, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, IP.COTIZACION1 AS COTIZACION, " & _
        " IPD.CANTIDAD AS CANTIDAD, IPD.COSTO, " & _
        " (IPD.COSTO * IPD.CANTIDAD) AS TOTAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS PRODUCTO, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) + ' - ' + RTRIM(IP.NUMCOMPROBANTE) AS COMPROBANTE " & _
        " FROM PRODUCCIONINGRESOPRODUCTO IP INNER JOIN TIPOCOMPROBANTE TC ON IP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON IP.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN PRODUCCIONINGRESOPRODUCTODET IPD ON IPD.CODINGRESOPROTER = IP.CODINGRESOPROTER " & _
        " INNER JOIN SUCURSAL S ON IP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS P ON IPD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE IP.CODEMPRESA = " & empCodigo & condiciones & _
        " ORDER BY MES, CODIGOBARRA, TC.NUMTIPOCOMPRO, IP.NUMCOMPROBANTE "

        Try
            cmd = New SqlCommand(sql, sqlc)
            dr = cmd.ExecuteReader()

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = textomes(dr("MES"))
                row.Item("Campo2") = dr("COMPROBANTE")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("CODIGOBARRA")
                row.Item("Campo6") = dr("PRODUCTO")

                row.Item("Numero1") = dr("CANTIDAD")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero2") = dr("TOTAL")
                    row.Item("Numero3") = dr("COSTO")
                Else
                    row.Item("Numero2") = Math.Round(dr("TOTAL") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(dr("COSTO") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme
            row.Item("Campo17") = desdeProducto
            row.Item("Campo18") = hastaProducto
            row.Item("Numero1") = formato

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infConsolidadoProduccionLote(ByVal desdeSucursal As String, _
    ByVal hastaSucursal As String, _
    ByVal desdeInicio As String, ByVal hastaInicio As String, _
    ByVal desdeFin As String, ByVal hastaFin As String, _
    ByVal codMoneda As Long, ByVal moneda As String, ByVal cotizacion As String, _
    ByVal condiciones As String, _
    ByVal CODPOLLITO As Long, ByVal CODPOLLO As Long) As DataSet
        Dim i As Integer

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        Try

            sql = ""
            sql = " SELECT 1 AS ORDEN, MAX(RTRIM(L.NUMSUCURSAL)) AS NUMLOTE, MAX(RTRIM(L.DESSUCURSAL)) AS LOTE, " & _
            " MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
            " 'COMPRA DE POLLITOS' AS TIPO, SUM(PD.CANTIDAD) AS CANTIDAD, SUM(PD.CANTIDAD * PD.COSTO) AS COSTOTOTAL, " & _
            " MAX(PD.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS MONEDA, MAX(PD.COTIZACION1) AS COTIZACION, " & _
            " 0 AS CANTIDADCOMPRADA, " & _
            " 0 AS CANTIDADMUERTA, " & _
            " 0 AS CANTIDADTRANSFERIDA, " & _
            " '' AS FECHAINICIO, " & _
            " '' AS FECHAFIN " & _
            " FROM PRODUCCIONPOLLO PP INNER JOIN PRODUCCIONPOLLODETALLE PD ON PP.CODPRODUCCION = PD.CODPRODUCCION " & _
            " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PP.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PD.CODMONEDA " & _
            " INNER JOIN COMPRAS C ON PD.CODCOMPRA = C.CODCOMPRA " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = C.CODCOMPROBANTE " & _
            " WHERE PP.CODEMPRESA = " & empCodigo & " AND PD.CODPRODUCTO = " & CODPOLLITO & " " & condiciones & _
            " GROUP BY L.CODSUCURSAL, S.CODSUCURSAL, PD.CODMONEDA " & _
            " UNION ALL " & _
            " SELECT 2 AS ORDEN, MAX(RTRIM(L.NUMSUCURSAL)) AS NUMLOTE, MAX(RTRIM(L.DESSUCURSAL)) AS LOTE, " & _
            " MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
            " 'GASTOS VARIOS' AS TIPO, SUM(PD.CANTIDAD) AS CANTIDAD, SUM(PD.CANTIDAD * PD.COSTO) AS COSTOTOTAL, " & _
            " MAX(PD.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS MONEDA, MAX(PD.COTIZACION1) AS COTIZACION, " & _
            " 0 AS CANTIDADCOMPRADA, " & _
            " 0 AS CANTIDADMUERTA, " & _
            " 0 AS CANTIDADTRANSFERIDA, " & _
            " '' AS FECHAINICIO, " & _
            " '' AS FECHAFIN " & _
            " FROM PRODUCCIONPOLLO PP INNER JOIN PRODUCCIONPOLLODETALLE PD ON PP.CODPRODUCCION = PD.CODPRODUCCION " & _
            " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PP.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PD.CODMONEDA " & _
            " INNER JOIN COMPRAS C ON PD.CODCOMPRA = C.CODCOMPRA " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = C.CODCOMPROBANTE " & _
            " WHERE PP.CODEMPRESA = " & empCodigo & " AND PD.CODPRODUCTO <> " & CODPOLLITO & " " & condiciones & _
            " GROUP BY L.CODSUCURSAL, S.CODSUCURSAL, PD.CODMONEDA " & _
            " UNION ALL " & _
            " SELECT 3 AS ORDEN, MAX(RTRIM(L.NUMSUCURSAL)) AS NUMLOTE, MAX(RTRIM(L.DESSUCURSAL)) AS LOTE, " & _
            " MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
            " 'ENVIO DE BALANCEADOS' AS TIPO, SUM(PD.CANTIDAD) AS CANTIDAD, SUM(PD.CANTIDAD * PD.COSTO) AS COSTOTOTAL, " & _
            " MAX(PD.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS MONEDA, MAX(PD.COTIZACION1) AS COTIZACION, " & _
            " 0 AS CANTIDADCOMPRADA, " & _
            " 0 AS CANTIDADMUERTA, " & _
            " 0 AS CANTIDADTRANSFERIDA, " & _
            " '' AS FECHAINICIO, " & _
            " '' AS FECHAFIN " & _
            " FROM PRODUCCIONPOLLO PP INNER JOIN PRODUCCIONPOLLODETALLE PD ON PP.CODPRODUCCION = PD.CODPRODUCCION " & _
            " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PP.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PD.CODMONEDA " & _
            " INNER JOIN TRANFERENCIA TR ON PD.CODTRANSFERENCIA = TR.CODTRANSFERENCIA " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = TR.CODCOMPROBANTE " & _
            " WHERE PP.CODEMPRESA = " & empCodigo & " AND PD.CODPRODUCTO <> " & CODPOLLO & " " & condiciones & _
            " GROUP BY L.CODSUCURSAL, S.CODSUCURSAL, PD.CODMONEDA " & _
            " UNION ALL " & _
            " SELECT 4 AS ORDEN, MAX(RTRIM(L.NUMSUCURSAL)) AS NUMLOTE, MAX(RTRIM(L.DESSUCURSAL)) AS LOTE, " & _
            " MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
            " 'AJUSTE POR MORTANDAD' AS TIPO, SUM(PD.CANTIDAD) AS CANTIDAD, SUM(PD.CANTIDAD * PD.COSTO) AS COSTOTOTAL, " & _
            " MAX(PD.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS MONEDA, MAX(PD.COTIZACION1) AS COTIZACION, " & _
            " 0 AS CANTIDADCOMPRADA, " & _
            " 0 AS CANTIDADMUERTA, " & _
            " 0 AS CANTIDADTRANSFERIDA, " & _
            " '' AS FECHAINICIO, " & _
            " '' AS FECHAFIN " & _
            " FROM PRODUCCIONPOLLO PP INNER JOIN PRODUCCIONPOLLODETALLE PD ON PP.CODPRODUCCION = PD.CODPRODUCCION " & _
            " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PP.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PD.CODMONEDA " & _
            " INNER JOIN AJUSTE A ON PD.CODAJUSTE = A.CODAJUSTE " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = A.CODCOMPROBANTE " & _
            " WHERE PP.CODEMPRESA = " & empCodigo & " " & condiciones & _
            " GROUP BY L.CODSUCURSAL, S.CODSUCURSAL, PD.CODMONEDA " & _
            " UNION ALL " & _
            " SELECT 5 AS ORDEN, MAX(RTRIM(L.NUMSUCURSAL)) AS NUMLOTE, MAX(RTRIM(L.DESSUCURSAL)) AS LOTE, " & _
            " MAX(RTRIM(S.DESSUCURSAL)) AS SUCURSAL, " & _
            " 'ENVIO AL MATADERO' AS TIPO, SUM(PD.CANTIDAD) AS CANTIDAD, SUM(PD.CANTIDAD * PD.COSTO) AS COSTOTOTAL, " & _
            " MAX(PD.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS MONEDA, MAX(PD.COTIZACION1) AS COTIZACION, " & _
            " 0 AS CANTIDADCOMPRADA, " & _
            " 0 AS CANTIDADMUERTA, " & _
            " 0 AS CANTIDADTRANSFERIDA, " & _
            " '' AS FECHAINICIO, " & _
            " '' AS FECHAFIN " & _
            " FROM PRODUCCIONPOLLO PP INNER JOIN PRODUCCIONPOLLODETALLE PD ON PP.CODPRODUCCION = PD.CODPRODUCCION " & _
            " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PP.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PD.CODMONEDA " & _
            " INNER JOIN TRANFERENCIA TR ON PD.CODTRANSFERENCIA = TR.CODTRANSFERENCIA " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = TR.CODCOMPROBANTE " & _
            " WHERE PP.CODEMPRESA = " & empCodigo & " AND PD.CODPRODUCTO = " & CODPOLLO & " " & condiciones & _
            " GROUP BY L.CODSUCURSAL, S.CODSUCURSAL, PD.CODMONEDA " & _
            " ORDER BY NUMLOTE, ORDEN, SUCURSAL "

            cmd = New SqlCommand(sql, sqlc)
            dr = cmd.ExecuteReader()

            Dim lote As String

            lote = ""

            Do While dr.Read()
                If lote <> dr("LOTE") Then
                    lote = dr("LOTE")

                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("LOTE")

                    If funcion.Validar_Tabla("CODPRODUCCION", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "P.FECHAFIN IS NULL AND L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0) > 0 Then
                        row.Item("Campo2") = "PENDIENTE"
                    Else
                        row.Item("Campo2") = "FINALIZADO"
                    End If

                    row.Item("Campo3") = funcion.Descripcion_Tabla("DESPRODUCTO", "PRODUCTOS", "CODPRODUCTO", CODPOLLITO, empCodigo)

                    row.Item("Campo4") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MIN(FECHAINICIO), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Campo5") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MAX(FECHAFIN), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Numero1") = 2
                    row.Item("Numero2") = 0
                    row.Item("Numero3") = 0

                    ds.Tables("Detalle").Rows.Add(row)

                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("LOTE")

                    If funcion.Validar_Tabla("CODPRODUCCION", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "P.FECHAFIN IS NULL AND L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0) > 0 Then
                        row.Item("Campo2") = "FINALIZADO"
                    Else
                        row.Item("Campo2") = "PENDIENTE"
                    End If

                    row.Item("Campo3") = funcion.Descripcion_Tabla("DESPRODUCTO", "PRODUCTOS", "CODPRODUCTO", CODPOLLITO, empCodigo)

                    row.Item("Campo4") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MIN(FECHAINICIO), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Campo5") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MAX(FECHAFIN), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Numero1") = 3
                    row.Item("Numero2") = 0
                    row.Item("Numero3") = 0

                    ds.Tables("Detalle").Rows.Add(row)

                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("LOTE")

                    If funcion.Validar_Tabla("CODPRODUCCION", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "P.FECHAFIN IS NULL AND L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0) > 0 Then
                        row.Item("Campo2") = "FINALIZADO"
                    Else
                        row.Item("Campo2") = "PENDIENTE"
                    End If

                    row.Item("Campo3") = funcion.Descripcion_Tabla("DESPRODUCTO", "PRODUCTOS", "CODPRODUCTO", CODPOLLITO, empCodigo)

                    row.Item("Campo4") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MIN(FECHAINICIO), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Campo5") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MAX(FECHAFIN), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Numero1") = 4
                    row.Item("Numero2") = 0
                    row.Item("Numero3") = 0

                    ds.Tables("Detalle").Rows.Add(row)

                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("LOTE")

                    If funcion.Validar_Tabla("CODPRODUCCION", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "P.FECHAFIN IS NULL AND L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0) > 0 Then
                        row.Item("Campo2") = "FINALIZADO"
                    Else
                        row.Item("Campo2") = "PENDIENTE"
                    End If

                    row.Item("Campo3") = funcion.Descripcion_Tabla("DESPRODUCTO", "PRODUCTOS", "CODPRODUCTO", CODPOLLITO, empCodigo)

                    row.Item("Campo4") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MIN(FECHAINICIO), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Campo5") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MAX(FECHAFIN), 103", _
                    "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                    "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                    "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                    row.Item("Numero1") = 5
                    row.Item("Numero2") = 0
                    row.Item("Numero3") = 0

                    ds.Tables("Detalle").Rows.Add(row)
                End If

                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("LOTE")

                If funcion.Validar_Tabla("CODPRODUCCION", _
                "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                "P.FECHAFIN IS NULL AND L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0) > 0 Then
                    row.Item("Campo2") = "FINALIZADO"
                Else
                    row.Item("Campo2") = "PENDIENTE"
                End If

                row.Item("Campo3") = funcion.Descripcion_Tabla("DESPRODUCTO", "PRODUCTOS", "CODPRODUCTO", CODPOLLITO, empCodigo)

                row.Item("Campo4") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MIN(FECHAINICIO), 103", _
                "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                row.Item("Campo5") = funcion.Descripcion_Tabla("''), CONVERT(VARCHAR(10), MAX(FECHAFIN), 103", _
                "PRODUCCIONPOLLO P INNER JOIN SUCURSAL S ON S.CODSUCURSAL = P.CODSUCURSAL " & _
                "INNER JOIN SUCURSAL L ON L.CODSUCURSAL = S.CODSUCURSALPERTENECE", _
                "L.DESSUCURSAL = '" & dr("LOTE") & "' ---", "", 0)

                row.Item("Numero1") = dr("ORDEN")
                row.Item("Numero2") = dr("CANTIDAD")
                row.Item("Numero3") = dr("COSTOTOTAL")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infProduccionMatadero(ByVal sucursal As String, _
    ByVal numero As String, _
    ByVal fecha As String, _
    ByVal moneda As String, _
    ByVal producto As String, _
    ByVal cantidad As Decimal, _
    ByVal peso As Decimal, _
    ByVal costo As Decimal, _
    ByVal dtOrigenCosto As DataTable, _
    ByVal dtDetalle As DataTable, _
    ByVal usunivel As Integer) As DataSet
        Dim i As Integer

        ds.Clear()

        Try
            ds.ReadXml(direccion)

            For i = 0 To dtOrigenCosto.Rows.Count - 1
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "1"
                row.Item("Campo2") = dtOrigenCosto.Rows(i)("LIN")
                row.Item("Campo3") = dtOrigenCosto.Rows(i)("TIPO")
                row.Item("Campo4") = dtOrigenCosto.Rows(i)("COMPROBANTE")
                row.Item("Campo5") = dtOrigenCosto.Rows(i)("NUMERO")
                row.Item("Campo6") = dtOrigenCosto.Rows(i)("CODIGOBARRA")
                row.Item("Campo7") = dtOrigenCosto.Rows(i)("DESCRIPCION")

                row.Item("Numero1") = dtOrigenCosto.Rows(i)("CANTIDAD")
                row.Item("Numero2") = dtOrigenCosto.Rows(i)("PESO")
                row.Item("Numero3") = dtOrigenCosto.Rows(i)("COSTO")
                row.Item("Numero4") = dtOrigenCosto.Rows(i)("TOTAL")

                ds.Tables("Detalle").Rows.Add(row)
            Next

            For i = 0 To dtDetalle.Rows.Count - 1
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = "2"
                row.Item("Campo2") = dtDetalle.Rows(i)("LIN")
                row.Item("Campo3") = ""
                row.Item("Campo4") = ""
                row.Item("Campo5") = ""
                row.Item("Campo6") = dtDetalle.Rows(i)("CODIGOBARRA")
                row.Item("Campo7") = dtDetalle.Rows(i)("DESCRIPCION")

                row.Item("Numero1") = dtDetalle.Rows(i)("CANTIDAD")
                row.Item("Numero2") = dtDetalle.Rows(i)("PRECIO")
                row.Item("Numero3") = dtDetalle.Rows(i)("COSTO")
                row.Item("Numero4") = dtDetalle.Rows(i)("TOTAL")

                ds.Tables("Detalle").Rows.Add(row)
            Next

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = sucursal
            row.Item("Campo3") = numero
            row.Item("Campo4") = fecha
            row.Item("Campo5") = moneda
            row.Item("Campo6") = producto
            row.Item("Numero1") = cantidad
            row.Item("Numero2") = peso
            row.Item("Numero3") = costo

            If usunivel = 1 Then
                row.Item("Numero10") = 1
            Else
                row.Item("Numero10") = 0
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infCategoria(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMCATEGORIA)))+LTRIM(RTRIM(NUMCATEGORIA)) AS NUMERO, " & _
        "RTRIM(NUMCATEGORIA) AS CODIGO, RTRIM(DESCATEGORIA) AS DESCRIPCION FROM CATEGORIAPRODUCTO " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function infSubCategoria(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMSUBCATEGORIA)))+LTRIM(RTRIM(NUMSUBCATEGORIA)) AS NUMERO, " & _
        "RTRIM(NUMSUBCATEGORIA) AS CODIGO, RTRIM(DESSUBCATEGORIA) AS DESCRIPCION FROM SUBCATEGORIAPRODUCTO " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infMarca(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMMARCA)))+LTRIM(RTRIM(NUMMARCA)) AS NUMERO, " & _
        "RTRIM(NUMMARCA) AS CODIGO, RTRIM(DESMARCA) AS DESCRIPCION FROM MARCA " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfTIpoListaPrecio(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(T.NUMLISTA)))+LTRIM(RTRIM(T.NUMLISTA)) AS NUMERO, " & _
        "RTRIM(T.NUMLISTA) AS CODIGO, RTRIM(T.DESLISTA) AS DESCRIPCION,RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        "RTRIM(T1.DESLISTA)AS DESLISTA1,T.REDONDEO,T.PORCENTAJE " & _
        "FROM TIPOLISTA T LEFT OUTER JOIN MONEDA M ON T.CODMONEDA=M.CODMONEDA " & _
         "LEFT OUTER JOIN TIPOLISTA T1 ON T.CODLISTABASE=T1.CODLISTA " & _
        "WHERE T.CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo4") = dr("DESMONEDA")
                row.Item("Campo5") = dr("DESLISTA1")
                row.Item("Numero1") = dr("PORCENTAJE")
                row.Item("Numero2") = dr("REDONDEO")
                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infProveedor(ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(P.NUMPROVEEDOR)))+LTRIM(RTRIM(P.NUMPROVEEDOR)) AS NUMERO, " & _
        "RTRIM(P.NUMPROVEEDOR) AS CODIGO, RTRIM(P.APELLIDO)+','+RTRIM(P.NOMBRE) AS DESCRIPCION, " & _
        "RTRIM(P.NUMCEDULA) AS NUMCEDULA,RTRIM(P.RUC) AS RUC,RTRIM(P.DIRECCION) AS DIRECCION, " & _
        "RTRIM(P.TELEFONO) AS TELEFONO, RTRIM(P.CELULAR) AS CELULAR, " & _
        "RTRIM(P.FAX) AS FAX, RTRIM(P.EMAIL) AS EMAIL,RTRIM(P.OBSERVACION) AS OBSERVACION, " & _
        "RTRIM(PC.DESPLANCUENTA) AS DESCUENTAPROVEEDOR, " & _
        "RTRIM(PC.DESPLANCUENTA) AS DESCUENTACHEQUE, " & _
        "RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        "RTRIM(CC.DESCONDICION) AS DESCONDICION " & _
        "FROM PROVEEDOR P " & _
        "LEFT OUTER JOIN PLANCUENTAS PC ON P.CODPLANCUENTA = PC.CODPLANCUENTA " & _
        "LEFT OUTER JOIN TIPOCOMPROBANTE TC ON P.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        "LEFT OUTER JOIN CONDICIONPAGO CC ON P.CODCONDICION = CC.CODCONDICION " & _
        "WHERE P.CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo3") = dr("NUMCEDULA")
                row.Item("Campo4") = dr("RUC")
                row.Item("Campo5") = dr("DIRECCION")
                row.Item("Campo7") = dr("TELEFONO")
                row.Item("Campo8") = dr("CELULAR")
                row.Item("Campo9") = dr("FAX")
                row.Item("Campo10") = dr("EMAIL")
                row.Item("Campo13") = dr("DESCUENTAPROVEEDOR")
                row.Item("Campo14") = dr("OBSERVACION")
                row.Item("Campo15") = dr("DESCUENTACHEQUE")
                row.Item("Campo16") = dr("DESCOMPROBANTE")
                row.Item("Campo17") = dr("DESCONDICION")


                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            'row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function VerificarProductos() As DataSet

        sql = ""
        sql = "SELECT A.COD_PRODUCTO AS CODIGO, A.COD_BARRAS AS BARRA , A.DESCRIPCIÓN AS DESCRIPCION, A.COD_NUEVO AS NUEVO, A.DESC_PORT AS PROVEEDOR " & vbCrLf & _
        " FROM GS2.DBO.PRODUCTOSMIGRAR A " & vbCrLf & _
        " WHERE (SELECT COUNT(*) FROM GS2.DBO.PRODUCTOSMIGRAR B WHERE A.COD_NUEVO = B.COD_NUEVO) > 1 " & vbCrLf & _
        " ORDER BY A.COD_NUEVO "

        Try
            ds.ReadXml(direccion)
            ds.Clear()

            ser.Abrir(sqlc)

            cmd.Connection = sqlc
            cmd.CommandText = sql
            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("BARRA")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo2") = dr("NUEVO")
                row.Item("Campo2") = dr("PROVEEDOR")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try
        Return ds
    End Function

    Public Function infCondicionCompra(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMCONDICION)))+LTRIM(RTRIM(NUMCONDICION)) AS NUMERO, " & _
        "RTRIM(NUMCONDICION) AS CODIGO, RTRIM(DESCONDICION) AS DESCRIPCION, ISNULL(PORCENTAJE,0) AS PORCENTAJE, ISNULL(PLAZO,0) AS PLAZO FROM CONDICIONPAGO " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Numero1") = dr("PORCENTAJE")
                row.Item("Numero2") = dr("PLAZO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    'Public Function impFacturaNuevoFormato(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadLineas As Integer) As DataSet

    '    Dim ds As New DataSet
    '    Dim dr As DataRow
    '    Dim items As Long
    '    Dim ser As BD.ABD
    '    Dim imp, desprod As String
    '    Dim num As Integer
    '    Dim aux, aux1 As String

    '    ser = New BD.ABD
    '    cnn = ser.Abrir

    '    Dim fecha As Date
    '    Dim moneda As String
    '    Dim cotizacion As Decimal
    '    Dim PorcentajeDescuento As Decimal




    '    sql = ""
    '    sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
    '            "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
    '            "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
    '            "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) AS CLIENTE, " & _
    '            "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
    '            "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
    '            "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
    '            "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
    '            "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
    '            "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, " & _
    '            "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
    '            "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
    '            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '            "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '            "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
    '            "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '            "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
    '            "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
    '            "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
    '            "WHERE V.CODVENTA = " & CODVENTA & " "


    '    Try

    '        ds.ReadXml(Direccion)

    '        cmd = New SqlCommand(sql, cnn)
    '        dar = cmd.ExecuteReader()


    '        Do While dar.Read
    '            fecha = CDate(dar("FECHAVENTA"))
    '            cotizacion = dar("COTIZACION")
    '            PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
    '            moneda = dar("DESMONEDA")

    '            dr = ds.Tables("Cabecera").NewRow()

    '            dr.Item("Campo4") = dar("DESCONDICION")
    '            If dar("CONDICIONVENTA") = 0 Then
    '                'dr.Item("Campo4") = "CONTADO"
    '                dr.Item("Campo2") = "X"
    '                dr.Item("Campo3") = ""
    '            Else
    '                'dr.Item("Campo4") = "CREDITO"
    '                dr.Item("Campo2") = ""
    '                dr.Item("Campo3") = "X"
    '            End If

    '            dr.Item("Campo5") = dar("NUMERO")

    '            'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
    '            'Dim LOCO As String = ""
    '            'LOCO = dar("DESCIUDAD")
    '            'If LOCO = "" Then
    '            '    LOCO = "Concepción, "
    '            'Else
    '            '    LOCO = LOCO & ", "
    '            'End If
    '            dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
    '            dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

    '            If dar("RUC") = "" Then
    '                dr.Item("Campo7") = dar("NUMCEDULA")
    '            Else
    '                dr.Item("Campo7") = dar("RUC")
    '            End If

    '            dr.Item("Campo8") = dar("DIRECCION")
    '            dr.Item("Campo9") = dar("TELEFONO")
    '            dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
    '            dr.Item("Numero2") = candecimales
    '            ds.Tables("Cabecera").Rows.Add(dr)
    '        Loop
    '    Catch ex As Exception
    '        MsgBox(ex.ToString)
    '    Finally
    '        dar.Close()
    '    End Try

    '    'DETALLE
    '    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    '    sql = ""
    '    sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
    '            "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
    '            "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
    '            "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
    '            "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
    '            "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
    '            "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE " & _
    '            "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
    '            "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
    '            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '            "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
    '            "WHERE VD.CODVENTA = " & CODVENTA & " " & _
    '            "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

    '    Try
    '        Dim dt As New DataTable("DETALLE")
    '        Dim da As SqlDataAdapter

    '        'ser = New BD.ABD
    '        'cnn = ser.Abrir
    '        Try
    '            da = New SqlDataAdapter(sql, cnn)
    '            da.Fill(dt)
    '        Catch ex As Exception
    '            MsgBox(EX.ToString)
    '        End Try


    '        Try
    '            Dim imptotal As Decimal
    '            Dim saldocobro As Decimal
    '            Dim impletras As String

    '            Dim totalExenta As Decimal
    '            Dim totalGravada As Decimal
    '            Dim totalIva As Decimal
    '            Dim totalDescuento As Decimal
    '            Dim totalDescuentoExenta As Decimal
    '            Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
    '            Dim sumaIva5, sumaIva10 As Decimal
    '            Dim tipoventa As Long
    '            Dim grav5, grav10 As Decimal

    '            Dim i As Integer
    '            Dim ii As Integer


    '            Dim espacio As Integer

    '            Dim descuentolinea As Decimal
    '            Dim descuentoexenta, descuento5, descuento10 As Decimal

    '            descuentoexenta = 0
    '            descuento5 = 0
    '            descuento10 = 0

    '            'For i = 1 To 3
    '            imptotal = 0
    '            sumaIva5 = 0
    '            sumaIva10 = 0
    '            totalDescuentoExenta = 0
    '            totalDescuentoGravada5 = 0
    '            totalDescuentoGravada10 = 0
    '            totalDescuento = 0
    '            descuentolinea = 0


    '            For ii = 0 To dt.Rows.Count - 1
    '                imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

    '                If totalExenta = 0 And totalGravada = 0 Then
    '                    totalExenta = dt.Rows(ii)("TOTALEXENTA")
    '                    totalGravada = dt.Rows(ii)("TOTALGRAVADA")
    '                    totalIva = dt.Rows(ii)("TOTALIVA")
    '                    tipoventa = dt.Rows(ii)("TIPOVENTA")
    '                End If

    '                dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

    '                dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
    '                dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

    '                dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
    '                ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
    '                dr.Item("Numero13") = dt.Rows(ii)("DESC")
    '                'row.Item("Numero12") = dt.Rows(ii)("IVA")
    '                'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

    '                If dt.Rows(ii)("IVA") = 0 Then
    '                    'Productos Exentos
    '                    descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                    descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                    dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
    '                    dr.Item("Numero4") = 0
    '                    dr.Item("Numero6") = 0
    '                    'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                    dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
    '                    'row.Item("Campo7") = "---"
    '                Else
    '                    'Productos Gravados
    '                    dr.Item("Numero3") = 0

    '                    Select Case dt.Rows(ii)("IVA")
    '                        Case 5
    '                            descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
    '                            grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
    '                            'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                            dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
    '                            descuentolinea = 0
    '                            dr.Item("Numero6") = 0
    '                            dr.Item("Campo7") = "5%"
    '                        Case 10
    '                            descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            dr.Item("Numero4") = 0
    '                            dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
    '                            'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                            dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
    '                            descuentolinea = 0
    '                            dr.Item("Campo7") = "10%"
    '                    End Select
    '                End If


    '                If dt.Rows(ii)("DESC") = 100 Then
    '                    aux = "Bonif"
    '                ElseIf dt.Rows(ii)("DESC") <> 0 Then
    '                    aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
    '                    aux = aux1 & "%"
    '                End If

    '                dr.Item("Campo2") = dr.Item("Campo2") '& aux
    '                aux = ""
    '                aux1 = ""
    '                Dim LOCOS As String = dr.Item("CAMPO2")

    '                ds.Tables("Detalle").Rows.Add(dr)
    '            Next

    '            totalDescuento = descuento10 + descuento5 + descuentoexenta

    '            'Calculo del total
    '            If tipoventa = 0 Then
    '                imptotal = imptotal + totalIva - totalDescuento
    '            Else
    '                imptotal = imptotal - totalDescuento
    '            End If

    '            'Para imprimir los totales
    '            dr = ds.Tables("Detalle").NewRow()

    '            dr.Item("Numero5") = totalExenta - totalDescuentoExenta
    '            dr.Item("Numero14") = grav5
    '            dr.Item("Numero9") = grav10
    '            dr.Item("Numero10") = totalDescuento

    '            If totalDescuento > 0 Then
    '                dr.Item("Campo10") = "Total Descuento:"
    '            End If
    '            dr.Item("Numero15") = imptotal
    '            dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
    '            dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

    '            dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

    '            'Imprime una vez el pie que esta en la cabezera
    '            'row.Item("Campo10") = ""
    '            'row.Item("Campo11") = pie
    '            'pie = ""

    '            ds.Tables("Detalle").Rows.Add(dr)
    '            'Next
    '        Catch ex As Exception
    '            MsgBox(Ex.ToString)
    '        Finally
    '            dt.Dispose()
    '            dar.Close()
    '            ser.Cerrar(cnn)
    '        End Try
    '    Finally

    '    End Try
    '    Return ds
    'End Function

    ''''''''' 19/06/2009 ANTES DE CAMBIAR //////////////////////
    'Public Function impFacturaNuevoFormato(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadLineas As Integer) As DataSet

    '    Dim ds As New DataSet
    '    Dim dr As DataRow
    '    Dim items As Long
    '    Dim ser As BD.ABD
    '    Dim imp, desprod As String
    '    Dim num As Integer
    '    Dim aux, aux1 As String

    '    ser = New BD.ABD
    '    cnn = ser.Abrir

    '    Dim fecha As Date
    '    Dim moneda As String
    '    Dim cotizacion As Decimal
    '    Dim PorcentajeDescuento As Decimal




    '    sql = ""
    '    sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
    '            "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
    '            "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
    '            "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) AS CLIENTE, " & _
    '            "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
    '            "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
    '            "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
    '            "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
    '            "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
    '            "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, " & _
    '            "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
    '            "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
    '            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '            "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '            "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
    '            "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '            "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
    '            "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
    '            "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
    '            "WHERE V.CODVENTA = " & CODVENTA & " "


    '    Try

    '        ds.ReadXml(Direccion)

    '        cmd = New SqlCommand(sql, cnn)
    '        dar = cmd.ExecuteReader()


    '        Do While dar.Read
    '            fecha = CDate(dar("FECHAVENTA"))
    '            cotizacion = dar("COTIZACION")
    '            PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
    '            moneda = dar("DESMONEDA")

    '            dr = ds.Tables("Cabecera").NewRow()

    '            dr.Item("Campo4") = dar("DESCONDICION")
    '            If dar("CONDICIONVENTA") = 0 Then
    '                'dr.Item("Campo4") = "CONTADO"
    '                dr.Item("Campo2") = "X"
    '                dr.Item("Campo3") = ""
    '            Else
    '                'dr.Item("Campo4") = "CREDITO"
    '                dr.Item("Campo2") = ""
    '                dr.Item("Campo3") = "X"
    '            End If

    '            dr.Item("Campo5") = dar("NUMERO")

    '            'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
    '            'Dim LOCO As String = ""
    '            'LOCO = dar("DESCIUDAD")
    '            'If LOCO = "" Then
    '            '    LOCO = "Concepción, "
    '            'Else
    '            '    LOCO = LOCO & ", "
    '            'End If
    '            dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
    '            dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

    '            If dar("RUC") = "" Then
    '                dr.Item("Campo7") = dar("NUMCEDULA")
    '            Else
    '                dr.Item("Campo7") = dar("RUC")
    '            End If

    '            dr.Item("Campo8") = dar("DIRECCION")
    '            dr.Item("Campo9") = dar("TELEFONO")
    '            dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
    '            dr.Item("Numero2") = candecimales
    '            ds.Tables("Cabecera").Rows.Add(dr)
    '        Loop
    '    Catch ex As Exception
    '        MsgBox(ex.ToString)
    '    Finally
    '        dar.Close()
    '    End Try

    '    'DETALLE
    '    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    '    sql = ""
    '    sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
    '            "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
    '            "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
    '            "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
    '            "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
    '            "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
    '            "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE " & _
    '            "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
    '            "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
    '            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '            "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
    '            "WHERE VD.CODVENTA = " & CODVENTA & " " & _
    '            "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

    '    Try
    '        Dim dt As New DataTable("DETALLE")
    '        Dim da As SqlDataAdapter

    '        'ser = New BD.ABD
    '        'cnn = ser.Abrir
    '        Try
    '            da = New SqlDataAdapter(sql, cnn)
    '            da.Fill(dt)
    '        Catch ex As Exception
    '            MsgBox(EX.ToString)
    '        End Try


    '        Try
    '            Dim imptotal As Decimal
    '            Dim saldocobro As Decimal
    '            Dim impletras As String

    '            Dim totalExenta As Decimal
    '            Dim totalGravada As Decimal
    '            Dim totalIva As Decimal
    '            Dim totalDescuento As Decimal
    '            Dim totalDescuentoExenta As Decimal
    '            Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
    '            Dim sumaIva5, sumaIva10 As Decimal
    '            Dim tipoventa As Long
    '            Dim grav5, grav10 As Decimal

    '            Dim i As Integer
    '            Dim ii As Integer


    '            Dim espacio As Integer

    '            Dim descuentolinea As Decimal
    '            Dim descuentoexenta, descuento5, descuento10 As Decimal

    '            descuentoexenta = 0
    '            descuento5 = 0
    '            descuento10 = 0

    '            'For i = 1 To 3
    '            imptotal = 0
    '            sumaIva5 = 0
    '            sumaIva10 = 0
    '            totalDescuentoExenta = 0
    '            totalDescuentoGravada5 = 0
    '            totalDescuentoGravada10 = 0
    '            totalDescuento = 0
    '            descuentolinea = 0


    '            For ii = 0 To dt.Rows.Count - 1
    '                imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

    '                If totalExenta = 0 And totalGravada = 0 Then
    '                    totalExenta = dt.Rows(ii)("TOTALEXENTA")
    '                    totalGravada = dt.Rows(ii)("TOTALGRAVADA")
    '                    totalIva = dt.Rows(ii)("TOTALIVA")
    '                    tipoventa = dt.Rows(ii)("TIPOVENTA")
    '                End If

    '                dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

    '                dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
    '                dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

    '                dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
    '                ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
    '                dr.Item("Numero13") = dt.Rows(ii)("DESC")
    '                'row.Item("Numero12") = dt.Rows(ii)("IVA")
    '                'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

    '                If dt.Rows(ii)("IVA") = 0 Then
    '                    'Productos Exentos
    '                    descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                    descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                    dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
    '                    dr.Item("Numero4") = 0
    '                    dr.Item("Numero6") = 0
    '                    'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                    dr.Item("Numero2") = (dt.Rows(ii)("PRECIOVENTABRUTO") - Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales))  '''' AGREGADO
    '                    'row.Item("Campo7") = "---"
    '                Else
    '                    'Productos Gravados
    '                    dr.Item("Numero3") = 0

    '                    Select Case dt.Rows(ii)("IVA")
    '                        Case 5
    '                            descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
    '                            grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
    '                            'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO

    '                            'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
    '                            dr.Item("Numero2") = (dt.Rows(ii)("PRECIOVENTABRUTO") - Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales))  '''' AGREGADO
    '                            descuentolinea = 0
    '                            dr.Item("Numero6") = 0
    '                            dr.Item("Campo7") = "5%"
    '                        Case 10
    '                            descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            dr.Item("Numero4") = 0
    '                            dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
    '                            'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO

    '                            'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
    '                            dr.Item("Numero2") = (dt.Rows(ii)("PRECIOVENTABRUTO") - Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales)) '''' AGREGADO
    '                            descuentolinea = 0
    '                            dr.Item("Campo7") = "10%"
    '                    End Select
    '                End If


    '                If dt.Rows(ii)("DESC") = 100 Then
    '                    aux = "Bonif"
    '                ElseIf dt.Rows(ii)("DESC") <> 0 Then
    '                    aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
    '                    aux = aux1 & "%"
    '                End If

    '                dr.Item("Campo2") = dr.Item("Campo2") '& aux
    '                aux = ""
    '                aux1 = ""
    '                Dim LOCOS As String = dr.Item("CAMPO2")

    '                ds.Tables("Detalle").Rows.Add(dr)
    '            Next

    '            totalDescuento = descuento10 + descuento5 + descuentoexenta

    '            'Calculo del total
    '            If tipoventa = 0 Then
    '                imptotal = imptotal + totalIva - totalDescuento
    '            Else
    '                imptotal = imptotal - totalDescuento
    '            End If

    '            'Para imprimir los totales
    '            dr = ds.Tables("Detalle").NewRow()

    '            dr.Item("Numero5") = totalExenta - totalDescuentoExenta
    '            dr.Item("Numero14") = grav5
    '            dr.Item("Numero9") = grav10
    '            dr.Item("Numero10") = totalDescuento

    '            If totalDescuento > 0 Then
    '                dr.Item("Campo10") = "Total Descuento:"
    '            End If
    '            dr.Item("Numero15") = imptotal
    '            dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
    '            dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

    '            dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

    '            'Imprime una vez el pie que esta en la cabezera
    '            'row.Item("Campo10") = ""
    '            'row.Item("Campo11") = pie
    '            'pie = ""

    '            ds.Tables("Detalle").Rows.Add(dr)
    '            'Next
    '        Catch ex As Exception
    '            MsgBox(Ex.ToString)
    '        Finally
    '            dt.Dispose()
    '            dar.Close()
    '            ser.Cerrar(cnn)
    '        End Try
    '    Finally

    '    End Try
    '    Return ds
    'End Function

    'Public Function impFacturaNuevoFormatoContinuo(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadLineas As Integer) As DataSet

    '    Dim ds As New DataSet
    '    Dim dr As DataRow
    '    Dim items As Long
    '    Dim ser As BD.ABD
    '    Dim imp, desprod As String
    '    Dim num As Integer
    '    Dim aux, aux1 As String

    '    ser = New BD.ABD
    '    cnn = ser.Abrir

    '    Dim fecha As Date
    '    Dim moneda As String
    '    Dim cotizacion As Decimal
    '    Dim PorcentajeDescuento As Decimal

    '    sql = ""
    '    sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
    '            "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
    '            "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
    '            "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) AS CLIENTE, " & _
    '            "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
    '            "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
    '            "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
    '            "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
    '            "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
    '            "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, ISNULL(VC.OBSERVACION,'') AS OBSERVACION, " & _
    '            "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
    '            "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
    '            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '            "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '            "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
    '            "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '            "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
    '            "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
    '            "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
    '            "LEFT OUTER JOIN VENTASCONFIG VC ON VC.CODEMPRESA = V.CODEMPRESA " & _
    '            "WHERE V.CODVENTA = " & CODVENTA & " "


    '    Try

    '        ds.ReadXml(Direccion)

    '        cmd = New SqlCommand(sql, cnn)
    '        dar = cmd.ExecuteReader()


    '        Do While dar.Read
    '            fecha = CDate(dar("FECHAVENTA"))
    '            cotizacion = dar("COTIZACION")
    '            PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
    '            moneda = dar("DESMONEDA")

    '            dr = ds.Tables("Cabecera").NewRow()

    '            dr.Item("Campo4") = dar("DESCONDICION")
    '            If dar("CONDICIONVENTA") = 0 Then
    '                'dr.Item("Campo4") = "CONTADO"
    '                dr.Item("Campo2") = "X"
    '                dr.Item("Campo3") = ""
    '            Else
    '                'dr.Item("Campo4") = "CREDITO"
    '                dr.Item("Campo2") = ""
    '                dr.Item("Campo3") = "X"
    '            End If

    '            dr.Item("Campo5") = dar("NUMERO")

    '            'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
    '            'Dim LOCO As String = ""
    '            'LOCO = dar("DESCIUDAD")
    '            'If LOCO = "" Then
    '            '    LOCO = "Concepción, "
    '            'Else
    '            '    LOCO = LOCO & ", "
    '            'End If
    '            dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
    '            dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

    '            If dar("RUC") = "" Then
    '                dr.Item("Campo7") = dar("NUMCEDULA")
    '            Else
    '                dr.Item("Campo7") = dar("RUC")
    '            End If

    '            dr.Item("Campo8") = dar("DIRECCION")
    '            dr.Item("Campo9") = dar("TELEFONO")
    '            dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
    '            dr.Item("Numero2") = candecimales
    '            dr.Item("Campo12") = dar("OBSERVACION")
    '            ds.Tables("Cabecera").Rows.Add(dr)
    '        Loop
    '    Catch ex As Exception
    '        MsgBox(ex.ToString)
    '    Finally
    '        dar.Close()
    '    End Try

    '    'DETALLE
    '    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    '    sql = ""
    '    sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
    '            "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
    '            "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
    '            "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
    '            "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
    '            "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
    '            "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE " & _
    '            "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
    '            "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
    '            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '            "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
    '            "WHERE VD.CODVENTA = " & CODVENTA & " " & _
    '            "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

    '    Try
    '        Dim dt As New DataTable("DETALLE")
    '        Dim da As SqlDataAdapter

    '        'ser = New BD.ABD
    '        'cnn = ser.Abrir
    '        Try
    '            da = New SqlDataAdapter(sql, cnn)
    '            da.Fill(dt)
    '        Catch ex As Exception
    '            MsgBox(EX.ToString)
    '        End Try


    '        Try
    '            Dim imptotal As Decimal
    '            Dim saldocobro As Decimal
    '            Dim impletras As String

    '            Dim totalExenta As Decimal
    '            Dim totalGravada As Decimal
    '            Dim totalIva As Decimal
    '            Dim totalDescuento As Decimal
    '            Dim totalDescuentoExenta As Decimal
    '            Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
    '            Dim sumaIva5, sumaIva10 As Decimal
    '            Dim tipoventa As Long
    '            Dim grav5, grav10, exen As Decimal

    '            Dim i As Integer
    '            Dim ii As Integer


    '            Dim espacio As Integer

    '            Dim descuentolinea As Decimal
    '            Dim descuentoexenta, descuento5, descuento10 As Decimal

    '            descuentoexenta = 0
    '            descuento5 = 0
    '            descuento10 = 0

    '            'For i = 1 To 3
    '            imptotal = 0
    '            sumaIva5 = 0
    '            sumaIva10 = 0
    '            totalDescuentoExenta = 0
    '            totalDescuentoGravada5 = 0
    '            totalDescuentoGravada10 = 0
    '            totalDescuento = 0
    '            descuentolinea = 0


    '            For ii = 0 To dt.Rows.Count - 1
    '                imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

    '                If totalExenta = 0 And totalGravada = 0 Then
    '                    totalExenta = dt.Rows(ii)("TOTALEXENTA")
    '                    totalGravada = dt.Rows(ii)("TOTALGRAVADA")
    '                    totalIva = dt.Rows(ii)("TOTALIVA")
    '                    tipoventa = dt.Rows(ii)("TIPOVENTA")
    '                End If

    '                dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

    '                dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
    '                dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

    '                dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
    '                ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
    '                dr.Item("Numero13") = dt.Rows(ii)("DESC")
    '                'row.Item("Numero12") = dt.Rows(ii)("IVA")
    '                'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

    '                If dt.Rows(ii)("IVA") = 0 Then
    '                    'Productos Exentos
    '                    descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                    descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                    'dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
    '                    dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
    '                    dr.Item("Numero4") = 0
    '                    dr.Item("Numero6") = 0
    '                    'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                    dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
    '                    'row.Item("Campo7") = "---"
    '                    exen = exen + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))

    '                Else
    '                    'Productos Gravados
    '                    dr.Item("Numero3") = 0

    '                    Select Case dt.Rows(ii)("IVA")
    '                        Case 5
    '                            descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            'dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
    '                            dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
    '                            'grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
    '                            grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
    '                            'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                            'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
    '                            dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
    '                            descuentolinea = 0
    '                            dr.Item("Numero6") = 0
    '                            dr.Item("Campo7") = "5%"
    '                        Case 10
    '                            descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
    '                            sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            dr.Item("Numero4") = 0
    '                            'dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
    '                            dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
    '                            'grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
    '                            grav10 = grav10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
    '                            'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
    '                            'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
    '                            dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
    '                            descuentolinea = 0
    '                            dr.Item("Campo7") = "10%"
    '                    End Select
    '                End If


    '                If dt.Rows(ii)("DESC") = 100 Then
    '                    aux = "Bonif"
    '                ElseIf dt.Rows(ii)("DESC") <> 0 Then
    '                    aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
    '                    aux = aux1 & "%"
    '                End If

    '                dr.Item("Campo2") = dr.Item("Campo2") '& aux
    '                aux = ""
    '                aux1 = ""
    '                Dim LOCOS As String = dr.Item("CAMPO2")

    '                ds.Tables("Detalle").Rows.Add(dr)
    '            Next

    '            totalDescuento = descuento10 + descuento5 + descuentoexenta

    '            'Calculo del total
    '            If tipoventa = 0 Then
    '                imptotal = imptotal + totalIva - totalDescuento
    '            Else
    '                imptotal = imptotal - totalDescuento
    '            End If

    '            'Para imprimir los totales
    '            dr = ds.Tables("Detalle").NewRow()

    '            'dr.Item("Numero5") = totalExenta - totalDescuentoExenta
    '            dr.Item("Numero5") = exen
    '            dr.Item("Numero14") = grav5
    '            dr.Item("Numero9") = grav10
    '            dr.Item("Numero11") = descuentoexenta
    '            dr.Item("Numero12") = descuento5
    '            dr.Item("Numero18") = descuento10
    '            dr.Item("Numero10") = totalDescuento

    '            If totalDescuento > 0 Then
    '                dr.Item("Campo10") = "Total Descuento:"
    '            End If
    '            dr.Item("Numero15") = imptotal
    '            dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
    '            dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

    '            dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

    '            'Imprime una vez el pie que esta en la cabezera
    '            'row.Item("Campo10") = ""
    '            'row.Item("Campo11") = pie
    '            'pie = ""

    '            ds.Tables("Detalle").Rows.Add(dr)
    '            'Next
    '        Catch ex As Exception
    '            MsgBox(Ex.ToString)
    '        Finally
    '            dt.Dispose()
    '            dar.Close()
    '            ser.Cerrar(cnn)
    '        End Try
    '    Finally

    '    End Try
    '    Return ds
    'End Function

    Public Function impFacturaNuevoFormato(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadLineas As Integer) As DataSet

        Dim ds As New DataSet
        Dim dr As DataRow
        Dim items As Long
        Dim ser As BD.ABD
        Dim imp, desprod As String
        Dim num As Integer
        Dim aux, aux1 As String

        ser = New BD.ABD
        cnn = ser.Abrir

        Dim fecha As Date
        Dim moneda As String
        Dim cotizacion As Decimal
        Dim PorcentajeDescuento As Decimal




        sql = ""
        sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
                "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
                "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
                "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
                "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
                "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
                "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, " & _
                "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
                "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
                "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
                "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
                "WHERE V.CODVENTA = " & CODVENTA & " "


        Try

            ds.ReadXml(Direccion)

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()


            Do While dar.Read
                fecha = CDate(dar("FECHAVENTA"))
                cotizacion = dar("COTIZACION")
                PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
                moneda = dar("DESMONEDA")

                dr = ds.Tables("Cabecera").NewRow()

                dr.Item("Campo4") = dar("DESCONDICION")
                If dar("CONDICIONVENTA") = 0 Then
                    'dr.Item("Campo4") = "CONTADO"
                    dr.Item("Campo2") = "X"
                    dr.Item("Campo3") = ""
                Else
                    'dr.Item("Campo4") = "CREDITO"
                    dr.Item("Campo2") = ""
                    dr.Item("Campo3") = "X"
                End If

                dr.Item("Campo5") = dar("NUMERO")

                'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                'Dim LOCO As String = ""
                'LOCO = dar("DESCIUDAD")
                'If LOCO = "" Then
                '    LOCO = "Concepción, "
                'Else
                '    LOCO = LOCO & ", "
                'End If
                dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

                If dar("RUC") = "" Then
                    dr.Item("Campo7") = dar("NUMCEDULA")
                Else
                    dr.Item("Campo7") = dar("RUC")
                End If

                dr.Item("Campo8") = dar("DIRECCION")
                dr.Item("Campo9") = dar("TELEFONO")
                dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
                dr.Item("Numero2") = candecimales
                ds.Tables("Cabecera").Rows.Add(dr)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dar.Close()
        End Try

        'DETALLE
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        sql = ""
        sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
                "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
                "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
                "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
                "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
                "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE " & _
                "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
                "WHERE VD.CODVENTA = " & CODVENTA & " " & _
                "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

        Try
            Dim dt As New DataTable("DETALLE")
            Dim da As SqlDataAdapter

            'ser = New BD.ABD
            'cnn = ser.Abrir
            Try
                da = New SqlDataAdapter(sql, cnn)
                da.Fill(dt)
            Catch ex As Exception
                MsgBox(EX.ToString)
            End Try


            Try
                Dim imptotal As Decimal
                Dim saldocobro As Decimal
                Dim impletras As String

                Dim totalExenta As Decimal
                Dim totalGravada As Decimal
                Dim totalIva As Decimal
                Dim totalDescuento As Decimal
                Dim totalDescuentoExenta As Decimal
                Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
                Dim sumaIva5, sumaIva10 As Decimal
                Dim tipoventa As Long
                Dim grav5, grav10 As Decimal

                Dim i As Integer
                Dim ii As Integer


                Dim espacio As Integer

                Dim descuentolinea As Decimal
                Dim descuentoexenta, descuento5, descuento10 As Decimal

                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                'For i = 1 To 3
                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0
                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0
                totalDescuento = 0
                descuentolinea = 0


                For ii = 0 To dt.Rows.Count - 1
                    imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

                    If totalExenta = 0 And totalGravada = 0 Then
                        totalExenta = dt.Rows(ii)("TOTALEXENTA")
                        totalGravada = dt.Rows(ii)("TOTALGRAVADA")
                        totalIva = dt.Rows(ii)("TOTALIVA")
                        tipoventa = dt.Rows(ii)("TIPOVENTA")
                    End If

                    dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
                    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

                    dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
                    ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
                    dr.Item("Numero13") = dt.Rows(ii)("DESC")
                    'row.Item("Numero12") = dt.Rows(ii)("IVA")
                    'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

                    If dt.Rows(ii)("IVA") = 0 Then
                        'Productos Exentos
                        'descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        descuentoexenta = descuentoexenta + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                        dr.Item("Numero4") = 0
                        dr.Item("Numero6") = 0
                        'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                        dr.Item("Numero2") = (dt.Rows(ii)("PRECIOVENTABRUTO") - Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales))  '''' AGREGADO
                        'row.Item("Campo7") = "---"
                    Else
                        'Productos Gravados
                        dr.Item("Numero3") = 0

                        Select Case dt.Rows(ii)("IVA")
                            Case 5
                                'descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento5 = descuento5 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                                grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO

                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
                                dr.Item("Numero2") = (dt.Rows(ii)("PRECIOVENTABRUTO") - Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales))  '''' AGREGADO
                                descuentolinea = 0
                                dr.Item("Numero6") = 0
                                dr.Item("Campo7") = "5%"
                            Case 10
                                'descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento10 = descuento10 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)


                                sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero4") = 0
                                dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO

                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
                                dr.Item("Numero2") = (dt.Rows(ii)("PRECIOVENTABRUTO") - Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales)) '''' AGREGADO
                                descuentolinea = 0
                                dr.Item("Campo7") = "10%"
                        End Select
                    End If


                    If dt.Rows(ii)("DESC") = 100 Then
                        aux = "Bonif"
                    ElseIf dt.Rows(ii)("DESC") <> 0 Then
                        aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
                        aux = aux1 & "%"
                    End If

                    dr.Item("Campo2") = dr.Item("Campo2") '& aux
                    aux = ""
                    aux1 = ""
                    Dim LOCOS As String = dr.Item("CAMPO2")

                    ds.Tables("Detalle").Rows.Add(dr)
                Next

                totalDescuento = descuento10 + descuento5 + descuentoexenta

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los totales
                dr = ds.Tables("Detalle").NewRow()

                dr.Item("Numero5") = totalExenta - totalDescuentoExenta
                dr.Item("Numero14") = grav5
                dr.Item("Numero9") = grav10
                dr.Item("Numero10") = totalDescuento

                If totalDescuento > 0 Then
                    dr.Item("Campo10") = "Total Descuento:"
                End If
                dr.Item("Numero15") = imptotal
                dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

                'Imprime una vez el pie que esta en la cabezera
                'row.Item("Campo10") = ""
                'row.Item("Campo11") = pie
                'pie = ""

                ds.Tables("Detalle").Rows.Add(dr)
                'Next
            Catch ex As Exception
                MsgBox(Ex.ToString)
            Finally
                dt.Dispose()
                dar.Close()
                ser.Cerrar(cnn)
            End Try
        Finally

        End Try
        Return ds
    End Function

    Public Function impFacturaNuevoFormatoContinuo_ANTES(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadLineas As Integer) As DataSet

        Dim ds As New DataSet
        Dim dr As DataRow
        Dim items As Long
        Dim ser As BD.ABD
        Dim imp, desprod As String
        Dim num As Integer
        Dim aux, aux1 As String

        ser = New BD.ABD
        cnn = ser.Abrir

        Dim fecha As Date
        Dim moneda As String
        Dim cotizacion As Decimal
        Dim PorcentajeDescuento As Decimal

        sql = ""
        sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
                "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
                "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
                "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
                "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
                "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
                "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, ISNULL(VC.OBSERVACION,'') AS OBSERVACION, " & _
                "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
                "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
                "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
                "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
                "LEFT OUTER JOIN VENTASCONFIG VC ON VC.CODEMPRESA = V.CODEMPRESA " & _
                "WHERE V.CODVENTA = " & CODVENTA & " "


        Try

            ds.ReadXml(Direccion)

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()


            Do While dar.Read
                fecha = CDate(dar("FECHAVENTA"))
                cotizacion = dar("COTIZACION")
                PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
                moneda = dar("DESMONEDA")

                dr = ds.Tables("Cabecera").NewRow()

                dr.Item("Campo4") = dar("DESCONDICION")
                If dar("CONDICIONVENTA") = 0 Then
                    'dr.Item("Campo4") = "CONTADO"
                    dr.Item("Campo2") = "X"
                    dr.Item("Campo3") = ""
                Else
                    'dr.Item("Campo4") = "CREDITO"
                    dr.Item("Campo2") = ""
                    dr.Item("Campo3") = "X"
                End If

                dr.Item("Campo5") = dar("NUMERO")

                'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                'Dim LOCO As String = ""
                'LOCO = dar("DESCIUDAD")
                'If LOCO = "" Then
                '    LOCO = "Concepción, "
                'Else
                '    LOCO = LOCO & ", "
                'End If
                dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

                If dar("RUC") = "" Then
                    dr.Item("Campo7") = dar("NUMCEDULA")
                Else
                    dr.Item("Campo7") = dar("RUC")
                End If

                dr.Item("Campo8") = dar("DIRECCION")
                dr.Item("Campo9") = dar("TELEFONO")
                dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
                dr.Item("Numero2") = candecimales
                dr.Item("Campo12") = dar("OBSERVACION")
                ds.Tables("Cabecera").Rows.Add(dr)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dar.Close()
        End Try

        'DETALLE
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        sql = ""
        sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
                "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
                "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
                "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
                "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
                "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE, RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADOPRODUCTO, RTRIM(E.DESESTADOPRODUCTO) AS DESESTADOPRODUCTO " & _
                "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
                "INNER JOIN ESTADOPRODUCTO E ON E.CODESTADOPRODUCTO = P.CODESTADOPRODUCTO " & _
                "WHERE VD.CODVENTA = " & CODVENTA & " " & _
                "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

        Try
            Dim dt As New DataTable("DETALLE")
            Dim da As SqlDataAdapter

            'ser = New BD.ABD
            'cnn = ser.Abrir
            Try
                da = New SqlDataAdapter(sql, cnn)
                da.Fill(dt)
            Catch ex As Exception
                MsgBox(EX.ToString)
            End Try


            Try
                Dim imptotal As Decimal
                Dim saldocobro As Decimal
                Dim impletras As String

                Dim totalExenta As Decimal
                Dim totalGravada As Decimal
                Dim totalIva As Decimal
                Dim totalDescuento As Decimal
                Dim totalDescuentoExenta As Decimal
                Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
                Dim sumaIva5, sumaIva10 As Decimal
                Dim tipoventa As Long
                Dim grav5, grav10, exen As Decimal

                Dim i As Integer
                Dim ii As Integer


                Dim espacio As Integer

                Dim descuentolinea As Decimal
                Dim descuentoexenta, descuento5, descuento10 As Decimal

                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                'For i = 1 To 3
                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0
                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0
                totalDescuento = 0
                descuentolinea = 0


                For ii = 0 To dt.Rows.Count - 1
                    imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

                    If totalExenta = 0 And totalGravada = 0 Then
                        totalExenta = dt.Rows(ii)("TOTALEXENTA")
                        totalGravada = dt.Rows(ii)("TOTALGRAVADA")
                        totalIva = dt.Rows(ii)("TOTALIVA")
                        tipoventa = dt.Rows(ii)("TIPOVENTA")
                    End If

                    dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
                    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

                    'If dt.Rows(ii)("NUMESTADOPRODUCTO") = "NOR" Then
                    '    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    'Else
                    '    Dim descri, desestado As String
                    '    descri = dt.Rows(ii)("DESPRODUCTO")
                    '    desestado = dt.Rows(ii)("DESESTADOPRODUCTO")
                    '    If descri.Length > 43 Then
                    '        dr.Item("Campo2") = descri.Substring(1, 43) + "- " + desestado
                    '    Else
                    '        dr.Item("Campo2") = descri + "- " + desestado
                    '    End If
                    'End If

                    dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
                    ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
                    dr.Item("Numero13") = dt.Rows(ii)("DESC")
                    'row.Item("Numero12") = dt.Rows(ii)("IVA")
                    'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

                    If dt.Rows(ii)("IVA") = 0 Then
                        'Productos Exentos
                        'descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        descuentoexenta = descuentoexenta + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        'dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                        dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                        dr.Item("Numero4") = 0
                        dr.Item("Numero6") = 0
                        'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                        dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                        'row.Item("Campo7") = "---"
                        exen = exen + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))


                    Else
                        'Productos Gravados
                        dr.Item("Numero3") = 0

                        Select Case dt.Rows(ii)("IVA")
                            Case 5
                                'descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento5 = descuento5 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                'dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                                dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                                'grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
                                grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Numero6") = 0
                                dr.Item("Campo7") = "5%"
                            Case 10
                                'descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento10 = descuento10 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero4") = 0
                                'dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
                                grav10 = grav10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Campo7") = "10%"
                        End Select
                    End If


                    If dt.Rows(ii)("DESC") = 100 Then
                        aux = "Bonif"
                    ElseIf dt.Rows(ii)("DESC") <> 0 Then
                        aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
                        aux = aux1 & "%"
                    End If

                    dr.Item("Campo2") = dr.Item("Campo2") '& aux
                    aux = ""
                    aux1 = ""
                    Dim LOCOS As String = dr.Item("CAMPO2")

                    ds.Tables("Detalle").Rows.Add(dr)
                Next

                totalDescuento = descuento10 + descuento5 + descuentoexenta

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los totales
                dr = ds.Tables("Detalle").NewRow()

                'dr.Item("Numero5") = totalExenta - totalDescuentoExenta
                dr.Item("Numero5") = exen
                dr.Item("Numero14") = grav5
                dr.Item("Numero9") = grav10
                dr.Item("Numero11") = descuentoexenta
                dr.Item("Numero12") = descuento5
                dr.Item("Numero18") = descuento10
                dr.Item("Numero10") = totalDescuento

                If totalDescuento > 0 Then
                    dr.Item("Campo10") = "Total Descuento:"
                End If
                dr.Item("Numero15") = imptotal
                dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

                'Imprime una vez el pie que esta en la cabezera
                'row.Item("Campo10") = ""
                'row.Item("Campo11") = pie
                'pie = ""

                ds.Tables("Detalle").Rows.Add(dr)
                'Next
            Catch ex As Exception
                MsgBox(Ex.ToString)
            Finally
                dt.Dispose()
                dar.Close()
                ser.Cerrar(cnn)
            End Try
        Finally

        End Try
        Return ds
    End Function

    Public Function impFacturaNuevoFormatoContinuo_NUEVO(ByVal DIRECCION As String, ByVal EmpCodigo As Long, _
    ByVal SucCodigo As Long, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadlineas As Integer) As DataSet

        Dim ds As New DataSet
        Dim dr As DataRow
        Dim items As Long
        Dim ser As BD.ABD
        Dim imp, desprod As String
        Dim num As Integer
        Dim aux, aux1 As String

        ser = New BD.ABD
        cnn = ser.Abrir

        Dim fecha As Date
        Dim moneda As String
        Dim cotizacion As Decimal
        Dim PorcentajeDescuento As Decimal

        sql = ""
        sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
                "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
                "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
                "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
                "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
                "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
                "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, ISNULL(VC.OBSERVACION,'') AS OBSERVACION, " & _
                "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
                "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
                "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
                "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
                "LEFT OUTER JOIN VENTASCONFIG VC ON VC.CODEMPRESA = V.CODEMPRESA " & _
                "WHERE V.CODVENTA = " & CODVENTA & " "


        Try

            ds.ReadXml(Direccion)

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()


            Do While dar.Read
                fecha = CDate(dar("FECHAVENTA"))
                cotizacion = dar("COTIZACION")
                PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
                moneda = dar("DESMONEDA")

                dr = ds.Tables("Cabecera").NewRow()

                dr.Item("Campo4") = dar("DESCONDICION")
                If dar("CONDICIONVENTA") = 0 Then
                    'dr.Item("Campo4") = "CONTADO"
                    dr.Item("Campo2") = "X"
                    dr.Item("Campo3") = ""
                Else
                    'dr.Item("Campo4") = "CREDITO"
                    dr.Item("Campo2") = ""
                    dr.Item("Campo3") = "X"
                End If

                dr.Item("Campo5") = dar("NUMERO")

                'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                'Dim LOCO As String = ""
                'LOCO = dar("DESCIUDAD")
                'If LOCO = "" Then
                '    LOCO = "Concepción, "
                'Else
                '    LOCO = LOCO & ", "
                'End If
                dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                'dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")
                dr.Item("Campo6") = dar("CLIENTE")

                If dar("RUC") = "" Then
                    dr.Item("Campo7") = dar("NUMCEDULA")
                Else
                    dr.Item("Campo7") = dar("RUC")
                End If

                dr.Item("Campo8") = dar("DIRECCION")
                dr.Item("Campo9") = dar("TELEFONO")
                dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
                ' dr.Item("Numero2") = candecimales
                dr.Item("Campo12") = dar("OBSERVACION")
                ds.Tables("Cabecera").Rows.Add(dr)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dar.Close()
        End Try

        'DETALLE
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        sql = ""
        sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
                "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
                "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
                "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
                "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
                "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE, RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADOPRODUCTO, RTRIM(E.DESESTADOPRODUCTO) AS DESESTADOPRODUCTO " & _
                "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
                "INNER JOIN ESTADOPRODUCTO E ON E.CODESTADOPRODUCTO = P.CODESTADOPRODUCTO " & _
                "WHERE VD.CODVENTA = " & CODVENTA & " " & _
                " ORDER BY LINEANUMERO "

        '"ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

        Try
            Dim dt As New DataTable("DETALLE")
            Dim da As SqlDataAdapter

            'ser = New BD.ABD
            'cnn = ser.Abrir
            Try
                da = New SqlDataAdapter(sql, cnn)
                da.Fill(dt)
            Catch ex As Exception
                MsgBox(EX.ToString)
            End Try


            Try
                Dim imptotal As Decimal
                Dim saldocobro As Decimal
                Dim impletras As String

                Dim totalExenta As Decimal
                Dim totalGravada As Decimal
                Dim totalIva As Decimal
                Dim totalDescuento As Decimal
                Dim totalDescuentoExenta As Decimal
                Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
                Dim sumaIva5, sumaIva10 As Decimal
                Dim tipoventa As Long
                Dim grav5, grav10, exen As Decimal

                Dim i As Integer
                Dim ii As Integer
                Dim linea As Integer

                Dim espacio As Integer

                Dim descuentolinea As Decimal
                Dim descuentoexenta, descuento5, descuento10 As Decimal

                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                'For i = 1 To 3
                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0
                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0
                totalDescuento = 0
                descuentolinea = 0

                linea = 0
                For ii = 0 To dt.Rows.Count - 1
                    imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

                    If totalExenta = 0 And totalGravada = 0 Then
                        totalExenta = dt.Rows(ii)("TOTALEXENTA")
                        totalGravada = dt.Rows(ii)("TOTALGRAVADA")
                        totalIva = dt.Rows(ii)("TOTALIVA")
                        tipoventa = dt.Rows(ii)("TIPOVENTA")
                    End If

                    dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
                    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    dr.Item("Campo4") = dt.Rows(ii)("DESPRODUCTO")
                    'If dt.Rows(ii)("NUMESTADOPRODUCTO") = "NOR" Then
                    '    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    'Else
                    '    Dim descri, desestado As String
                    '    descri = dt.Rows(ii)("DESPRODUCTO")
                    '    desestado = dt.Rows(ii)("DESESTADOPRODUCTO")
                    '    If descri.Length > 43 Then
                    '        dr.Item("Campo2") = descri.Substring(1, 43) + "- " + desestado
                    '    Else
                    '        dr.Item("Campo2") = descri + "- " + desestado
                    '    End If
                    'End If

                    dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
                    ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
                    dr.Item("Numero13") = dt.Rows(ii)("DESC")
                    'row.Item("Numero12") = dt.Rows(ii)("IVA")
                    'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

                    If dt.Rows(ii)("IVA") = 0 Then
                        'Productos Exentos
                        'descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        descuentoexenta = descuentoexenta + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        'dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                        dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                        dr.Item("Numero4") = 0
                        dr.Item("Numero6") = 0
                        'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                        dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                        'row.Item("Campo7") = "---"
                        exen = exen + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))


                    Else
                        'Productos Gravados
                        dr.Item("Numero3") = 0

                        Select Case dt.Rows(ii)("IVA")
                            Case 5
                                'descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento5 = descuento5 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                'dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                                dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                                'grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
                                grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Numero6") = 0
                                dr.Item("Campo7") = "5%"
                            Case 10
                                'descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento10 = descuento10 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero4") = 0
                                'dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
                                grav10 = grav10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Campo7") = "10%"
                        End Select
                    End If


                    If dt.Rows(ii)("DESC") = 100 Then
                        aux = "Bonif"
                    ElseIf dt.Rows(ii)("DESC") <> 0 Then
                        aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
                        aux = aux1 & "%"
                    End If

                    dr.Item("Campo2") = dr.Item("Campo2") '& aux
                    aux = ""
                    aux1 = ""
                    Dim LOCOS As String = dr.Item("CAMPO2")
                    linea = linea + 1
                    ds.Tables("Detalle").Rows.Add(dr)
                Next


                totalDescuento = descuento10 + descuento5 + descuentoexenta

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                ''Para agregar lineas en blanco
                ' For xx As Integer = 0 To 15 - linea
                For xx As Integer = 0 To cantidadlineas - linea
                    dr = ds.Tables("Detalle").NewRow()
                    dr.Item("Numero1") = 0
                    dr.Item("Campo2") = ""
                    dr.Item("Numero2") = 0
                    dr.Item("Numero3") = 0
                    dr.Item("Numero4") = 0
                    dr.Item("Numero5") = 0
                    ds.Tables("Detalle").Rows.Add(dr)
                Next
                'Para imprimir los totales
                dr = ds.Tables("Detalle").NewRow()

                'dr.Item("Numero5") = totalExenta - totalDescuentoExenta
                dr.Item("Numero5") = exen
                dr.Item("Numero14") = grav5
                dr.Item("Numero9") = grav10
                'dr.Item("Numero11") = descuentoexenta
                'dr.Item("Numero12") = descuento5
                'dr.Item("Numero18") = descuento10
                dr.Item("Numero11") = descuentoexenta
                dr.Item("Numero12") = sumaIva5
                dr.Item("Numero18") = sumaIva10

                dr.Item("Numero10") = totalDescuento

                If totalDescuento > 0 Then
                    dr.Item("Campo10") = "Total Descuento:"
                End If
                dr.Item("Numero15") = imptotal
                dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                dr.Item("Campo3") = "" & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

                'Imprime una vez el pie que esta en la cabezera
                'row.Item("Campo10") = ""
                'row.Item("Campo11") = pie
                'pie = ""

                ds.Tables("Detalle").Rows.Add(dr)
                'Next
            Catch ex As Exception
                MsgBox(Ex.ToString)
            Finally
                dt.Dispose()
                dar.Close()
                ser.Cerrar(cnn)
            End Try
        Finally

        End Try
        Return ds
    End Function



    Public Function impFacturaNuevoFormatoContinuo(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal cantidadLineas As Integer, ByVal imprimirUnidad As Boolean) As DataSet

        Dim ds As New DataSet
        Dim dr As DataRow
        Dim items As Long
        Dim ser As BD.ABD
        Dim imp, desprod As String
        Dim num As Integer
        Dim aux, aux1 As String

        ser = New BD.ABD
        cnn = ser.Abrir

        Dim fecha As Date
        Dim moneda As String
        Dim cotizacion As Decimal
        Dim PorcentajeDescuento As Decimal

        sql = ""
        sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
                "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
                "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
                "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
                "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
                "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
                "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, ISNULL(VC.OBSERVACION,'') AS OBSERVACION, " & _
                "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
                "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
                "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
                "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
                "LEFT OUTER JOIN VENTASCONFIG VC ON VC.CODEMPRESA = V.CODEMPRESA " & _
                "WHERE V.CODVENTA = " & CODVENTA & " "
        Try

            ds.ReadXml(Direccion)

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()


            Do While dar.Read
                fecha = CDate(dar("FECHAVENTA"))
                cotizacion = dar("COTIZACION")
                PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
                moneda = dar("DESMONEDA")

                dr = ds.Tables("Cabecera").NewRow()

                dr.Item("Campo4") = dar("DESCONDICION")
                If dar("CONDICIONVENTA") = 0 Then
                    'dr.Item("Campo4") = "CONTADO"
                    dr.Item("Campo2") = "X"
                    dr.Item("Campo3") = ""
                Else
                    'dr.Item("Campo4") = "CREDITO"
                    dr.Item("Campo2") = ""
                    dr.Item("Campo3") = "X"
                End If

                dr.Item("Campo5") = dar("NUMERO")

                'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                'Dim LOCO As String = ""
                'LOCO = dar("DESCIUDAD")
                'If LOCO = "" Then
                '    LOCO = "Concepción, "
                'Else
                '    LOCO = LOCO & ", "
                'End If
                dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

                If dar("RUC") = "" Then
                    dr.Item("Campo7") = dar("NUMCEDULA")
                Else
                    dr.Item("Campo7") = dar("RUC")
                End If

                dr.Item("Campo8") = dar("DIRECCION")
                dr.Item("Campo9") = dar("TELEFONO")
                dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
                dr.Item("Numero2") = candecimales
                dr.Item("Campo12") = dar("OBSERVACION")
                ds.Tables("Cabecera").Rows.Add(dr)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dar.Close()
        End Try

        'DETALLE
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        sql = ""
        sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
                "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
                "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
                "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
                "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
                "ISNULL(RTRIM(VD.DESCRIPCIONPRODUCTO),'') AS DESCRIPCIONPRODUCTO, " & _
                "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE, RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADOPRODUCTO, RTRIM(E.DESESTADOPRODUCTO) AS DESESTADOPRODUCTO, " & _
                "P.STOCKPAQUETE, P.OPCIONIMPRIMIR " & _
                "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
                "INNER JOIN ESTADOPRODUCTO E ON E.CODESTADOPRODUCTO = P.CODESTADOPRODUCTO " & _
                "WHERE VD.CODVENTA = " & CODVENTA & " " & _
                "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

        Try
            Dim dt As New DataTable("DETALLE")
            Dim da As SqlDataAdapter

            'ser = New BD.ABD
            'cnn = ser.Abrir
            Try
                da = New SqlDataAdapter(sql, cnn)
                da.Fill(dt)
            Catch ex As Exception
                MsgBox(EX.ToString)
            End Try


            Try
                Dim imptotal As Decimal
                Dim saldocobro As Decimal
                Dim impletras As String

                Dim totalExenta As Decimal
                Dim totalGravada As Decimal
                Dim totalIva As Decimal
                Dim totalDescuento As Decimal
                Dim totalDescuentoExenta As Decimal
                Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
                Dim sumaIva5, sumaIva10 As Decimal
                Dim tipoventa As Long
                Dim grav5, grav10, exen As Decimal

                Dim i As Integer
                Dim ii As Integer


                Dim espacio As Integer

                Dim descuentolinea As Decimal
                Dim descuentoexenta, descuento5, descuento10 As Decimal

                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                'For i = 1 To 3
                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0
                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0
                totalDescuento = 0
                descuentolinea = 0


                For ii = 0 To dt.Rows.Count - 1
                    imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

                    If totalExenta = 0 And totalGravada = 0 Then
                        totalExenta = dt.Rows(ii)("TOTALEXENTA")
                        totalGravada = dt.Rows(ii)("TOTALGRAVADA")
                        totalIva = dt.Rows(ii)("TOTALIVA")
                        tipoventa = dt.Rows(ii)("TIPOVENTA")
                    End If

                    dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
                    'dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

                    ''''''''''''''''''''''''''''''''''''''''''''''
                    If dt.Rows(ii)("DESPRODUCTO") = dt.Rows(ii)("DESCRIPCIONPRODUCTO") Then
                        dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    Else
                        dr.Item("Campo2") = dt.Rows(ii)("DESCRIPCIONPRODUCTO")
                    End If
                    ''''''''''''''''''''''''''''''''''''''''''''''


                    'If dt.Rows(ii)("NUMESTADOPRODUCTO") = "NOR" Then
                    '    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    'Else
                    '    Dim descri, desestado As String
                    '    descri = dt.Rows(ii)("DESPRODUCTO")
                    '    desestado = dt.Rows(ii)("DESESTADOPRODUCTO")
                    '    If descri.Length > 43 Then
                    '        dr.Item("Campo2") = descri.Substring(1, 43) + "- " + desestado
                    '    Else
                    '        dr.Item("Campo2") = descri + "- " + desestado
                    '    End If
                    'End If

                    dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
                    ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
                    dr.Item("Numero13") = dt.Rows(ii)("DESC")
                    'row.Item("Numero12") = dt.Rows(ii)("IVA")
                    'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

                    If dt.Rows(ii)("IVA") = 0 Then
                        'Productos Exentos
                        'descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        descuentoexenta = descuentoexenta + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        'dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                        dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                        dr.Item("Numero4") = 0
                        dr.Item("Numero6") = 0
                        'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                        dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                        'row.Item("Campo7") = "---"
                        exen = exen + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))


                    Else
                        'Productos Gravados
                        dr.Item("Numero3") = 0

                        Select Case dt.Rows(ii)("IVA")
                            Case 5
                                'descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento5 = descuento5 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                'dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                                dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                                'grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
                                grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Numero6") = 0
                                dr.Item("Campo7") = "5%"
                            Case 10
                                'descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento10 = descuento10 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero4") = 0
                                'dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
                                grav10 = grav10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Campo7") = "10%"
                        End Select
                    End If

                    If dt.Rows(ii)("DESC") = 100 Then
                        aux = "Bonif"
                    ElseIf dt.Rows(ii)("DESC") <> 0 Then
                        aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
                        aux = aux1 & "%"
                    End If

                    'Imprimir en Unidad
                    If imprimirUnidad AndAlso dt.Rows(ii)("OPCIONIMPRIMIR") > 0 AndAlso dr.Item("Numero1") > dt.Rows(ii)("STOCKPAQUETE") Then
                        dr.Item("Numero1") = Math.Round(dr.Item("Numero1") / dt.Rows(ii)("STOCKPAQUETE"), 0)

                        If dr.Item("Numero3") > 0 Then
                            dr.Item("Numero2") = Math.Round(dr.Item("Numero3") / dr.Item("Numero1"), 0)
                        End If

                        If dr.Item("Numero4") > 0 Then
                            dr.Item("Numero2") = Math.Round(dr.Item("Numero4") / dr.Item("Numero1"), 0)
                        End If

                        If dr.Item("Numero6") > 0 Then
                            dr.Item("Numero2") = Math.Round(dr.Item("Numero6") / dr.Item("Numero1"), 0)
                        End If
                    End If

                    dr.Item("Campo2") = dr.Item("Campo2") '& aux
                    aux = ""
                    aux1 = ""
                    Dim LOCOS As String = dr.Item("CAMPO2")

                    ds.Tables("Detalle").Rows.Add(dr)
                Next

                totalDescuento = descuento10 + descuento5 + descuentoexenta

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los totales
                dr = ds.Tables("Detalle").NewRow()

                'dr.Item("Numero5") = totalExenta - totalDescuentoExenta
                dr.Item("Numero5") = exen
                dr.Item("Numero14") = grav5
                dr.Item("Numero9") = grav10
                dr.Item("Numero11") = descuentoexenta
                dr.Item("Numero12") = descuento5
                dr.Item("Numero18") = descuento10
                dr.Item("Numero10") = totalDescuento

                If totalDescuento > 0 Then
                    dr.Item("Campo10") = "Total Descuento:"
                End If
                dr.Item("Numero15") = imptotal
                dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

                'Imprime una vez el pie que esta en la cabezera
                'row.Item("Campo10") = ""
                'row.Item("Campo11") = pie
                'pie = ""

                ds.Tables("Detalle").Rows.Add(dr)
                'Next
            Catch ex As Exception
                MsgBox(Ex.ToString)
            Finally
                dt.Dispose()
                dar.Close()
                ser.Cerrar(cnn)
            End Try
        Finally

        End Try
        Return ds
    End Function


    Public Function impTICKET(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal CODVENTA As Long, ByVal candecimales As Integer, ByVal imprimirUnidad As Boolean) As DataSet

        Dim ds As New DataSet
        Dim dr As DataRow
        Dim items As Long
        Dim ser As BD.ABD
        Dim imp, desprod As String
        Dim num As Integer
        Dim aux, aux1 As String

        ser = New BD.ABD
        cnn = ser.Abrir

        Dim fecha As Date
        Dim moneda As String
        Dim cotizacion As Decimal
        Dim PorcentajeDescuento As Decimal

        sql = ""
        sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, " & _
                "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
                "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
                "RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, " & _
                "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
                "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(V.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
                "RTRIM(CP.NUMCONDICION) AS NUMCONDICION, V.CODCONDICION, ISNULL(VC.OBSERVACION,'') AS OBSERVACION, " & _
                "RTRIM(CP.DESCONDICION) AS DESCONDICION, ISNULL(TC.CONDICIONVENTA,0) AS CONDICIONVENTA " & _
                "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                "INNER JOIN CONDICIONPAGO CP ON V.CODCONDICION = CP.CODCONDICION " & _
                "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
                "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
                "LEFT OUTER JOIN VENTASCONFIG VC ON VC.CODEMPRESA = V.CODEMPRESA " & _
                "WHERE V.CODVENTA = " & CODVENTA & " "
        Try

            ds.ReadXml(Direccion)

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()


            Do While dar.Read
                fecha = CDate(dar("FECHAVENTA"))
                cotizacion = dar("COTIZACION")
                PorcentajeDescuento = dar("PORCENTAJEDESCUENTO")
                moneda = dar("DESMONEDA")

                dr = ds.Tables("Cabecera").NewRow()

                dr.Item("Campo4") = dar("DESCONDICION")
                If dar("CONDICIONVENTA") = 0 Then
                    'dr.Item("Campo4") = "CONTADO"
                    dr.Item("Campo2") = "X"
                    dr.Item("Campo3") = ""
                Else
                    'dr.Item("Campo4") = "CREDITO"
                    dr.Item("Campo2") = ""
                    dr.Item("Campo3") = "X"
                End If

                dr.Item("Campo5") = dar("NUMERO")

                'row.Item("Campo1") = "ASUNCION, " & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                'Dim LOCO As String = ""
                'LOCO = dar("DESCIUDAD")
                'If LOCO = "" Then
                '    LOCO = "Concepción, "
                'Else
                '    LOCO = LOCO & ", "
                'End If
                dr.Item("Campo1") = "" & fecha.Day & " DE " & textomes(fecha.Month).ToUpper & " DE " & fecha.Year
                dr.Item("Campo6") = dar("NUMCLIENTE") & "  " & dar("CLIENTE")

                If dar("RUC") = "" Then
                    dr.Item("Campo7") = dar("NUMCEDULA")
                Else
                    dr.Item("Campo7") = dar("RUC")
                End If

                dr.Item("Campo8") = dar("DIRECCION")
                dr.Item("Campo9") = dar("TELEFONO")
                dr.Item("Campo11") = dar("NUMVENDEDOR") & " " & dar("DESVENDEDOR")
                dr.Item("Numero2") = candecimales
                dr.Item("Campo12") = dar("OBSERVACION")
                ds.Tables("Cabecera").Rows.Add(dr)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dar.Close()
        End Try

        'DETALLE
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        sql = ""
        sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
                "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
                "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
                "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
                "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
                "ISNULL(RTRIM(VD.DESCRIPCIONPRODUCTO),'') AS DESCRIPCIONPRODUCTO, " & _
                "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE, RTRIM(E.NUMESTADOPRODUCTO) AS NUMESTADOPRODUCTO, RTRIM(E.DESESTADOPRODUCTO) AS DESESTADOPRODUCTO, " & _
                "P.STOCKPAQUETE, P.OPCIONIMPRIMIR " & _
                "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
                "INNER JOIN ESTADOPRODUCTO E ON E.CODESTADOPRODUCTO = P.CODESTADOPRODUCTO " & _
                "WHERE VD.CODVENTA = " & CODVENTA & " " & _
                "ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "

        Try
            Dim dt As New DataTable("DETALLE")
            Dim da As SqlDataAdapter

            'ser = New BD.ABD
            'cnn = ser.Abrir
            Try
                da = New SqlDataAdapter(sql, cnn)
                da.Fill(dt)
            Catch ex As Exception
                MsgBox(EX.ToString)
            End Try


            Try
                Dim imptotal As Decimal
                Dim saldocobro As Decimal
                Dim impletras As String

                Dim totalExenta As Decimal
                Dim totalGravada As Decimal
                Dim totalIva As Decimal
                Dim totalDescuento As Decimal
                Dim totalDescuentoExenta As Decimal
                Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
                Dim sumaIva5, sumaIva10 As Decimal
                Dim tipoventa As Long
                Dim grav5, grav10, exen As Decimal

                Dim i As Integer
                Dim ii As Integer


                Dim espacio As Integer

                Dim descuentolinea As Decimal
                Dim descuentoexenta, descuento5, descuento10 As Decimal

                descuentoexenta = 0
                descuento5 = 0
                descuento10 = 0

                'For i = 1 To 3
                imptotal = 0
                sumaIva5 = 0
                sumaIva10 = 0
                totalDescuentoExenta = 0
                totalDescuentoGravada5 = 0
                totalDescuentoGravada10 = 0
                totalDescuento = 0
                descuentolinea = 0


                For ii = 0 To dt.Rows.Count - 1
                    imptotal = imptotal + (dt.Rows(ii)("precioventabruto") * dt.Rows(ii)("cantidadventa"))

                    If totalExenta = 0 And totalGravada = 0 Then
                        totalExenta = dt.Rows(ii)("TOTALEXENTA")
                        totalGravada = dt.Rows(ii)("TOTALGRAVADA")
                        totalIva = dt.Rows(ii)("TOTALIVA")
                        tipoventa = dt.Rows(ii)("TIPOVENTA")
                    End If

                    dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    dr.Item("Campo1") = dt.Rows(ii)("CODIGOBARRA")
                    'dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")

                    ''''''''''''''''''''''''''''''''''''''''''''''
                    If dt.Rows(ii)("DESPRODUCTO") = dt.Rows(ii)("DESCRIPCIONPRODUCTO") Then
                        dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    Else
                        dr.Item("Campo2") = dt.Rows(ii)("DESCRIPCIONPRODUCTO")
                    End If
                    ''''''''''''''''''''''''''''''''''''''''''''''


                    'If dt.Rows(ii)("NUMESTADOPRODUCTO") = "NOR" Then
                    '    dr.Item("Campo2") = dt.Rows(ii)("DESPRODUCTO")
                    'Else
                    '    Dim descri, desestado As String
                    '    descri = dt.Rows(ii)("DESPRODUCTO")
                    '    desestado = dt.Rows(ii)("DESESTADOPRODUCTO")
                    '    If descri.Length > 43 Then
                    '        dr.Item("Campo2") = descri.Substring(1, 43) + "- " + desestado
                    '    Else
                    '        dr.Item("Campo2") = descri + "- " + desestado
                    '    End If
                    'End If

                    dr.Item("Numero1") = dt.Rows(ii)("CANTIDADVENTA")
                    ''dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") CAMBIADO
                    dr.Item("Numero13") = dt.Rows(ii)("DESC")
                    'row.Item("Numero12") = dt.Rows(ii)("IVA")
                    'row.Item("Numero13") = dt.Rows(ii)("COHEFICIENTE")

                    If dt.Rows(ii)("IVA") = 0 Then
                        'Productos Exentos
                        'descuentoexenta = descuentoexenta + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        descuentoexenta = descuentoexenta + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                        descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                        'dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                        dr.Item("Numero3") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                        dr.Item("Numero4") = 0
                        dr.Item("Numero6") = 0
                        'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                        dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                        'row.Item("Campo7") = "---"
                        exen = exen + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))


                    Else
                        'Productos Gravados
                        dr.Item("Numero3") = 0

                        Select Case dt.Rows(ii)("IVA")
                            Case 5
                                'descuento5 = descuento5 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento5 = descuento5 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva5 = sumaIva5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                'dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea
                                dr.Item("Numero4") = dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")
                                'grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA") - descuentolinea)
                                grav5 = grav5 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales)  '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Numero6") = 0
                                dr.Item("Campo7") = "5%"
                            Case 10
                                'descuento10 = descuento10 + Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                'descuentolinea = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                descuento10 = descuento10 + Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)
                                descuentolinea = Math.Round(Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100), candecimales) * dt.Rows(ii)("CANTIDADVENTA"), candecimales)

                                sumaIva10 = sumaIva10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero4") = 0
                                'dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea
                                dr.Item("Numero6") = (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'grav10 = grav10 + ((dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA")) - descuentolinea)
                                grav10 = grav10 + (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("CANTIDADVENTA"))
                                'dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO") - descuentolinea  '''' AGREGADO
                                'dr.Item("Numero2") = Math.Round((dt.Rows(ii)("PRECIOVENTABRUTO") - (dt.Rows(ii)("PRECIOVENTABRUTO") * dt.Rows(ii)("DESC") / 100)), candecimales) '''' AGREGADO
                                dr.Item("Numero2") = dt.Rows(ii)("PRECIOVENTABRUTO")
                                descuentolinea = 0
                                dr.Item("Campo7") = "10%"
                        End Select
                    End If

                    If dt.Rows(ii)("DESC") = 100 Then
                        aux = "Bonif"
                    ElseIf dt.Rows(ii)("DESC") <> 0 Then
                        aux1 = Str(Math.Round(dt.Rows(ii)("DESC"), 1))
                        aux = aux1 & "%"
                    End If

                    'Imprimir en Unidad
                    If imprimirUnidad AndAlso dt.Rows(ii)("OPCIONIMPRIMIR") > 0 AndAlso dr.Item("Numero1") > dt.Rows(ii)("STOCKPAQUETE") Then
                        dr.Item("Numero1") = Math.Round(dr.Item("Numero1") / dt.Rows(ii)("STOCKPAQUETE"), 0)

                        If dr.Item("Numero3") > 0 Then
                            dr.Item("Numero2") = Math.Round(dr.Item("Numero3") / dr.Item("Numero1"), 0)
                        End If

                        If dr.Item("Numero4") > 0 Then
                            dr.Item("Numero2") = Math.Round(dr.Item("Numero4") / dr.Item("Numero1"), 0)
                        End If

                        If dr.Item("Numero6") > 0 Then
                            dr.Item("Numero2") = Math.Round(dr.Item("Numero6") / dr.Item("Numero1"), 0)
                        End If
                    End If

                    dr.Item("Campo2") = dr.Item("Campo2") '& aux
                    aux = ""
                    aux1 = ""
                    Dim LOCOS As String = dr.Item("CAMPO2")

                    ds.Tables("Detalle").Rows.Add(dr)
                Next

                totalDescuento = descuento10 + descuento5 + descuentoexenta

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                'Para imprimir los totales
                dr = ds.Tables("Detalle").NewRow()

                'dr.Item("Numero5") = totalExenta - totalDescuentoExenta
                dr.Item("Numero5") = exen
                dr.Item("Numero14") = grav5
                dr.Item("Numero9") = grav10
                dr.Item("Numero11") = descuentoexenta
                dr.Item("Numero12") = descuento5
                dr.Item("Numero18") = descuento10
                dr.Item("Numero10") = totalDescuento

                If totalDescuento > 0 Then
                    dr.Item("Campo10") = "Total Descuento:"
                End If
                dr.Item("Numero15") = imptotal
                dr.Item("Numero16") = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, candecimales)
                dr.Item("Numero17") = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, candecimales)

                dr.Item("Campo3") = "SON " & moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales)).Trim + " #-"

                'Imprime una vez el pie que esta en la cabezera
                'row.Item("Campo10") = ""
                'row.Item("Campo11") = pie
                'pie = ""

                ds.Tables("Detalle").Rows.Add(dr)
                'Next
            Catch ex As Exception
                MsgBox(Ex.ToString)
            Finally
                dt.Dispose()
                dar.Close()
                ser.Cerrar(cnn)
            End Try
        Finally

        End Try
        Return ds
    End Function

    ''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function ImpRemision(ByVal Direccion As String, ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal codventa As Long, ByVal candecimales As Integer, ByVal detRemision As DataTable) As DataSet
        Dim ds As New DataSet
        Dim dr As DataRow
        Dim items As Long
        Dim tipo As Integer
        Dim porcentajeDescuento As Decimal
        Dim cotizacion As Decimal
        Dim importeMonedaPrincipal As Decimal
        Dim moneda As String

        ds.ReadXml(Direccion)

        ser = New BD.ABD
        cmd = New SqlCommand
        cnn = ser.Abrir

        sql = ""
        sql = "SELECT V.CODVENTA AS CODVENTA, V.NUMVENTA AS NUMERO, V.COTIZACION1 AS COTIZACION, V.PORCENTAJEDESCUENTO, V.CODMONEDA, " & _
            "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
            "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, " & _
            "RTRIM(CL.TELEFONO) AS TELEFONO, RTRIM(CL.CONDICIONVENTA) AS CONDICIONVENTA " & _
            "FROM VENTAS V INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
            "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
            "INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
            "WHERE V.CODVENTA = " & codventa & ""
        Try
            Dim fecha As DateTime

            cmd.Connection = cnn
            cmd.CommandText = sql

            dar = cmd.ExecuteReader

            Do While dar.Read
                fecha = CDate(dar("FECHAVENTA"))
                cotizacion = dar("COTIZACION")
                porcentajeDescuento = dar("PORCENTAJEDESCUENTO")
                moneda = dar("DESMONEDA")

                '###################
                '#    CABECERA     #
                '###################
                dr = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

                If dar("MODALIDADPAGO") = 0 Then
                    dr.Item("Campo1") = "CONTADO"
                    tipo = 0
                Else
                    dr.Item("Campo1") = "CREDITO"
                    tipo = 1
                End If

                dr.Item("Numero1") = dar("NUMERO")

                dr.Item("Campo2") = "ASUNCION, " & fecha.Day
                dr.Item("Campo3") = textomes(fecha.Month)
                dr.Item("Campo4") = fecha.Year
                dr.Item("Campo5") = dar("CLIENTE")
                dr.Item("Campo6") = dar("RUC")
                dr.Item("Campo7") = dar("DIRECCION")
                dr.Item("Campo8") = dar("TELEFONO")
                dr.Item("Campo9") = dar("NUMCLIENTE")
                dr.Item("Campo10") = dar("NUMVENDEDOR")
                dr.Item("Campo11") = "ASUNCION"
                dr.Item("Campo12") = dar("NUMCEDULA")
                dr.Item("Numero2") = candecimales

                ds.Tables("Cabecera").Rows.Add(dr)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dar.Close()
        End Try

        sql = ""
        sql = "SELECT VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, ISNULL(VD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
        "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO, VD.PRECIOVENTALISTA, VD.COSTOULTIMO, VD.IVA, VD.[DESC], VD.PORCENCOMI, " & _
        "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
        "P.CODMONEDA, P.CODIVA, V.NUMVENTA, V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
        "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
        "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, RTRIM(U.NUMMEDIDA) AS NUMMEDIDA " & _
        "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
        "INNER JOIN UNIDADMEDIDA U ON P.CODMEDIDA = U.CODMEDIDA " & _
        "WHERE VD.CODVENTA = " & codventa & " order by VD.LINEANUMERO  "

        Try
            cmd.Connection = cnn
            cmd.CommandText = sql

            dar = cmd.ExecuteReader
            Try
                Dim imptotal As Decimal
                Dim saldocobro As Decimal
                Dim impletras As String

                Dim totalExenta As Decimal
                Dim totalGravada As Decimal
                Dim totalIva As Decimal
                Dim totalDescuento As Decimal
                Dim totalDescuentoExenta As Decimal
                Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
                Dim sumaIva5, sumaIva10 As Decimal
                Dim tipoventa As Long

                imptotal = 0

                Do While dar.Read()
                    imptotal = imptotal + (dar("precioventabruto") * dar("cantidadventa"))

                    If totalExenta = 0 And totalGravada = 0 Then
                        totalExenta = dar("TOTALEXENTA")
                        totalGravada = dar("TOTALGRAVADA")
                        totalIva = dar("TOTALIVA")
                        totalDescuento = dar("TOTALDESCUENTO")
                        tipoventa = dar("TIPOVENTA")
                    End If

                    dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea

                    dr.Item("Campo1") = dar("CODIGOBARRA")
                    dr.Item("Campo2") = dar("DESPRODUCTO")
                    dr.Item("Campo6") = dar("NUMMEDIDA")

                    dr.Item("Numero1") = dar("CANTIDADVENTA")
                    dr.Item("Numero2") = dar("PRECIOVENTABRUTO")
                    dr.Item("Numero12") = dar("IVA")
                    dr.Item("Numero13") = dar("COHEFICIENTE")

                    If dar("IVA") = 0 Then
                        'Productos Exentos
                        dr.Item("Numero3") = dar("PRECIOVENTABRUTO") * dar("CANTIDADVENTA")
                        dr.Item("Numero4") = 0
                        dr.Item("Numero6") = 0
                    Else
                        'Productos Gravados
                        dr.Item("Numero3") = 0

                        Select Case dar("IVA")
                            Case 5
                                sumaIva5 = sumaIva5 + (dar("PRECIOVENTABRUTO") * dar("CANTIDADVENTA"))
                                dr.Item("Numero4") = dar("PRECIOVENTABRUTO") * dar("CANTIDADVENTA")
                                dr.Item("Numero6") = 0
                            Case 10
                                sumaIva10 = sumaIva10 + (dar("PRECIOVENTABRUTO") * dar("CANTIDADVENTA"))
                                dr.Item("Numero4") = 0
                                dr.Item("Numero6") = dar("PRECIOVENTABRUTO") * dar("CANTIDADVENTA")
                        End Select

                    End If

                    dr.Item("Numero18") = dar("PRECIOVENTABRUTO") * dar("CANTIDADVENTA") ' valor de la venta gravada o exenta

                    ds.Tables("Detalle").Rows.Add(dr)
                Loop

                'Calculo del total
                If tipoventa = 0 Then
                    imptotal = imptotal + totalIva - totalDescuento
                Else
                    imptotal = imptotal - totalDescuento
                End If

                If Not totalDescuento = 0 Then
                    'Para imprimir los sub totales sin descuento
                    dr = ds.Tables("Detalle").NewRow()

                    dr.Item("Campo1") = ""
                    dr.Item("Campo2") = "Sub totales sin Descuento"
                    dr.Item("Numero3") = totalExenta
                    dr.Item("Numero4") = sumaIva5
                    dr.Item("Numero6") = sumaIva10

                    ds.Tables("Detalle").Rows.Add(dr)

                    'Para imprimir los descuentos
                    dr = ds.Tables("Detalle").NewRow()

                    dr.Item("Campo1") = ""
                    If porcentajeDescuento > 0 Then
                        dr.Item("Campo2") = "Descuento " & Math.Round(porcentajeDescuento, 2).ToString & " %"
                    Else
                        dr.Item("Campo2") = "Descuento "
                    End If

                    totalDescuentoExenta = Math.Round((totalExenta * porcentajeDescuento / 100), candecimales)
                    dr.Item("Numero3") = totalDescuentoExenta

                    If sumaIva5 > 0 Then
                        totalDescuentoGravada5 = Math.Round((sumaIva5 * porcentajeDescuento / 100), candecimales)
                    End If
                    If sumaIva10 > 0 Then
                        totalDescuentoGravada10 = Math.Round((sumaIva10 * porcentajeDescuento / 100), candecimales)
                    End If
                    dr.Item("Numero4") = totalDescuentoGravada5
                    dr.Item("Numero6") = totalDescuentoGravada10

                    dr.Item("Numero18") = totalDescuento

                    ds.Tables("Detalle").Rows.Add(dr)
                End If

                'Para imprimir los totales
                dr = ds.Tables("Detalle").NewRow()

                dr.Item("Numero5") = totalExenta - totalDescuentoExenta
                dr.Item("Numero14") = sumaIva5 - totalDescuentoGravada5
                dr.Item("Numero15") = sumaIva10 - totalDescuentoGravada10

                dr.Item("Numero7") = totalIva
                dr.Item("Numero8") = totalDescuento
                dr.Item("Numero9") = imptotal
                dr.Item("Campo4") = "(5%)"
                dr.Item("Campo5") = "(10%)"
                dr.Item("Numero16") = Math.Round((sumaIva5 - totalDescuentoGravada5) * 5 / 100, 0)
                dr.Item("Numero17") = Math.Round((sumaIva10 - totalDescuentoGravada10) * 10 / 100, 0)

                dr.Item("Campo3") = moneda & " " & sentFuncion.NumeroaLetras(Math.Round(imptotal, candecimales))

                ds.Tables("Detalle").Rows.Add(dr)
            Catch ex As Exception
                MsgBox(Ex.ToString)
            Finally
                dar.Close()         'Cierra el SQL DataReader
                'Cierra la SqlConecction
                ser.Cerrar(cnn)
            End Try
        Finally

        End Try
        'Una vez que tenemos todos los datos en el dataset, vamos a llamar al nuevo 
        'formulario y le vamos a pasar el dataset:
        Return ds
    End Function

    Public Function ImpPedido(ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal codventa As Long, ByVal candecimales As Integer) As DataSet
        ds.Clear()

        ds.ReadXml(direccion)

        Dim desmoneda As String
        Dim fechadevolucion As String
        Dim numventa As String
        Dim numclientes As String
        Dim nummoneda As String
        Dim clientes As String
        Dim descomprobante As String
        Dim telefono As String
        Dim dessucursal As String

        Dim totaliva As Decimal
        Dim totaldescuento As Decimal
        Dim subtotal As Decimal
        Dim totaldevolucion As Decimal

        sql = ""
        sql = " SELECT V.NUMVENTA AS NUMERO, " & _
                "V.COTIZACION1 AS COTIZACION, V.CODMONEDA,V.PORCENTAJEDESCUENTO, " & _
                "CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA, V.MODALIDADPAGO AS MODALIDADPAGO, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                "RTRIM(CL.RUC) AS RUC, RTRIM(CL.NUMCEDULA) AS NUMCEDULA, RTRIM(CL.DIRECCION) AS DIRECCION," & _
                "RTRIM(CL.TELEFONO) AS TELEFONO, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
                "RTRIM(CI.DESCIUDAD) AS DESCIUDAD, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
                "RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR, " & _
                "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, " & _
                "VD.CODVENTA, VD.CODPRODUCTO, VD.CANTIDADVENTA, " & _
                "VD.PRECIOVENTABRUTO, VD.PRECIOVENTANETO as PRECIONETO, VD.PRECIOVENTALISTA, " & _
                "VD.PRECIOVENTANETO * VD.CANTIDADVENTA AS TOTAL, " & _
                "RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, ISNULL(RTRIM(P.DESPRODUCTO),'') AS DESPRODUCTO, " & _
                "V.CODCLIENTE, V.FECHAVENTA, V.TIPOVENTA, " & _
                "V.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                "V.TOTALEXENTA, V.TOTALGRAVADA, V.TOTALDESCUENTO, V.TOTALIVA, I.COHEFICIENTE, " & _
                "(VD.PRECIOVENTABRUTO * VD.[DESC]/100) AS DESCUENTODETALLE, " & _
                "V.TOTALEXENTA+V.TOTALGRAVADA AS SUBTOTAL, " & _
                "V.TOTALEXENTA+V.TOTALGRAVADA+V.TOTALIVA-V.TOTALDESCUENTO AS TOTALGENERAL, I.COHEFICIENTE " & _
                "FROM VENTAS V INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                "INNER JOIN IVA I ON P.CODIVA = I.CODIVA " & _
                "INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                "INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                "INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                "LEFT OUTER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                "LEFT OUTER JOIN ZONA Z ON S.CODZONA = Z.CODZONA " & _
                "LEFT OUTER JOIN CIUDAD CI ON Z.CODCIUDAD = CI.CODCIUDAD " & _
                "WHERE VD.CODVENTA = " & codventa & " "
        ''"ORDER BY P.DESPRODUCTO, P.CODIGOBARRA "


        Try
            ser.Abrir(sqlc)

            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()

                row = ds.Tables("Detalle").NewRow()

                fechadevolucion = dr("FECHAVENTA")
                numventa = dr("NUMERO")
                descomprobante = dr("DESCOMPROBANTE")
                dessucursal = dr("DESSUCURSAL")
                numclientes = dr("NUMCLIENTE")
                clientes = dr("CLIENTE")
                subtotal = dr("SUBTOTAL")
                totaliva = dr("TOTALIVA")
                totaldescuento = dr("TOTALDESCUENTO")
                totaldevolucion = dr("TOTALGENERAL")

                row.Item("Campo8") = dr("CODIGOBARRA")
                row.Item("Campo9") = dr("DESPRODUCTO")
                row.Item("Numero2") = dr("CANTIDADVENTA")
                row.Item("Numero3") = dr("PRECIONETO")
                row.Item("Numero5") = dr("TOTAL")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = EmpDescripcion
            row.Item("Campo4") = dessucursal
            row.Item("Campo2") = numventa
            row.Item("Campo3") = fechadevolucion
            row.Item("Campo6") = descomprobante
            row.Item("Campo7") = clientes

            row.Item("Numero6") = totaldevolucion
            row.Item("Numero1") = subtotal
            row.Item("Numero2") = totaldescuento
            row.Item("Numero3") = totaliva

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function impFacturaBorrador(ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, ByVal SucCodigo As Long, ByVal SucDescripcion As String, ByVal codventa As Long, ByVal candecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT V.CODVENTA AS CODVENTA, RTRIM (V.NUMVENTA) AS NUMERO, RTRIM(T.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " V.PORCENTAJEDESCUENTO AS DESCUENTO, V.COTIZACION1 AS COTIZACION, " & _
        " CONVERT(VARCHAR(10), V.FECGRA, 103) AS FECHAINGRESO, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " V.TOTALEXENTA AS TOTALEXENTA, V.TOTALGRAVADA AS TOTALGRAVADA, " & _
        " V.TOTALIVA AS TOTALIVA, V.ESTADO AS ESTADO, V.TOTALDESCUENTO AS MONTODESCUENTO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS TOTALFACTURA, " & _
        " VD.CANTIDADVENTA AS CANTIDAD, VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO, VD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
        " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CODPRODUCTO AS CODPRODUCTO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(VE.NUMVENDEDOR) + ' - ' + RTRIM(VE.DESVENDEDOR) AS VENDEDOR, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(Z.DESZONA) AS ZONA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " RTRIM(CL.DIRECCION) AS DIRECCION, RTRIM(CL.RUC) AS RUC, RTRIM(CL.TELEFONO) AS TELEFONO," & _
        " RTRIM(TL.NUMLISTA) AS NUMLISTA," & _
        " CL.LIMCREDITO AS LIMITECREDITO, V.MODALIDADPAGO, V.FECGRA AS FECGRA, V.TIPOPRECIO " & _
        " FROM VENTAS V INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN TIPOLISTA TL ON V.CODLISTA = TL.CODLISTA " & _
        " WHERE V.CODVENTA = " & codventa & " AND V.ESTADO = 0 " & _
        " ORDER BY NUMERO, LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo2") = dr("FECHAVENTA")
                    row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo15") = dr("SUCURSAL")
                    row.Item("Campo17") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Campo5") = dr("CLIENTE")
                    row.Item("Campo6") = dr("VENDEDOR")
                    row.Item("Campo7") = dr("MONEDA")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Campo12") = dr("ZONA")
                    row.Item("Campo14") = dr("NUMCLIENTE")
                    row.Item("Numero1") = dr("COTIZACION")

                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("PRECIOVENTABRUTO")
                    row.Item("Numero4") = dr("PRECIOVENTANETO")

                    row.Item("Numero13") = dr("CANTIDAD") * dr("PRECIOVENTABRUTO")

                    If dr("TIPOPRECIO") = 1 Then
                        row.Item("Campo10") = "MINORISTA"
                    Else
                        row.Item("Campo10") = "MAYORISTA"
                    End If

                    row.Item("Numero6") = dr("TOTALEXENTA")
                    row.Item("Numero7") = dr("TOTALGRAVADA")
                    row.Item("Numero8") = dr("TOTALIVA")
                    row.Item("Numero9") = dr("MONTODESCUENTO")
                    row.Item("Numero10") = dr("TOTALFACTURA")
                    row.Item("Numero11") = dr("DESCUENTO")

                    If dr("MODALIDADPAGO") = 0 Then
                        row.Item("Campo13") = "CONTADO"
                    Else
                        row.Item("Campo13") = "CRÉDITO"
                    End If

                    row.Item("Numero12") = dr("TOTALFACTURA")
                    row.Item("Numero5") = dr("CANTIDAD") * dr("PRECIOVENTANETO")

                    row.Item("Campo20") = dr("DIRECCION")
                    row.Item("Campo21") = dr("RUC")
                    row.Item("Campo22") = dr("TELEFONO")
                    row.Item("Campo23") = dr("NUMLISTA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas

                row.Item("Campo1") = EmpDescripcion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function InfExtractoCuentaParaClientesIncluyeContado(ByVal Direccion As String, ByVal EmpCodigo As Long, _
        ByVal EmpDescripcion As String, ByVal codMoneda As Long, _
        ByVal moneda_informe As String, ByVal moneda_descripcion As String, ByVal cotizacion As String, _
        ByVal tipo_desde As String, ByVal tipo_desde_descripcion As String, _
        ByVal tipo_hasta As String, ByVal tipo_hasta_descripcion As String, _
        ByVal clientes_desde As String, ByVal clientes_descripcion_desde As String, _
        ByVal clientes_hasta As String, ByVal clientes_descripcion_hasta As String, _
        ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
        ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
        ByVal fecha_desde As String, ByVal fecha_hasta As String, _
        ByVal titulo As Long, ByVal canDecimales As Integer, ByVal condiciones As String, ByVal condicionescontado As String) As DataSet

        Dim ds As New DataSet
        ds.ReadXml(Direccion)

        Dim dr As DataRow

        ser = New BD.ABD
        cnn = ser.Abrir

        Try
            sql = ""
            sql = " DECLARE @FECHADESDE AS DATETIME, @FECHAHASTA AS DATETIME,  " & _
            " @CODEMPRESA NUMERIC(18) " & _
            " SET @FECHADESDE = CAST('" & fecha_desde & "' AS DATETIME) " & _
            " SET @FECHAHASTA = CAST('" & fecha_hasta & "' AS DATETIME) " & _
            " SET @CODEMPRESA = " & EmpCodigo & " " & _
            " SELECT RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
            " REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
            " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
            " ISNULL(RTRIM(CL.TELEFONO),'') AS TELEFONO, ISNULL(RTRIM(CL.DIRECCION),'') AS DIRECCION, ISNULL(CL.LIMCREDITO, 0) AS LIMITECREDITO, " & _
            " RTRIM(Z.NUMZONA) AS NUMZONA, RTRIM(Z.DESZONA) AS DESZONA, " & _
            " V.FECHAVENTA AS FECHAVENTAORDEN, CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, V.NUMVENTA AS NUMVENTA, " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS IMPORTECUOTA, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) * V.COTIZACION1 AS IMPORTECUOTAINFORME, " & _
            " CASE WHEN ISNULL((SELECT MAX(D.CODINGRESO) FROM CAJAFACTURASCOBRADAS D WHERE D.CODVENTA = V.CODVENTA),0) > 0 " & _
            " THEN (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
            " ELSE 0  END AS SALDOCUOTA, " & _
            " CASE WHEN ISNULL((SELECT MAX(D.CODINGRESO) FROM CAJAFACTURASCOBRADAS D WHERE D.CODVENTA = V.CODVENTA),0) > 0 " & _
            " THEN (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO)* V.COTIZACION1 " & _
            " ELSE 0  END AS SALDOCUOTAINFORME, " & _
            " 0 AS NUMEROCUOTA, '' AS FECHAVCTO, '' AS ATRASO, " & _
            " M.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            " REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA)) AS NUMMONEDAORDEN, " & _
            " 1 AS ORDEN, 0 AS CREDITO, ISNULL(TIP.DESTIPOCLIENTE,'') AS DESTIPOCLIENTE " & _
            " FROM CLIENTES CL " & _
            " INNER JOIN VENTAS V ON V.CODCLIENTE = CL.CODCLIENTE " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON Z.CODZONA = CL.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA AND V.ESTADO = 0 AND V.MODALIDADPAGO = 0 " & _
            " AND V.FECHAVENTA BETWEEN @FECHADESDE AND @FECHAHASTA  " & condiciones & " " & _
            " AND V.CODVENTA NOT IN (SELECT F.CODVENTA FROM FACTURACOBRAR F WHERE F.CODVENTA = V.CODVENTA) " & condicionescontado & " " & _
    " UNION ALL " & _
            " SELECT RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
            " REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
            " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, ISNULL(RTRIM(CL.TELEFONO),'') AS TELEFONO, " & _
            " ISNULL(RTRIM(CL.DIRECCION),'') AS DIRECCION, ISNULL(CL.LIMCREDITO, 0) AS LIMITECREDITO, " & _
            " RTRIM(Z.NUMZONA) AS NUMZONA, RTRIM(Z.DESZONA) AS DESZONA, " & _
            " CAST('01/01/1900' AS DATETIME) AS FECHAVENTAORDEN, '' AS FECHAVENTA, '' AS NUMVENTA, " & _
            " '' AS NUMTIPOCOMPRO, '' AS DESCOMPROBANTE, " & _
            " FC.IMPORTECUOTA AS IMPORTECUOTA, " & _
            " FC.IMPORTECUOTA * V.COTIZACION1 AS IMPORTECUOTAINFORME, " & _
            " ISNULL(FC.SALDOCUOTA,0) AS SALDOCUOTA, " & _
            " (ISNULL(FC.SALDOCUOTA,0) * V.COTIZACION1) AS SALDOCUOTAINFORME, " & _
            " 0 AS NUMEROCUOTA, '' AS FECHAVCTO, '' AS ATRASO, " & _
            " M.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            " REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA)) AS NUMMONEDAORDEN, " & _
            " -1 AS ORDEN, 1 AS CREDITO, ISNULL(TIP.DESTIPOCLIENTE,'') AS DESTIPOCLIENTE " & _
            " FROM CLIENTES CL INNER JOIN VENTAS V ON V.CODCLIENTE = CL.CODCLIENTE " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON Z.CODZONA = CL.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
            " AND V.FECHAVENTA < @FECHADESDE " & condiciones & _
    " UNION ALL " & _
            " SELECT MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, " & _
            " MAX(REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE))) AS NUMCLIENTEORDEN, " & _
            " MAX(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, MAX(ISNULL(RTRIM(CL.TELEFONO),'')) AS TELEFONO, " & _
            " MAX(ISNULL(RTRIM(CL.DIRECCION),'')) AS DIRECCION, MAX(ISNULL(CL.LIMCREDITO, 0)) AS LIMITECREDITO, " & _
            " MAX(RTRIM(Z.NUMZONA)) AS NUMZONA, MAX(RTRIM(Z.DESZONA)) AS DESZONA, " & _
            " CAST('01/01/1900' AS DATETIME) AS FECHAVENTAORDEN, '' AS FECHAVENTA, '' AS NUMVENTA, " & _
            " '' AS NUMTIPOCOMPRO, '' AS DESCOMPROBANTE, " & _
            " MAX(CO.IMPORTERECIBO) AS IMPORTECUOTA, " & _
            " MAX(CO.IMPORTERECIBO * CO.COTIZACION1MR) AS IMPORTECUOTAINFORME, " & _
            " MAX(ISNULL(CO.SALDORECIBO,0)) AS SALDOCUOTA, " & _
            " MAX(ISNULL(CO.SALDORECIBO,0) * CO.COTIZACION1MR)  AS SALDOCUOTAINFORME, " & _
            " 0 AS NUMEROCUOTA, '' AS FECHAVCTO, '' AS ATRASO, " & _
            " MAX(M.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS NUMMONEDA, MAX(RTRIM(M.DESMONEDA)) AS DESMONEDA, " & _
            " MAX(REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA))) AS NUMMONEDAORDEN, " & _
            " 0 AS ORDEN, 1 AS CREDITO, ISNULL(MAX(TIP.DESTIPOCLIENTE),'') AS DESTIPOCLIENTE " & _
            " FROM CLIENTES CL INNER JOIN COBRANZAS CO ON CL.CODCLIENTE = CO.CODCLIENTE " & _
            " INNER JOIN MONEDA M ON CO.MONEDARECIBO = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
            " AND CO.FECHACOBRO < @FECHADESDE " & condiciones & _
            " AND CO.TIPCOBRO IS NOT NULL " & _
            " GROUP BY CL.CODCLIENTE, M.CODMONEDA, CO.CODCOBRANZA " & _
    " UNION ALL " & _
            " SELECT RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
            " REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
            " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, ISNULL(RTRIM(CL.TELEFONO),'') AS TELEFONO, " & _
            " ISNULL(RTRIM(CL.DIRECCION),'') AS DIRECCION, ISNULL(CL.LIMCREDITO, 0) AS LIMITECREDITO, " & _
            " RTRIM(Z.NUMZONA) AS NUMZONA, RTRIM(Z.DESZONA) AS DESZONA, " & _
            " V.FECHAVENTA AS FECHAVENTAORDEN, CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, V.NUMVENTA AS NUMVENTA, " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
            " ISNULL(FC.IMPORTECUOTA,0) AS IMPORTECUOTA, " & _
            " (ISNULL(FC.IMPORTECUOTA,0) * V.COTIZACION1) AS IMPORTECUOTAINFORME, " & _
            " (ISNULL(FC.SALDOCUOTA,0)) AS SALDOCUOTA, " & _
            " (ISNULL(FC.SALDOCUOTA,0) * V.COTIZACION1) AS SALDOCUOTAINFORME, " & _
            " FC.CODNUMEROCUOTA AS NUMEROCUOTA, " & _
            " CONVERT(VARCHAR(10),FC.FECHAVCTO,103) AS FECHAVCTO, DATEDIFF(DAY,FC.FECHAVCTO,@FECHAHASTA) AS ATRASO, " & _
            " M.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA,  RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            " REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA)) AS NUMMONEDAORDEN, " & _
            " 1 AS ORDEN, 1 AS CREDITO, ISNULL(TIP.DESTIPOCLIENTE,'') AS DESTIPOCLIENTE " & _
            " FROM " & _
            " CLIENTES CL INNER JOIN VENTAS V ON CL.CODCLIENTE = V.CODCLIENTE " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON Z.CODZONA = CL.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
            " AND V.FECHAVENTA BETWEEN @FECHADESDE AND @FECHAHASTA " & condiciones & "  " & _
    " UNION ALL " & _
            " SELECT MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, " & _
            " MAX(REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE))) AS NUMCLIENTEORDEN, " & _
            " MAX(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, MAX(ISNULL(RTRIM(CL.TELEFONO),'')) AS TELEFONO, " & _
            " MAX(ISNULL(RTRIM(CL.DIRECCION),'')) AS DIRECCION, MAX(ISNULL(CL.LIMCREDITO, 0)) AS LIMITECREDITO, " & _
            " MAX(RTRIM(Z.NUMZONA)) AS NUMZONA, MAX(RTRIM(Z.DESZONA)) AS DESZONA, " & _
            " MAX(CO.FECHACOBRO) AS FECHAVENTAORDEN, " & _
            " MAX(CONVERT(VARCHAR(10),CO.FECHACOBRO,103)) AS FECHAVENTA, MAX(CO.NUMCOMPROBANTE) AS NUMVENTA, " & _
            " MAX(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPRO, MAX(RTRIM(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE, " & _
            " MAX(CO.IMPORTERECIBO) AS IMPORTECUOTA, " & _
            " MAX(CO.IMPORTERECIBO * CO.COTIZACION1MR) AS IMPORTECUOTAINFORME, " & _
            " MAX(ISNULL(CO.SALDORECIBO,0)) AS SALDOCUOTA, " & _
            " MAX(ISNULL(CO.SALDORECIBO,0) * CO.COTIZACION1MR)  AS SALDOCUOTAINFORME, " & _
            " 0 AS NUMEROCUOTA, '' AS FECHAVCTO, '' AS ATRASO, " & _
            " MAX(M.CODMONEDA) AS CODMONEDA, MAX(RTRIM(M.NUMMONEDA)) AS NUMMONEDA,  MAX(RTRIM(M.DESMONEDA)) AS DESMONEDA, " & _
            " MAX(REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA))) AS NUMMONEDAORDEN, " & _
            " 2 AS ORDEN, 1 AS CREDITO, ISNULL(MAX(TIP.DESTIPOCLIENTE),'') AS DESTIPOCLIENTE " & _
            " FROM " & _
            " CLIENTES CL INNER JOIN COBRANZAS CO ON CL.CODCLIENTE = CO.CODCLIENTE " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON CO.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
            " INNER JOIN MONEDA M ON CO.MONEDARECIBO = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
            " AND CO.FECHACOBRO BETWEEN @FECHADESDE AND @FECHAHASTA  " & condiciones & " " & _
            " AND CO.TIPCOBRO IS NOT NULL " & _
            " GROUP BY CL.CODCLIENTE, M.CODMONEDA, CO.CODCOBRANZA " & _
            " ORDER BY NUMCLIENTEORDEN, CREDITO, NUMMONEDAORDEN,FECHAVENTAORDEN "

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()

            Try
                Do While dar.Read()
                    dr = ds.Tables("Detalle").NewRow()

                    dr.Item("Campo1") = dar("NUMCLIENTEORDEN")
                    dr.Item("Campo2") = dar("NUMCLIENTE")
                    dr.Item("Campo3") = dar("CLIENTE")

                    dr.Item("Campo4") = dar("CREDITO")
                    If dar("CREDITO") = 0 Then
                        dr.Item("Campo5") = "FACTURAS CONTADO"
                    Else
                        dr.Item("Campo5") = "FACTURAS CREDITO"
                    End If
                    dr.Item("Campo6") = dar("NUMZONA")
                    dr.Item("Campo7") = dar("DESZONA")
                    dr.Item("Campo8") = dar("NUMMONEDAORDEN")
                    dr.Item("Campo9") = dar("NUMMONEDA")
                    dr.Item("Campo10") = dar("DESMONEDA")
                    dr.Item("Campo11") = dar("FECHAVENTA")
                    dr.Item("Campo12") = dar("NUMTIPOCOMPRO")
                    dr.Item("Campo13") = dar("DESCOMPROBANTE")
                    dr.Item("Campo14") = dar("NUMVENTA")
                    dr.Item("Campo21") = dar("DESTIPOCLIENTE")

                    dr.Item("Numero6") = dar("ORDEN")
                    dr.Item("Numero10") = dar("LIMITECREDITO")

                    If dar("CREDITO") = 0 Then
                        dr.Item("Numero7") = dar("IMPORTECUOTA")
                        dr.Item("Numero8") = dar("SALDOCUOTA")
                        dr.Item("Campo15") = "__/__/____"

                        'If codMoneda = dar("CODMONEDA") Then
                        '    dr.Item("Numero3") = dar("IMPORTECUOTA")
                        'Else
                        '    dr.Item("Numero3") = Math.Round(dar("IMPORTECUOTAINFORME") / cotizacion, canDecimales)
                        'End If
                    Else
                        If dar("ORDEN") = -1 Or dar("ORDEN") = 1 Then
                            dr.Item("Numero2") = dar("IMPORTECUOTA")
                            dr.Item("Campo15") = dar("FECHAVCTO")

                            If codMoneda = dar("CODMONEDA") Then
                                dr.Item("Numero3") = dar("IMPORTECUOTA")
                            Else
                                dr.Item("Numero3") = Math.Round(dar("IMPORTECUOTAINFORME") / cotizacion, canDecimales)
                            End If
                        ElseIf dar("ORDEN") = 0 Or dar("ORDEN") = 2 Then
                            dr.Item("Numero4") = dar("IMPORTECUOTA")
                            dr.Item("Campo15") = "__/__/____"

                            If codMoneda = dar("CODMONEDA") Then
                                dr.Item("Numero5") = dar("IMPORTECUOTA")
                            Else
                                dr.Item("Numero5") = Math.Round(dar("IMPORTECUOTAINFORME") / cotizacion, canDecimales)
                            End If
                        End If
                    End If

                    ds.Tables("Detalle").Rows.Add(dr)
                Loop
            Catch ex As Exception
                MsgBox(ex.ToString)
            Finally
                dar.Close()
            End Try

            '###################
            '#    CABECERA     #
            '###################

            dr = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

            If titulo = 1 Then
                dr.Item("Campo1") = EmpDescripcion
            Else
                dr.Item("Campo1") = ""
            End If

            dr.Item("Campo2") = fecha_desde
            dr.Item("Campo3") = fecha_hasta
            dr.Item("Campo15") = moneda_descripcion
            dr.Item("Campo4") = clientes_descripcion_desde
            dr.Item("Campo5") = clientes_descripcion_hasta
            dr.Item("Campo6") = tipo_desde_descripcion
            dr.Item("Campo7") = tipo_hasta_descripcion
            dr.Item("Campo8") = moneda_descripcion_desde
            dr.Item("Campo9") = moneda_descripcion_hasta

            ds.Tables("Cabecera").Rows.Add(dr)

        Catch e As Exception
            MsgBox(e.Message)
        Finally
            ser.Cerrar(cnn)
        End Try
        Return ds
    End Function


    Public Function InfExtractoCuentaParaClientes(ByVal Direccion As String, ByVal EmpCodigo As Long, _
ByVal EmpDescripcion As String, ByVal codMoneda As Long, _
ByVal moneda_informe As String, _
ByVal moneda_descripcion As String, ByVal cotizacion As String, _
ByVal tipo_desde As String, ByVal tipo_desde_descripcion As String, _
ByVal tipo_hasta As String, ByVal tipo_hasta_descripcion As String, _
ByVal clientes_desde As String, ByVal clientes_descripcion_desde As String, _
ByVal clientes_hasta As String, ByVal clientes_descripcion_hasta As String, _
ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
ByVal fecha_desde As String, ByVal fecha_hasta As String, _
ByVal titulo As Long, ByVal canDecimales As Integer, ByVal condiciones As String) As DataSet

        Dim ds As New DataSet
        ds.ReadXml(Direccion)

        Dim dr As DataRow

        ser = New BD.ABD
        cnn = ser.Abrir

        Try
            sql = ""
            sql = " DECLARE @FECHADESDE AS DATETIME, @FECHAHASTA AS DATETIME,  " & _
            " @CODEMPRESA NUMERIC(18) " & _
            " SET @FECHADESDE = CAST('" & fecha_desde & "' AS DATETIME) " & _
            " SET @FECHAHASTA = CAST('" & fecha_hasta & "' AS DATETIME) " & _
            " SET @CODEMPRESA = " & EmpCodigo & " " & _
            " SELECT " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
            " REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
            " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
            " ISNULL(RTRIM(CL.TELEFONO),'') AS TELEFONO, " & _
            " ISNULL(RTRIM(CL.DIRECCION),'') AS DIRECCION, " & _
            " ISNULL(CL.LIMCREDITO, 0) AS LIMITECREDITO, " & _
            " /*ZONA*/ " & _
            " RTRIM(Z.NUMZONA) AS NUMZONA, " & _
            " RTRIM(Z.DESZONA) AS DESZONA, " & _
            " /*VENTAS*/ " & _
            " CAST('01/01/1900' AS DATETIME) AS FECHAVENTAORDEN, " & _
            " '' AS FECHAVENTA, " & _
            " '' AS NUMVENTA, " & _
            " /*TIPO COMPROBANTE*/ " & _
            " '' AS NUMTIPOCOMPRO, " & _
            " '' AS DESCOMPROBANTE, " & _
            " /*FACTURA A COBRAR*/ " & _
            " FC.IMPORTECUOTA AS IMPORTECUOTA, " & _
            " FC.IMPORTECUOTA * V.COTIZACION1 AS IMPORTECUOTAINFORME, " & _
            " ISNULL(FC.SALDOCUOTA,0) AS SALDOCUOTA, " & _
            " (ISNULL(FC.SALDOCUOTA,0) * V.COTIZACION1) AS SALDOCUOTAINFORME, " & _
            " 0 AS NUMEROCUOTA, " & _
            " '' AS FECHAVCTO, " & _
            " '' AS ATRASO, " & _
            " /*MONEDA*/ " & _
            " M.CODMONEDA AS CODMONEDA, " & _
            " RTRIM(M.NUMMONEDA) AS NUMMONEDA, " & _
            " RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
            " REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA)) AS NUMMONEDAORDEN, " & _
            " -1 AS ORDEN " & _
            " FROM CLIENTES CL INNER JOIN VENTAS V ON V.CODCLIENTE = CL.CODCLIENTE " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON Z.CODZONA = CL.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
            " AND V.FECHAVENTA < @FECHADESDE " & condiciones & _
            " UNION ALL " & _
            " /*CLIENTES*/ " & _
            " SELECT " & _
            " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, " & _
            " MAX(REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE))) AS NUMCLIENTEORDEN, " & _
            " MAX(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
            " MAX(ISNULL(RTRIM(CL.TELEFONO),'')) AS TELEFONO, " & _
            " MAX(ISNULL(RTRIM(CL.DIRECCION),'')) AS DIRECCION, " & _
            " MAX(ISNULL(CL.LIMCREDITO, 0)) AS LIMITECREDITO, " & _
            " /*ZONA*/ " & _
            " MAX(RTRIM(Z.NUMZONA)) AS NUMZONA, " & _
            " MAX(RTRIM(Z.DESZONA)) AS DESZONA, " & _
            " /*COBRANZAS*/ " & _
            " CAST('01/01/1900' AS DATETIME) AS FECHAVENTAORDEN, " & _
            " '' AS FECHAVENTA, " & _
            " '' AS NUMVENTA, " & _
            " /*TIPO COMPROBANTE*/ " & _
            " '' AS NUMTIPOCOMPRO, " & _
            " '' AS DESCOMPROBANTE, " & _
            " /*COBRANZAS*/ " & _
            " MAX(CO.IMPORTERECIBO) AS IMPORTECUOTA, " & _
            " MAX(CO.IMPORTERECIBO * CO.COTIZACION1MR) AS IMPORTECUOTAINFORME, " & _
            " MAX(ISNULL(CO.SALDORECIBO,0)) AS SALDOCUOTA, " & _
            " MAX(ISNULL(CO.SALDORECIBO,0) * CO.COTIZACION1MR)  AS SALDOCUOTAINFORME, " & _
            " 0 AS NUMEROCUOTA, " & _
            " '' AS FECHAVCTO, " & _
            " '' AS ATRASO, " & _
            " /*MONEDA*/ " & _
            " MAX(M.CODMONEDA) AS CODMONEDA, " & _
            " MAX(RTRIM(M.NUMMONEDA)) AS NUMMONEDA, " & _
            " MAX(RTRIM(M.DESMONEDA)) AS DESMONEDA, " & _
            " MAX(REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA))) AS NUMMONEDAORDEN, " & _
            " 0 AS ORDEN " & _
            " FROM CLIENTES CL INNER JOIN COBRANZAS CO ON CL.CODCLIENTE = CO.CODCLIENTE " & _
            " INNER JOIN MONEDA M ON CO.MONEDARECIBO = M.CODMONEDA " & _
            " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
            " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
            " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
            " AND CO.FECHACOBRO < @FECHADESDE " & condiciones & _
            " AND CO.TIPCOBRO IS NOT NULL " & _
            " GROUP BY CL.CODCLIENTE, M.CODMONEDA, CO.CODCOBRANZA " & _
            " UNION ALL " & _
                    " /*CLIENTES*/ " & _
                    " SELECT " & _
                    " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
                    " REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTEORDEN, " & _
                    " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                    " ISNULL(RTRIM(CL.TELEFONO),'') AS TELEFONO, " & _
                    " ISNULL(RTRIM(CL.DIRECCION),'') AS DIRECCION, " & _
                    " ISNULL(CL.LIMCREDITO, 0) AS LIMITECREDITO, " & _
                    " /*ZONA*/ " & _
                    " RTRIM(Z.NUMZONA) AS NUMZONA, " & _
                    " RTRIM(Z.DESZONA) AS DESZONA, " & _
                    " /*VENTAS*/ " & _
                    " V.FECHAVENTA AS FECHAVENTAORDEN, " & _
                    " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
                    " V.NUMVENTA AS NUMVENTA, " & _
                    " /*TIPO COMPROBANTE*/ " & _
                    " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
                    " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
                    " /*FACTURA A COBRAR*/ " & _
                    " ISNULL(FC.IMPORTECUOTA,0) AS IMPORTECUOTA, " & _
                    " (ISNULL(FC.IMPORTECUOTA,0) * V.COTIZACION1) AS IMPORTECUOTAINFORME, " & _
                    " (ISNULL(FC.SALDOCUOTA,0)) AS SALDOCUOTA, " & _
                    " (ISNULL(FC.SALDOCUOTA,0) * V.COTIZACION1) AS SALDOCUOTAINFORME, " & _
                    " FC.CODNUMEROCUOTA AS NUMEROCUOTA, " & _
                    " CONVERT(VARCHAR(10),FC.FECHAVCTO,103) AS FECHAVCTO, " & _
                    " DATEDIFF(DAY,FC.FECHAVCTO,@FECHAHASTA) AS ATRASO, " & _
                    " /*MONEDA*/ " & _
                    " M.CODMONEDA AS CODMONEDA, " & _
                    " RTRIM(M.NUMMONEDA) AS NUMMONEDA, " & _
                    " RTRIM(M.DESMONEDA) AS DESMONEDA, " & _
                    " REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA)) AS NUMMONEDAORDEN, " & _
                    " 1 AS ORDEN " & _
                    " FROM " & _
                    " CLIENTES CL INNER JOIN VENTAS V ON CL.CODCLIENTE = V.CODCLIENTE " & _
                    " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                    " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
                    " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
                    " INNER JOIN ZONA Z ON Z.CODZONA = CL.CODZONA " & _
                    " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
                    " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
                    " AND V.FECHAVENTA BETWEEN @FECHADESDE AND @FECHAHASTA " & condiciones & "  " & _
                    " UNION ALL " & _
                    " /*CLIENTES*/ " & _
                    " SELECT " & _
                    " MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, " & _
                    " MAX(REPLICATE('0',30-LEN(CL.NUMCLIENTE))+LTRIM(RTRIM(CL.NUMCLIENTE))) AS NUMCLIENTEORDEN, " & _
                    " MAX(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
                    " MAX(ISNULL(RTRIM(CL.TELEFONO),'')) AS TELEFONO, " & _
                    " MAX(ISNULL(RTRIM(CL.DIRECCION),'')) AS DIRECCION, " & _
                    " MAX(ISNULL(CL.LIMCREDITO, 0)) AS LIMITECREDITO, " & _
                    " /*ZONA*/ " & _
                    " MAX(RTRIM(Z.NUMZONA)) AS NUMZONA, " & _
                    " MAX(RTRIM(Z.DESZONA)) AS DESZONA, " & _
                    " /*COBRANZAS*/ " & _
                    " MAX(CO.FECHACOBRO) AS FECHAVENTAORDEN, " & _
                    " MAX(CONVERT(VARCHAR(10),CO.FECHACOBRO,103)) AS FECHAVENTA, " & _
                    " MAX(CO.NUMCOMPROBANTE) AS NUMVENTA, " & _
                    " /*TIPO COMPROBANTE*/ " & _
                    " MAX(RTRIM(TC.NUMTIPOCOMPRO)) AS NUMTIPOCOMPRO, " & _
                    " MAX(RTRIM(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE, " & _
                    " /*COBRANZAS*/ " & _
                    " MAX(CO.IMPORTERECIBO) AS IMPORTECUOTA, " & _
                    " MAX(CO.IMPORTERECIBO * CO.COTIZACION1MR) AS IMPORTECUOTAINFORME, " & _
                    " MAX(ISNULL(CO.SALDORECIBO,0)) AS SALDOCUOTA, " & _
                    " MAX(ISNULL(CO.SALDORECIBO,0) * CO.COTIZACION1MR)  AS SALDOCUOTAINFORME, " & _
                    " 0 AS NUMEROCUOTA, " & _
                    " '' AS FECHAVCTO, " & _
                    " '' AS ATRASO, " & _
                    " /*MONEDA*/ " & _
                    " MAX(M.CODMONEDA) AS CODMONEDA, " & _
                    " MAX(RTRIM(M.NUMMONEDA)) AS NUMMONEDA, " & _
                    " MAX(RTRIM(M.DESMONEDA)) AS DESMONEDA, " & _
                    " MAX(REPLICATE('0',10-LEN(M.NUMMONEDA))+LTRIM(RTRIM(M.NUMMONEDA))) AS NUMMONEDAORDEN, " & _
                    " 2 AS ORDEN " & _
                    " FROM " & _
                    " CLIENTES CL INNER JOIN COBRANZAS CO ON CL.CODCLIENTE = CO.CODCLIENTE " & _
                    " INNER JOIN TIPOCOMPROBANTE TC ON CO.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
                    " INNER JOIN MONEDA M ON CO.MONEDARECIBO = M.CODMONEDA " & _
                    " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
                    " INNER JOIN TIPOCLIENTE TIP ON CL.CODTIPOCLIENTE = TIP.CODTIPOCLIENTE " & _
                    " WHERE CL.CODEMPRESA = @CODEMPRESA " & _
                    " AND CO.FECHACOBRO BETWEEN @FECHADESDE AND @FECHAHASTA  " & condiciones & " " & _
                    " AND CO.TIPCOBRO IS NOT NULL " & _
                    " GROUP BY CL.CODCLIENTE, M.CODMONEDA, CO.CODCOBRANZA " & _
                    " ORDER BY NUMCLIENTEORDEN,NUMMONEDAORDEN,FECHAVENTAORDEN "

            cmd = New SqlCommand(sql, cnn)
            dar = cmd.ExecuteReader()

            Try
                Do While dar.Read()
                    dr = ds.Tables("Detalle").NewRow()

                    dr.Item("Campo1") = dar("NUMCLIENTEORDEN")
                    dr.Item("Campo2") = dar("NUMCLIENTE")
                    dr.Item("Campo3") = dar("CLIENTE")
                    dr.Item("Campo4") = dar("DIRECCION")
                    dr.Item("Campo5") = dar("TELEFONO")
                    dr.Item("Campo6") = dar("NUMZONA")
                    dr.Item("Campo7") = dar("DESZONA")
                    dr.Item("Campo8") = dar("NUMMONEDAORDEN")
                    dr.Item("Campo9") = dar("NUMMONEDA")
                    dr.Item("Campo10") = dar("DESMONEDA")
                    dr.Item("Campo11") = dar("FECHAVENTA")
                    dr.Item("Campo12") = dar("NUMTIPOCOMPRO")
                    dr.Item("Campo13") = dar("DESCOMPROBANTE")
                    dr.Item("Campo14") = dar("NUMVENTA")

                    dr.Item("Numero6") = dar("ORDEN")
                    dr.Item("Numero10") = dar("LIMITECREDITO")

                    If dar("ORDEN") = -1 Or dar("ORDEN") = 1 Then
                        dr.Item("Numero2") = dar("IMPORTECUOTA")
                        dr.Item("Campo15") = dar("FECHAVCTO")

                        If codMoneda = dar("CODMONEDA") Then
                            dr.Item("Numero3") = dar("IMPORTECUOTA")
                        Else
                            dr.Item("Numero3") = Math.Round(dar("IMPORTECUOTAINFORME") / cotizacion, canDecimales)
                        End If
                    ElseIf dar("ORDEN") = 0 Or dar("ORDEN") = 2 Then
                        dr.Item("Numero4") = dar("IMPORTECUOTA")
                        dr.Item("Campo15") = "__/__/____"

                        If codMoneda = dar("CODMONEDA") Then
                            dr.Item("Numero5") = dar("IMPORTECUOTA")
                        Else
                            dr.Item("Numero5") = Math.Round(dar("IMPORTECUOTAINFORME") / cotizacion, canDecimales)
                        End If
                    End If

                    ds.Tables("Detalle").Rows.Add(dr)
                Loop
            Catch ex As Exception
                MsgBox(ex.ToString)
            Finally
                dar.Close()
            End Try

            '###################
            '#    CABECERA     #
            '###################

            dr = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

            If titulo = 1 Then
                dr.Item("Campo1") = EmpDescripcion
            Else
                dr.Item("Campo1") = ""
            End If

            dr.Item("Campo2") = fecha_desde
            dr.Item("Campo3") = fecha_hasta
            dr.Item("Campo15") = moneda_descripcion
            dr.Item("Campo4") = clientes_descripcion_desde
            dr.Item("Campo5") = clientes_descripcion_hasta
            dr.Item("Campo6") = tipo_desde_descripcion
            dr.Item("Campo7") = tipo_hasta_descripcion
            dr.Item("Campo8") = moneda_descripcion_desde
            dr.Item("Campo9") = moneda_descripcion_hasta

            ds.Tables("Cabecera").Rows.Add(dr)

        Catch e As Exception
            MsgBox(e.Message)
        Finally
            ser.Cerrar(cnn)
        End Try
        Return ds
    End Function


    '    Public Function InfLiquidaciondeComision(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    '  ByVal cotizacion As String, ByVal candecimales As Integer, _
    '  ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    '  ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    '  ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    '  ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    '  ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    '  ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    '  ByVal numeroDesde As String, ByVal numeroHasta As String, _
    '  ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    '  ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    '  ByVal fechaDesde As String, ByVal fechaHasta As String, _
    '  ByVal condiciones As String, ByVal titulo As Byte, ByVal MONEDA As String, ByVal tipo As Integer) As DataSet

    '        ds.Clear()
    '        Dim dtComision As DataTable

    '        sql = ""
    '        sql = " /* PARAMETROS INDICADOS */ " & _
    '        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
    '        " /* VARIABLES UTILIZADAS */ " & _
    '        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
    '        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
    '        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
    '        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
    '        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
    '        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
    '        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @SALDO NUMERIC(18,5) DECLARE @ORDEN INTEGER " & _
    '        " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
    '        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
    '        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
    '        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
    '        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
    '        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), SALDO NUMERIC(18,5), ORDEN INTEGER) " & _
    '        " SET @CODEMPRESA = " & empCodigo & " " & _
    '        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
    '        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
    '        " DECLARE CURSOR_COMISION CURSOR " & _
    '        " FOR " & _
    '" /* FACTURAS CREDITO DEL MES COBRADAS EN SU TOTALIDAD*/ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
    '        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS COBRADAS DEL MES */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES OK */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, " & _
    '        "  ((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) - " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))) AS SALDO, " & _
    '        "  1 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) > " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES ok */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
    '        " - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '        " AS SALDO, 1 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
    '        " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
    '        " WHERE CF.CODVENTA = V.CODVENTA " & _
    '        " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2  AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS  OK */ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND FA.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
    '        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) = " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF " & _
    '        " WHERE FA.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME))) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
    '        " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS VER OTRO MES QUE HORROR */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR OK */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, " & _
    '        " ( (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO)- " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME)))) " & _
    '        " AS SALDO, 3 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) > " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR VER OTRO MES HORROR */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
    '        " - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '        " AS SALDO, 3 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
    '        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA  " & _
    '" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA) ,103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND LEN(DE.OBSERVACION) > 0 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
    '        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA " & _
    '        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
    '        " OPEN CURSOR_COMISION " & _
    '        " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @SALDO, @ORDEN " & _
    '        " WHILE @@FETCH_STATUS = 0 " & _
    '        " BEGIN " & _
    '        " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
    '        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION,  SALDO, ORDEN) " & _
    '        " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO,  @ORDEN) " & _
    '        " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO, @ORDEN " & _
    '        " END " & _
    '        " CLOSE CURSOR_COMISION " & _
    '        " DEALLOCATE CURSOR_COMISION " & _
    '" SELECT * FROM @TABLA "

    '        Try
    '            ds.ReadXml(direccion)

    '            ser.Abrir(sqlc)
    '            cmd.Connection = sqlc
    '            cmd.CommandText = sql

    '            dr = cmd.ExecuteReader



    '            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
    '            Dim numvendedor As String = ""
    '            Dim i As Integer = 0

    '            Dim cobradasmes As Decimal = 0 : Dim pendientesmes As Decimal = 0
    '            Dim cobradascomision As Decimal = 0 : Dim pendientescomision As Decimal = 0
    '            Dim anteriorventa As Decimal = 0 : Dim anteriorcomision As Decimal = 0
    '            Dim vector As New ArrayList
    '            Try

    '                Do While dr.Read()
    '                    row = ds.Tables("Detalle").NewRow()

    '                    If i = 0 Then
    '                        i = 1
    '                        numvendedor = dr("NUMVENDEDOR")
    '                    End If
    '                    If dr("NUMVENDEDOR") <> numvendedor Then
    '                        numvendedor = dr("NUMVENDEDOR")
    '                        cobradasmes = 0 : pendientesmes = 0 : cobradascomision = 0
    '                        pendientescomision = 0 : anteriorventa = 0 : anteriorcomision = 0
    '                    End If
    '                    row.Item("Campo1") = dr("NUMVENDEDOR")
    '                    row.Item("Campo15") = dr("DESVENDEDOR")
    '                    row.Item("Campo16") = funcion.textomes(fechaHasta.Substring(3, 2)) & " / " & fechaHasta.Substring(6, 4)

    '                    ventaneta = 0
    '                    Dim fechaven As String = dr("fechaventa")
    '                    Dim fecha As String = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta))


    '                    If dr("NUMMONEDA") = MONEDA Then
    '                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
    '                    Else
    '                        ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
    '                    End If
    '                    If CDec(fecha) >= 91 Then
    '                        promedio = 0
    '                    End If

    '                    If dr("ORDEN") <> 4 Then
    '                        Select Case dr("ORDEN")
    '                            Case 0
    '                                cobradasmes += ventaneta
    '                                cobradascomision += promedio
    '                            Case 1
    '                                pendientesmes += ventaneta
    '                                pendientescomision += promedio
    '                            Case 2
    '                                anteriorventa += ventaneta
    '                                anteriorcomision += promedio
    '                        End Select
    '                    End If

    '                    row.Item("Campo2") = dr("ORDEN")
    '                    Select Case dr("ORDEN")
    '                        Case 0
    '                            row.Item("Campo3") = "DETALLE DE VENTAS COBRADAS"
    '                        Case 1
    '                            row.Item("Campo3") = "DETALLE DE VENTAS PENDIENTES"
    '                        Case 2
    '                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR COBRADAS"
    '                        Case 3
    '                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR PENDIENTES"
    '                        Case 4
    '                            row.Item("Campo3") = "OBSERVACION"
    '                    End Select

    '                    row.Item("Campo18") = dr("NUMCLIENTE")
    '                    row.Item("Campo8") = dr("NUMVENTA")
    '                    row.Item("Campo10") = dr("NUMCOMPROBANTE")
    '                    row.Item("Campo4") = dr("FECHAVENTA")
    '                    row.Item("Campo9") = dr("CLIENTE")
    '                    row.Item("Campo24") = dr("OBSERVACION")

    '                    If dr("ORDEN") <> 4 Then
    '                        row.Item("Numero1") = dr("PROMEDIOCOMISION")
    '                        row.Item("Numero11") = dr("SALDO")
    '                        If dr("NUMMONEDA") = MONEDA Then
    '                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
    '                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0)
    '                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0)
    '                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0)
    '                            row.Item("Numero6") = ventaneta
    '                            row.Item("Numero5") = promedio
    '                        Else
    '                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero6") = ventaneta
    '                            row.Item("Numero5") = promedio
    '                        End If

    '                    End If
    '                    ds.Tables("Detalle").Rows.Add(row)
    '                Loop

    '                row = ds.Tables("Cabecera").NewRow()

    '                row.Item("Numero8") = cobradasmes
    '                row.Item("Numero9") = pendientesmes
    '                row.Item("Numero10") = cobradascomision
    '                row.Item("Numero11") = pendientescomision
    '                row.Item("Numero13") = anteriorventa
    '                row.Item("Numero14") = anteriorcomision
    '                'Numero1 = 0 Encabezado en primera hoja
    '                'Numero1 = 1 Encabezado en todas las hojas
    '                row.Item("Numero1") = titulo

    '                row.Item("Campo1") = empDescripcion
    '                row.Item("Campo16") = sucursal_Descripcion_Desde
    '                row.Item("Campo17") = sucursal_Descripcion_Hasta
    '                row.Item("Campo18") = cli_descripcion_desde
    '                row.Item("Campo19") = cli_descripcion_hasta
    '                row.Item("Campo22") = comprobanteDescripcionDesde
    '                row.Item("Campo23") = comprobanteDescripcionHasta
    '                row.Item("Campo24") = numeroDesde
    '                row.Item("Campo25") = numeroHasta
    '                row.Item("Campo31") = monedaDesde
    '                row.Item("Campo32") = monedaHasta
    '                row.Item("Campo14") = fechaDesde
    '                row.Item("campo15") = fechaHasta
    '                row.Item("Campo2") = moneda_informe
    '                row.Item("Numero2") = cotizacion
    '                '' row.Item("Numero3") = resumen

    '                ''If usuario <> "" Then
    '                ''    row.Item("Campo4") = "por " & usuario
    '                ''End If

    '                'If tipoVenta = 1 Then
    '                '    row.Item("campo3") = "Minoristas"
    '                'ElseIf tipoVenta = 2 Then
    '                '    row.Item("campo3") = "Mayoristas"
    '                'End If

    '                'If tipo = 0 Then
    '                '    row.Item("campo30") = "Fecha"
    '                'Else
    '                '    row.Item("campo30") = "Mes"
    '                'End If

    '                ds.Tables("Cabecera").Rows.Add(row)

    '            Catch e As SqlException
    '                MsgBox(e.ToString)
    '            Finally
    '                ser.Cerrar(sqlc)
    '            End Try
    '        Catch e As Exception
    '            MsgBox(e.ToString)
    '        Finally

    '        End Try
    '        Return ds
    ''    End Function

    ''''''''  COMISION 25-03-09
    '    Public Function InfLiquidaciondeComision(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    '    ByVal cotizacion As String, ByVal candecimales As Integer, _
    '    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    '    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    '    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    '    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    '    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    '    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    '    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    '    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    '    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    '    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    '    ByVal condiciones As String, ByVal titulo As Byte, ByVal MONEDA As String, ByVal tipo As Integer) As DataSet

    '        ds.Clear()
    '        Dim dtComision As DataTable

    '        sql = ""
    '        sql = " /* PARAMETROS INDICADOS */ " & _
    '        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
    '        " /* VARIABLES UTILIZADAS */ " & _
    '        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
    '        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
    '        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
    '        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
    '        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
    '        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
    '        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @SALDO NUMERIC(18,5) DECLARE @ORDEN INTEGER " & _
    '        " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
    '        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
    '        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
    '        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
    '        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
    '        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), SALDO NUMERIC(18,5), ORDEN INTEGER) " & _
    '        " SET @CODEMPRESA = " & empCodigo & " " & _
    '        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
    '        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
    '        " DECLARE CURSOR_COMISION CURSOR " & _
    '        " FOR " & _
    '" /* FACTURAS CREDITO DEL MES COBRADAS EN SU TOTALIDAD*/ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0)  AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
    '        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS COBRADAS DEL MES */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    ' " + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    ' " +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES OK */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, " & _
    '        "  ((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) - " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))) " & _
    '" /* - " & _
    '        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0)*/ " & _
    '        " AS SALDO, " & _
    '        "  1 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES ok */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
    '        " - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" /* - " & _
    '        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) */ " & _
    '        " AS SALDO, 1 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
    '        " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
    '        " WHERE CF.CODVENTA = V.CODVENTA " & _
    '        " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2  AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS  OK */ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND FA.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
    '        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) <= " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF " & _
    '        " WHERE FA.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
    '        " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS VER OTRO MES QUE HORROR */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR OK */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0)  " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, " & _
    '        " ( (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO)- " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME)))) " & _
    '        " /* - ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) */ " & _
    '        " AS SALDO, 3 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR VER OTRO MES HORROR */ " & _
    '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
    '        " - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.FECHADEVOLUCION <= CAST( @FECHA2   AS DATETIME)),0) " & _
    '" /*- " & _
    '        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0)*/ " & _
    '        "  AS SALDO, 3 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
    '        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA  " & _
    '" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
    '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA) ,103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND LEN(DE.OBSERVACION) > 0 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
    '        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA " & _
    '        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
    '        " OPEN CURSOR_COMISION " & _
    '        " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @SALDO, @ORDEN " & _
    '        " WHILE @@FETCH_STATUS = 0 " & _
    '        " BEGIN " & _
    '        " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
    '        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION,  SALDO, ORDEN) " & _
    '        " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO,  @ORDEN) " & _
    '        " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO, @ORDEN " & _
    '        " END " & _
    '        " CLOSE CURSOR_COMISION " & _
    '        " DEALLOCATE CURSOR_COMISION " & _
    '" SELECT * FROM @TABLA "

    '        Try
    '            ds.ReadXml(direccion)

    '            ser.Abrir(sqlc)
    '            cmd.Connection = sqlc
    '            cmd.CommandText = sql

    '            dr = cmd.ExecuteReader



    '            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
    '            Dim numvendedor As String = ""
    '            Dim i As Integer = 0

    '            Dim cobradasmes As Decimal = 0 : Dim pendientesmes As Decimal = 0
    '            Dim cobradascomision As Decimal = 0 : Dim pendientescomision As Decimal = 0
    '            Dim anteriorventa As Decimal = 0 : Dim anteriorcomision As Decimal = 0
    '            Dim vector As New ArrayList
    '            Try

    '                Do While dr.Read()
    '                    row = ds.Tables("Detalle").NewRow()

    '                    If i = 0 Then
    '                        i = 1
    '                        numvendedor = dr("NUMVENDEDOR")
    '                    End If
    '                    If dr("NUMVENDEDOR") <> numvendedor Then
    '                        numvendedor = dr("NUMVENDEDOR")
    '                        cobradasmes = 0 : pendientesmes = 0 : cobradascomision = 0
    '                        pendientescomision = 0 : anteriorventa = 0 : anteriorcomision = 0
    '                    End If
    '                    row.Item("Campo1") = dr("NUMVENDEDOR")
    '                    row.Item("Campo15") = dr("DESVENDEDOR")
    '                    row.Item("Campo16") = funcion.textomes(fechaHasta.Substring(3, 2)) & " / " & fechaHasta.Substring(6, 4)

    '                    ventaneta = 0
    '                    Dim fechaven As String = dr("fechaventa")
    '                    Dim fecha As String = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta))


    '                    If dr("NUMMONEDA") = MONEDA Then
    '                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
    '                    Else
    '                        ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
    '                    End If
    '                    If CDec(fecha) >= 91 Then
    '                        promedio = 0
    '                    End If

    '                    If dr("ORDEN") <> 4 Then
    '                        Select Case dr("ORDEN")
    '                            Case 0
    '                                cobradasmes += ventaneta
    '                                cobradascomision += promedio
    '                            Case 1
    '                                pendientesmes += ventaneta
    '                                pendientescomision += promedio
    '                            Case 2
    '                                anteriorventa += ventaneta
    '                                anteriorcomision += promedio
    '                        End Select
    '                    End If

    '                    row.Item("Campo2") = dr("ORDEN")
    '                    Select Case dr("ORDEN")
    '                        Case 0
    '                            row.Item("Campo3") = "DETALLE DE VENTAS COBRADAS"
    '                        Case 1
    '                            row.Item("Campo3") = "DETALLE DE VENTAS PENDIENTES"
    '                        Case 2
    '                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR COBRADAS"
    '                        Case 3
    '                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR PENDIENTES"
    '                        Case 4
    '                            row.Item("Campo3") = "OBSERVACION"
    '                    End Select

    '                    row.Item("Campo18") = dr("NUMCLIENTE")
    '                    row.Item("Campo8") = dr("NUMVENTA")
    '                    row.Item("Campo10") = dr("NUMCOMPROBANTE")
    '                    row.Item("Campo4") = dr("FECHAVENTA")
    '                    row.Item("Campo9") = dr("CLIENTE")
    '                    row.Item("Campo24") = dr("OBSERVACION")

    '                    If dr("ORDEN") <> 4 Then
    '                        row.Item("Numero1") = dr("PROMEDIOCOMISION")
    '                        row.Item("Numero11") = dr("SALDO")
    '                        If dr("NUMMONEDA") = MONEDA Then
    '                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
    '                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0)
    '                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0)
    '                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0)
    '                            row.Item("Numero6") = ventaneta
    '                            row.Item("Numero5") = promedio
    '                        Else
    '                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero6") = ventaneta
    '                            row.Item("Numero5") = promedio
    '                        End If

    '                    End If
    '                    ds.Tables("Detalle").Rows.Add(row)
    '                Loop

    '                row = ds.Tables("Cabecera").NewRow()

    '                row.Item("Numero8") = cobradasmes
    '                row.Item("Numero9") = pendientesmes
    '                row.Item("Numero10") = cobradascomision
    '                row.Item("Numero11") = pendientescomision
    '                row.Item("Numero13") = anteriorventa
    '                row.Item("Numero14") = anteriorcomision
    '                'Numero1 = 0 Encabezado en primera hoja
    '                'Numero1 = 1 Encabezado en todas las hojas
    '                row.Item("Numero1") = titulo

    '                row.Item("Campo1") = empDescripcion
    '                row.Item("Campo16") = sucursal_Descripcion_Desde
    '                row.Item("Campo17") = sucursal_Descripcion_Hasta
    '                row.Item("Campo18") = cli_descripcion_desde
    '                row.Item("Campo19") = cli_descripcion_hasta
    '                row.Item("Campo22") = comprobanteDescripcionDesde
    '                row.Item("Campo23") = comprobanteDescripcionHasta
    '                row.Item("Campo24") = numeroDesde
    '                row.Item("Campo25") = numeroHasta
    '                row.Item("Campo31") = monedaDesde
    '                row.Item("Campo32") = monedaHasta
    '                row.Item("Campo14") = fechaDesde
    '                row.Item("campo15") = fechaHasta
    '                row.Item("Campo2") = moneda_informe
    '                row.Item("Numero2") = cotizacion
    '                '' row.Item("Numero3") = resumen

    '                ''If usuario <> "" Then
    '                ''    row.Item("Campo4") = "por " & usuario
    '                ''End If

    '                'If tipoVenta = 1 Then
    '                '    row.Item("campo3") = "Minoristas"
    '                'ElseIf tipoVenta = 2 Then
    '                '    row.Item("campo3") = "Mayoristas"
    '                'End If

    '                'If tipo = 0 Then
    '                '    row.Item("campo30") = "Fecha"
    '                'Else
    '                '    row.Item("campo30") = "Mes"
    '                'End If

    '                ds.Tables("Cabecera").Rows.Add(row)

    '            Catch e As SqlException
    '                MsgBox(e.ToString)
    '            Finally
    '                ser.Cerrar(sqlc)
    '            End Try
    '        Catch e As Exception
    '            MsgBox(e.ToString)
    '        Finally

    '        End Try
    '        Return ds
    '    End Function



    '    Public Function InfComisionPorProductoResumen(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    '    ByVal cotizacion As String, ByVal candecimales As Integer, _
    '    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    '    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    '    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    '    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    '    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    '    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    '    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    '    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    '    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    '    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    '    ByVal condiciones As String, ByVal titulo As Byte, ByVal tipo As Byte, ByVal MONEDA1 As String) As DataSet
    '        ds.Clear()

    '        sql = ""
    '        If tipo = 0 Then ''COBRADAS
    '            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
    '            " /* VARIABLES UTILIZADAS */  " & _
    '            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
    '            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
    '            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
    '            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
    '            " DECLARE @VENTABRUTA NUMERIC(18,5) DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
    '            " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
    '            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
    '            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
    '            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
    '            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
    '            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
    '            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
    '            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER,OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
    '            " SET @CODEMPRESA = " & empCodigo & " " & _
    '            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
    '            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
    '            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
    '    " /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/  " & _
    '            " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE,  " & _
    '            " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, RTRIM(MAX(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE,  MAX(V.NUMVENTA) AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA,  " & _
    '            " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO,  " & _
    '            " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA,  " & _
    '            " MAX(V.TOTALIVA) AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '            " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '            " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '            " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '            " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '            " '' AS OBSERVACION, 0 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
    '            " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '            " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            "  WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA = 0 " & _
    '            " AND CO.FECHACOBRO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '            " GROUP BY V.CODVENTA " & _
    '    " UNION ALL /* FACTURAS CONTADOS COBRADAS*/  " & _
    '            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
    '            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
    '            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
    '            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
    '            " V.TOTALIVA AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(CI.COTIZACION1,0) AS COTIZACION1, " & _
    '            " 1 AS CANTIDAD , '' AS OBSERVACION, 0 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA  " & _
    '            " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            "  WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '            " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
    '            " OPEN CURSOR_COMISION " & _
    '            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
    '            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
    '            " WHILE @@FETCH_STATUS = 0  " & _
    '            " BEGIN " & _
    '            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
    '            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
    '            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
    '            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN)  " & _
    '            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,   @DESCOMPROBANTE,  @NUMVENTA, " & _
    '            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
    '            " End " & _
    '            " CLOSE CURSOR_COMISION " & _
    '            " DEALLOCATE CURSOR_COMISION " & _
    '            " SELECT * FROM @TABLA "
    '        ElseIf tipo = 1 Then ''' PENDIENTES
    '            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
    '            " /* VARIABLES UTILIZADAS */  " & _
    '            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
    '            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
    '            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
    '            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
    '            " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
    '            " DECLARE @CODMONEDA NUMERIC(18,5) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
    '            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
    '            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
    '            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
    '            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
    '            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
    '            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
    '            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
    '            " SET @CODEMPRESA = " & empCodigo & " " & _
    '            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
    '            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
    '            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
    '            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
    '            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE,  V.NUMVENTA AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
    '            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
    '            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
    '            " V.TOTALIVA AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
    '            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            " WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA > 0 " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '        " UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/  " & _
    '            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
    '            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
    '            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
    '            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
    '            " V.TOTALIVA AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
    '            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            " WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
    '            " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA)  " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
    '            " OPEN CURSOR_COMISION " & _
    '            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,  @DESCOMPROBANTE, @NUMVENTA, " & _
    '            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1,  @CANTIDAD, @OBSERVACION, @ORDEN  " & _
    '            " WHILE @@FETCH_STATUS = 0  " & _
    '            " BEGIN " & _
    '            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
    '            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
    '            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
    '            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
    '            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
    '            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
    '            " End " & _
    '            " CLOSE CURSOR_COMISION " & _
    '            " DEALLOCATE CURSOR_COMISION " & _
    '            " SELECT * FROM @TABLA "
    '        Else ''' todos
    '            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
    '            " /* VARIABLES UTILIZADAS */  " & _
    '            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
    '            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
    '            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
    '            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
    '            " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
    '            " DECLARE @CODMONEDA NUMERIC(18,5) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
    '            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
    '            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
    '            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
    '            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
    '            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
    '            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
    '            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
    '            " SET @CODEMPRESA = " & empCodigo & " " & _
    '            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
    '            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
    '            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
    '" /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/  " & _
    '            " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE,  " & _
    '            " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, RTRIM(MAX(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE,  MAX(V.NUMVENTA) AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA,  " & _
    '            " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO,  " & _
    '            " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA,  " & _
    '            " MAX(V.TOTALIVA) AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '            " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '            " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '            " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '            " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '            " '' AS OBSERVACION, 0 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
    '            " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '            " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            "  WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA = 0 " & _
    '            " AND CO.FECHACOBRO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '            " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS COBRADAS*/  " & _
    '            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
    '            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
    '            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
    '            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
    '            " V.TOTALIVA AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(CI.COTIZACION1,0) AS COTIZACION1, " & _
    '            " 1 AS CANTIDAD , '' AS OBSERVACION, 0 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA  " & _
    '            " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            "  WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '            " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITOS PENDIENTES DEL MES*/  " & _
    '            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
    '            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE,  V.NUMVENTA AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
    '            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
    '            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
    '            " V.TOTALIVA AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
    '            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            " WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA > 0 " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/  " & _
    '            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
    '            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
    '            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
    '            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
    '            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
    '            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
    '            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
    '            " V.TOTALIVA AS TOTALIVA,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
    '            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO,  " & _
    '            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA,  " & _
    '            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
    '            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
    '            " FROM VENTAS V  " & _
    '            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
    '            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
    '            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
    '            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
    '            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
    '            " WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
    '            " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA)  " & _
    '            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
    '            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
    '            " OPEN CURSOR_COMISION " & _
    '            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,  @DESCOMPROBANTE, @NUMVENTA, " & _
    '            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1,  @CANTIDAD, @OBSERVACION, @ORDEN  " & _
    '            " WHILE @@FETCH_STATUS = 0  " & _
    '            " BEGIN " & _
    '            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
    '            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
    '            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
    '            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
    '            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
    '            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
    '            " End " & _
    '            " CLOSE CURSOR_COMISION " & _
    '            " DEALLOCATE CURSOR_COMISION " & _
    '            " SELECT * FROM @TABLA "
    '        End If

    '        Try
    '            ds.ReadXml(direccion)

    '            ser.Abrir(sqlc)
    '            cmd.Connection = sqlc
    '            cmd.CommandText = sql

    '            dr = cmd.ExecuteReader

    '            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
    '            Dim numvendedor As String = ""
    '            Dim i As Integer = 0

    '            Try
    '                Do While dr.Read()
    '                    row = ds.Tables("Detalle").NewRow()

    '                    row.Item("Campo1") = dr("NUMVENDEDOR")
    '                    row.Item("Campo15") = dr("DESVENDEDOR")

    '                    ventaneta = 0
    '                    row.Item("Campo3") = dr("DESCOMPROBANTE")
    '                    row.Item("Campo18") = dr("NUMVENTA")
    '                    If dr("ORDEN") = 0 Then
    '                        row.Item("Campo5") = "C"
    '                    Else
    '                        row.Item("Campo5") = "P"
    '                    End If
    '                    row.Item("Campo4") = dr("FECHAVENTA")
    '                    row.Item("Campo9") = dr("NUMCLIENTE") & " - " & dr("CLIENTE")
    '                    row.Item("Numero8") = dr("PROMEDIOCOMISION")
    '                    If dr("NUMMONEDA") = MONEDA1 Then
    '                        row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
    '                        row.Item("Numero2") = Math.Round(dr("TOTALIVA"), 0)
    '                        row.Item("Numero4") = Math.Round(dr("DEVBRUTO"), 0)
    '                        row.Item("Numero7") = Math.Round(dr("DEVIVA"), 0)
    '                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)

    '                    Else
    '                        row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                        row.Item("Numero2") = Math.Round(dr("TOTALIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                        row.Item("Numero4") = Math.Round(dr("DEVBRUTO"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                        row.Item("Numero7") = Math.Round(dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
    '                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))  '' DIRECTO POR EL TOTAL
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)

    '                    End If
    '                    row.Item("Numero6") = ventaneta
    '                    row.Item("Numero5") = promedio

    '                    ds.Tables("Detalle").Rows.Add(row)
    '                Loop

    '                row = ds.Tables("Cabecera").NewRow()

    '                'Numero1 = 0 Encabezado en primera hoja
    '                'Numero1 = 1 Encabezado en todas las hojas
    '                row.Item("Numero1") = titulo

    '                row.Item("Campo1") = empDescripcion
    '                row.Item("Campo16") = sucursal_Descripcion_Desde
    '                row.Item("Campo17") = sucursal_Descripcion_Hasta
    '                row.Item("Campo18") = cli_descripcion_desde
    '                row.Item("Campo19") = cli_descripcion_hasta
    '                row.Item("Campo22") = comprobanteDescripcionDesde
    '                row.Item("Campo23") = comprobanteDescripcionHasta
    '                row.Item("Campo24") = numeroDesde
    '                row.Item("Campo25") = numeroHasta
    '                row.Item("Campo31") = monedaDesde
    '                row.Item("Campo32") = monedaHasta
    '                row.Item("Campo14") = fechaDesde
    '                row.Item("campo15") = fechaHasta
    '                row.Item("Campo2") = moneda_informe
    '                row.Item("Numero2") = cotizacion

    '                ds.Tables("Cabecera").Rows.Add(row)

    '            Catch e As SqlException
    '                MsgBox(e.ToString)
    '            Finally
    '                ser.Cerrar(sqlc)
    '            End Try
    '        Catch e As Exception
    '            MsgBox(e.ToString)
    '        Finally

    '        End Try
    '        Return ds
    '    End Function


    Public Function InfComisionPorProductoResumen_ANTES(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, ByVal tipo As Byte, ByVal MONEDA1 As String) As DataSet
        ds.Clear()

        sql = ""
        If tipo = 0 Then ''COBRADAS
            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
            " /* VARIABLES UTILIZADAS */  " & _
            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
            " DECLARE @VENTABRUTA NUMERIC(18,5) DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
            " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER,OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
            " SET @CODEMPRESA = " & empCodigo & " " & _
            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
    " /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/  " & _
            " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR,  " & _
            " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE,  " & _
            " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, RTRIM(MAX(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE,  MAX(V.NUMVENTA) AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA,  " & _
            " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO,  " & _
            " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA,  " & _
            " MAX(V.TOTALIVA) AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) AS DEVIVA,  " & _
            " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
            " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
            " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
            " '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
            " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
            " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA = 0 " & _
            " AND CO.FECHACOBRO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
            " GROUP BY V.CODVENTA " & _
    " UNION ALL /* FACTURAS CONTADOS COBRADAS*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(CI.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD , '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA  " & _
            " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
            " OPEN CURSOR_COMISION " & _
            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " WHILE @@FETCH_STATUS = 0  " & _
            " BEGIN " & _
            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN)  " & _
            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,   @DESCOMPROBANTE,  @NUMVENTA, " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " End " & _
            " CLOSE CURSOR_COMISION " & _
            " DEALLOCATE CURSOR_COMISION " & _
            " SELECT * FROM @TABLA "
        ElseIf tipo = 1 Then ''' PENDIENTES
            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
            " /* VARIABLES UTILIZADAS */  " & _
            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
            " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
            " DECLARE @CODMONEDA NUMERIC(18,5) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
            " SET @CODEMPRESA = " & empCodigo & " " & _
            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE,  V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 /*And FC.SALDOCUOTA > 0 */ " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) > " & _
            " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
            " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
            " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
            " WHERE CF.CODVENTA = V.CODVENTA " & _
            " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
            " OPEN CURSOR_COMISION " & _
            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,  @DESCOMPROBANTE, @NUMVENTA, " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1,  @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " WHILE @@FETCH_STATUS = 0  " & _
            " BEGIN " & _
            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " End " & _
            " CLOSE CURSOR_COMISION " & _
            " DEALLOCATE CURSOR_COMISION " & _
            " SELECT * FROM @TABLA "
        Else ''' todos
            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
            " /* VARIABLES UTILIZADAS */  " & _
            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
            " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
            " DECLARE @CODMONEDA NUMERIC(18,5) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
            " SET @CODEMPRESA = " & empCodigo & " " & _
            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
" /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/  " & _
            " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR,  " & _
            " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE,  " & _
            " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, RTRIM(MAX(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE,  MAX(V.NUMVENTA) AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA,  " & _
            " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO,  " & _
            " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA,  " & _
            " MAX(V.TOTALIVA) AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
            " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
            " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
            " '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
            " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
            " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA = 0 " & _
            " AND CO.FECHACOBRO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
            " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS COBRADAS*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(CI.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD , '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA  " & _
            " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITOS PENDIENTES DEL MES*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE,  V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 /*And FC.SALDOCUOTA > 0 */ " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) > " & _
            " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
            " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
            " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
            " WHERE CF.CODVENTA = V.CODVENTA " & _
            " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
            " OPEN CURSOR_COMISION " & _
            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,  @DESCOMPROBANTE, @NUMVENTA, " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1,  @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " WHILE @@FETCH_STATUS = 0  " & _
            " BEGIN " & _
            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " End " & _
            " CLOSE CURSOR_COMISION " & _
            " DEALLOCATE CURSOR_COMISION " & _
            " SELECT * FROM @TABLA "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
            Dim numvendedor As String = ""
            Dim i As Integer = 0

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMVENDEDOR")
                    row.Item("Campo15") = dr("DESVENDEDOR")

                    ventaneta = 0
                    row.Item("Campo3") = dr("DESCOMPROBANTE")
                    row.Item("Campo18") = dr("NUMVENTA")
                    If dr("ORDEN") = 0 Then
                        row.Item("Campo5") = "C"
                    Else
                        row.Item("Campo5") = "P"
                    End If
                    row.Item("Campo4") = dr("FECHAVENTA")
                    row.Item("Campo9") = dr("NUMCLIENTE") & " - " & dr("CLIENTE")
                    row.Item("Numero8") = dr("PROMEDIOCOMISION")
                    If dr("NUMMONEDA") = MONEDA1 Then
                        row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
                        row.Item("Numero2") = Math.Round(dr("TOTALIVA"), 0)
                        row.Item("Numero4") = Math.Round(dr("DEVBRUTO"), 0)
                        row.Item("Numero7") = Math.Round(dr("DEVIVA"), 0)
                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)

                    Else
                        row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        row.Item("Numero2") = Math.Round(dr("TOTALIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        row.Item("Numero4") = Math.Round(dr("DEVBRUTO"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        row.Item("Numero7") = Math.Round(dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))  '' DIRECTO POR EL TOTAL
                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)

                    End If
                    If promedio = 0 Then
                        ventaneta = 0
                    End If
                    row.Item("Numero6") = ventaneta
                    row.Item("Numero5") = promedio

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function


    Public Function InfComisionPorProductoResumen(ByVal codMoneda As Long, ByVal moneda_informe As String, _
   ByVal cotizacion As String, ByVal candecimales As Integer, _
   ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
   ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
   ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
   ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
   ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
   ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
   ByVal numeroDesde As String, ByVal numeroHasta As String, _
   ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
   ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
   ByVal fechaDesde As String, ByVal fechaHasta As String, _
   ByVal condiciones As String, ByVal titulo As Byte, ByVal tipo As Byte, ByVal MONEDA1 As String) As DataSet
        ds.Clear()

        sql = ""
        If tipo = 0 Then ''COBRADAS
            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
            " /* VARIABLES UTILIZADAS */  " & _
            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
            " DECLARE @VENTABRUTA NUMERIC(18,5) DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
            " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER,OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
            " SET @CODEMPRESA = " & empCodigo & " " & _
            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
    " /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/  " & _
            " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR,  " & _
            " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE,  " & _
            " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, RTRIM(MAX(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE,  MAX(V.NUMVENTA) AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA,  " & _
            " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO,  " & _
            " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA,  " & _
            " MAX(V.TOTALIVA) AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) AS DEVIVA,  " & _
            " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
            " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
            " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
            " '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
            " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
            " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA = 0 " & _
            " AND CO.FECHACOBRO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
            " GROUP BY V.CODVENTA " & _
    " UNION ALL /* FACTURAS CONTADOS COBRADAS*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(CI.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD , '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA  " & _
            " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
            " OPEN CURSOR_COMISION " & _
            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " WHILE @@FETCH_STATUS = 0  " & _
            " BEGIN " & _
            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN)  " & _
            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,   @DESCOMPROBANTE,  @NUMVENTA, " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " End " & _
            " CLOSE CURSOR_COMISION " & _
            " DEALLOCATE CURSOR_COMISION " & _
            " SELECT * FROM @TABLA "
        ElseIf tipo = 1 Then ''' PENDIENTES
            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
            " /* VARIABLES UTILIZADAS */  " & _
            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
            " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
            " DECLARE @CODMONEDA NUMERIC(18,5) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
            " SET @CODEMPRESA = " & empCodigo & " " & _
            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE,  V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 /*And FC.SALDOCUOTA > 0 */ " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) > " & _
            " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
            " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
            " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
            " WHERE CF.CODVENTA = V.CODVENTA " & _
            " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
            " OPEN CURSOR_COMISION " & _
            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,  @DESCOMPROBANTE, @NUMVENTA, " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1,  @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " WHILE @@FETCH_STATUS = 0  " & _
            " BEGIN " & _
            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " End " & _
            " CLOSE CURSOR_COMISION " & _
            " DEALLOCATE CURSOR_COMISION " & _
            " SELECT * FROM @TABLA "
        Else ''' todos
            sql = " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9)  " & _
            " /* VARIABLES UTILIZADAS */  " & _
            " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40)  " & _
            " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200)  " & _
            " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30)  " & _
            " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5)  " & _
            " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5)  " & _
            " DECLARE @CODMONEDA NUMERIC(18,5) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
            " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER  " & _
            " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40),  " & _
            " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200),  " & _
            " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30),  " & _
            " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5),  " & _
            " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5),  " & _
            " CODMONEDA NUMERIC(18,5), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER)  " & _
            " SET @CODEMPRESA = " & empCodigo & " " & _
            " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME)  " & _
            " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME)  " & _
            " DECLARE CURSOR_COMISION CURSOR FOR  " & _
" /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/  " & _
            " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR,  " & _
            " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE,  " & _
            " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, RTRIM(MAX(TC.DESCOMPROBANTE)) AS DESCOMPROBANTE,  MAX(V.NUMVENTA) AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA,  " & _
            " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO,  " & _
            " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA,  " & _
            " MAX(V.TOTALIVA) AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
            " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
            " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
            " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
            " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
            " '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA  " & _
            " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
            " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 And FC.SALDOCUOTA = 0 " & _
            " AND CO.FECHACOBRO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
            " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS COBRADAS*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(CI.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD , '' AS OBSERVACION, 0 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA  " & _
            " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            "  WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
            " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITOS PENDIENTES DEL MES*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE,  V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 1 And V.ESTADO <> 1 /*And FC.SALDOCUOTA > 0 */ " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) > " & _
            " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
            " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
            " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/  " & _
            " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR,  " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, V.NUMVENTA AS NUMVENTA,  " & _
            " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
            " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
            " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO,  " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA,  " & _
            " V.TOTALIVA AS TOTALIVA,  " & _
            " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO)  " & _
            " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVBRUTO,  " & _
            " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) AS DEVIVA,  " & _
            " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA , ISNULL(V.COTIZACION1,0) AS COTIZACION1, " & _
            " 1 AS CANTIDAD, '' AS OBSERVACION, 1 AS ORDEN  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " WHERE V.MODALIDADPAGO = 0 And V.ESTADO <> 1 " & _
            " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
            " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
            " WHERE CF.CODVENTA = V.CODVENTA " & _
            " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
            " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME)  " & _
            " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
            " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA  " & _
            " OPEN CURSOR_COMISION " & _
            " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE,  @DESCOMPROBANTE, @NUMVENTA, " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1,  @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " WHILE @@FETCH_STATUS = 0  " & _
            " BEGIN " & _
            " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA,  " & _
            " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA, CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN)  " & _
            " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,  " & _
            " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
            " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA,   " & _
            " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN  " & _
            " End " & _
            " CLOSE CURSOR_COMISION " & _
            " DEALLOCATE CURSOR_COMISION " & _
            " SELECT * FROM @TABLA "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
            Dim numvendedor As String = ""
            Dim i As Integer = 0

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMVENDEDOR")
                    row.Item("Campo15") = dr("DESVENDEDOR")

                    ventaneta = 0
                    row.Item("Campo3") = dr("DESCOMPROBANTE")
                    row.Item("Campo18") = dr("NUMVENTA")
                    If dr("ORDEN") = 0 Then
                        row.Item("Campo5") = "C"
                    Else
                        row.Item("Campo5") = "P"
                    End If
                    row.Item("Campo4") = dr("FECHAVENTA")
                    row.Item("Campo9") = dr("NUMCLIENTE") & " - " & dr("CLIENTE")
                    row.Item("Numero8") = dr("PROMEDIOCOMISION")
                    If dr("NUMMONEDA") = MONEDA1 Then
                        row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
                        row.Item("Numero2") = Math.Round(dr("TOTALIVA"), 0)
                        row.Item("Numero4") = Math.Round(dr("DEVBRUTO"), 0)
                        row.Item("Numero7") = Math.Round(dr("DEVIVA"), 0)
                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)

                    Else
                        row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        row.Item("Numero2") = Math.Round(dr("TOTALIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        row.Item("Numero4") = Math.Round(dr("DEVBRUTO"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        row.Item("Numero7") = Math.Round(dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))  '' DIRECTO POR EL TOTAL
                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)

                    End If

                    ''' MODIFICADO EL 10/04/2013 PARA VER VENTAS NETA
                    'If promedio = 0 Then
                    '    ventaneta = 0
                    'End If

                    row.Item("Numero6") = ventaneta
                    row.Item("Numero5") = promedio

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function


    Public Function InfLiquidaciondeComisionPendientesdias(ByVal codMoneda As Long, ByVal moneda_informe As String, _
   ByVal cotizacion As String, ByVal candecimales As Integer, _
   ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
   ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
   ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
   ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
   ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
   ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
   ByVal numeroDesde As String, ByVal numeroHasta As String, _
   ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
   ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
   ByVal fechaDesde As String, ByVal fechaHasta As String, _
   ByVal condiciones As String, ByVal titulo As Byte, ByVal MONEDA As String, ByVal tipo As Integer) As DataSet

        ds.Clear()
        Dim dtComision As DataTable

        sql = ""
        '        sql = " /* PARAMETROS INDICADOS */ " & _
        '        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
        '        " /* VARIABLES UTILIZADAS */ " & _
        '        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
        '        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
        '        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
        '        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
        '        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
        '        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
        '        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @ORDEN INTEGER " & _
        '        " DECLARE @TABLA TABLE(NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
        '        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
        '        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
        '        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
        '        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
        '        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), ORDEN INTEGER) " & _
        '        " SET @CODEMPRESA = " & empCodigo & " " & _
        '        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
        '        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
        '        " DECLARE CURSOR_COMISION CURSOR " & _
        '        " FOR " & _
        '" /* FACTURAS CREDITO COBRADAS EN SU TOTALIDAD*/ " & _
        '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
        '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 0 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        '        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '        " GROUP BY V.CODVENTA " & _
        '" UNION ALL /* FACTURAS CONTADOS COBRADAS*/ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 0 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES*/ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 1 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
        '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES*/ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 1 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS */ " & _
        '        " SELECT RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
        '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 2 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        '        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
        '        " GROUP BY V.CODVENTA " & _
        '" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS */ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 2 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR */ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 3 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
        '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
        '" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR */ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " '' AS OBSERVACION, 3 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " ISNULL(RTRIM(DE.OBSERVACION),'') AS OBSERVACION, 4 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
        '        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
        '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
        '        " SELECT RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        '        " V.TOTALIVA AS TOTALIVA, " & _
        '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVBRUTO, " & _
        '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) AS DEVIVA, " & _
        '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        '        " ISNULL(RTRIM(DE.OBSERVACION),'') AS OBSERVACION, 4 AS ORDEN " & _
        '        " FROM VENTAS V " & _
        '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        '        " AND LEN(DE.OBSERVACION) > 0 " & _
        '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        '        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        '        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
        '        " OPEN CURSOR_COMISION " & _
        '        " FETCH NEXT FROM CURSOR_COMISION INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN " & _
        '        " WHILE @@FETCH_STATUS = 0 " & _
        '        " BEGIN " & _
        '        " INSERT INTO @TABLA(NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
        '        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION, ORDEN) " & _
        '        " VALUES(@NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
        '        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN) " & _
        '        " FETCH NEXT FROM CURSOR_COMISION  INTO @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @ORDEN " & _
        '        " END " & _
        '        " CLOSE CURSOR_COMISION " & _
        '        " DEALLOCATE CURSOR_COMISION " & _
        '" SELECT * FROM @TABLA "

        sql = ""
        sql = " /* PARAMETROS INDICADOS */ " & _
        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
        " /* VARIABLES UTILIZADAS */ " & _
        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @SALDO NUMERIC(18,5) DECLARE @ORDEN INTEGER  DECLARE @CODVENTA NUMERIC(18) " & _
        " DECLARE @TABLA TABLE(CODVENTA NUMERIC(18), NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), SALDO NUMERIC(18,5), ORDEN INTEGER) " & _
        " SET @CODEMPRESA = " & empCodigo & " " & _
        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
        " DECLARE CURSOR_COMISION CURSOR " & _
        " FOR " & _
" /* FACTURAS CREDITO DEL MES COBRADAS EN SU TOTALIDAD*/ " & _
        " SELECT ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0) = 0 " & _
        " ),0)  AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS COBRADAS DEL MES */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
 " + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 ),0) " & _
 " +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES OK */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, " & _
        "  ((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) - " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))) " & _
" /* - " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0)*/ " & _
        " AS SALDO, " & _
        "  1 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))  " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES ok */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
        " /*- ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) */ " & _
" /* - " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) */ " & _
        " AS SALDO, 1 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
        " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
        " WHERE CF.CODVENTA = V.CODVENTA " & _
        " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2  AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS  OK */ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA,  RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND FA.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) <= " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF " & _
        " WHERE FA.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
        " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS VER OTRO MES QUE HORROR */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR OK */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0)  " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, " & _
        " ( (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO)- " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME)))) " & _
        " /* - ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) */ " & _
        " AS SALDO, 3 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR VER OTRO MES HORROR */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
        " /* - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.FECHADEVOLUCION <= CAST( @FECHA2   AS DATETIME ) AND D.ESTADO = 0),0) */ " & _
        "  AS SALDO, 3 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA  " & _
" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA) ,103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND LEN(DE.OBSERVACION) > 0 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA " & _
        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
        " OPEN CURSOR_COMISION " & _
        " FETCH NEXT FROM CURSOR_COMISION INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @SALDO, @ORDEN " & _
        " WHILE @@FETCH_STATUS = 0 " & _
        " BEGIN " & _
        " INSERT INTO @TABLA(CODVENTA, NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION,  SALDO, ORDEN) " & _
        " VALUES(@CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO,  @ORDEN) " & _
        " FETCH NEXT FROM CURSOR_COMISION  INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO, @ORDEN " & _
        " END " & _
        " CLOSE CURSOR_COMISION " & _
        " DEALLOCATE CURSOR_COMISION " & _
" SELECT * FROM @TABLA "


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandTimeout = 300000

            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
            Dim numvendedor As String = ""
            Dim i As Integer = 0 : Dim dias As Integer

            Try

                Do While dr.Read()
                    ventaneta = 0
                    ''Dim fechaven As String = dr("fechaventa")
                    '''Dim fecha As String = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta))

                    Dim fechacobranza As String = CType(funcion.Descripcion_Tabla("'') AS NADA, ISNULL(CONVERT(VARCHAR(10),MAX(CB.FECHACOBRO),103),''", "COBRANZAS CB INNER JOIN FACTURAAFECTADA FA ON CB.CODCOBRANZA = FA.CODCOBRANZA", _
                       "FA.CODVENTA = " & dr("CODVENTA") & " AND CB.CODEMPRESA = " & empCodigo & " --------", "JUANI", 1), String)
                    Dim fecha As String
                    If fechacobranza <> "" And CDec(dr("SALDO")) = 0 Then
                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechacobranza))
                    Else
                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta)) '' original
                    End If
                    ''
                    Select Case tipo
                        Case 1
                            dias = 90
                        Case 2
                            dias = 180
                    End Select
                    If fecha >= dias And CDec(dr("SALDO")) > 0 Then
                        row = ds.Tables("Detalle").NewRow()

                        row.Item("Campo1") = dr("NUMVENDEDOR")
                        row.Item("Campo15") = dr("DESVENDEDOR")
                        row.Item("Campo16") = funcion.textomes(fechaHasta.Substring(3, 2)) & " / " & fechaHasta.Substring(6, 4)

                        If dr("NUMMONEDA") = MONEDA Then
                            ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
                            promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
                        Else
                            ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
                            promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
                        End If
                        If CDec(fecha) >= 91 Then
                            promedio = 0
                        End If

                        If promedio = 0 Then
                            ventaneta = 0
                        End If
                        If ventaneta < 0 Then
                            ventaneta = 0
                            promedio = 0
                        End If
                        row.Item("Campo8") = dr("NUMVENTA")
                        row.Item("Campo10") = dr("NUMCOMPROBANTE")
                        row.Item("Campo4") = dr("FECHAVENTA")
                        row.Item("Campo9") = dr("NUMCLIENTE") & " - " & dr("CLIENTE")
                        row.Item("Campo24") = dr("OBSERVACION")

                        If dr("ORDEN") <> 4 Then
                            row.Item("Numero1") = dr("PROMEDIOCOMISION")
                            If dr("NUMMONEDA") = MONEDA Then
                                row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
                                row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0)
                                row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0)
                                row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0)
                                row.Item("Numero6") = ventaneta
                                row.Item("Numero5") = promedio
                            Else
                                row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                                row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                                row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                                row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0) * (dr("COTIZACION1") / dr("CANTIDAD"))
                                row.Item("Numero6") = ventaneta
                                row.Item("Numero5") = promedio
                            End If

                        End If
                        ds.Tables("Detalle").Rows.Add(row)
                    End If
                Loop

                row = ds.Tables("Cabecera").NewRow()
                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo3") = dias
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function


    '    Public Function InfLiquidaciondeComision(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    '   ByVal cotizacion As String, ByVal candecimales As Integer, _
    '   ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    '   ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    '   ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
    '   ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
    '   ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    '   ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    '   ByVal numeroDesde As String, ByVal numeroHasta As String, _
    '   ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    '   ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    '   ByVal fechaDesde As String, ByVal fechaHasta As String, _
    '   ByVal condiciones As String, ByVal titulo As Byte, ByVal MONEDA As String, ByVal tipo As Integer) As DataSet

    '        ds.Clear()
    '        Dim dtComision As DataTable

    '        sql = ""
    '        sql = " /* PARAMETROS INDICADOS */ " & _
    '        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
    '        " /* VARIABLES UTILIZADAS */ " & _
    '        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
    '        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
    '        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
    '        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
    '        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
    '        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
    '        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @SALDO NUMERIC(18,5) DECLARE @ORDEN INTEGER  DECLARE @CODVENTA NUMERIC(18) " & _
    '        " DECLARE @TABLA TABLE(CODVENTA NUMERIC(18), NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
    '        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
    '        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
    '        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
    '        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
    '        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), SALDO NUMERIC(18,5), ORDEN INTEGER) " & _
    '        " SET @CODEMPRESA = " & empCodigo & " " & _
    '        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
    '        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
    '        " DECLARE CURSOR_COMISION CURSOR " & _
    '        " FOR " & _
    '" /* FACTURAS CREDITO DEL MES COBRADAS EN SU TOTALIDAD*/ " & _
    '        " SELECT ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0)  AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
    '        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = FC.CODVENTA)=  " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <=  CAST( @FECHA2 AS DATETIME)))   " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS COBRADAS DEL MES */ " & _
    '        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    ' " + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    ' " +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES OK */ " & _
    '        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, " & _
    '        "  ((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) - " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))) " & _
    '" /* - " & _
    '        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0)*/ " & _
    '        " AS SALDO, " & _
    '        "  1 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " /* AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > */ " & _
    '        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = FC.CODVENTA) > " & _
    '        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " /* AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME))) */ " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <=  CAST( @FECHA2 AS DATETIME)))  " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES ok */ " & _
    '        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
    '        " /*- ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) */ " & _
    '" /* - " & _
    '        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) */ " & _
    '        " AS SALDO, 1 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
    '        " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
    '        " WHERE CF.CODVENTA = V.CODVENTA " & _
    '        " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
    '        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2  AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS  OK */ " & _
    '        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA,  RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
    '        " ISNULL((SELECT SUM(CC.COTIZACION1) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
    '        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
    '        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
    '        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
    '        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND FA.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
    '        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) <= " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF " & _
    '        " WHERE FA.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
    '        " GROUP BY V.CODVENTA " & _
    '" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS VER OTRO MES QUE HORROR */ " & _
    '        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR OK */ " & _
    '        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0)  " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, " & _
    '        " ( (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO)- " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME)))) " & _
    '        " /* - ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) */ " & _
    '        " AS SALDO, 3 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " /* AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > */ " & _
    '        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = FC.CODVENTA) > " & _
    '        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
    '        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
    '" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR VER OTRO MES HORROR */ " & _
    '        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
    '        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
    '        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
    '        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
    '        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
    '        " V.TOTALIVA AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
    '        " /* - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.FECHADEVOLUCION <= CAST( @FECHA2   AS DATETIME)),0) */ " & _
    '        "  AS SALDO, 3 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
    '        " INNER JOIN CAJAINGRESOS CI ON CI.CODINGRESO = CF.CODINGRESO " & _
    '        " WHERE CF.CODVENTA = V.CODVENTA AND CI.FECINGRESO <= @FECHA2) " & _
    '        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
    '        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
    '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
    '        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
    '        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA  " & _
    '" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
    '        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
    '        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
    '        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
    '        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA) ,103) AS FECHAVENTA, " & _
    '        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
    '        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
    '        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
    '        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
    '        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
    '        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA),0) " & _
    '" + " & _
    '        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0  " & _
    '        " ),0) AS DEVBRUTO, " & _
    '        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA ),0) " & _
    '" +  " & _
    '        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
    '        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
    '        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
    '        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
    '        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
    '        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
    '        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE) = 0 " & _
    '        " ),0) AS DEVIVA, " & _
    '        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
    '        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
    '        " FROM VENTAS V " & _
    '        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
    '        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
    '        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
    '        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
    '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
    '        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
    '        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
    '        " AND LEN(DE.OBSERVACION) > 0 " & _
    '        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
    '        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
    '        " GROUP BY V.CODVENTA " & _
    '        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
    '        " OPEN CURSOR_COMISION " & _
    '        " FETCH NEXT FROM CURSOR_COMISION INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @SALDO, @ORDEN " & _
    '        " WHILE @@FETCH_STATUS = 0 " & _
    '        " BEGIN " & _
    '        " INSERT INTO @TABLA(CODVENTA, NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
    '        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION,  SALDO, ORDEN) " & _
    '        " VALUES(@CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO,  @ORDEN) " & _
    '        " FETCH NEXT FROM CURSOR_COMISION  INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
    '        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO, @ORDEN " & _
    '        " END " & _
    '        " CLOSE CURSOR_COMISION " & _
    '        " DEALLOCATE CURSOR_COMISION " & _
    '" SELECT * FROM @TABLA "

    '        Try
    '            ds.ReadXml(direccion)

    '            ser.Abrir(sqlc)
    '            cmd.Connection = sqlc
    '            cmd.CommandText = sql

    '            dr = cmd.ExecuteReader



    '            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
    '            Dim numvendedor As String = ""
    '            Dim i As Integer = 0

    '            Dim cobradasmes As Decimal = 0 : Dim pendientesmes As Decimal = 0
    '            Dim cobradascomision As Decimal = 0 : Dim pendientescomision As Decimal = 0
    '            Dim anteriorventa As Decimal = 0 : Dim anteriorcomision As Decimal = 0
    '            Dim vector As New ArrayList
    '            Try

    '                Do While dr.Read()
    '                    row = ds.Tables("Detalle").NewRow()

    '                    If i = 0 Then
    '                        i = 1
    '                        numvendedor = dr("NUMVENDEDOR")
    '                    End If
    '                    If dr("NUMVENDEDOR") <> numvendedor Then
    '                        numvendedor = dr("NUMVENDEDOR")
    '                        cobradasmes = 0 : pendientesmes = 0 : cobradascomision = 0
    '                        pendientescomision = 0 : anteriorventa = 0 : anteriorcomision = 0
    '                    End If
    '                    row.Item("Campo1") = dr("NUMVENDEDOR")
    '                    row.Item("Campo15") = dr("DESVENDEDOR")
    '                    row.Item("Campo16") = funcion.textomes(fechaHasta.Substring(3, 2)) & " / " & fechaHasta.Substring(6, 4)

    '                    ventaneta = 0

    '                    Dim fechacobranza As String = CType(funcion.Descripcion_Tabla("'') AS NADA, ISNULL(CONVERT(VARCHAR(10),MAX(CB.FECHACOBRO),103),''", "COBRANZAS CB INNER JOIN FACTURAAFECTADA FA ON CB.CODCOBRANZA = FA.CODCOBRANZA", _
    '                        "FA.CODVENTA = " & dr("CODVENTA") & " AND CB.CODEMPRESA = " & empCodigo & " --------", "JUANI", 1), String)
    '                    Dim fecha As String
    '                    If fechacobranza <> "" And CDec(dr("SALDO")) = 0 Then
    '                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechacobranza))
    '                    Else
    '                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta)) '' original
    '                    End If

    '                    If dr("NUMMONEDA") = MONEDA Then
    '                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
    '                    Else
    '                        ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
    '                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
    '                    End If
    '                    If CDec(fecha) >= 91 Then
    '                        promedio = 0
    '                    End If
    '                    If promedio = 0 Then
    '                        ventaneta = 0
    '                    End If
    '                    If ventaneta < 0 Then
    '                        ventaneta = 0
    '                        promedio = 0
    '                    End If

    '                    If dr("ORDEN") <> 4 Then
    '                        Select Case dr("ORDEN")
    '                            Case 0
    '                                cobradasmes += ventaneta
    '                                cobradascomision += promedio
    '                            Case 1
    '                                pendientesmes += ventaneta
    '                                pendientescomision += promedio
    '                            Case 2
    '                                anteriorventa += ventaneta
    '                                anteriorcomision += promedio
    '                        End Select
    '                    End If

    '                    row.Item("Campo2") = dr("ORDEN")
    '                    Select Case dr("ORDEN")
    '                        Case 0
    '                            row.Item("Campo3") = "DETALLE DE VENTAS COBRADAS"
    '                        Case 1
    '                            row.Item("Campo3") = "DETALLE DE VENTAS PENDIENTES"
    '                        Case 2
    '                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR COBRADAS"
    '                        Case 3
    '                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR PENDIENTES"
    '                        Case 4
    '                            row.Item("Campo3") = "OBSERVACION"
    '                    End Select

    '                    row.Item("Campo18") = dr("NUMCLIENTE")
    '                    row.Item("Campo8") = dr("NUMVENTA")
    '                    row.Item("Campo10") = dr("NUMCOMPROBANTE")
    '                    row.Item("Campo4") = dr("FECHAVENTA")
    '                    row.Item("Campo9") = dr("CLIENTE")
    '                    row.Item("Campo24") = dr("OBSERVACION")

    '                    If dr("ORDEN") <> 4 Then
    '                        row.Item("Numero1") = dr("PROMEDIOCOMISION")
    '                        '''  row.Item("Numero11") = dr("SALDO")
    '                        If dr("NUMMONEDA") = MONEDA Then
    '                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
    '                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0)
    '                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0)
    '                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0)
    '                            row.Item("Numero11") = dr("SALDO")
    '                            row.Item("Numero6") = ventaneta
    '                            row.Item("Numero5") = promedio
    '                        Else
    '                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA") * (dr("COTIZACION1") / dr("CANTIDAD")))
    '                            row.Item("Numero7") = Math.Round(dr("TOTALIVA") * (dr("COTIZACION1") / dr("CANTIDAD")))
    '                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO") * (dr("COTIZACION1") / dr("CANTIDAD")))
    '                            row.Item("Numero4") = Math.Round(dr("DEVIVA") * (dr("COTIZACION1") / dr("CANTIDAD")))
    '                            row.Item("Numero11") = Math.Round(dr("SALDO") * dr("COTIZACION1") / dr("CANTIDAD"))
    '                            row.Item("Numero6") = ventaneta
    '                            row.Item("Numero5") = promedio
    '                        End If

    '                    End If
    '                    ds.Tables("Detalle").Rows.Add(row)
    '                Loop

    '                row = ds.Tables("Cabecera").NewRow()

    '                row.Item("Numero8") = cobradasmes
    '                row.Item("Numero9") = pendientesmes
    '                row.Item("Numero10") = cobradascomision
    '                row.Item("Numero11") = pendientescomision
    '                row.Item("Numero13") = anteriorventa
    '                row.Item("Numero14") = anteriorcomision
    '                'Numero1 = 0 Encabezado en primera hoja
    '                'Numero1 = 1 Encabezado en todas las hojas
    '                row.Item("Numero1") = titulo

    '                row.Item("Campo1") = empDescripcion
    '                row.Item("Campo16") = sucursal_Descripcion_Desde
    '                row.Item("Campo17") = sucursal_Descripcion_Hasta
    '                row.Item("Campo18") = cli_descripcion_desde
    '                row.Item("Campo19") = cli_descripcion_hasta
    '                row.Item("Campo22") = comprobanteDescripcionDesde
    '                row.Item("Campo23") = comprobanteDescripcionHasta
    '                row.Item("Campo24") = numeroDesde
    '                row.Item("Campo25") = numeroHasta
    '                row.Item("Campo31") = monedaDesde
    '                row.Item("Campo32") = monedaHasta
    '                row.Item("Campo14") = fechaDesde
    '                row.Item("campo15") = fechaHasta
    '                row.Item("Campo2") = moneda_informe
    '                row.Item("Numero2") = cotizacion
    '                '' row.Item("Numero3") = resumen

    '                ''If usuario <> "" Then
    '                ''    row.Item("Campo4") = "por " & usuario
    '                ''End If

    '                'If tipoVenta = 1 Then
    '                '    row.Item("campo3") = "Minoristas"
    '                'ElseIf tipoVenta = 2 Then
    '                '    row.Item("campo3") = "Mayoristas"
    '                'End If

    '                'If tipo = 0 Then
    '                '    row.Item("campo30") = "Fecha"
    '                'Else
    '                '    row.Item("campo30") = "Mes"
    '                'End If

    '                ds.Tables("Cabecera").Rows.Add(row)

    '            Catch e As SqlException
    '                MsgBox(e.ToString)
    '            Finally
    '                ser.Cerrar(sqlc)
    '            End Try
    '        Catch e As Exception
    '            MsgBox(e.ToString)
    '        Finally

    '        End Try
    '        Return ds
    '    End Function

    Public Function InfLiquidaciondeComision(ByVal codMoneda As Long, ByVal moneda_informe As String, _
ByVal cotizacion As String, ByVal candecimales As Integer, _
ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
ByVal numeroDesde As String, ByVal numeroHasta As String, _
ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
ByVal fechaDesde As String, ByVal fechaHasta As String, _
ByVal condiciones As String, ByVal titulo As Byte, ByVal MONEDA As String, ByVal tipo As Integer) As DataSet

        ds.Clear()
        Dim dtComision As DataTable

        sql = ""
        sql = " /* PARAMETROS INDICADOS */ " & _
        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
        " /* VARIABLES UTILIZADAS */ " & _
        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @SALDO NUMERIC(18,5) DECLARE @ORDEN INTEGER  DECLARE @CODVENTA NUMERIC(18) " & _
        " DECLARE @TABLA TABLE(CODVENTA NUMERIC(18), NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), SALDO NUMERIC(18,5), ORDEN INTEGER) " & _
        " SET @CODEMPRESA = " & empCodigo & " " & _
        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
        " DECLARE CURSOR_COMISION CURSOR " & _
        " FOR " & _
" /* FACTURAS CREDITO DEL MES COBRADAS EN SU TOTALIDAD*/ " & _
        " SELECT ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
        " + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0" & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE)),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0 " & _
        " ),0)  AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        " ISNULL((SELECT SUM(CC.COTIZACION1MR) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = FC.CODVENTA)=  " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <=  CAST( @FECHA2 AS DATETIME)))   " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS COBRADAS DEL MES */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0" & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0" & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES OK */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0" & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, " & _
        "  ((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) - " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))) " & _
" /* - " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0)*/ " & _
        " AS SALDO, " & _
        "  1 AS ORDEN " & _
        " FROM VENTAS V " & _
        " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " /* AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > */ " & _
        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = V.CODVENTA) > " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " /* AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME))) */ " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <=  CAST( @FECHA2 AS DATETIME)))  " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES ok */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0" & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0" & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
        " /*- ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) */ " & _
" /* - " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) */ " & _
        " AS SALDO, 1 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
        " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
        " WHERE CF.CODVENTA = V.CODVENTA " & _
        " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2  AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS  OK */ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA,  RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
    " + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        " ISNULL((SELECT SUM(CC.COTIZACION1MR) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND FA.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) <= " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF " & _
        " WHERE FA.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
        " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS VER OTRO MES QUE HORROR */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0" & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR OK */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0)  " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, " & _
        " ( (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO)- " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME)))) " & _
        " /* - ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) */ " & _
        " AS SALDO, 3 AS ORDEN " & _
        " FROM VENTAS V " & _
        " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " /* AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > */ " & _
        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = V.CODVENTA) > " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR VER OTRO MES HORROR */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0" & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0" & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
        " /* - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.FECHADEVOLUCION <= CAST( @FECHA2   AS DATETIME) AND D.ESTADO = 0 ),0) */ " & _
        "  AS SALDO, 3 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
        " INNER JOIN CAJAINGRESOS CI ON CI.CODINGRESO = CF.CODINGRESO " & _
        " WHERE CF.CODVENTA = V.CODVENTA AND CI.FECINGRESO <= @FECHA2) " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE and D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA  " & _
" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA) ,103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA and D.ESTADO = 0),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE and D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA and D.ESTADO = 0 ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN " & _
        " FROM VENTAS V " & _
        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND LEN(DE.OBSERVACION) > 0 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA " & _
        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
        " OPEN CURSOR_COMISION " & _
        " FETCH NEXT FROM CURSOR_COMISION INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @SALDO, @ORDEN " & _
        " WHILE @@FETCH_STATUS = 0 " & _
        " BEGIN " & _
        " INSERT INTO @TABLA(CODVENTA, NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION,  SALDO, ORDEN) " & _
        " VALUES(@CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO,  @ORDEN) " & _
        " FETCH NEXT FROM CURSOR_COMISION  INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO, @ORDEN " & _
        " END " & _
        " CLOSE CURSOR_COMISION " & _
        " DEALLOCATE CURSOR_COMISION " & _
" SELECT * FROM @TABLA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader



            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
            Dim numvendedor As String = ""
            Dim i As Integer = 0

            Dim cobradasmes As Decimal = 0 : Dim pendientesmes As Decimal = 0
            Dim cobradascomision As Decimal = 0 : Dim pendientescomision As Decimal = 0
            Dim anteriorventa As Decimal = 0 : Dim anteriorcomision As Decimal = 0
            Dim vector As New ArrayList
            Try

                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    If i = 0 Then
                        i = 1
                        numvendedor = dr("NUMVENDEDOR")
                    End If
                    If dr("NUMVENDEDOR") <> numvendedor Then
                        numvendedor = dr("NUMVENDEDOR")
                        cobradasmes = 0 : pendientesmes = 0 : cobradascomision = 0
                        pendientescomision = 0 : anteriorventa = 0 : anteriorcomision = 0
                    End If
                    row.Item("Campo1") = dr("NUMVENDEDOR")
                    row.Item("Campo15") = dr("DESVENDEDOR")
                    row.Item("Campo16") = funcion.textomes(fechaHasta.Substring(3, 2)) & " / " & fechaHasta.Substring(6, 4)

                    ventaneta = 0

                    Dim fechacobranza As String = CType(funcion.Descripcion_Tabla("'') AS NADA, ISNULL(CONVERT(VARCHAR(10),MAX(CB.FECHACOBRO),103),''", "COBRANZAS CB INNER JOIN FACTURAAFECTADA FA ON CB.CODCOBRANZA = FA.CODCOBRANZA", _
                        "FA.CODVENTA = " & dr("CODVENTA") & " AND CB.CODEMPRESA = " & empCodigo & " --------", "JUANI", 1), String)
                    Dim fecha As String
                    If fechacobranza <> "" And CDec(dr("SALDO")) = 0 Then
                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechacobranza))
                    Else
                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta)) '' original
                    End If

                    If dr("NUMMONEDA") = MONEDA Then
                        ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
                    Else
                        ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
                        promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
                    End If
                    If CDec(fecha) >= 91 Then
                        promedio = 0
                    End If
                    If promedio = 0 Then
                        ventaneta = 0
                    End If
                    If ventaneta < 0 Then
                        ventaneta = 0
                        promedio = 0
                    End If

                    If dr("ORDEN") <> 4 Then
                        Select Case dr("ORDEN")
                            Case 0
                                cobradasmes += ventaneta
                                cobradascomision += promedio
                            Case 1
                                pendientesmes += ventaneta
                                pendientescomision += promedio
                            Case 2
                                anteriorventa += ventaneta
                                anteriorcomision += promedio
                        End Select
                    End If

                    row.Item("Campo2") = dr("ORDEN")
                    Select Case dr("ORDEN")
                        Case 0
                            row.Item("Campo3") = "DETALLE DE VENTAS COBRADAS"
                        Case 1
                            row.Item("Campo3") = "DETALLE DE VENTAS PENDIENTES"
                        Case 2
                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR COBRADAS"
                        Case 3
                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR PENDIENTES"
                        Case 4
                            row.Item("Campo3") = "OBSERVACION"
                    End Select

                    row.Item("Campo18") = dr("NUMCLIENTE")
                    row.Item("Campo8") = dr("NUMVENTA")
                    row.Item("Campo10") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("FECHAVENTA")
                    row.Item("Campo9") = dr("CLIENTE")
                    row.Item("Campo24") = dr("OBSERVACION")

                    If dr("ORDEN") <> 4 Then
                        row.Item("Numero1") = dr("PROMEDIOCOMISION")
                        '''  row.Item("Numero11") = dr("SALDO")
                        If dr("NUMMONEDA") = MONEDA Then
                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0)
                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0)
                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0)
                            row.Item("Numero11") = dr("SALDO")
                            row.Item("Numero6") = ventaneta
                            row.Item("Numero5") = promedio
                        Else
                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero7") = Math.Round(dr("TOTALIVA") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero4") = Math.Round(dr("DEVIVA") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero11") = Math.Round(dr("SALDO") * dr("COTIZACION1") / dr("CANTIDAD"))
                            row.Item("Numero6") = ventaneta
                            row.Item("Numero5") = promedio
                        End If

                    End If
                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Numero8") = cobradasmes
                row.Item("Numero9") = pendientesmes
                row.Item("Numero10") = cobradascomision
                row.Item("Numero11") = pendientescomision
                row.Item("Numero13") = anteriorventa
                row.Item("Numero14") = anteriorcomision
                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                '' row.Item("Numero3") = resumen

                ''If usuario <> "" Then
                ''    row.Item("Campo4") = "por " & usuario
                ''End If

                'If tipoVenta = 1 Then
                '    row.Item("campo3") = "Minoristas"
                'ElseIf tipoVenta = 2 Then
                '    row.Item("campo3") = "Mayoristas"
                'End If

                'If tipo = 0 Then
                '    row.Item("campo30") = "Fecha"
                'Else
                '    row.Item("campo30") = "Mes"
                'End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function


    Public Function infRangoDevolucionesVenta(ByVal codMoneda As Long, ByVal moneda_informe As String, _
   ByVal cotizacion As String, ByVal candecimales As Integer, _
   ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
   ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
   ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
   ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
   ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
   ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
   ByVal numeroDesde As String, ByVal numeroHasta As String, _
   ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
   ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
   ByVal fechaDesde As String, ByVal fechaHasta As String, _
   ByVal condiciones As String, _
   ByVal titulo As Byte, ByVal usuario As String, _
   ByVal resumen As Byte, Optional ByVal orden As String = "", _
   Optional ByVal tipo As Byte = 0) As DataSet
        ds.Clear()

        sql = ""
        sql = " DECLARE @CODEMPRESA NUMERIC(18) " & _
        " SET @CODEMPRESA =  " & empCodigo & " " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " MONTH(D.FECHADEVOLUCION) AS MES, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " REPLICATE('0',5-LEN(RTRIM(TCL.NUMTIPOCLIENTE)))+LTRIM(RTRIM(TCL.NUMTIPOCLIENTE)) AS NUMTIPOCLIENTEORDEN, " & _
        " RTRIM(TCL.NUMTIPOCLIENTE) AS NUMTIPOCLIENTE, RTRIM(TCL.DESTIPOCLIENTE) AS DESTIPOCLIENTE, " & _
        " D.NUMDEVOLUCION AS NUMDEVOLUCION, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " ISNULL(D.TOTALGRAVADA,0) AS TOTALGRAVADA, " & _
        " ISNULL(D.TOTALGRAVADA * D.COTIZACION1,0) AS TOTALGRAVADAINFORME, " & _
        " ISNULL(D.TOTALEXENTA,0) AS TOTALEXENTA, " & _
        " ISNULL(D.TOTALEXENTA * D.COTIZACION1,0) AS TOTALEXENTAINFORME, " & _
        " ISNULL(D.TOTALDESCUENTO,0) AS TOTALDESCUENTO, " & _
        " ISNULL(D.TOTALDESCUENTO * D.COTIZACION1,0) AS TOTALDESCUENTOINFORME, " & _
        " ISNULL(D.TOTALIVA,0) AS TOTALIVA, " & _
        " ISNULL(D.TOTALIVA * D.COTIZACION1,0) AS TOTALIVAINFORME, " & _
        " TOTALDEVOLUCION AS TOTALDEVOLUCION, " & _
        " ISNULL(D.TOTALDEVOLUCION * D.COTIZACION1,0) AS TOTALDEVOLUCIONINFORME, " & _
        " D.CODMONEDA AS CODMONEDA, RTRIM(U.DESUSUARIO) AS DESUSUARIO, " & _
        " ISNULL(RTRIM(V.NUMVENTA),'') AS NUMVENTA, " & _
        " ISNULL(RTRIM(TV.NUMTIPOCOMPRO),'') + ' -' AS NUMCOMPROBANTEVENTA, " & _
        " ISNULL(RTRIM(CL.RUC),'') AS RUC, " & _
        " ISNULL((SELECT MAX(C.CODCOBRANZA) FROM COBRANZAS C " & _
        " WHERE C.CODCOMPROBANTE = D.CODCOMPROBANTE AND CONVERT(NUMERIC, C.NUMCOMPROBANTE) = CONVERT(NUMERIC, D.NUMDEVOLUCION)),0) AS CONTROL " & _
        " FROM DEVOLUCION D INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON  D.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN CLIENTES CL ON D.CODCLIENTE = CL.CODCLIENTE " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN USUARIO U ON U.CODUSUARIO = D.CODUSUARIO " & _
        " LEFT OUTER JOIN VENTAS V ON D.CODVENTA = V.CODVENTA " & _
        " LEFT OUTER JOIN TIPOCOMPROBANTE TV ON V.CODCOMPROBANTE = TV.CODCOMPROBANTE " & _
        " AND U.CODEMPRESA = D.CODEMPRESA " & _
        " INNER JOIN TIPOCLIENTE TCL ON TCL.CODTIPOCLIENTE = CL.CODTIPOCLIENTE " & _
        " WHERE D.CODEMPRESA = @CODEMPRESA AND D.ESTADO = 0 " & condiciones & ""

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, CAST(D.FECHADEVOLUCION AS DATETIME), " & orden & " NUMDEVOLUCION "
        Else
            sql = sql & " ORDER BY NUMSUCURSAL, MES, " & orden & " CAST(D.FECHADEVOLUCION AS DATETIME), NUMDEVOLUCION "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo15") = dr("DESSUCURSAL")
                    row.Item("Campo6") = dr("NUMCOMPROBANTEVENTA")
                    If dr("CONTROL") = 0 Then
                        If dr("NUMVENTA") = "" Then
                            row.Item("Campo5") = "                       *"
                        Else
                            row.Item("Campo5") = dr("NUMVENTA") & " *"
                        End If
                    Else
                        row.Item("Campo5") = dr("NUMVENTA")
                    End If

                    row.Item("Campo4") = dr("RUC")

                    If tipo = 0 Then
                        row.Item("Campo2") = dr("FECHADEVOLUCION")
                    Else
                        row.Item("Campo2") = funcion.textomes(dr("MES")).ToUpper
                    End If

                    If orden = "DESCOMPROBANTE, " Then
                        row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                        row.Item("Campo17") = dr("DESCOMPROBANTE")
                        row.Item("Campo20") = "Comprobante"
                    ElseIf orden = "DESTIPOCLIENTE, " Then
                        row.Item("Campo3") = dr("NUMTIPOCLIENTE")
                        row.Item("Campo17") = dr("DESTIPOCLIENTE")
                        row.Item("Campo20") = "Tipo Cliente"
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo17") = ""
                        row.Item("Campo20") = ""
                    End If

                    row.Item("Campo18") = dr("NUMDEVOLUCION")
                    row.Item("Campo8") = dr("NUMCLIENTE")
                    row.Item("Campo9") = dr("CLIENTE")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero2") = dr("TOTALGRAVADA") - dr("TOTALDESCUENTO")
                        row.Item("Numero3") = dr("TOTALEXENTA")
                        row.Item("Numero6") = dr("TOTALIVA")
                        row.Item("Numero5") = dr("TOTALDEVOLUCION")
                    Else
                        row.Item("Numero2") = Math.Round(dr("TOTALGRAVADAINFORME") / cotizacion, candecimales) - Math.Round(dr("TOTALDESCUENTOINFORME") / cotizacion, candecimales)
                        row.Item("Numero3") = Math.Round(dr("TOTALEXENTAINFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("TOTALIVAINFORME") / cotizacion, candecimales)
                        row.Item("Numero5") = Math.Round(dr("TOTALDEVOLUCIONINFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                row.Item("Numero3") = resumen

                If usuario <> "" Then
                    row.Item("Campo4") = "por " & usuario
                End If

                If tipo = 0 Then
                    row.Item("campo30") = "Fecha"
                Else
                    row.Item("campo30") = "Mes"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infResumenComprasFecha(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal compra As Byte) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)

        sql = ""
        sql = " /*COMPRAS DEL SISTEMA DE PROVEEDORES*/ " & _
        " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & _
        " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (MI.IMPORTE / I.COHEFICIENTE)  END), 0) AS GRAVADA5, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (MI.IMPORTE / I.COHEFICIENTE)  END), 0) AS GRAVADA10, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN MI.IMPUESTO END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN MI.IMPUESTO END), 0) AS IVA10, " & _
        " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " LEFT OUTER JOIN MAGICIVA MI ON C.CODCOMPRA = MI.CODCOMPRA " & _
        " LEFT OUTER JOIN IVA I ON MI.CODIVA = I.CODIVA " & _
        " WHERE C.ESTADO = 5 " & _
        " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " UNION ALL " & _
        " /*COMPRAS DEL SISTEMA DE STOCK*/ " & _
        " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & _
        " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE) END), 0) AS GRAVADA5, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE) END), 0) AS GRAVADA10, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA10, " & _
        " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & _
        " WHERE C.ESTADO IS NULL  AND C.IMPORTACION = 0 " & _
        " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " UNION ALL " & _
        " /*COMPRAS DEL SISTEMA DE STOCK -  IMPORTACIONES */ " & _
        " SELECT DISTINCT C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & _
        " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, " & _
        " 0 AS GRAVADA5, " & _
        " C.TOTALGRAVADA AS GRAVADA10, " & _
        " 0 AS IVA5, " & _
        " C.TOTALIVA AS IVA10, " & _
        " C.TOTALIVA, C.TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & _
        " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE C.ESTADO IS NULL AND C.IMPORTACION = 1 " & _
        " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & _
        " ORDER BY FECHAORDEN, NUMERO "
        '''" ORDER BY NUMCOMPROBANTE, NUMPROVEEDOR, FECHAORDEN, NUMERO "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMPROVEEDOR")
                row.Item("Campo4") = dr("PROVEEDOR")
                row.Item("Campo7") = dr("CODCOMPRA")
                ''row.Item("Campo8") = dr("NUMCOMPROBANTE") + " - " + dr("DESCOMPROBANTE")
                row.Item("Campo9") = dr("NUMERO")
                row.Item("Campo10") = dr("FECHACOMPRA")
                row.Item("Campo11") = dr("RUC")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("GRAVADA10")
                    row.Item("Numero3") = dr("IVA5")
                    row.Item("Numero4") = dr("IVA10")
                    row.Item("Numero5") = dr("GRAVADA5")
                    row.Item("Numero6") = dr("TOTALFACTURA")
                Else
                    row.Item("Numero1") = Math.Round(dr("TOTALEXENTA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(dr("GRAVADA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(dr("IVA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero4") = Math.Round(dr("IVA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero5") = Math.Round(dr("GRAVADA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero6") = Math.Round(dr("TOTALFACTURA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeProveedor
            row.Item("Campo9") = hastaProveedor
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case compra
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfVentasxVendedorProducto_antes(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal desdevendedor As String, ByVal hastavendedor As String, _
    ByVal desdecliente As String, ByVal hastacliente As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdemoneda As String, ByVal hastamoneda As String, _
    ByVal canDecimales As Integer, ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipo As Byte, ByVal Moneda1 As String) As DataSet

        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL,  " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST(V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (V.NUMVENTA) AS NROCOMPROBANTE,  " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,  " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS VENDEDOR,  " & _
        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        " VD.CANTIDADVENTA AS CANTIDAD,  " & _
        " VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO,  " & _
        " VD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
        " ((VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * VD.[DESC]) / 100) AS MONTODESCUENTO,  " & _
        " VD.CANTIDADVENTA * VD.PRECIOVENTANETO AS TOTALVENTA, " & _
        " RTRIM(MO.NUMMONEDA) AS NUMMONEDA, RTRIM(MO.DESMONEDA) AS MONEDA, MO.CODMONEDA AS CODMONEDA,  " & _
        " 0 AS ORDEN " & _
        " FROM VENTAS V  " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
        " INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA  " & _
        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE  " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR  " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
        " INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO  " & _
        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
        " WHERE V.ESTADO = 0 And V.CODEMPRESA = " & empCodigo & "  " & condiciones & " " & _
        " AND V.FECHAVENTA BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME) " & _
" UNION ALL " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL,  " & _
        " CONVERT(VARCHAR(10),V.FECHADEVOLUCION,103) AS FECHAVENTA, " & _
        " CAST(V.FECHADEVOLUCION AS DATETIME) AS ORDENFECHA, " & _
        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(V.NUMDEVOLUCION) AS NROCOMPROBANTE,  " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,  " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS VENDEDOR,  " & _
        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        " VD.CANTIDADDEVUELTA AS CANTIDAD,  " & _
        " VD.PRECIOBRUTO AS PRECIOBRUTO,  " & _
        " VD.PRECIONETO AS PRECIONETO, " & _
        " ((VD.PRECIOBRUTO * VD.CANTIDADDEVUELTA * VD.[DESC]) / 100) AS MONTODESCUENTO,  " & _
        " VD.CANTIDADDEVUELTA * VD.PRECIONETO AS TOTALVENTA, " & _
        " RTRIM(MO.NUMMONEDA) AS NUMMONEDA, RTRIM(MO.DESMONEDA) AS MONEDA, MO.CODMONEDA AS CODMONEDA,  " & _
        " 1 AS ORDEN " & _
        " FROM DEVOLUCION V  " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
        " INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA  " & _
        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE  " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR  " & _
        " INNER JOIN DEVOLUCIONDETALLE VD ON V.CODDEVOLUCION = VD.CODDEVOLUCION  " & _
        " INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO  " & _
        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
        " WHERE V.CODEMPRESA =  " & empCodigo & "  AND V.ESTADO = 0 " & condiciones & " " & _
        " AND V.FECHADEVOLUCION BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME) " & _
        " ORDER BY VENDEDOR, NUMMONEDA, DESCRIPCION , ORDENFECHA, TIPOCOMPROBANTE, NROCOMPROBANTE "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMVENDEDOR")
                row.Item("Campo11") = dr("VENDEDOR")
                ''' row.Item("Campo2") = dr("CODIGO")
                row.Item("Campo12") = dr("NUMMONEDA")
                row.Item("Campo13") = dr("MONEDA")
                row.Item("Campo10") = dr("DESCRIPCION")
                row.Item("Campo4") = dr("NUMCOMPROBANTE")
                row.Item("Campo3") = dr("NROCOMPROBANTE")
                row.Item("Campo7") = dr("FECHAVENTA")
                row.Item("Campo8") = dr("SUCURSAL")
                row.Item("Campo9") = dr("NUMMONEDA")

                row.Item("Numero2") = dr("PRECIOVENTANETO")
                row.Item("Campo14") = dr("CODIGO")
                Dim redondeo As Integer = 0
                If dr("NUMMONEDA") = Moneda1 Then
                    redondeo = 0
                Else
                    redondeo = 2
                End If
                Select Case CType(dr("ORDEN"), Integer)
                    Case Is = 0
                        row.Item("Numero1") = dr("CANTIDAD")
                        row.Item("Numero3") = Math.Round(dr("TOTALVENTA"), redondeo)
                        row.Item("Numero8") = Math.Round(dr("TOTALVENTA") * dr("COTIZACION"), redondeo)

                    Case Is = 1
                        row.Item("Numero1") = -dr("CANTIDAD")
                        row.Item("Numero3") = -Math.Round(dr("TOTALVENTA"), redondeo)
                        row.Item("Numero8") = -Math.Round(dr("TOTALVENTA") * dr("COTIZACION"), redondeo)
                End Select
                row.Item("Numero4") = 0
                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo
            row.Item("Campo1") = empDescripcion
            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdevendedor
            row.Item("Campo8") = hastavendedor
            row.Item("Campo9") = desdecliente
            row.Item("Campo10") = hastacliente
            row.Item("Campo11") = desdeproducto
            row.Item("Campo12") = hastaproducto
            row.Item("Campo13") = desdefamilia
            row.Item("Campo14") = hastafamilia
            row.Item("Campo15") = desdelinea
            row.Item("Campo16") = hastalinea
            row.Item("Campo17") = desderubro
            row.Item("Campo18") = hastarubro
            row.Item("Campo19") = desdecategoria
            row.Item("Campo20") = hastacategoria
            row.Item("Campo21") = desdesubcategoria
            row.Item("Campo22") = hastasubcategoria
            row.Item("Campo23") = desdemarca
            row.Item("Campo24") = hastamarca
            row.Item("Campo25") = desdeFecha
            row.Item("Campo26") = hastaFecha
            row.Item("Campo27") = desdemoneda
            row.Item("Campo28") = hastamoneda

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Function InfVentasxVendedorProducto(ByVal desdesucursal As String, ByVal hastasucursal As String, _
        ByVal desdevendedor As String, ByVal hastavendedor As String, _
        ByVal desdecliente As String, ByVal hastacliente As String, _
        ByVal desdeproducto As String, ByVal hastaproducto As String, _
        ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
        ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
        ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
        ByVal desdecategoria As String, ByVal hastacategoria As String, _
        ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
        ByVal desdemarca As String, ByVal hastamarca As String, _
        ByVal desdeFecha As String, ByVal hastaFecha As String, _
        ByVal desdemoneda As String, ByVal hastamoneda As String, _
        ByVal canDecimales As Integer, ByVal condiciones As String, _
        ByVal titulo As Byte, ByVal tipo As Byte, ByVal Moneda1 As String) As DataSet

        ds.Clear()

        sql = ""
        sql = "SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL,  " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST(V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (V.NUMVENTA) AS NROCOMPROBANTE,  " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,  " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS VENDEDOR,  " & _
        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        " VD.CANTIDADVENTA AS CANTIDAD,  " & _
        " VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO,  " & _
        " VD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
        " ((VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * VD.[DESC]) / 100) AS MONTODESCUENTO,  " & _
        " VD.CANTIDADVENTA * VD.PRECIOVENTANETO AS TOTALVENTA, " & _
        " RTRIM(MO.NUMMONEDA) AS NUMMONEDA, RTRIM(MO.DESMONEDA) AS MONEDA, MO.CODMONEDA AS CODMONEDA,  " & _
        " 0 AS ORDEN " & _
        " FROM VENTAS V  " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
        " INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA  " & _
        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE  " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR  " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
        " INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO  " & _
        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
        " WHERE V.ESTADO = 0 And V.CODEMPRESA = " & empCodigo & "  " & condiciones & " " & _
        " AND V.FECHAVENTA BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME) " & _
" UNION ALL " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL,  " & _
        " CONVERT(VARCHAR(10),V.FECHADEVOLUCION,103) AS FECHAVENTA, " & _
        " CAST(V.FECHADEVOLUCION AS DATETIME) AS ORDENFECHA, " & _
        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(V.NUMDEVOLUCION) AS NROCOMPROBANTE,  " & _
        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,  " & _
        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS VENDEDOR,  " & _
        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        " VD.CANTIDADDEVUELTA AS CANTIDAD,  " & _
        " VD.PRECIOBRUTO AS PRECIOBRUTO,  " & _
        " VD.PRECIONETO AS PRECIONETO, " & _
        " ((VD.PRECIOBRUTO * VD.CANTIDADDEVUELTA * VD.[DESC]) / 100) AS MONTODESCUENTO,  " & _
        " VD.CANTIDADDEVUELTA * VD.PRECIONETO AS TOTALVENTA, " & _
        " RTRIM(MO.NUMMONEDA) AS NUMMONEDA, RTRIM(MO.DESMONEDA) AS MONEDA, MO.CODMONEDA AS CODMONEDA,  " & _
        " 1 AS ORDEN " & _
        " FROM DEVOLUCION V  " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
        " INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA  " & _
        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE  " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR  " & _
        " INNER JOIN DEVOLUCIONDETALLE VD ON V.CODDEVOLUCION = VD.CODDEVOLUCION  " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO  " & _
        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
        " WHERE V.CODEMPRESA =  " & empCodigo & "  AND V.ESTADO = 0 " & condiciones & " " & _
        " AND V.FECHADEVOLUCION BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME) " & _
        " ORDER BY VENDEDOR,NROCOMPROBANTE, NUMMONEDA, DESCRIPCION , ORDENFECHA, TIPOCOMPROBANTE  "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMVENDEDOR")
                row.Item("Campo11") = dr("VENDEDOR")
                ''' row.Item("Campo2") = dr("CODIGO")
                row.Item("Campo12") = dr("NUMMONEDA")
                row.Item("Campo13") = dr("MONEDA")
                row.Item("Campo10") = dr("DESCRIPCION")
                row.Item("Campo4") = dr("NUMCOMPROBANTE")
                row.Item("Campo3") = dr("NROCOMPROBANTE")
                row.Item("Campo7") = dr("FECHAVENTA")
                row.Item("Campo8") = dr("SUCURSAL")
                row.Item("Campo9") = dr("NUMMONEDA")

                row.Item("Numero2") = dr("PRECIOVENTANETO")
                row.Item("Campo14") = dr("CODIGO")
                Dim redondeo As Integer = 0
                If dr("NUMMONEDA") = Moneda1 Then
                    redondeo = 0
                Else
                    redondeo = 2
                End If
                Select Case CType(dr("ORDEN"), Integer)
                    Case Is = 0
                        row.Item("Numero1") = dr("CANTIDAD")
                        row.Item("Numero3") = Math.Round(dr("TOTALVENTA"), redondeo)
                        row.Item("Numero8") = Math.Round(dr("TOTALVENTA") * dr("COTIZACION"), redondeo)

                    Case Is = 1
                        row.Item("Numero1") = -dr("CANTIDAD")
                        row.Item("Numero3") = -Math.Round(dr("TOTALVENTA"), redondeo)
                        row.Item("Numero8") = -Math.Round(dr("TOTALVENTA") * dr("COTIZACION"), redondeo)
                End Select
                row.Item("Numero4") = 0
                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo
            row.Item("Campo1") = empDescripcion
            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdevendedor
            row.Item("Campo8") = hastavendedor
            row.Item("Campo9") = desdecliente
            row.Item("Campo10") = hastacliente
            row.Item("Campo11") = desdeproducto
            row.Item("Campo12") = hastaproducto
            row.Item("Campo13") = desdefamilia
            row.Item("Campo14") = hastafamilia
            row.Item("Campo15") = desdelinea
            row.Item("Campo16") = hastalinea
            row.Item("Campo17") = desderubro
            row.Item("Campo18") = hastarubro
            row.Item("Campo19") = desdecategoria
            row.Item("Campo20") = hastacategoria
            row.Item("Campo21") = desdesubcategoria
            row.Item("Campo22") = hastasubcategoria
            row.Item("Campo23") = desdemarca
            row.Item("Campo24") = hastamarca
            row.Item("Campo25") = desdeFecha
            row.Item("Campo26") = hastaFecha
            row.Item("Campo27") = desdemoneda
            row.Item("Campo28") = hastamoneda

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCargaDevolucionCompras(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal candecimales As Integer, _
    ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
    ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
    ByVal Proveedor_desde As String, ByVal Prov_descripcion_desde As String, _
    ByVal Proveedor_hasta As String, ByVal Prov_descripcion_hasta As String, _
    ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
    ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
    ByVal numeroDesde As String, ByVal numeroHasta As String, _
    ByVal zona_desde As String, ByVal zona_descripcion_desde As String, _
    ByVal zona_hasta As String, ByVal zona_descripcion_hasta As String, _
    ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
    ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
    ByVal fechaDesde As String, ByVal fechaHasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet

        ds.Clear()

        sql = ""
        sql = " SELECT D.CODDEVOLUCION AS CODDEVOLUCION, RTRIM (D.NUMDEVOLUCION) AS NUMERO, RTRIM(T.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " D.PORCENTAJEDESCUENTO AS DESCUENTO, D.COTIZACION1 AS COTIZACION, " & _
        " CONVERT(VARCHAR(10), D.FECGRA, 103) AS FECHAINGRESO, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " D.TOTALEXENTA AS TOTALEXENTA, D.TOTALGRAVADA AS TOTALGRAVADA, " & _
        " D.TOTALIVA AS TOTALIVA, D.TOTALDESCUENTO AS MONTODESCUENTO, " & _
        " (D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) AS TOTALFACTURA, " & _
        " DD.CANTIDADDEVUELTA AS CANTIDAD, " & _
        " DD.COSTOBRUTO AS COSTOBRUTO, DD.COSTONETO AS COSTONETO, " & _
        " DD.CANTIDADDEVUELTA * DD.COSTONETO AS TOTALNETO, " & _
        " DD.CANTIDADDEVUELTA * DD.COSTOBRUTO AS TOTALBRUTO, " & _
        " M.CODMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, P.CODPRODUCTO AS CODPRODUCTO, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, P.CODLINEA AS CODLINEA, " & _
        " RTRIM(Z.DESZONA) AS ZONA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR " & _
        " FROM DEVOLUCIONCOMPRA D INNER JOIN TIPOCOMPROBANTE T ON D.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN PROVEEDOR PR ON D.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " LEFT OUTER JOIN ZONA Z ON PR.CODZONA = Z.CODZONA " & _
        " INNER JOIN DEVOLUCIONCOMPRADETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN PRODUCTOS P ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN COMPRAS C ON D.CODCOMPRA = C.CODCOMPRA " & _
        " WHERE D.CODEMPRESA =  " & empCodigo & "  " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, FECHADEVOLUCION, NUMTIPOCOMPRO, CODDEVOLUCION, LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo2") = dr("FECHADEVOLUCION")
                    row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo15") = dr("SUCURSAL")
                    row.Item("Campo17") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NUMERO")
                    row.Item("Numero15") = dr("CODDEVOLUCION")
                    row.Item("Campo5") = dr("PROVEEDOR")
                    row.Item("Campo7") = dr("MONEDA")
                    row.Item("Campo8") = dr("CODIGO")
                    row.Item("Campo9") = dr("DESCRIPCION")
                    row.Item("Campo10") = dr("NUMTIPOCOMPRO")
                    row.Item("Campo12") = dr("ZONA")
                    row.Item("Campo14") = dr("NUMPROVEEDOR")
                    row.Item("Numero1") = dr("COTIZACION")
                    row.Item("Numero2") = dr("CANTIDAD")
                    row.Item("Numero3") = dr("COSTOBRUTO")
                    row.Item("Numero4") = dr("COSTONETO")

                    row.Item("Numero13") = Math.Round(dr("TOTALBRUTO"), candecimales)

                    row.Item("Numero6") = dr("TOTALEXENTA")
                    row.Item("Numero7") = dr("TOTALGRAVADA")
                    row.Item("Numero8") = dr("TOTALIVA")
                    row.Item("Numero10") = dr("TOTALFACTURA")
                    row.Item("Numero11") = dr("DESCUENTO")

                    row.Item("Campo13") = "NORMAL"

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero12") = dr("TOTALFACTURA")
                        row.Item("Numero5") = dr("TOTALNETO")
                    Else
                        row.Item("Numero12") = (dr("TOTALFACTURA") * dr("COTIZACION")) / cotizacion
                        row.Item("Numero5") = (dr("TOTALNETO") * dr("COTIZACION")) / cotizacion
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = Prov_descripcion_desde
                row.Item("Campo19") = Prov_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo26") = zona_descripcion_desde
                row.Item("Campo27") = zona_descripcion_hasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function InfMovimientoDevolucionCompra(ByVal codMoneda As Long, ByVal moneda_informe As String, _
    ByVal cotizacion As String, ByVal canDecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal proveedor_desde As String, ByVal cli_descripcion_desde As String, _
    ByVal proveedor_hasta As String, ByVal cli_descripcion_hasta As String, _
    ByVal producto_desde As String, ByVal producto_descripcion_desde As String, _
    ByVal producto_hasta As String, ByVal producto_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte) As DataSet

        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (D.NUMDEVOLUCION) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(PR.APELLIDO)+' '+RTRIM(PR.NOMBRE))AS PROVEEDOR, " & _
        " D.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " DD.CANTIDADDEVUELTA AS CANTIDAD, DD.COSTOBRUTO AS PRECIOBRUTO, " & _
        " DD.COSTONETO AS PRECIONETO, (DD.CANTIDADDEVUELTA * DD.COSTONETO) AS TOTALNETO, " & _
        " DD.COSTOBRUTO AS PRECIOBRUTO, (DD.CANTIDADDEVUELTA * DD.COSTOBRUTO) AS TOTALBRUTO, " & _
        " (DD.CANTIDADDEVUELTA * DD.COSTONETO * D.COTIZACION1) AS TOTALNETOINFORME, " & _
        " (DD.CANTIDADDEVUELTA * DD.COSTOBRUTO * D.COTIZACION1) AS TOTALBRUTOINFORME, " & _
        " ((DD.COSTOBRUTO * DD.CANTIDADDEVUELTA * DD.[DESC]) / 100) AS MONTODESCUENTO, " & _
        " ((DD.COSTOBRUTO * DD.CANTIDADDEVUELTA * DD.[DESC] * D.COTIZACION1) / 100) AS MONTODESCUENTOINFORME, " & _
        " RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS MONEDA, M.CODMONEDA AS CODMONEDA " & _
        " FROM DEVOLUCIONCOMPRA D " & _
        " INNER JOIN PROVEEDOR PR ON D.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN TIPOCOMPROBANTE T ON D.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN DEVOLUCIONCOMPRADETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN PRODUCTOS P ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        " WHERE D.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " ORDER BY NUMSUCURSAL, CODIGO, NUMMONEDA "
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo11") = dr("SUCURSAL")
                row.Item("Campo10") = dr("CODIGO")
                row.Item("Campo6") = dr("DESCRIPCION")
                row.Item("Campo8") = dr("NUMMONEDA")
                row.Item("Campo9") = dr("MONEDA")
                row.Item("Campo4") = dr("NROCOMPROBANTE")
                row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                row.Item("Campo5") = dr("PROVEEDOR")
                row.Item("Campo2") = dr("FECHADEVOLUCION")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("PRECIOBRUTO")
                row.Item("Numero3") = dr("PRECIONETO")
                row.Item("Numero4") = dr("TOTALNETO")
                row.Item("Numero5") = dr("MONTODESCUENTO")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero6") = dr("TOTALBRUTO")
                    row.Item("Numero7") = dr("MONTODESCUENTO")
                Else
                    row.Item("Numero6") = Math.Round(dr("TOTALBRUTOINFORME") / cotizacion, canDecimales)
                    row.Item("Numero7") = Math.Round(dr("MONTODESCUENTOINFORME") / cotizacion, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            Dim loco As Byte = row.Item("Numero1")

            row.Item("Campo1") = empDescripcion
            row.Item("Campo16") = suc_descripcion_desde
            row.Item("Campo17") = suc_descripcion_hasta
            row.Item("Campo18") = cli_descripcion_desde
            row.Item("Campo19") = cli_descripcion_hasta
            row.Item("Campo22") = producto_descripcion_desde
            row.Item("Campo23") = producto_descripcion_hasta
            row.Item("Campo24") = fecha_desde
            row.Item("Campo25") = fecha_hasta
            row.Item("Campo14") = moneda_informe
            row.Item("Numero2") = cotizacion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infResumenVentasIVA(ByVal Direccion As String, _
 ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, _
 ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
 ByVal desdeCliente As String, ByVal hastaCliente As String, _
 ByVal desdeFecha As String, ByVal hastaFecha As String, _
 ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
 ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
 ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
 ByVal condiciones As String, _
 ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
 ByVal compra As Byte) As DataSet

        ''Dim ds As New DataSet
        ''Dim dr As DataRow
        ''ds.ReadXml(Direccion)
        '''cnn = ser.Abrir

        ds.Clear()

        sql = ""
        sql = " SELECT V.CODVENTA AS CODVENTA, CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA,  " & _
            " CAST(V.FECHAVENTA AS DATETIME) AS FECHAORDEN,  " & _
            " (CASE V.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD,  " & _
            " RTRIM(V.NUMVENTA) AS NUMERO, " & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, ISNULL(RTRIM(TC.DESCOMPROBANTE),'') AS DESCOMPROBANTE, " & _
            " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 0) THEN  " & _
            " ((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100)) * VD.CANTIDADVENTA) ELSE 0 END), 0) AS EXENTA,  " & _
            " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN  " & _
            " ((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA) ELSE 0 END), 0) AS GRAVADA5,  " & _
            " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN " & _
            " ((VD.PRECIOVENTABRUTO  - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100))* VD.CANTIDADVENTA) ELSE 0 END), 0) AS GRAVADA10, " & _
            " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN  " & _
            " (((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100)) * VD.CANTIDADVENTA )/ I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA5,  " & _
            " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) AND (ISNULL(CL.CLIENTEEXENTO,0) = 0) THEN  " & _
            " (((VD.PRECIOVENTABRUTO - (VD.PRECIOVENTABRUTO * VD.[DESC] / 100)) * VD.CANTIDADVENTA) / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA10, " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS TOTALFACTURA, " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
            " ISNULL(RTRIM(CL.RUC),'') AS RUC " & _
            " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
            " INNER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
            " INNER JOIN IVA I ON VD.IVA = I.PORCENTAJEIVA  " & _
            " WHERE V.ESTADO = 0 " & _
            " AND V.CODEMPRESA = " & EmpCodigo & condiciones & _
            " ORDER BY FECHAORDEN, NUMERO "

        '''" ORDER BY NUMCOMPROBANTE, NUMCLIENTE, FECHAORDEN, NUMERO "

        Try

            ds.ReadXml(Direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader
            Do While dr.Read()

                row = ds.Tables("Detalle").NewRow()
                ''
                ''  row.Item("Campo1") = dr("NUMSUCURSAL")
                '' row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMCLIENTE")
                row.Item("Campo4") = dr("CLIENTE")
                row.Item("Campo7") = dr("CODVENTA")
                row.Item("Campo8") = dr("NUMCOMPROBANTE") + " - " + dr("DESCOMPROBANTE")
                row.Item("Campo9") = dr("NUMERO")
                row.Item("Campo10") = dr("FECHAVENTA")
                row.Item("Campo11") = dr("RUC")
                row.Item("Numero7") = 2
                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("EXENTA")
                    row.Item("Numero2") = dr("GRAVADA10") - dr("IVA10")
                    row.Item("Numero5") = dr("GRAVADA5") - dr("IVA5")
                    row.Item("Numero4") = dr("IVA10")
                    row.Item("Numero3") = dr("IVA5")
                    row.Item("Numero6") = dr("GRAVADA10") + dr("GRAVADA5") + dr("EXENTA")
                Else
                    row.Item("Numero1") = Math.Round(dr("EXENTA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round((dr("GRAVADA10") - dr("IVA10")) * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero5") = Math.Round((dr("GRAVADA5") - dr("IVA5")) * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero4") = Math.Round(dr("IVA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(dr("IVA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero6") = Math.Round((dr("GRAVADA10") + dr("GRAVADA5") + dr("EXENTA")) * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################


            row = ds.Tables("Cabecera").NewRow()


            row.Item("Campo1") = EmpDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeCliente
            row.Item("Campo9") = hastaCliente
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case compra
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try
        Return ds
    End Function

    Public Function infRangoDiferenciaInventario(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
      ByVal desdeFamilia As String, ByVal hastaFamilia As String, _
      ByVal desdeLinea As String, ByVal hastaLinea As String, _
      ByVal desdeProducto As String, ByVal HastaProducto As String, _
      ByVal fechaDesde As String, ByVal fechaHasta As String, ByVal desdeRubro As String, ByVal hastaRubro As String, _
      ByVal condiciones As String, _
      ByVal titulo As Byte, _
      ByVal orden As Byte, _
      ByVal cierre As Byte, ByVal inventario As Byte) As DataSet
        ds.Clear()

        sql = ""

        If cierre = 0 Then
            sql = " SELECT  REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+MAX(LTRIM(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
            " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+MAX(LTRIM(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
            " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
            " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
            " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+MAX(LTRIM(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
            " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
            " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
            " CONVERT(VARCHAR(10), MAX(I.FECHAINVENTARIO), 103) AS FECHACIERRE, " & _
            " CAST(MAX(I.FECHAINVENTARIO) AS DATETIME) AS ORDENFECHACIERRE, " & _
            " MAX(I.TIPOINVENTARIO) AS TIPOINVENTARIO, MAX(P.CODPRODUCTO) AS CODPRODUCTO, " & _
            " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO)) AS DESPRODUCTO, " & _
            " SUM(ID.CANTIDAD) AS CANTIDADENCONTRADA, " & _
            " ISNULL(MAX(PS.CANTIDAD),0) AS STOCKACTUAL, " & _
" /* ISNULL(DBO.FN_STOCK_SUCURSAL(MAX(I.CODSUCURSAL), ID.CODPRODUCTO, MAX(I.FECHAINVENTARIO)), 0) AS STOCKACTUAL, */ " & _
            " MAX(I.FECGRA) AS FECGRA " & _
            " FROM INVENTARIO I INNER JOIN SUCURSAL S ON I.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN INVENTARIODETALLE ID ON ID.CODINVENTARIO = I.CODINVENTARIO " & _
            " INNER JOIN PRODUCTOS P ON ID.CODPRODUCTO = P.CODPRODUCTO " & _
            " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
            " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
            " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
            " LEFT OUTER JOIN PRODUCTOSUCURSAL PS ON PS.CODSUCURSAL = I.CODSUCURSAL " & _
            " AND PS.CODPRODUCTO = ID.CODPRODUCTO " & _
            " WHERE I.ESTADO = 0 " & _
            " AND I.CODEMPRESA =  " & empCodigo & " " & condiciones.Replace("C.FECHACIERRE", "I.FECHAINVENTARIO") & " " & _
            " GROUP BY I.CODSUCURSAL, I.FECHAINVENTARIO, P.CODFAMILIA, ID.CODPRODUCTO "
        Else
            sql = " SELECT  REPLICATE('0',5-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS SUCURSALORDEN, " & _
            " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS FAMILIAORDEN, " & _
            " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS LINEAORDEN, " & _
            " REPLICATE('0',5-LEN((RTRIM(R.NUMRUBRO))))+LTRIM((RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
            " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRAORDEN, " & _
            " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
            " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS DESFAMILIA, " & _
            " CONVERT(VARCHAR(10),C.FECHACIERRE,103) AS FECHACIERRE, " & _
            " CAST(C.FECHACIERRE AS DATETIME) AS ORDENFECHACIERRE, " & _
            " C.TIPOINVENTARIO AS TIPOINVENTARIO, P.CODPRODUCTO AS CODPRODUCTO, " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " C.CANTIDADENCONTRADA AS CANTIDADENCONTRADA, " & _
            " ISNULL(C.STOCKACTUAL,0) AS STOCKACTUAL, C.FECGRA " & _
            " FROM INVENTARIODIFERENCIA C " & _
            " INNER JOIN PRODUCTOS P ON C.CODPRODUCTO = P.CODPRODUCTO " & _
            " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
            " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
            " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
            " WHERE C.CODEMPRESA =  " & empCodigo & " " & condiciones & " "

            If inventario = 1 Then
                sql = sql & " AND C.CANTIDADENCONTRADA <> 0 "
            ElseIf inventario = 2 Then
                sql = sql & " AND C.CANTIDADENCONTRADA = 0 "
            End If

        End If

        If orden = 0 Then
            sql = sql & " ORDER BY SUCURSALORDEN, ORDENFECHACIERRE, FAMILIAORDEN, CODIGOBARRAORDEN "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, ORDENFECHACIERRE, FAMILIAORDEN, DESPRODUCTO "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo10") = dr("DESSUCURSAL")
                    row.Item("Campo4") = dr("FECHACIERRE")
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo9") = dr("DESFAMILIA")
                    row.Item("Campo7") = dr("CODIGOBARRA")
                    row.Item("Campo8") = dr("DESPRODUCTO")
                    row.Item("Numero5") = dr("CANTIDADENCONTRADA")
                    row.Item("Numero6") = dr("STOCKACTUAL")

                    If dr("CANTIDADENCONTRADA") > dr("STOCKACTUAL") Then
                        row.Item("Numero7") = dr("CANTIDADENCONTRADA") - dr("STOCKACTUAL")
                        row.Item("Numero8") = 0

                    ElseIf dr("CANTIDADENCONTRADA") < dr("STOCKACTUAL") Then
                        row.Item("Numero7") = 0
                        row.Item("Numero8") = dr("STOCKACTUAL") - dr("CANTIDADENCONTRADA")

                    Else
                        row.Item("Numero7") = 0
                        row.Item("Numero8") = 0
                    End If

                    row.Item("Campo20") = dr("FECGRA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                If cierre = 0 Then
                    row.Item("Campo2") = " - Pre Cierre"
                Else
                    row.Item("Campo2") = " - Post Cierre"
                End If

                row.Item("Campo3") = desdeRubro
                row.Item("Campo4") = hastaRubro
                row.Item("Campo16") = desdeSucursal
                row.Item("Campo17") = hastaSucursal
                row.Item("Campo18") = desdeFamilia
                row.Item("Campo19") = hastaFamilia
                row.Item("Campo20") = desdeLinea
                row.Item("Campo21") = hastaLinea
                row.Item("Campo14") = fechaDesde
                row.Item("Campo15") = fechaHasta
                row.Item("Campo12") = desdeProducto
                row.Item("Campo13") = HastaProducto

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infRangoDevolucionesCompra(ByVal codMoneda As Long, ByVal moneda_informe As String, _
   ByVal cotizacion As String, ByVal candecimales As Integer, _
   ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
   ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
   ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
   ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
   ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
   ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
   ByVal numeroDesde As String, ByVal numeroHasta As String, _
   ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
   ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
   ByVal fechaDesde As String, ByVal fechaHasta As String, _
   ByVal condiciones As String, _
   ByVal titulo As Byte, ByVal usuario As String, _
   ByVal resumen As Byte, Optional ByVal orden As String = "", _
   Optional ByVal tipo As Byte = 0) As DataSet
        ds.Clear()

        sql = ""
        sql = " DECLARE @CODEMPRESA NUMERIC(18) " & _
        " SET @CODEMPRESA =  1 " & _
        " SELECT D.CODDEVOLUCION AS CODDEVOLUCION, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
        " RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " CONVERT(VARCHAR(10),D.FECHADEVOLUCION,103) AS FECHADEVOLUCION, " & _
        " MONTH(D.FECHADEVOLUCION) AS MES, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
        " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " D.NUMDEVOLUCION AS NUMDEVOLUCION, " & _
        " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, " & _
        " RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE) AS PROVEEDOR, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 0) THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA) ELSE 0 END), 0) AS EXENTA, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 0) THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA) ELSE 0 END), 0) * D.COTIZACION1 AS EXENTAINFORME, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5)  THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA) ELSE 0 END), 0) AS GRAVADA5, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5)  THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA) ELSE 0 END), 0) * D.COTIZACION1 AS GRAVADA5INFORME, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA) ELSE 0 END), 0) AS GRAVADA10, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA) ELSE 0 END), 0) * D.COTIZACION1 AS GRAVADA10INFORME, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5)  THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA5, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 5)  THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) * D.COTIZACION1 AS IVA5INFORME, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) AS IVA10, " & _
        " ISNULL((CASE WHEN (I.PORCENTAJEIVA = 10) THEN " & _
        " (DD.COSTOBRUTO * DD.CANTIDADDEVUELTA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) ELSE 0 END), 0) * D.COTIZACION1 AS IVA10INFORME, " & _
        " D.CODMONEDA AS CODMONEDA, RTRIM(U.DESUSUARIO) AS DESUSUARIO, " & _
        " ISNULL(RTRIM(C.NUMCOMPRA),'') AS NUMCOMPRA, " & _
        " ISNULL(RTRIM(TC.NUMTIPOCOMPRO),'') + ' -' AS NUMCOMPROBANTECOMPRA, " & _
        " ISNULL(RTRIM(PR.RUC),'') AS RUC " & _
        " FROM DEVOLUCIONCOMPRA D " & _
        " INNER JOIN DEVOLUCIONCOMPRADETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        " INNER JOIN IVA I ON DD.IVA = I.PORCENTAJEIVA " & _
        " AND I.CODEMPRESA = D.CODEMPRESA " & _
        " INNER JOIN SUCURSAL S ON D.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON  D.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PR ON D.CODPROVEEDOR = PR.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON D.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN USUARIO U ON U.CODUSUARIO = D.CODUSUARIO " & _
        " AND U.CODEMPRESA = D.CODEMPRESA " & _
        " LEFT OUTER JOIN COMPRAS C ON D.CODCOMPRA = C.CODCOMPRA " & _
        " LEFT OUTER JOIN TIPOCOMPROBANTE TV ON C.CODCOMPROBANTE = TV.CODCOMPROBANTE " & _
        " AND U.CODEMPRESA = D.CODEMPRESA " & _
        " WHERE D.CODEMPRESA = @CODEMPRESA  " & condiciones & ""

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, CAST(D.FECHADEVOLUCION AS DATETIME), " & orden & " NUMDEVOLUCION, CODDEVOLUCION "
        Else
            sql = sql & " ORDER BY NUMSUCURSAL, MES, " & orden & " CAST(D.FECHADEVOLUCION AS DATETIME), NUMDEVOLUCION, CODDEVOLUCION "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("NUMSUCURSAL")
                    row.Item("Campo15") = dr("DESSUCURSAL")
                    row.Item("Campo6") = dr("NUMCOMPROBANTECOMPRA")
                    row.Item("Campo5") = dr("NUMCOMPRA")
                    row.Item("Campo4") = dr("RUC")
                    row.Item("Numero1") = dr("CODDEVOLUCION")

                    If tipo = 0 Then
                        row.Item("Campo2") = dr("FECHADEVOLUCION")
                    Else
                        row.Item("Campo2") = funcion.textomes(dr("MES")).ToUpper
                    End If

                    If orden = "DESCOMPROBANTE, " Then
                        row.Item("Campo3") = dr("NUMTIPOCOMPRO")
                        row.Item("Campo17") = dr("DESCOMPROBANTE")
                        row.Item("Campo20") = "Comprobante"
                    ElseIf orden = "PROVEEDOR, " Then
                        row.Item("Campo3") = dr("NUMPROVEEDOR")
                        row.Item("Campo17") = dr("PROVEEDOR")
                        row.Item("Campo20") = "Proveedor"
                    Else
                        row.Item("Campo3") = ""
                        row.Item("Campo17") = ""
                        row.Item("Campo20") = ""
                    End If

                    row.Item("Campo18") = dr("NUMDEVOLUCION")
                    row.Item("Campo8") = dr("NUMPROVEEDOR")
                    row.Item("Campo9") = dr("PROVEEDOR")

                    If codMoneda = dr("CODMONEDA") Then
                        row.Item("Numero3") = dr("EXENTA")
                        row.Item("Numero2") = dr("GRAVADA10") - dr("IVA10")
                        row.Item("Numero4") = dr("IVA10")
                        row.Item("Numero7") = dr("GRAVADA5") - dr("IVA5")
                        row.Item("Numero6") = dr("IVA5")
                        row.Item("Numero5") = dr("EXENTA") + dr("GRAVADA10") + dr("GRAVADA5")
                    Else
                        row.Item("Numero3") = Math.Round(dr("EXENTAINFORME") / cotizacion, candecimales)
                        row.Item("Numero2") = Math.Round((dr("GRAVADA10INFORME") - dr("IVA10INFORME")) / cotizacion, candecimales)
                        Dim HOLA As String = Math.Round((dr("GRAVADA10INFORME") - dr("IVA10INFORME")) / cotizacion, candecimales)

                        row.Item("Numero4") = Math.Round(dr("IVA10INFORME") / cotizacion, candecimales)
                        row.Item("Numero7") = Math.Round(dr("GRAVADA5INFORME") - dr("IVA5INFORME") / cotizacion, candecimales)
                        row.Item("Numero6") = Math.Round(dr("IVA5INFORME") / cotizacion, candecimales)
                        row.Item("Numero5") = Math.Round(dr("EXENTAINFORME") / cotizacion, candecimales) _
                                              + Math.Round(dr("GRAVADA10INFORME") / cotizacion, candecimales) _
                                              + Math.Round(dr("GRAVADA5INFORME") / cotizacion, candecimales)
                    End If

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion
                row.Item("Numero3") = resumen

                If usuario <> "" Then
                    row.Item("Campo4") = "por " & usuario
                End If

                If tipo = 0 Then
                    row.Item("campo30") = "Fecha"
                Else
                    row.Item("campo30") = "Mes"
                End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function InfReposicionStock(ByVal HastaFecha As String, _
  ByVal DesdeSucursal As String, ByVal HastaSucursal As String, _
  ByVal DesdeFamilia As String, ByVal HastaFamilia As String, _
  ByVal DesdeLinea As String, ByVal HastaLinea As String, _
  ByVal DesdeRubro As String, ByVal HastaRubro As String, _
  ByVal DesdeProducto As String, ByVal HastaProducto As String, _
  ByVal MonedaInforme As String, ByVal CotizacionMonedaInf As String, _
  ByVal codMoneda As Long, ByVal canDecimales As Integer, _
  ByVal DesSuc1 As String, ByVal DesSuc2 As String, ByVal DesFami1 As String, ByVal DesFami2 As String, _
  ByVal DesLin1 As String, ByVal DesLin2 As String, ByVal DesRub1 As String, ByVal DesRub2 As String, _
  ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
  ByVal desdemarca As String, ByVal hastamarca As String, ByVal DesProd1 As String, ByVal DesProd2 As String, _
  ByVal PRODUCTO1 As String, ByVal PRODUCTO2 As String, ByVal PRODUCTO3 As String, _
  ByVal DesdeProveedor As String, ByVal HastaProveedor As String, _
  ByVal condiciones As String, ByVal titulo As Byte, ByVal tipo As Byte, _
  ByVal familia As Byte, ByVal linea As Byte, ByVal rubro As Byte, _
  ByVal categoria As Byte, ByVal subcategoria As Byte, ByVal marca As Byte, ByVal orden As String) As DataSet

        ds.Clear()
        ' SE LE AGREGO PROVEEDOR DEL PRODUCTO 03/08/2011 10:00 BY CIULLO
        sql = ""
        sql = " DECLARE @HASTAFECHA AS DATETIME " & _
        " SET @HASTAFECHA = CAST('" & HastaFecha & "' AS DATETIME) " & _
        " SELECT REPLICATE('0',5-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS SUCURSALORDEN, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS FAMILIAORDEN, " & _
        " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS LINEAORDEN, " & _
        " RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS RUBROORDEN, " & _
        " RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS DESRUBRO, " & _
        " ISNULL(REPLICATE('0',5-LEN(RTRIM(CP.NUMCATEGORIA)))+LTRIM(RTRIM(CP.NUMCATEGORIA)),'') AS CATEGORIAORDEN, " & _
        " ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
        " ISNULL(REPLICATE('0',5-LEN(RTRIM(SC.NUMSUBCATEGORIA)))+LTRIM(RTRIM(SC.NUMSUBCATEGORIA)),'') AS SUBCATEGORIAORDEN, " & _
        " ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
        " ISNULL(REPLICATE('0',5-LEN(RTRIM(MC.NUMMARCA)))+LTRIM(RTRIM(MC.NUMMARCA)),'') AS MARCAORDEN, " & _
        " ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRAORDEN, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        " PS.CANTIDAD AS ACTUAL, P.STOCKMINIMO AS MINIMO, P.STOCKMAXIMO AS MAXIMO, " & _
        " CASE " & _
        " WHEN (P.STOCKMAXIMO - PS.CANTIDAD) > 0 THEN (P.STOCKMAXIMO - PS.CANTIDAD) " & _
        " ELSE 0 END AS FALTA, " & _
        " CASE " & _
        " WHEN (P.STOCKMAXIMO - PS.CANTIDAD) < 0 THEN (PS.CANTIDAD - P.STOCKMAXIMO) " & _
        " ELSE 0 END AS SOBRA, " & _
        " P.CODMONEDA, P.ULTIMOCOSTO, " & _
        " /*COTIZACION*/ " & _
        " ISNULL((SELECT CT.FACTORVENTA FROM COTIZACION CT INNER JOIN MONEDA MO ON CT.CODMONEDA = MO.CODMONEDA " & _
        " WHERE CT.FECHAMOVIMIENTO = (SELECT MAX(COTI.FECHAMOVIMIENTO) AS MAXIMO " & _
        " FROM COTIZACION COTI INNER JOIN  MONEDA MON ON COTI.CODMONEDA = MON.CODMONEDA " & _
        " WHERE MON.CODMONEDA = MO.CODMONEDA " & _
        " AND COTI.FECHAMOVIMIENTO <= @HASTAFECHA) " & _
        " AND MO.CODMONEDA = P.CODMONEDA " & _
        " AND CT.CODEMPRESA = " & empCodigo & "), 0) AS COTIZACION, " & _
        " /*COTIZACION*/ " & _
        " ISNULL((SELECT CONVERT(VARCHAR(10), MAX(C.FECHACOMPRA), 103) FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " WHERE C.CODSUCURSAL = S.CODSUCURSAL " & _
        " AND CD.CODPRODUCTO = P.CODPRODUCTO),'') AS COMPRA, " & _
        " ISNULL(P.STOCKPAQUETE,0) AS PAQUETE, " & _
        " PR.CODPROVEEDOR, PR.NUMPROVEEDOR, RTRIM(LTRIM(PR.NOMBRE)) + ' ' + RTRIM(LTRIM(PR.APELLIDO)) AS PROVEEDOR " & _
        " FROM PRODUCTOSUCURSAL PS INNER JOIN SUCURSAL S ON S.CODSUCURSAL = PS.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PS.CODPRODUCTO " & _
        " INNER JOIN PROVEEDOR PR	ON PR.CODPROVEEDOR = P.CODPROVEEDOR " & _
        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        " INNER JOIN LINEA L ON L.CODLINEA = P.CODLINEA " & _
        " INNER JOIN RUBRO R ON R.CODRUBRO = P.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
        " WHERE P.PRODUCTOACTIVO = 1 AND P.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
        " " & orden & " "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                If familia = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                Else
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                End If
                If linea = 1 Then
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                Else
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                End If
                If rubro = 1 Then
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                Else
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                End If
                If categoria = 1 Then
                    row.Item("Campo12") = dr("NUMCATEGORIA")
                    row.Item("Campo13") = dr("DESCATEGORIA")
                Else
                    row.Item("Campo12") = ""
                    row.Item("Campo13") = ""
                End If
                If subcategoria = 1 Then
                    row.Item("Campo14") = dr("NUMSUBCATEGORIA")
                    row.Item("Campo15") = dr("DESSUBCATEGORIA")
                Else
                    row.Item("Campo14") = ""
                    row.Item("Campo15") = ""
                End If
                If marca = 1 Then
                    row.Item("Campo16") = dr("NUMMARCA")
                    row.Item("Campo17") = dr("DESMARCA")
                Else
                    row.Item("Campo16") = ""
                    row.Item("Campo17") = ""
                End If

                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESPRODUCTO")
                row.Item("Campo11") = dr("COMPRA")

                row.Item("Numero1") = dr("ACTUAL")
                row.Item("Numero2") = dr("MINIMO")
                row.Item("Numero3") = dr("MAXIMO")
                row.Item("Numero4") = dr("FALTA")
                row.Item("Numero5") = dr("SOBRA")
                row.Item("Numero8") = dr("PAQUETE")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero6") = dr("ULTIMOCOSTO")
                    row.Item("Numero7") = Math.Round(dr("FALTA") * dr("ULTIMOCOSTO"), canDecimales)
                Else
                    row.Item("Numero6") = Math.Round(dr("ULTIMOCOSTO") * dr("COTIZACION") / CotizacionMonedaInf, canDecimales)
                    row.Item("Numero7") = Math.Round(dr("FALTA") * dr("ULTIMOCOSTO") * dr("COTIZACION") / CotizacionMonedaInf, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo
            row.Item("Numero2") = familia
            row.Item("Numero3") = linea
            row.Item("Numero4") = rubro
            row.Item("Numero5") = categoria
            row.Item("Numero6") = subcategoria
            row.Item("Numero7") = marca

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = DesSuc1
            row.Item("Campo3") = DesSuc2
            row.Item("Campo4") = DesFami1
            row.Item("Campo5") = DesFami2
            row.Item("Campo6") = DesLin1
            row.Item("Campo7") = DesLin2
            row.Item("Campo8") = DesRub1
            row.Item("Campo9") = DesRub2
            row.Item("Campo10") = HastaFecha
            row.Item("Campo11") = DesProd1
            row.Item("Campo12") = DesProd2
            row.Item("Campo17") = desdecategoria
            row.Item("Campo18") = hastacategoria
            row.Item("Campo19") = desdesubcategoria
            row.Item("Campo20") = hastasubcategoria
            row.Item("Campo21") = desdemarca
            row.Item("Campo22") = hastamarca
            row.Item("Campo13") = MonedaInforme
            row.Item("Campo14") = PRODUCTO1
            row.Item("Campo15") = PRODUCTO2
            row.Item("Campo16") = PRODUCTO3
            ' agregado proveedor
            row.Item("Campo23") = DesdeProveedor
            row.Item("Campo24") = HastaProveedor
            '***
            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfListaPrecioFify(ByVal sucursal_desde As String, ByVal sucursal_hasta As String, _
    ByVal codigo_desde As String, ByVal codigo_hasta As String, ByVal familia_desde As String, ByVal familia_hasta As String, _
    ByVal linea_desde As String, ByVal linea_hasta As String, ByVal rubro_desde As String, _
    ByVal rubro_hasta As String, ByVal desdeLista As String, ByVal hastaLista As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, _
    ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal familia As String, ByVal linea As String, ByVal rubro As String, ByVal titulo As Byte, ByVal tipo As Byte, _
    ByVal CANDECIMALESIMPORTE As Integer, Optional ByVal condiciones As String = "", Optional ByVal condicionprecio As String = "", Optional ByVal orden As String = "", _
    Optional ByVal canDecimales As Integer = 0) As DataSet

        ds.Clear()

        sql = ""
        sql = "SELECT CODLISTA FROM TIPOLISTA  " & _
        " WHERE CODEMPRESA = " & empCodigo & " " & condicionprecio & " "

        ser.Abrir(sqlc)
        cmd.Connection = sqlc
        cmd.CommandText = sql

        dr = cmd.ExecuteReader
        Dim i As Integer = 0
        Dim a, b As Integer
        a = 0 : b = 0
        Dim uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve As String
        uno = "0" : dos = "0"
        Do While dr.Read
            i = i + 1
            Select Case i
                Case 1
                    uno = dr("CODLISTA")
                Case 2
                    dos = dr("CODLISTA")
                    'Case 3
                    '    tres = dr("CODLISTA")
                    'Case 4
                    '    cuatro = dr("CODLISTA")
                    'Case 5
                    '    cinco = dr("CODLISTA")
                    'Case 6
                    '    seis = dr("CODLISTA")
                    'Case 7
                    '    siete = dr("CODLISTA")
                    'Case 8
                    '    ocho = dr("CODLISTA")
                    'Case 9
                    '    nueve = dr("CODLISTA")
            End Select
        Loop

        ser.Cerrar(sqlc)

        sql = ""
        sql = " SELECT REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO,  " & vbCrLf & _
        " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA,  " & vbCrLf & _
        " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA,  " & vbCrLf & _
        " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO,  " & vbCrLf & _
        " ISNULL(REPLICATE('0',5-LEN(RTRIM(CP.NUMCATEGORIA)))+LTRIM(RTRIM(CP.NUMCATEGORIA)),'') AS ORDENCATEGORIA,  " & vbCrLf & _
        " ISNULL(REPLICATE('0',5-LEN(RTRIM(SC.NUMSUBCATEGORIA)))+LTRIM(RTRIM(SC.NUMSUBCATEGORIA)),'') AS ORDENSUBCATEGORIA,  " & vbCrLf & _
        " ISNULL(REPLICATE('0',5-LEN(RTRIM(MC.NUMMARCA)))+LTRIM(RTRIM(MC.NUMMARCA)),'') AS ORDENMARCA,  " & vbCrLf & _
        " ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA,  " & vbCrLf & _
        " ISNULL(RTRIM(SC.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SC.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA,  " & vbCrLf & _
        " ISNULL(RTRIM(MC.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(MC.DESMARCA),'') AS DESMARCA,  " & vbCrLf & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & vbCrLf & _
        " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS FAMILIA,  " & vbCrLf & _
        " RTRIM(L.NUMLINEA) AS NUMLINEA, RTRIM(L.DESLINEA) AS LINEA,  " & vbCrLf & _
        " RTRIM(R.NUMRUBRO) AS NUMRUBRO, RTRIM(R.DESRUBRO) AS RUBRO,  " & vbCrLf & _
        " RTRIM(I.CODIVA) AS CODIGOIVA,  I.COHEFICIENTE AS COHEFICIENTE,  " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & uno & "),0) AS UNO,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & uno & "),'') AS L1, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & uno & "),0) AS M1, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & dos & "),0) AS DOS,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & dos & " ),'') AS L2, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & dos & "),0) AS M2 " & vbCrLf & _
        " /*ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & tres & "),0) AS TRES,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & tres & " ),'') AS L3, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & tres & "),0) AS M3, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & cuatro & "),0) AS CUATRO,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & cuatro & " ),'') AS L4, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & cuatro & "),0) AS M4, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & cinco & "),0) AS CINCO,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & cinco & " ),'') AS L5, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & cinco & "),0) AS M5, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & seis & "),0) AS SEIS,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & seis & " ),'') AS L6, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & seis & "),0) AS M6, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & siete & "),0) AS SIETE,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & siete & " ),'') AS L7, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & siete & "),0) AS M7, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & ocho & "),0) AS OCHO,  " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & ocho & " ),'') AS L8, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & ocho & "),0) AS M8, " & vbCrLf & _
        " ISNULL((SELECT PR.PRECIOVENTA * I.COHEFICIENTE " & vbCrLf & _
        " FROM PRECIO PR WHERE P.CODPRODUCTO = PR.CODPRODUCTO AND PR.CODLISTA = " & nueve & "),0) AS NUEVE, " & vbCrLf & _
        " ISNULL((SELECT RTRIM(DESLISTA) FROM TIPOLISTA WHERE CODLISTA= " & nueve & " ),'') AS L9, " & vbCrLf & _
        " ISNULL((SELECT MAX(M.CODMONEDA) FROM MONEDA M INNER JOIN PRECIO PR " & vbCrLf & _
        " ON PR.CODMONEDA = M.CODMONEDA WHERE PR.CODLISTA= " & nueve & "),0) AS M9*/ " & vbCrLf & _
        " FROM PRODUCTOS P  " & vbCrLf & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA  " & vbCrLf & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA  " & vbCrLf & _
        " INNER JOIN RUBRO R ON  P.CODRUBRO = R.CODRUBRO  " & vbCrLf & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA  " & vbCrLf & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA  " & vbCrLf & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & vbCrLf & _
        " INNER JOIN ESTADOPRODUCTO E ON P.CODESTADOPRODUCTO = E.CODESTADOPRODUCTO  " & vbCrLf & _
        " INNER JOIN IVA I ON P.CODIVA = I.CODIVA  " & vbCrLf & _
        " WHERE P.CODEMPRESA = " & empCodigo & "  AND P.PRODUCTOACTIVO = 1 " & condiciones & " " & vbCrLf & _
        " ORDER BY   " & orden & "  "


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()
                row.Item("Campo20") = dr("CODIGO")
                row.Item("Campo21") = dr("DESCRIPCION")
                ''''''''''''''''''''''''''''''''''''''''''
                If dr("L1") = "" Then
                    row.Item("Campo11") = ""
                Else
                    row.Item("Campo11") = dr("L1") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M1"), empCodigo)
                End If
                If dr("L2") = "" Then
                    row.Item("Campo12") = ""
                Else
                    row.Item("Campo12") = dr("L2") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M2"), empCodigo)
                End If
                'If dr("L3") = "" Then
                '    row.Item("Campo13") = ""
                'Else
                '    row.Item("Campo13") = dr("L3") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M3"), empCodigo)
                'End If
                'If dr("L4") = "" Then
                '    row.Item("Campo14") = ""
                'Else
                '    row.Item("Campo14") = dr("L4") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M4"), empCodigo)
                'End If
                'If dr("L5") = "" Then
                '    row.Item("Campo15") = ""
                'Else
                '    row.Item("Campo15") = dr("L5") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M5"), empCodigo)
                'End If
                'If dr("L6") = "" Then
                '    row.Item("Campo16") = ""
                'Else
                '    row.Item("Campo16") = dr("L6") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M6"), empCodigo)
                'End If
                'If dr("L7") = "" Then
                '    row.Item("Campo17") = ""
                'Else
                '    row.Item("Campo17") = dr("L7") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M7"), empCodigo)
                'End If
                'If dr("L8") = "" Then
                '    row.Item("Campo18") = ""
                'Else
                '    row.Item("Campo18") = dr("L8") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M8"), empCodigo)
                'End If
                'If dr("L9") = "" Then
                '    row.Item("Campo19") = ""
                'Else
                '    row.Item("Campo19") = dr("L9") & vbCrLf & funcion.Descripcion_Tabla("NUMMONEDA", "MONEDA", "CODMONEDA", dr("M9"), empCodigo)
                'End If
                ''''''''''''''''''''''''''''''''''''''''''
                row.Item("Numero1") = dr("UNO")
                If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M1"), empCodigo) <> "0" Then
                    a = CANDECIMALESIMPORTE
                End If
                row.Item("Numero2") = dr("DOS")
                If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M2"), empCodigo) <> "0" Then
                    b = CANDECIMALESIMPORTE
                End If
                'row.Item("Numero3") = dr("TRES")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M3"), empCodigo) <> "0" Then
                '    c = CANDECIMALESIMPORTE
                'End If
                'row.Item("Numero4") = dr("CUATRO")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M4"), empCodigo) <> "0" Then
                '    d = CANDECIMALESIMPORTE
                'End If
                'row.Item("Numero5") = dr("CINCO")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M5"), empCodigo) <> "0" Then
                '    e = CANDECIMALESIMPORTE
                'End If
                'row.Item("Numero6") = dr("SEIS")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M6"), empCodigo) <> "0" Then
                '    f = CANDECIMALESIMPORTE
                'End If
                'row.Item("Numero7") = dr("SIETE")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M7"), empCodigo) <> "0" Then
                '    g = CANDECIMALESIMPORTE
                'End If
                'row.Item("Numero8") = dr("OCHO")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M8"), empCodigo) <> "0" Then
                '    h = CANDECIMALESIMPORTE
                'End If
                'row.Item("Numero9") = dr("NUEVE")
                'If funcion.Descripcion_Tabla("DECIMALES", "MONEDA", "CODMONEDA", dr("M9"), empCodigo) <> "0" Then
                '    j = CANDECIMALESIMPORTE
                'End If
                ''''''''''''''''''''''''''''''''''''''''''
                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Numero2") = a
            row.Item("Numero3") = b
            'row.Item("Numero4") = c
            'row.Item("Numero5") = d
            'row.Item("Numero6") = e
            'row.Item("Numero7") = f
            'row.Item("Numero8") = g
            'row.Item("Numero9") = h
            'row.Item("Numero10") = j

            If condiciones <> "" Then
                row.Item("Campo5") = codigo_desde
                row.Item("Campo6") = codigo_hasta
                row.Item("Campo7") = familia_desde
                row.Item("Campo8") = familia_hasta
                row.Item("Campo9") = linea_desde
                row.Item("Campo10") = linea_hasta
                row.Item("Campo11") = rubro_desde
                row.Item("Campo12") = rubro_hasta
                row.Item("Campo13") = desdeLista
                row.Item("Campo14") = hastaLista
                row.Item("Campo17") = sucursal_desde
                row.Item("Campo18") = sucursal_hasta
                row.Item("Campo19") = desdecategoria
                row.Item("Campo20") = hastacategoria
                row.Item("Campo21") = desdesubcategoria
                row.Item("Campo22") = hastasubcategoria
                row.Item("Campo23") = desdemarca
                row.Item("Campo24") = hastamarca

            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfCuentaProductoPorSucursal(ByVal sucursal_desde As String, ByVal sucursal_hasta As String, _
      ByVal codigo_desde As String, ByVal codigo_hasta As String, ByVal familia_desde As String, ByVal familia_hasta As String, _
      ByVal linea_desde As String, ByVal linea_hasta As String, ByVal rubro_desde As String, _
      ByVal rubro_hasta As String, ByVal desdeLista As String, ByVal hastaLista As String, _
      ByVal desdecategoria As String, ByVal hastacategoria As String, ByVal desdesubcategoria As String, _
      ByVal hastasubcategoria As String, ByVal desdemarca As String, ByVal hastamarca As String, _
      ByVal familia As String, ByVal linea As String, ByVal rubro As String, ByVal titulo As Byte, ByVal tipo As Byte, _
      ByVal CANDECIMALESIMPORTE As Integer, ByVal cuenta As Integer, Optional ByVal condiciones As String = "", Optional ByVal condicionprecio As String = "", Optional ByVal orden As String = "", _
      Optional ByVal canDecimales As Integer = 0) As DataSet

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
        " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA, " & _
        " ISNULL(REPLICATE('0',10-LEN(RTRIM(S.NUMSUCURSAL)))+LTRIM(RTRIM(S.NUMSUCURSAL)),'') AS ORDENSUCURSAL, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " RTRIM(F.NUMFAMILIA) AS NUMFAMILIA, RTRIM(F.DESFAMILIA) AS FAMILIA, " & _
        " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        " ISNULL(CS.CUENTAMERCADERIA,0) AS CTAMERCADERIA, ISNULL(CONVERT(VARCHAR(18),P1.NUMPLANCUENTA),'') AS P1, ISNULL(P1.DESPLANCUENTA,'') AS D1, " & _
        " ISNULL(CS.CUENTACOSTO,0) AS CTACOSTO, ISNULL(CONVERT(VARCHAR(18),P2.NUMPLANCUENTA),'') AS P2, ISNULL(P2.DESPLANCUENTA,'') AS D2, " & _
        " ISNULL(CS.CUENTAVENTAPRIVADO,0) AS CTAPRIVADO, ISNULL(CONVERT(VARCHAR(18),P3.NUMPLANCUENTA),'') AS P3, ISNULL(P3.DESPLANCUENTA,'') AS D3, " & _
        " ISNULL(CS.CUENTAVENTAPUBLICO,0) AS CTAPUBLICO, ISNULL(CONVERT(VARCHAR(18),P4.NUMPLANCUENTA),'') AS P4, ISNULL(P4.DESPLANCUENTA,'') AS D4, " & _
        " ISNULL(CS.CUENTAVENTAEXENTA,0) AS CTAEXENTA, ISNULL(CONVERT(VARCHAR(18),P5.NUMPLANCUENTA),'') AS P5, ISNULL(P5.DESPLANCUENTA,'') AS D5 " & _
        " FROM PRODUCTOS P " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON  P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA " & _
        " LEFT OUTER JOIN CUENTASUCURSAL CS ON P.CODPRODUCTO = CS.CODPRODUCTO " & _
        " LEFT OUTER JOIN SUCURSAL S ON CS.CODSUCURSAL = S.CODSUCURSAL " & _
        " LEFT OUTER JOIN PLANCUENTAS P1 ON CS.CUENTAMERCADERIA = P1.CODPLANCUENTA " & _
        " LEFT OUTER JOIN PLANCUENTAS P2 ON CS.CUENTACOSTO = P2.CODPLANCUENTA " & _
        " LEFT OUTER JOIN PLANCUENTAS P3 ON CS.CUENTAVENTAPRIVADO = P3.CODPLANCUENTA " & _
        " LEFT OUTER JOIN PLANCUENTAS P4 ON CS.CUENTAVENTAPUBLICO = P4.CODPLANCUENTA " & _
        " LEFT OUTER JOIN PLANCUENTAS P5 ON CS.CUENTAVENTAEXENTA = P5.CODPLANCUENTA " & _
        " WHERE P.CODEMPRESA =" & empCodigo & " AND P.PRODUCTOACTIVO = 1 " & condiciones & " "

        If cuenta = 1 Then
            sql = sql & " AND " & _
            " ( P.CODPRODUCTO NOT IN (SELECT W.CODPRODUCTO FROM CUENTASUCURSAL W " & _
            " WHERE CS.CODPRODUCTO = W.CODPRODUCTO  " & _
            " AND W.CODSUCURSAL IN (9)) " & _
            " or P.CODPRODUCTO NOT IN (SELECT W.CODPRODUCTO FROM CUENTASUCURSAL W " & _
            " WHERE CS.CODPRODUCTO = W.CODPRODUCTO " & _
            " AND W.CODSUCURSAL IN (11)) " & _
            " or P.CODPRODUCTO NOT IN (SELECT W.CODPRODUCTO FROM CUENTASUCURSAL W " & _
            " WHERE CS.CODPRODUCTO = W.CODPRODUCTO  " & _
            " AND W.CODSUCURSAL IN (16)) " & _
            " or P.CODPRODUCTO NOT IN (SELECT W.CODPRODUCTO FROM CUENTASUCURSAL W " & _
            " WHERE CS.CODPRODUCTO = W.CODPRODUCTO " & _
            " AND W.CODSUCURSAL IN (17)) " & _
            " OR CS.CUENTAMERCADERIA IS NULL " & _
            " OR CS.CUENTACOSTO IS NULL OR CS.CUENTAVENTAPRIVADO IS NULL " & _
            " OR CS.CUENTAVENTAPUBLICO IS NULL OR CS.CUENTAVENTAEXENTA IS NULL  ) "

        End If
        sql = sql & " ORDER BY NUMFAMILIA, " & orden & ", ORDENSUCURSAL "

        FileOpen(1, "C:\LOCO.TXT", OpenMode.Output, OpenAccess.Write)
        WriteLine(1, sql)
        FileClose(1)

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()
                ''''''''''''''''''''''''''''''''''''''''''
                row.Item("Campo22") = dr("NUMFAMILIA")
                row.Item("Campo23") = dr("FAMILIA")
                row.Item("Campo24") = dr("CODIGO")
                row.Item("Campo25") = dr("DESCRIPCION")
                row.Item("Campo11") = dr("NUMSUCURSAL")
                ''' row.Item("Campo12") = dr("DESSUCURSAL")
                row.Item("Campo13") = dr("P1")
                row.Item("Campo14") = dr("D1")
                row.Item("Campo15") = dr("P2")
                row.Item("Campo16") = dr("D2")
                row.Item("Campo17") = dr("P3")
                row.Item("Campo18") = dr("D3")
                row.Item("Campo19") = dr("P4")
                row.Item("Campo20") = dr("D4")
                row.Item("Campo21") = dr("P5")
                row.Item("Campo26") = dr("D5")
                ''''''''''''''''''''''''''''''''''''''''''
                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            If condiciones <> "" Then
                row.Item("Campo5") = codigo_desde
                row.Item("Campo6") = codigo_hasta
                row.Item("Campo7") = familia_desde
                row.Item("Campo8") = familia_hasta
                row.Item("Campo9") = linea_desde
                row.Item("Campo10") = linea_hasta
                row.Item("Campo11") = rubro_desde
                row.Item("Campo12") = rubro_hasta
                row.Item("Campo13") = desdeLista
                row.Item("Campo14") = hastaLista
                row.Item("Campo17") = sucursal_desde
                row.Item("Campo18") = sucursal_hasta
                row.Item("Campo19") = desdecategoria
                row.Item("Campo20") = hastacategoria
                row.Item("Campo21") = desdesubcategoria
                row.Item("Campo22") = hastasubcategoria
                row.Item("Campo23") = desdemarca
                row.Item("Campo24") = hastamarca

            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfLiquidaciondeComisionpordetalle(ByVal codMoneda As Long, ByVal moneda_informe As String, _
 ByVal cotizacion As String, ByVal candecimales As Integer, _
 ByVal sucursal_Desde As String, ByVal sucursal_Descripcion_Desde As String, _
 ByVal sucursal_Hasta As String, ByVal sucursal_Descripcion_Hasta As String, _
 ByVal cliente_desde As String, ByVal cli_descripcion_desde As String, _
 ByVal cliente_hasta As String, ByVal cli_descripcion_hasta As String, _
 ByVal comprobanteDesde As String, ByVal comprobanteDescripcionDesde As String, _
 ByVal comprobanteHasta As String, ByVal comprobanteDescripcionHasta As String, _
 ByVal numeroDesde As String, ByVal numeroHasta As String, _
 ByVal monedaDesde As String, ByVal monedaDescripciondesde As String, _
 ByVal monedaHasta As String, ByVal monedaDescripcionHasta As String, _
 ByVal fechaDesde As String, ByVal fechaHasta As String, _
 ByVal condiciones As String, ByVal titulo As Byte, ByVal MONEDA As String, ByVal tipo As Integer) As DataSet

        ds.Clear()
        Dim dtComision As DataTable

        sql = ""
        sql = " /* PARAMETROS INDICADOS */ " & _
        " DECLARE @FECHA1 DATETIME DECLARE @FECHA2 DATETIME DECLARE @CODEMPRESA NUMERIC(9) " & _
        " /* VARIABLES UTILIZADAS */ " & _
        " DECLARE @NUMVENDEDOR VARCHAR(5)  DECLARE @DESVENDEDOR VARCHAR(40) " & _
        " DECLARE @NUMCLIENTE VARCHAR(30) DECLARE @CLIENTE VARCHAR(200) " & _
        " DECLARE @NUMCOMPROBANTE VARCHAR(5) DECLARE @DESCOMPROBANTE VARCHAR(40) DECLARE @NUMVENTA VARCHAR(30) " & _
        " DECLARE @FECHAVENTA VARCHAR(10)DECLARE @ORDENFECHA VARCHAR(10) DECLARE @PROMEDIOCOMISION NUMERIC(18,5) " & _
        " DECLARE @VENTABRUTA NUMERIC(18,5)DECLARE @TOTALIVA NUMERIC(18,5) DECLARE @DEVBRUTO NUMERIC(18,5) DECLARE @DEVIVA NUMERIC(18,5) " & _
        " DECLARE @CODMONEDA NUMERIC(18) DECLARE @NUMMONEDA VARCHAR(30) DECLARE @COTIZACION1 NUMERIC(18,5) DECLARE @CANTIDAD INTEGER " & _
        " DECLARE @OBSERVACION VARCHAR(300) DECLARE @SALDO NUMERIC(18,5) DECLARE @ORDEN INTEGER  DECLARE @CODVENTA NUMERIC(18) " & _
        " DECLARE @COMISION NUMERIC(18,5) " & _
        " DECLARE @TABLA TABLE(CODVENTA NUMERIC(18), NUMVENDEDOR VARCHAR(5), DESVENDEDOR VARCHAR(40), " & _
        " NUMCLIENTE VARCHAR(30), CLIENTE VARCHAR(200), " & _
        " NUMCOMPROBANTE VARCHAR(5), DESCOMPROBANTE VARCHAR(40), NUMVENTA VARCHAR(30), " & _
        " FECHAVENTA VARCHAR(10), PROMEDIOCOMISION NUMERIC(18,5), " & _
        " VENTABRUTA NUMERIC(18,5), TOTALIVA NUMERIC(18,5), DEVBRUTO NUMERIC(18,5), DEVIVA NUMERIC(18,5), " & _
        " CODMONEDA NUMERIC(18), NUMMONEDA VARCHAR(30), COTIZACION1 NUMERIC(18,5), CANTIDAD INTEGER, OBSERVACION VARCHAR(300), SALDO NUMERIC(18,5), ORDEN INTEGER, COMISION NUMERIC(18,5)) " & _
        " SET @CODEMPRESA = " & empCodigo & " " & _
        " SET @FECHA1 = CAST( '" & fechaDesde & "' AS DATETIME) " & _
        " SET @FECHA2 = CAST( '" & fechaHasta & "' AS DATETIME) " & _
        " DECLARE CURSOR_COMISION CURSOR " & _
        " FOR " & _
" /* FACTURAS CREDITO DEL MES COBRADAS EN SU TOTALIDAD*/ " & _
        " SELECT ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE )" & _
        " ),0) " & _
        " + " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0  " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE)),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(FA.IMPORTE) - (SUM(FA.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0 " & _
        " ),0)  AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        " ISNULL((SELECT SUM(CC.COTIZACION1MR) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN, " & _
        " DBO.FN_COMISION((ISNULL((SELECT SUM(CC.COTIZACION1MR) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) / " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0)), " & _
" 1,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        " AND CO.FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = FC.CODVENTA)=  " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <=  CAST( @FECHA2 AS DATETIME)))   " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS COBRADAS DEL MES */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 0 AS ORDEN, DBO.FN_COMISION(ISNULL(CI.COTIZACION1,0) ,2,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITO PENDIENTES DEL MES OK */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0  " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, " & _
        "  ((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) - " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME)))) " & _
" /* - " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0 ) = 0  " & _
        " ),0)*/ " & _
        " AS SALDO, " & _
        "  1 AS ORDEN , DBO.FN_COMISION(ISNULL(V.COTIZACION1,0), 1,V.CODVENTA)  AS COMISION " & _
        " FROM VENTAS V " & _
        " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " /* AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > */ " & _
        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = V.CODVENTA) > " & _
        " (SELECT isnull(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " /* AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND  CAST( @FECHA2 AS DATETIME))) */ " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <=  CAST( @FECHA2 AS DATETIME)))  " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES DEL MES ok */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
        " /*- ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 ),0) */ " & _
" /* - " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) */ " & _
        " AS SALDO, 1 AS ORDEN, DBO.FN_COMISION(ISNULL(V.COTIZACION1,0), 2,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
        " INNER JOIN CAJAINGRESOS I ON CF.CODINGRESO = I.CODINGRESO " & _
        " WHERE CF.CODVENTA = V.CODVENTA " & _
        " AND I.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
        " AND V.FECHAVENTA BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2  AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITOS ANTERIOR COBRADAS  OK */ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA,  RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
    " + " & _
        " ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0  " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(FA.IMPORTE) - (SUM(FA.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA , " & _
        " ISNULL((SELECT SUM(CC.COTIZACION1MR) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS COTIZACION1, " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN, " & _
        " DBO.FN_COMISION((ISNULL((SELECT SUM(CC.COTIZACION1MR) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0) / " & _
        " ISNULL((SELECT COUNT(CC.CODCOBRANZA) FROM COBRANZAS CC " & _
        " INNER JOIN FACTURAAFECTADA FF ON CC.CODCOBRANZA = FF.CODCOBRANZA " & _
        " WHERE FF.CODVENTA = V.CODVENTA),0)) , " & _
        " 1,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN FACTURAAFECTADA FA ON V.CODVENTA = FA.CODVENTA " & _
        " INNER JOIN COBRANZAS CO ON FA.CODCOBRANZA = CO.CODCOBRANZA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA = 0 " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND FA.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2 AS DATETIME)) " & _
        " AND (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO) <= " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF " & _
        " WHERE FA.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & "" & _
        " GROUP BY V.CODVENTA " & _
" UNION ALL /* FACTURAS CONTADOS ANTERIOR COBRADAS VER OTRO MES QUE HORROR */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0  " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(CI.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, 0 AS SALDO, 2 AS ORDEN, DBO.FN_COMISION(ISNULL(CI.COTIZACION1,0), 2,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " INNER JOIN CAJAFACTURASCOBRADAS CF ON V.CODVENTA = CF.CODVENTA " & _
        " INNER JOIN CAJAINGRESOS CI ON CF.CODINGRESO = CI.CODINGRESO " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND CI.FECINGRESO BETWEEN CAST( @FECHA1 AS DATETIME) AND CAST( @FECHA2   AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* FACTURAS CREDITO PENDIENTES ANTERIOR OK */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0)  " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " AND D.CODVENTA IN (SELECT F.CODVENTA FROM COBRANZAS Z " & _
        " INNER JOIN FACTURAAFECTADA F ON F.CODCOBRANZA = Z.CODCOBRANZA " & _
        " WHERE D.CODCOMPROBANTE = Z.CODCOMPROBANTE AND D.NUMDEVOLUCION = Z.NUMCOMPROBANTE) " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, " & _
        " ( (V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO)- " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME)))) " & _
        " /* - ISNULL((SELECT SUM(FA.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) */ " & _
        " AS SALDO, 3 AS ORDEN, DBO.FN_COMISION(ISNULL(V.COTIZACION1,0), 1,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " /* INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA */ " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 /*AND FC.SALDOCUOTA > 0*/ " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " /* AND ROUND((V.TOTALEXENTA + V.TOTALGRAVADA + TOTALIVA - V.TOTALDESCUENTO),0) > */ " & _
        " AND (SELECT SUM(FI.IMPORTECUOTA) FROM FACTURACOBRAR FI WHERE FI.CODVENTA = V.CODVENTA) > " & _
        " (SELECT ISNULL(SUM(DF.IMPORTE),0) FROM FACTURAAFECTADA DF WHERE V.CODVENTA = DF.CODVENTA  " & _
        " AND DF.CODCOBRANZA IN (SELECT CODCOBRANZA FROM COBRANZAS WHERE FECHAPROCESO <= CAST( @FECHA2 AS DATETIME))) " & _
        " AND V.CODEMPRESA = @CODEMPRESA  " & condiciones & " " & _
" UNION ALL /* FACTURAS CONTADOS PENDIENTES ANTERIOR VER OTRO MES HORROR */ " & _
        " SELECT  ISNULL(V.CODVENTA,0) AS CODVENTA, RTRIM(VD.NUMVENDEDOR) AS NUMVENDEDOR, ISNULL(RTRIM(VD.DESVENDEDOR),'') AS DESVENDEDOR, " & _
        " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) AS CLIENTE, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, V.NUMVENTA AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        " CAST( V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(V.PROMEDIOCOMISION,0) AS PROMEDIO, " & _
        " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS VENTABRUTA, " & _
        " V.TOTALIVA AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 " & _
        " ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.CODVENTA = FA.CODVENTA  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " V.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, ISNULL(V.COTIZACION1,0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " '' AS OBSERVACION, (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) " & _
        " /* - ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA AND D.FECHADEVOLUCION <= CAST( @FECHA2   AS DATETIME) AND D.ESTADO = 0 ),0) */ " & _
        "  AS SALDO, 3 AS ORDEN, DBO.FN_COMISION(ISNULL(V.COTIZACION1,0), 2,V.CODVENTA)  AS COMISION  " & _
        " FROM VENTAS V " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF " & _
        " INNER JOIN CAJAINGRESOS CI ON CI.CODINGRESO = CF.CODINGRESO " & _
        " WHERE CF.CODVENTA = V.CODVENTA AND CI.FECINGRESO <= @FECHA2) " & _
        " AND V.FECHAVENTA < CAST( @FECHA1 AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
" UNION ALL /* OBSERVACIONES EXISTENTES CREDITO */ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10),MAX(V.FECHAVENTA),103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN, 0 AS COMISION " & _
        " FROM VENTAS V " & _
        " INNER JOIN FACTURACOBRAR FC ON V.CODVENTA = FC.CODVENTA " & _
        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 1 AND V.ESTADO <> 1 AND FC.SALDOCUOTA > 0 " & _
        " AND LEN(DE.OBSERVACION) > 0 AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) " & _
        " AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA  " & _
" UNION ALL /* OBSERVACIONES EXISTENTES CONTADO*/ " & _
        " SELECT  ISNULL(MAX(V.CODVENTA),0) AS CODVENTA, RTRIM(MAX(VD.NUMVENDEDOR)) AS NUMVENDEDOR, ISNULL(RTRIM(MAX(VD.DESVENDEDOR)),'') AS DESVENDEDOR, " & _
        " RTRIM(MAX(CL.NUMCLIENTE)) AS NUMCLIENTE, RTRIM(MAX(CL.APELLIDO)) + ' ' + RTRIM(MAX(CL.NOMBRE)) AS CLIENTE, " & _
        " RTRIM(MAX(TC.NUMTIPOCOMPRO)) AS NUMCOMPROBANTE, MAX(V.NUMVENTA) AS NUMVENTA, " & _
        " CONVERT(VARCHAR(10), MAX(V.FECHAVENTA) ,103) AS FECHAVENTA, " & _
        " CAST( MAX(V.FECHAVENTA) AS DATETIME) AS ORDENFECHA, " & _
        " ISNULL(MAX(V.PROMEDIOCOMISION),0) AS PROMEDIO, " & _
        " (MAX(V.TOTALEXENTA) + MAX(V.TOTALGRAVADA) + MAX(V.TOTALIVA) - MAX(V.TOTALDESCUENTO)) AS VENTABRUTA, " & _
        " MAX(V.TOTALIVA) AS TOTALIVA, " & _
        " ISNULL((SELECT SUM(D.TOTALEXENTA + D.TOTALGRAVADA + D.TOTALIVA - D.TOTALDESCUENTO) " & _
        " FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0 ),0) " & _
" + " & _
        " ISNULL((SELECT SUM(NC.IMPORTE) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0 ) = 0  " & _
        " ),0) AS DEVBRUTO, " & _
        " ISNULL((SELECT SUM(D.TOTALIVA) FROM DEVOLUCION D WHERE D.CODVENTA = V.CODVENTA  AND D.ESTADO = 0  ),0) " & _
" +  " & _
        " ISNULL((SELECT ROUND(SUM(NC.IMPORTE) - (SUM(NC.IMPORTE) / 1.1),0) FROM COBRANZAS C " & _
        " INNER JOIN TIPOFORMACOBRO FC ON FC.CODFORCOBRO = C.CODFORCOBRO " & _
        " INNER JOIN NOTACREDITO NC ON C.CODCOBRANZA = NC.CODCOBRANZA " & _
        " INNER JOIN FACTURAAFECTADA FA ON FA.CODCOBRANZA = C.CODCOBRANZA AND C.CODFORCOBRO = FA.CODFORCOBRO " & _
        " WHERE FC.NUMFORCOBRO = 'NC' AND FA.CODVENTA = V.CODVENTA AND " & _
        " (SELECT COUNT(D.CODDEVOLUCION) FROM DEVOLUCION D " & _
        " WHERE D.CODCOMPROBANTE = C.CODCOMPROBANTE AND D.NUMDEVOLUCION = C.NUMCOMPROBANTE  AND D.ESTADO = 0 ) = 0 " & _
        " ),0) AS DEVIVA, " & _
        " MAX(V.CODMONEDA) AS CODMONEDA, RTRIM(MAX(M.NUMMONEDA)) AS NUMMONEDA, ISNULL(MAX(V.COTIZACION1),0) AS COTIZACION1, 1 AS CANTIDAD, " & _
        " ISNULL(RTRIM(MAX(DE.OBSERVACION)),'') AS OBSERVACION, 0 AS SALDO, 4 AS ORDEN, 0 AS COMISION " & _
        " FROM VENTAS V " & _
        " INNER JOIN DOCUMENTOSENTREGADOS DE ON V.CODVENTA = DE.CODVENTA " & _
        " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN VENDEDOR VD ON V.CODVENDEDOR = VD.CODVENDEDOR " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA " & _
        " WHERE V.MODALIDADPAGO = 0 AND V.ESTADO <> 1 " & _
        " AND LEN(DE.OBSERVACION) > 0 " & _
        " AND V.CODVENTA NOT IN (SELECT CF.CODVENTA FROM CAJAFACTURASCOBRADAS CF WHERE CF.CODVENTA = V.CODVENTA) " & _
        " AND V.FECHAVENTA <= CAST( @FECHA2 AS DATETIME) AND V.CODEMPRESA = @CODEMPRESA " & condiciones & " " & _
        " GROUP BY V.CODVENTA " & _
        " ORDER BY NUMVENDEDOR, ORDEN, CLIENTE, ORDENFECHA, NUMVENTA " & _
        " OPEN CURSOR_COMISION " & _
        " FETCH NEXT FROM CURSOR_COMISION INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA, @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION, @SALDO, @ORDEN, @COMISION " & _
        " WHILE @@FETCH_STATUS = 0 " & _
        " BEGIN " & _
        " INSERT INTO @TABLA(CODVENTA, NUMVENDEDOR, DESVENDEDOR, NUMCLIENTE, CLIENTE, NUMCOMPROBANTE, DESCOMPROBANTE, NUMVENTA, " & _
        " FECHAVENTA,  PROMEDIOCOMISION, VENTABRUTA, TOTALIVA, DEVBRUTO, DEVIVA,  CODMONEDA, NUMMONEDA, COTIZACION1, CANTIDAD, OBSERVACION,  SALDO, ORDEN, COMISION) " & _
        " VALUES(@CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @DESCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA,  @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO,  @ORDEN, @COMISION) " & _
        " FETCH NEXT FROM CURSOR_COMISION  INTO @CODVENTA, @NUMVENDEDOR, @DESVENDEDOR, @NUMCLIENTE, @CLIENTE, @NUMCOMPROBANTE, @NUMVENTA, " & _
        " @FECHAVENTA, @ORDENFECHA, @PROMEDIOCOMISION, @VENTABRUTA, @TOTALIVA, @DEVBRUTO, @DEVIVA,  @CODMONEDA, @NUMMONEDA, @COTIZACION1, @CANTIDAD, @OBSERVACION,  @SALDO, @ORDEN, @COMISION " & _
        " END " & _
        " CLOSE CURSOR_COMISION " & _
        " DEALLOCATE CURSOR_COMISION " & _
" SELECT * FROM @TABLA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandTimeout = 300000
            cmd.CommandText = sql

            dr = cmd.ExecuteReader



            Dim ventaneta As Decimal = 0 : Dim promedio As Decimal = 0
            Dim numvendedor As String = ""
            Dim i As Integer = 0

            Dim cobradasmes As Decimal = 0 : Dim pendientesmes As Decimal = 0
            Dim cobradascomision As Decimal = 0 : Dim pendientescomision As Decimal = 0
            Dim anteriorventa As Decimal = 0 : Dim anteriorcomision As Decimal = 0
            Dim vector As New ArrayList
            Try

                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    If i = 0 Then
                        i = 1
                        numvendedor = dr("NUMVENDEDOR")
                    End If
                    If dr("NUMVENDEDOR") <> numvendedor Then
                        numvendedor = dr("NUMVENDEDOR")
                        cobradasmes = 0 : pendientesmes = 0 : cobradascomision = 0
                        pendientescomision = 0 : anteriorventa = 0 : anteriorcomision = 0
                    End If
                    row.Item("Campo1") = dr("NUMVENDEDOR")
                    row.Item("Campo15") = dr("DESVENDEDOR")
                    row.Item("Campo16") = funcion.textomes(fechaHasta.Substring(3, 2)) & " / " & fechaHasta.Substring(6, 4)

                    ventaneta = 0

                    Dim fechacobranza As String = CType(funcion.Descripcion_Tabla("'') AS NADA, ISNULL(CONVERT(VARCHAR(10),MAX(CB.FECHACOBRO),103),''", "COBRANZAS CB INNER JOIN FACTURAAFECTADA FA ON CB.CODCOBRANZA = FA.CODCOBRANZA", _
                        "FA.CODVENTA = " & dr("CODVENTA") & " AND CB.CODEMPRESA = " & empCodigo & " --------", "JUANI", 1), String)
                    Dim fecha As String
                    If fechacobranza <> "" And CDec(dr("SALDO")) = 0 Then
                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechacobranza))
                    Else
                        fecha = DateDiff(DateInterval.Day, CDate(dr("FECHAVENTA")), CDate(fechaHasta)) '' original
                    End If
                    Dim tipoventa As Integer = funcion.Descripcion_Tabla("ISNULL(ESTADO,0)", "VENTAS", "CODVENTA", dr("CODVENTA"), empCodigo)
                    If tipoventa = 5 Then ''' SI LA VENTA ES SOLO POR CLIENTES SE TOMA LA COMISION DEL PROMEDIO DE COMISION QUE ESTA EN LA CABECERA DE LA VENTA
                        If dr("NUMMONEDA") = MONEDA Then
                            ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
                            promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
                        Else
                            ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
                            promedio = Math.Round(ventaneta * dr("PROMEDIOCOMISION") / 100)
                        End If
                    Else ''' SE CALCULA LA COMISION POR EL DETALLE DE LA VENTA Y LA NOTA DE CREDITO
                        If dr("NUMMONEDA") = MONEDA Then
                            ventaneta = Math.Round(dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA"), 0)
                            promedio = dr("COMISION")
                        Else
                            '' Dim COTI As String = dr("COTIZACION1")
                            '''Dim CANT As String = dr("CANTIDAD")
                            ventaneta = Math.Round((dr("VENTABRUTA") - dr("TOTALIVA") - dr("DEVBRUTO") + dr("DEVIVA")) * (dr("COTIZACION1") / dr("CANTIDAD")), 0)
                            ''''  promedio = Math.Round(dr("COTIZACION1") * dr("COMISION") / 100) EN EL SELECT YA ESTA MULTIPLIACO POR LA COTIZACION
                            promedio = dr("COMISION")
                        End If
                    End If
                    If CDec(fecha) >= 91 Then
                        promedio = 0
                    End If
                    If promedio = 0 Then
                        ventaneta = 0
                    End If
                    If ventaneta < 0 Then
                        ventaneta = 0
                        promedio = 0
                    End If

                    If dr("ORDEN") <> 4 Then
                        Select Case dr("ORDEN")
                            Case 0
                                cobradasmes += ventaneta
                                cobradascomision += promedio
                            Case 1
                                pendientesmes += ventaneta
                                pendientescomision += promedio
                            Case 2
                                anteriorventa += ventaneta
                                anteriorcomision += promedio
                        End Select
                    End If

                    row.Item("Campo2") = dr("ORDEN")
                    Select Case dr("ORDEN")
                        Case 0
                            row.Item("Campo3") = "DETALLE DE VENTAS COBRADAS"
                        Case 1
                            row.Item("Campo3") = "DETALLE DE VENTAS PENDIENTES"
                        Case 2
                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR COBRADAS"
                        Case 3
                            row.Item("Campo3") = "DETALLE DE VENTAS ANTERIOR PENDIENTES"
                        Case 4
                            row.Item("Campo3") = "OBSERVACION"
                    End Select

                    row.Item("Campo18") = dr("NUMCLIENTE")
                    row.Item("Campo8") = dr("NUMVENTA")
                    row.Item("Campo10") = dr("NUMCOMPROBANTE")
                    row.Item("Campo4") = dr("FECHAVENTA")
                    row.Item("Campo9") = dr("CLIENTE")
                    row.Item("Campo24") = dr("OBSERVACION")

                    If dr("ORDEN") <> 4 Then
                        If promedio > 0 And ventaneta > 0 Then
                            If Math.Round((promedio / ventaneta) * 100, 3) > 5 And Math.Round((promedio / ventaneta) * 100, 3) < 5.02 Then
                                row.Item("Numero1") = 5
                            Else
                                If dr("TOTALIVA") < dr("DEVIVA") Then
                                    row.Item("Numero1") = 0
                                Else
                                    row.Item("Numero1") = Math.Round((promedio / ventaneta) * 100, 3) '''dr("PROMEDIOCOMISION")
                                End If
                            End If
                        Else
                            row.Item("Numero1") = 0
                        End If
                        '''' row.Item("Numero1") = dr("PROMEDIOCOMISION")
                        '''  row.Item("Numero11") = dr("SALDO")
                        If dr("NUMMONEDA") = MONEDA Then
                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA"), 0)
                            row.Item("Numero7") = Math.Round(dr("TOTALIVA"), 0)
                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO"), 0)
                            row.Item("Numero4") = Math.Round(dr("DEVIVA"), 0)
                            row.Item("Numero11") = dr("SALDO")
                            row.Item("Numero6") = ventaneta
                            row.Item("Numero5") = promedio
                        Else
                            row.Item("Numero3") = Math.Round(dr("VENTABRUTA") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero7") = Math.Round(dr("TOTALIVA") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero2") = Math.Round(dr("DEVBRUTO") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero4") = Math.Round(dr("DEVIVA") * (dr("COTIZACION1") / dr("CANTIDAD")))
                            row.Item("Numero11") = Math.Round(dr("SALDO") * dr("COTIZACION1") / dr("CANTIDAD"))
                            row.Item("Numero6") = ventaneta
                            row.Item("Numero5") = promedio
                        End If

                    End If
                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Numero8") = cobradasmes
                row.Item("Numero9") = pendientesmes
                row.Item("Numero10") = cobradascomision
                row.Item("Numero11") = pendientescomision
                row.Item("Numero13") = anteriorventa
                row.Item("Numero14") = anteriorcomision
                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion
                row.Item("Campo16") = sucursal_Descripcion_Desde
                row.Item("Campo17") = sucursal_Descripcion_Hasta
                row.Item("Campo18") = cli_descripcion_desde
                row.Item("Campo19") = cli_descripcion_hasta
                row.Item("Campo22") = comprobanteDescripcionDesde
                row.Item("Campo23") = comprobanteDescripcionHasta
                row.Item("Campo24") = numeroDesde
                row.Item("Campo25") = numeroHasta
                row.Item("Campo31") = monedaDesde
                row.Item("Campo32") = monedaHasta
                row.Item("Campo14") = fechaDesde
                row.Item("campo15") = fechaHasta
                row.Item("Campo2") = moneda_informe
                row.Item("Numero2") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function infResumenVentasIVARECALCULADO(ByVal Direccion As String, _
    ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, _
    ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeCliente As String, ByVal hastaCliente As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal compra As Byte) As DataSet

        Dim dtVenta As DataTable
        ds.Clear()

        sql = ""
        sql = " SELECT V.CODVENTA AS CODVENTA, CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA,  " & _
            " CAST(V.FECHAVENTA AS DATETIME) AS FECHAORDEN,  " & _
            " (CASE V.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD,  " & _
            " RTRIM(V.NUMVENTA) AS NUMERO, " & _
            " M.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, ISNULL(RTRIM(TC.DESCOMPROBANTE),'') AS DESCOMPROBANTE, " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS TOTALFACTURA, " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
            " ISNULL(RTRIM(CL.RUC),'') AS RUC " & _
            " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " LEFT OUTER JOIN SUCURSAL SP ON SP.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " WHERE V.ESTADO = 0 " & _
            " AND V.CODEMPRESA = " & EmpCodigo & condiciones & _
            " ORDER BY FECHAORDEN, NUMERO "

        Try

            ds.ReadXml(Direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtVenta = New DataTable("VENTA")
            da = New SqlDataAdapter(cmd)
            da.Fill(dtVenta)
            Dim codventa As String = ""
            For ii As Integer = 0 To dtVenta.Rows.Count - 1
                codventa = dtVenta.Rows(ii)("CODVENTA")
                sql = ""
                sql = "SELECT SUM(EXENTA) AS EXENTA, SUM(GRAVADA5) AS GRAVADA5, SUM(GRAVADA10) AS GRAVADA10, SUM(IVA5) AS IVA5, SUM(IVA10) AS IVA10 FROM DBO.FNDETALLEVENTA(" & codventa & " ) GROUP BY CODVENTA "

                cmd.Connection = sqlc
                cmd.CommandText = sql

                dr = cmd.ExecuteReader
                row = ds.Tables("Detalle").NewRow()
                ''
                row.Item("Campo3") = dtVenta.Rows(ii)("NUMCLIENTE")
                row.Item("Campo4") = dtVenta.Rows(ii)("CLIENTE")
                row.Item("Campo7") = dtVenta.Rows(ii)("CODVENTA")
                row.Item("Campo8") = dtVenta.Rows(ii)("NUMCOMPROBANTE") + " - " + dtVenta.Rows(ii)("DESCOMPROBANTE")
                row.Item("Campo9") = dtVenta.Rows(ii)("NUMERO")
                row.Item("Campo10") = dtVenta.Rows(ii)("FECHAVENTA")
                row.Item("Campo11") = dtVenta.Rows(ii)("RUC")
                row.Item("Numero7") = 2
                Do While dr.Read
                    If codMoneda = dtVenta.Rows(ii)("CODMONEDA") Then
                        row.Item("Numero1") = dr("EXENTA")
                        row.Item("Numero2") = dr("GRAVADA10")
                        row.Item("Numero5") = dr("GRAVADA5")
                        row.Item("Numero4") = dr("IVA10")
                        row.Item("Numero3") = dr("IVA5")
                        row.Item("Numero6") = dr("GRAVADA10") + dr("GRAVADA5") + dr("IVA10") + dr("IVA5") + dr("EXENTA")
                    Else
                        row.Item("Numero1") = Math.Round(dr("EXENTA") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero2") = Math.Round((dr("GRAVADA10")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero5") = Math.Round((dr("GRAVADA5")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero4") = Math.Round(dr("IVA10") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero3") = Math.Round(dr("IVA5") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero6") = Math.Round((dr("GRAVADA10") + dr("GRAVADA5") + dr("IVA10") + dr("IVA5") + dr("EXENTA")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    End If
                Loop

                dr.Close()
                ds.Tables("Detalle").Rows.Add(row)
            Next

            '###################
            '#    CABECERA     #
            '###################

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = EmpDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeCliente
            row.Item("Campo9") = hastaCliente
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case compra
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try
        Return ds
    End Function
    Public Function infResumenVentasIVARECALCULADOCOPIA(ByVal Direccion As String, _
        ByVal EmpCodigo As Long, ByVal EmpDescripcion As String, _
        ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
        ByVal desdeCliente As String, ByVal hastaCliente As String, _
        ByVal desdeFecha As String, ByVal hastaFecha As String, _
        ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
        ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
        ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
        ByVal condiciones As String, _
        ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
        ByVal compra As Byte) As DataSet

        Dim dtVenta As DataTable
        ds.Clear()

        sql = ""
        sql = " SELECT V.CODVENTA AS CODVENTA, CONVERT(VARCHAR(10), V.FECHAVENTA, 103) AS FECHAVENTA,  " & _
            " CAST(V.FECHAVENTA AS DATETIME) AS FECHAORDEN,  " & _
            " (CASE V.MODALIDADPAGO WHEN 0 THEN 'CONTADO' ELSE 'CREDITO' END) AS MODALIDAD,  " & _
            " CASE V.ESTADO WHEN 5 THEN 'ND'+ RTRIM(V.NUMVENTA) " & _
            " ELSE RTRIM(V.NUMVENTA) END AS NUMERO, " & _
            " M.CODMONEDA AS CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, V.COTIZACION1 AS COTIZACION,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, ISNULL(RTRIM(TC.DESCOMPROBANTE),'') AS DESCOMPROBANTE, " & _
            " (V.TOTALEXENTA + V.TOTALGRAVADA + V.TOTALIVA - V.TOTALDESCUENTO) AS TOTALFACTURA, " & _
            " V.TOTALEXENTA AS EXENTA, " & _
            " V.TOTALGRAVADA AS GRAVADA," & _
            " V.TOTALIVA AS IVA, " & _
            " RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, LTRIM(RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE)) AS CLIENTE, " & _
            " ISNULL(RTRIM(CL.RUC),'') AS RUC, V.ESTADO AS ESTADO " & _
            " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE  " & _
            " INNER JOIN MONEDA M ON V.CODMONEDA = M.CODMONEDA  " & _
            " LEFT OUTER JOIN SUCURSAL SP ON SP.CODSUCURSAL = S.CODSUCURSALPERTENECE " & _
            " WHERE (V.ESTADO = 0 OR V.ESTADO= 5 )" & _
            " AND V.CODEMPRESA = " & EmpCodigo & condiciones & _
            " ORDER BY FECHAORDEN, NUMERO "

        Try

            ds.ReadXml(Direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dtVenta = New DataTable("VENTA")
            da = New SqlDataAdapter(cmd)
            da.Fill(dtVenta)
            Dim codventa As String = ""

            Dim gravada1, iva1, exenta As String

            For ii As Integer = 0 To dtVenta.Rows.Count - 1
                codventa = dtVenta.Rows(ii)("CODVENTA")
                sql = ""
                sql = "SELECT SUM(EXENTA) AS EXENTA, SUM(GRAVADA5) AS GRAVADA5, SUM(GRAVADA10) AS GRAVADA10, SUM(IVA5) AS IVA5, SUM(IVA10) AS IVA10 FROM DBO.FNDETALLEVENTA(" & codventa & " ) GROUP BY CODVENTA "

                cmd.Connection = sqlc
                cmd.CommandText = sql

                dr = cmd.ExecuteReader

                row = ds.Tables("Detalle").NewRow()
                ''
                row.Item("Campo3") = dtVenta.Rows(ii)("NUMCLIENTE")
                row.Item("Campo4") = dtVenta.Rows(ii)("CLIENTE")
                row.Item("Campo7") = dtVenta.Rows(ii)("CODVENTA")
                row.Item("Campo8") = dtVenta.Rows(ii)("NUMCOMPROBANTE") + " - " + dtVenta.Rows(ii)("DESCOMPROBANTE")
                row.Item("Campo9") = dtVenta.Rows(ii)("NUMERO")
                row.Item("Campo10") = dtVenta.Rows(ii)("FECHAVENTA")
                row.Item("Campo11") = dtVenta.Rows(ii)("RUC")
                row.Item("Numero7") = 2

                Do While dr.Read
                    If codMoneda = dtVenta.Rows(ii)("CODMONEDA") Then
                        row.Item("Numero1") = dr("EXENTA")
                        row.Item("Numero2") = dr("GRAVADA10")
                        row.Item("Numero5") = dr("GRAVADA5")
                        row.Item("Numero4") = dr("IVA10")
                        row.Item("Numero3") = dr("IVA5")
                        row.Item("Numero6") = dr("GRAVADA10") + dr("GRAVADA5") + dr("IVA10") + dr("IVA5") + dr("EXENTA")
                    Else
                        row.Item("Numero1") = Math.Round(dr("EXENTA") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero2") = Math.Round((dr("GRAVADA10")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero5") = Math.Round((dr("GRAVADA5")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero4") = Math.Round(dr("IVA10") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero3") = Math.Round(dr("IVA5") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        row.Item("Numero6") = Math.Round((dr("GRAVADA10") + dr("GRAVADA5") + dr("IVA10") + dr("IVA5") + dr("EXENTA")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    End If
                Loop


                If dtVenta.Rows(ii)("ESTADO") = 5 Then ' PARA LAS NOTAS DE DEBITOS 20/07/2012
                    exenta = dtVenta.Rows(ii)("EXENTA")
                    exenta = exenta.Trim.Replace(".", ",")
                    exenta = exenta.Trim.Replace(",", ".")

                    sql = ""
                    sql = " SELECT  " & _
                    " " & exenta & " AS EXENTA, " & _
                    " SUM(CASE I.NUMIVA WHEN '10' THEN (IMPORTE - IMPUESTO) ELSE 0 END) AS GRAVADA10, " & _
                    " SUM(CASE I.NUMIVA WHEN '5' THEN  (IMPORTE - IMPUESTO) ELSE 0 END) AS GRAVADA5, " & _
                    " SUM(CASE I.NUMIVA WHEN '10' THEN IMPUESTO ELSE 0 END) AS IVA10, " & _
                    " SUM(CASE I.NUMIVA WHEN '5' THEN IMPUESTO ELSE 0 END) AS IVA5 " & _
                    " FROM MagicIVA  M " & _
                    " INNER JOIN IVA I ON I.codiva = M.codiva " & _
                    " WHERE M.CODVENTA = " & codventa & " " & _
                    " GROUP BY M.CODVENTA "

                    ser.Abrir(sqlc1)
                    cmd1.Connection = sqlc1
                    cmd1.CommandText = sql

                    dr1 = cmd1.ExecuteReader

                    Do While dr1.Read
                        If codMoneda = dtVenta.Rows(ii)("CODMONEDA") Then
                            row.Item("Numero1") = dr1("EXENTA")
                            row.Item("Numero2") = dr1("GRAVADA10")
                            row.Item("Numero5") = dr1("GRAVADA5")
                            row.Item("Numero4") = dr1("IVA10")
                            row.Item("Numero3") = dr1("IVA5")
                            row.Item("Numero6") = dr1("GRAVADA10") + dr1("GRAVADA5") + dr1("IVA10") + dr1("IVA5") + dr1("EXENTA")
                        Else
                            row.Item("Numero1") = Math.Round(dr1("EXENTA") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                            row.Item("Numero2") = Math.Round((dr1("GRAVADA10")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                            row.Item("Numero5") = Math.Round((dr1("GRAVADA5")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                            row.Item("Numero4") = Math.Round(dr1("IVA10") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                            row.Item("Numero3") = Math.Round(dr1("IVA5") * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                            row.Item("Numero6") = Math.Round((dr1("GRAVADA10") + dr1("GRAVADA5") + dr1("IVA10") + dr1("IVA5") + dr1("EXENTA")) * dtVenta.Rows(ii)("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                        End If
                    Loop

                    dr1.Close()

                End If ' FIN DE INSTRUCCION 20/07/2012

                dr.Close()
                ds.Tables("Detalle").Rows.Add(row)
            Next

            '###################
            '#    CABECERA     #
            '###################

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = EmpDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeCliente
            row.Item("Campo9") = hastaCliente
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case compra
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try
        Return ds
    End Function


    Public Function InfRangoProductoSinMovimiento(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal desdefecha As String, ByVal hastafecha As String, _
    ByVal canDecimales As Integer, ByVal tipocosto As Byte, _
    ByVal titulo As Byte, ByVal condiciones As String, ByVal condicionessucursal As String, _
    ByVal orden As String, ByVal tipo As Byte, _
    ByVal cortefamilia As Byte, ByVal cortelinea As Byte, _
    ByVal corterubro As Byte, ByVal cortecategoria As Byte, _
    ByVal cortesubcategoria As Byte, ByVal cortemarca As Byte, _
    ByVal CODPOLLITO As Long, ByVal CODPOLLO As Long, _
    ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
    ByVal CANDECIMALESIMPORTE As Integer, ByVal otroorden As String) As DataSet

        ds.Clear()

        sql = ""
        sql = " SELECT P.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGO, LTRIM(RTRIM(P.DESPRODUCTO)) AS PRODUCTO, " & _
            " LTRIM(RTRIM(P.DESPRODUCTO)) AS DESCRIPCION, " & _
            " REPLICATE('0',25-LEN(RTRIM(P.CODIGOBARRA)))+LTRIM(RTRIM(P.CODIGOBARRA)) AS ORDENCODIGO, " & _
            " REPLICATE('0',5-LEN(RTRIM(F.NUMFAMILIA)))+LTRIM(RTRIM(F.NUMFAMILIA)) AS ORDENFAMILIA,  " & _
            " ISNULL(RTRIM(F.NUMFAMILIA),'') AS NUMFAMILIA, ISNULL(RTRIM(F.DESFAMILIA),'') AS DESFAMILIA, " & _
            " REPLICATE('0',5-LEN(RTRIM(L.NUMLINEA)))+LTRIM(RTRIM(L.NUMLINEA)) AS ORDENLINEA,  " & _
            " ISNULL(RTRIM(L.NUMLINEA),'') AS NUMLINEA, ISNULL(RTRIM(L.DESLINEA),'') AS DESLINEA, " & _
            " REPLICATE('0',5-LEN(RTRIM(R.NUMRUBRO)))+LTRIM(RTRIM(R.NUMRUBRO)) AS ORDENRUBRO,  " & _
            " ISNULL(RTRIM(R.NUMRUBRO),'') AS NUMRUBRO, ISNULL(RTRIM(R.DESRUBRO),'') AS DESRUBRO, " & _
            " ISNULL(REPLICATE('0',5-LEN(RTRIM(CP.NUMCATEGORIA)))+LTRIM(RTRIM(CP.NUMCATEGORIA)),'') AS CATEGORIAORDEN,  " & _
            " ISNULL(RTRIM(CP.NUMCATEGORIA),'') AS NUMCATEGORIA, ISNULL(RTRIM(CP.DESCATEGORIA),'') AS DESCATEGORIA, " & _
            " ISNULL(REPLICATE('0',5-LEN(RTRIM(SCP.NUMSUBCATEGORIA)))+LTRIM(RTRIM(SCP.NUMSUBCATEGORIA)),'') AS SUBCATEGORIAORDEN,  " & _
            " ISNULL(RTRIM(SCP.NUMSUBCATEGORIA),'') AS NUMSUBCATEGORIA, ISNULL(RTRIM(SCP.DESSUBCATEGORIA),'') AS DESSUBCATEGORIA, " & _
            " ISNULL(REPLICATE('0',5-LEN(RTRIM(M.NUMMARCA)))+LTRIM(RTRIM(M.NUMMARCA)),'') AS MARCAORDEN,  " & _
            " ISNULL(RTRIM(M.NUMMARCA),'') AS NUMMARCA, ISNULL(RTRIM(M.DESMARCA),'') AS DESMARCA, " & _
            " ISNULL(RTRIM(PR.NUMPROVEEDOR),'') AS NUMPROVEEDOR,  " & _
            " ISNULL(RTRIM(PR.APELLIDO),'') + ' ' + ISNULL(RTRIM(PR.NOMBRE),'') AS PROVEEDOR, " & _
            " /*ULTIMA VENTA*/  " & _
            " ISNULL((SELECT CONVERT(VARCHAR(10), MAX(V.FECHAVENTA), 103)  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
            " INNER JOIN SUCURSAL S ON S.CODSUCURSAL = V.CODSUCURSAL " & _
            " WHERE VD.CODPRODUCTO = P.CODPRODUCTO " & condicionessucursal & "  ), '') AS ULTIMAVENTA " & _
            " FROM PRODUCTOS P   " & _
            " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA  " & _
            " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA  " & _
            " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO  " & _
            " INNER JOIN PROVEEDOR PR ON P.CODPROVEEDOR = PR.CODPROVEEDOR  " & _
            " LEFT OUTER JOIN CATEGORIAPRODUCTO CP ON P.CODCATEGORIA = CP.CODCATEGORIA  " & _
            " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCP ON P.CODSUBCATEGORIA = SCP.CODSUBCATEGORIA  " & _
            " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA  " & _
            " WHERE P.PRODUCTOACTIVO = 1 AND P.ACTUALIZARSTOCK = 1  " & _
            " AND P.CODEMPRESA = " & empCodigo & " " & condiciones & " " & _
            " /*QUE NO SE HAYA VENDIDO EN UN RANGO DE FECHA*/  " & _
            " AND P.CODPRODUCTO NOT IN (SELECT DISTINCT CODPRODUCTO " & _
            " FROM VENTAS V  " & _
            " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
            " WHERE V.FECHAVENTA BETWEEN CAST('" & desdefecha & "' AS DATETIME) AND CAST('" & hastafecha & "' AS DATETIME)  " & _
            " " & condicionessucursal & " )" & _
            " ORDER BY "

        If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA, ORDENLINEA, ORDENRUBRO " '''& orden & " "
            Else
                sql = sql + " NUMFAMILIA, NUMLINEA, NUMRUBRO " '''& orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA, ORDENLINEA " '''& orden & " "
            Else
                sql = sql + " NUMFAMILIA, NUMLINEA " ''& orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA  " '''& orden & " "
            Else
                sql = sql + " NUMFAMILIA " '''& orden & " "
            End If
        ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENFAMILIA, ORDENRUBRO   " '''& orden & " "
            Else
                sql = sql + " NUMFAMILIA, NUMRUBRO " '''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENLINEA, ORDENRUBRO " '''& orden & " "
            Else
                sql = sql + " NUMLINEA, NUMRUBRO " '''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
            If tipo = 1 Then
                sql = sql + " ORDENLINEA " '''& orden & " "
            Else
                sql = sql + " NUMLINEA " '''& orden & " "
            End If
        ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
            If tipo = 1 Then
                sql = sql + " ORDENRUBRO " '''& orden & " "
            Else
                sql = sql + " NUMRUBRO " ''& orden & " "
            End If
        End If

        sql = sql + " " & otroorden & " " & orden & " "


        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandTimeout = 5000
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")
                row.Item("Campo11") = dr("ULTIMAVENTA")

                If cortefamilia = 1 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 1 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 1 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = dr("NUMFAMILIA")
                    row.Item("Campo4") = dr("DESFAMILIA")
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 1 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = dr("NUMLINEA")
                    row.Item("Campo6") = dr("DESLINEA")
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 1 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = dr("NUMRUBRO")
                    row.Item("Campo8") = dr("DESRUBRO")
                ElseIf cortefamilia = 0 And cortelinea = 0 And corterubro = 0 Then
                    row.Item("Campo3") = ""
                    row.Item("Campo4") = ""
                    row.Item("Campo5") = ""
                    row.Item("Campo6") = ""
                    row.Item("Campo7") = ""
                    row.Item("Campo8") = ""
                End If

                If cortecategoria = 1 Then
                    row.Item("Campo13") = dr("NUMCATEGORIA")
                    row.Item("Campo14") = dr("DESCATEGORIA")
                Else
                    row.Item("Campo13") = ""
                    row.Item("Campo14") = ""
                End If
                If cortesubcategoria = 1 Then
                    row.Item("Campo15") = dr("NUMSUBCATEGORIA")
                    row.Item("Campo16") = dr("DESSUBCATEGORIA")
                Else
                    row.Item("Campo15") = ""
                    row.Item("Campo16") = ""
                End If
                If cortemarca = 1 Then
                    row.Item("Campo17") = dr("NUMMARCA")
                    row.Item("Campo18") = dr("DESMARCA")
                Else
                    row.Item("Campo17") = ""
                    row.Item("Campo18") = ""
                End If
                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            'Numero2 = 0 No se hace el corte por familia
            'Numero2 = 1 Se hace el corte por familia
            row.Item("Numero2") = cortefamilia

            'Numero3 = 0 No se hace el corte por linea
            'Numero3 = 1 Se hace el corte por linea
            row.Item("Numero3") = cortelinea

            'Numero4 = 0 No se hace el corte por rubro
            'Numero4 = 1 Se hace el corte por rubro
            row.Item("Numero4") = corterubro

            row.Item("Numero15") = cortecategoria
            row.Item("Numero16") = cortesubcategoria
            row.Item("Numero17") = cortemarca

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro
            row.Item("Campo15") = "Categoria"
            row.Item("Campo16") = "Sub Categoria"
            row.Item("Campo17") = "Marca"

            row.Item("Campo5") = desdeproducto
            row.Item("Campo6") = hastaproducto
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo25") = desdefecha
            row.Item("Campo26") = hastafecha
            row.Item("Campo27") = desdesucursal
            row.Item("Campo28") = hastasucursal
            row.Item("Campo13") = desdeProveedor
            row.Item("Campo14") = hastaProveedor

            row.Item("Campo18") = desdecategoria
            row.Item("Campo19") = hastacategoria
            row.Item("Campo20") = desdesubcategoria
            row.Item("Campo21") = hastasubcategoria
            row.Item("Campo22") = desdemarca
            row.Item("Campo23") = hastamarca


            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRankingVentaCantidadCLiente(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
ByVal desdeCliente As String, ByVal hastaCliente As String, _
ByVal desdeVendedor As String, ByVal hastaVendedor As String, _
ByVal desdeZona As String, ByVal hastaZona As String, _
ByVal desdeFecha As String, ByVal hastaFecha As String, _
ByVal codMoneda As Long, ByVal moneda As String, _
ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
ByVal cantidad As Integer, ByVal orden As String, _
ByVal condiciones As String, ByVal condicionesVendedor As String) As DataSet
        ds.Clear()

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = " SELECT TOP " & cantidad & "  " & _
            " MAX(V.CODCLIENTE) AS CODCLIENTE , MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, MAX(RTRIM(CL.APELLIDO)) + ' ' + MAX(RTRIM(CL.NOMBRE)) AS CLIENTE,  " & _
            " SUM(VD.CANTIDADVENTA) AS CANTIDAD,  " & _
            " SUM(VD.PRECIOVENTANETO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTENETO,  " & _
            " SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTEBRUTO  " & _
            " FROM VENTAS V  " & _
            " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
            " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR  " & _
            " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
            " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
            " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
            " WHERE V.CODEMPRESA = " & empCodigo & condiciones & condicionesVendedor & _
            " AND V.ESTADO = 0 "

        sql = sql & " GROUP BY V.CODCLIENTE ORDER BY CANTIDAD " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("CLIENTE")
                    row.Item("Campo2") = dr("NUMCLIENTE")

                    row.Item("Numero1") = dr("CANTIDAD")

                    total = total + CDec(dr("CANTIDAD"))

                    row.Item("Numero2") = dr("IMPORTENETO") / cotizacion
                    row.Item("Numero3") = dr("IMPORTEBRUTO") / cotizacion

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion

                row.Item("Campo5") = desdeSucursal
                row.Item("Campo6") = hastaSucursal
                row.Item("Campo7") = desdeCliente
                row.Item("Campo8") = hastaCliente
                row.Item("Campo9") = desdeVendedor
                row.Item("Campo10") = hastaVendedor
                row.Item("Campo11") = desdeZona
                row.Item("Campo11") = hastaZona
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                If orden = "ASC" Then
                    row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con menores compras"
                Else
                    row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con mayores compras"
                End If

                row.Item("Numero1") = total / cotizacion

                'If tipoPrecio = 1 Then
                '    row.Item("Campo21") = "(Normal)"
                'ElseIf tipoPrecio = 2 Then
                '    row.Item("Campo21") = "(Presupuesto)"
                'End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function



    Public Function InfRankingVentaCantidadVendedorCliente(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
  ByVal desdeCliente As String, ByVal hastaCliente As String, _
  ByVal desdeVendedor As String, ByVal hastaVendedor As String, _
  ByVal desdeZona As String, ByVal hastaZona As String, _
  ByVal desdeFecha As String, ByVal hastaFecha As String, _
  ByVal codMoneda As Long, ByVal moneda As String, _
  ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
  ByVal cantidad As Integer, ByVal orden As String, _
  ByVal condiciones As String, ByVal condicionesVendedor As String) As DataSet

        Dim dtVendedor As New DataTable("VENDEDOR")
        Dim i As Integer

        ds.Clear()
        ds.ReadXml(direccion)

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        Try
            sql = ""
            sql = " SELECT CODVENDEDOR, RTRIM(DESVENDEDOR) AS VENDEDOR " & _
            " FROM VENDEDOR VE " & _
            " WHERE VE.CODEMPRESA = " & empCodigo & " " & condicionesVendedor

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            da = New SqlDataAdapter(cmd)
            da.Fill(dtVendedor)

            For i = 0 To dtVendedor.Rows.Count - 1
                sql = ""
                sql = " SELECT TOP " & cantidad & "  " & _
                     " MAX(V.CODCLIENTE) AS CODCLIENTE , MAX(RTRIM(CL.NUMCLIENTE)) AS NUMCLIENTE, MAX(RTRIM(CL.APELLIDO)) + ' ' + MAX(RTRIM(CL.NOMBRE)) AS CLIENTE,  " & _
                     " SUM(VD.CANTIDADVENTA) AS CANTIDAD,  " & _
                     " SUM(VD.PRECIOVENTANETO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTENETO,  " & _
                     " SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTEBRUTO  " & _
                     " FROM VENTAS V  " & _
                     " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
                     " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR  " & _
                     " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
                     " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
                     " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
                     " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
                     " AND V.ESTADO = 0  AND V.CODVENDEDOR = " & dtVendedor.Rows(i)("CODVENDEDOR") & _
                     " GROUP BY V.CODCLIENTE ORDER BY CANTIDAD " & orden

                cmd.CommandText = sql
                dr = cmd.ExecuteReader

                Try
                    Do While dr.Read()
                        row = ds.Tables("Detalle").NewRow()

                        row.Item("Campo1") = dr("CLIENTE")
                        row.Item("Campo3") = dtVendedor.Rows(i)("VENDEDOR")
                        row.Item("Campo2") = dr("NUMCLIENTE")

                        row.Item("Numero1") = dr("CANTIDAD")

                        row.Item("Numero2") = dr("IMPORTENETO") / cotizacion
                        row.Item("Numero3") = dr("IMPORTEBRUTO") / cotizacion

                        ds.Tables("Detalle").Rows.Add(row)
                    Loop
                Catch e As SqlException
                    MsgBox(e.ToString)
                Finally
                    dr.Close()
                End Try
            Next

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo5") = desdeSucursal
            row.Item("Campo6") = hastaSucursal
            row.Item("Campo7") = desdeCliente
            row.Item("Campo8") = hastaCliente
            row.Item("Campo9") = desdeVendedor
            row.Item("Campo10") = hastaVendedor
            row.Item("Campo11") = desdeZona
            row.Item("Campo12") = hastaZona
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            row.Item("campo17") = moneda

            If orden = "ASC" Then
                row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con menores compras"
            Else
                row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con mayores compras"
            End If

            'If tipoPrecio = 1 Then
            '    ' row.Item("Campo21") = "(Normal)"
            'ElseIf tipoPrecio = 2 Then
            '    ' row.Item("Campo21") = "(Presupuesto)"
            'End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infRankingVentaImporteCliente(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
     ByVal desdeCliente As String, ByVal hastaCliente As String, _
     ByVal desdeVendedor As String, ByVal hastaVendedor As String, _
     ByVal desdeZona As String, ByVal hastaZona As String, _
     ByVal desdeFecha As String, ByVal hastaFecha As String, _
     ByVal codMoneda As Long, ByVal moneda As String, _
     ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
     ByVal cantidad As Integer, ByVal orden As String, _
     ByVal condiciones As String, ByVal condicionesVendedor As String) As DataSet

        ds.Clear()

        'Para calcular el porcentaje
        'de venta sobre el total de venta
        'dependiendo de los parametros seleccionados
        Dim total As Decimal

        sql = ""
        sql = "SELECT TOP " & cantidad & " MAX(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
        " MAX(RTRIM(CL.APELLIDO)) + ' ' + MAX(RTRIM(CL.NOMBRE)) AS CLIENTE,  " & _
        " SUM(VD.CANTIDADVENTA) AS CANTIDAD,  " & _
        " SUM(VD.PRECIOVENTANETO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTENETO,  " & _
        " SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTEBRUTO  " & _
        " FROM VENTAS V  " & _
        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        " INNER JOIN VENDEDOR VE ON VE.CODVENDEDOR = V.CODVENDEDOR  " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
        " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
        " WHERE V.CODEMPRESA = " & empCodigo & condiciones & condicionesVendedor & _
        " AND V.ESTADO = 0 " & _
        " GROUP BY V.CODCLIENTE " & _
        " ORDER BY IMPORTEBRUTO " & orden

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("CLIENTE")
                    row.Item("Campo2") = dr("NUMCLIENTE")

                    row.Item("Numero1") = dr("CANTIDAD")

                    row.Item("Numero2") = dr("IMPORTENETO")
                    row.Item("Numero3") = dr("IMPORTEBRUTO")

                    total = total + (dr("IMPORTEBRUTO") / cotizacion)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo5") = desdeSucursal
                row.Item("Campo6") = hastaSucursal
                row.Item("Campo7") = desdeCliente
                row.Item("Campo8") = hastaCliente
                row.Item("Campo9") = desdeVendedor
                row.Item("Campo10") = hastaVendedor
                row.Item("Campo11") = desdeZona
                row.Item("Campo12") = hastaZona
                row.Item("Campo15") = desdeFecha
                row.Item("Campo16") = hastaFecha
                row.Item("campo17") = moneda

                If orden = "ASC" Then
                    row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con menores compras"
                Else
                    row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con mayores compras"
                End If

                row.Item("Numero1") = total

                'If tipoPrecio = 1 Then
                '    row.Item("Campo21") = "(Normal)"
                'ElseIf tipoPrecio = 2 Then
                '    row.Item("Campo21") = "(Presupuesto)"
                'End If

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function


    Public Function infRankingVentaImporteClienteVendedor(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
     ByVal desdeCliente As String, ByVal hastaCliente As String, _
     ByVal desdeVendedor As String, ByVal hastaVendedor As String, _
     ByVal desdeZona As String, ByVal hastaZona As String, _
     ByVal desdeFecha As String, ByVal hastaFecha As String, _
     ByVal codMoneda As Long, ByVal moneda As String, _
     ByVal canDecimales As Integer, ByVal cotizacion As Decimal, _
     ByVal cantidad As Integer, ByVal orden As String, _
     ByVal condiciones As String, ByVal condicionesVendedor As String) As DataSet

        Dim dtVendedor As New DataTable("VENDEDOR")
        Dim i As Integer

        ds.Clear()
        ds.ReadXml(direccion)

        Try
            sql = ""
            sql = " SELECT CODVENDEDOR, RTRIM(DESVENDEDOR) AS VENDEDOR " & _
            " FROM VENDEDOR VE " & _
            " WHERE VE.CODEMPRESA = " & empCodigo & " " & condicionesVendedor

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            da = New SqlDataAdapter(cmd)
            da.Fill(dtVendedor)

            For i = 0 To dtVendedor.Rows.Count - 1
                sql = ""
                sql = " SELECT TOP " & cantidad & " MAX(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
                " MAX(RTRIM(CL.APELLIDO)) + ' ' + MAX(RTRIM(CL.NOMBRE)) AS CLIENTE,  " & _
                " SUM(VD.CANTIDADVENTA) AS CANTIDAD, " & _
                " SUM(VD.PRECIOVENTANETO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTENETO, " & _
                " SUM(VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * V.COTIZACION1) AS IMPORTEBRUTO " & _
                " FROM VENTAS V " & _
                " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                " INNER JOIN CLIENTES CL ON CL.CODCLIENTE = V.CODCLIENTE " & _
                " LEFT OUTER JOIN ZONA Z ON CL.CODZONA = Z.CODZONA " & _
                " WHERE V.CODEMPRESA = " & empCodigo & condiciones & _
                " AND V.ESTADO = 0 AND V.CODVENDEDOR = " & dtVendedor.Rows(i)("CODVENDEDOR") & _
                " GROUP BY V.CODCLIENTE " & _
                " ORDER BY IMPORTEBRUTO " & orden


                ser.Abrir(sqlc)
                cmd.Connection = sqlc
                cmd.CommandText = sql

                dr = cmd.ExecuteReader

                Try
                    Do While dr.Read()
                        row = ds.Tables("Detalle").NewRow()

                        row.Item("Campo1") = dr("CLIENTE")
                        row.Item("Campo2") = dr("NUMCLIENTE")
                        row.Item("Campo3") = dtVendedor.Rows(i)("VENDEDOR")

                        row.Item("Numero1") = dr("CANTIDAD")

                        row.Item("Numero2") = dr("IMPORTENETO")
                        row.Item("Numero3") = dr("IMPORTEBRUTO")

                        ds.Tables("Detalle").Rows.Add(row)
                    Loop
                Catch e As SqlException
                    MsgBox(e.ToString)
                Finally
                    dr.Close()
                End Try
            Next

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo5") = desdeSucursal
            row.Item("Campo6") = hastaSucursal
            row.Item("Campo7") = desdeCliente
            row.Item("Campo8") = hastaCliente
            row.Item("Campo9") = desdeVendedor
            row.Item("Campo10") = hastaVendedor
            row.Item("Campo11") = desdeZona
            row.Item("Campo12") = hastaZona
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha
            row.Item("campo17") = moneda

            If orden = "ASC" Then
                row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con menores compras"
            Else
                row.Item("campo18") = "Los " & cantidad.ToString & " Clientes con mayores compras"
            End If

            ''If tipoPrecio = 1 Then
            ''    row.Item("Campo21") = "(Normal)"
            ''ElseIf tipoPrecio = 2 Then
            ''    row.Item("Campo21") = "(Presupuesto)"
            ''End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infControlCostosComprasImportacion(ByVal moneda_informe As Long, ByVal moneda_descripcion As String, _
    ByVal cotizacion As Decimal, ByVal candecimales As Integer, _
    ByVal sucursal_desde As String, ByVal suc_descripcion_desde As String, _
    ByVal sucursal_hasta As String, ByVal suc_descripcion_hasta As String, _
    ByVal codigo_desde As String, ByVal cod_descripcion_desde As String, _
    ByVal codigo_hasta As String, ByVal cod_descripcion_hasta As String, _
    ByVal comprobante_desde As String, ByVal comprobante_descripcion_desde As String, _
    ByVal comprobante_hasta As String, ByVal comprobante_descripcion_hasta As String, _
    ByVal moneda_desde As String, ByVal moneda_descripcion_desde As String, _
    ByVal moneda_hasta As String, ByVal moneda_descripcion_hasta As String, _
    ByVal fecha_desde As String, ByVal fecha_hasta As String, _
    ByVal condiciones As String, ByVal titulo As Byte, _
    ByVal tipoCosto As Byte, ByVal agrupar As Byte, ByVal orden As Byte) As DataSet
        ds.Clear()

        sql = ""

        sql = " SELECT RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
        " CONVERT(VARCHAR(10),C.FECHACOMPRA,103) AS FECHACOMPRA, " & _
        " CAST(C.FECHACOMPRA AS DATETIME) AS ORDENFECHACOMPRA, " & _
        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
        " RTRIM (C.NUMCOMPRA) AS NROCOMPROBANTE, " & _
        " RTRIM(RTRIM(PRO.APELLIDO)+', '+RTRIM(PRO.NOMBRE)) AS PROVEEDOR, " & _
        " C.TOTALEXENTA, C.TOTALGRAVADA, C.TOTALIVA, " & _
        " RTRIM(M.DESMONEDA) AS MONEDA, " & _
        " C.CODCOMPRA AS CODCOMPRA, " & _
        " C.COTIZACION1 AS COTIZACION, " & _
        " C.COTIZACION2 AS COTIZACION2, " & _
        " REPLICATE('0',5-LEN(S.NUMSUCURSAL))+LTRIM(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSALORDEN, " & _
        " REPLICATE('0',5-LEN(T.NUMTIPOCOMPRO))+LTRIM(RTRIM(T.NUMTIPOCOMPRO)) AS NUMTIPOCOMPROORDEN, " & _
        " REPLICATE('0',10-LEN(C.NUMCOMPRA))+LTRIM(RTRIM(C.NUMCOMPRA)) AS NROCOMPROBANTEORDEN, " & _
        " RTRIM(P.CODIGOBARRA) AS CODIGO, " & _
        " RTRIM(P.DESPRODUCTO) AS DESCRIPCION, " & _
        " CD.CANTIDADCOMPRA AS CANTIDAD, " & _
        " CD.COSTOUNITARIO AS COSTOUNITARIO, " & _
        " CD.COSTOBRUTO AS COSTOBRUTO, " & _
        " CASE WHEN CD.FACTORPROMEDIO > 0 THEN (CD.COSTOUNITARIO + CD.FACTORPROMEDIO) " & _
        " ELSE 0 END AS COSTOFINAL, " & _
        " CD.CANTIDADCOMPRA * CD.COSTOUNITARIO AS TOTAL, " & _
        " C.TOTALDESCUENTO AS TOTALDESCUENTO, " & _
        " P.CODMONEDA AS CODMONEDAPRODUCTO, " & _
        " P.CODPRODUCTO AS CODPRODUCTO, " & _
        " P.CODLINEA AS CODLINEA, " & _
        " ISNULL(CD.COSTOPROMEDIO,0) AS COSTOPPRECALCULADO, " & _
        " ISNULL((SELECT FACTORVENTA FROM COTIZACION WHERE FECHAMOVIMIENTO = " & _
        " (SELECT  MAX(FECHAMOVIMIENTO) AS MAXIMO FROM COTIZACION WHERE CODEMPRESA =  " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA " & _
        " AND FECHAMOVIMIENTO <= C.FECHACOMPRA)AND CODEMPRESA =  " & empCodigo & " " & _
        " AND CODMONEDA = P.CODMONEDA), 0) AS ULTIMACOTIZACION, " & _
        " C.TOTALCOMPRA AS TOTALCOMPRA, " & _
        " CONVERT(VARCHAR(10),C.FECGRA,103) AS FECHAINGRESO, M.CODMONEDA AS CODMONEDA, " & _
        " C.MODALIDADPAGO, ISNULL(RTRIM(PLA.DESPLANCUENTA), '') AS CUENTAMERCADERIA, " & _
        " ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2) AS PARTICIPACION, " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '1'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) AS SEGURO, " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '15'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) AS FLETE, " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '1'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) + " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '15'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) " & _
        " + (CD.CANTIDADCOMPRA * CD.COSTOUNITARIO)  AS BASEIMPONIBLE, " & _
        " ISNULL((SELECT MAX(GP.PORCENTAJE) FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO INNER JOIN COMPRASGASTOSPRODUCTOS GP ON CG.CODGASTO = GP.CODGASTO AND " & _
        " GP.CODPRODUCTO = P.CODPRODUCTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '3'),0) AS ARANCEL, " & _
        " ROUND(ISNULL((SELECT MAX(GP.PORCENTAJE) FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO INNER JOIN COMPRASGASTOSPRODUCTOS GP ON CG.CODGASTO = GP.CODGASTO AND " & _
        " GP.CODPRODUCTO = P.CODPRODUCTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '3'),0) " & _
        " * (ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '1'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) + " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '15'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) " & _
        " + (CD.CANTIDADCOMPRA * CD.COSTOUNITARIO)) / 100,2) AS DERECHOADUANERO, " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '16'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) AS TASAADUANERA, " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '1'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) + " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '15'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) " & _
        " + (CD.CANTIDADCOMPRA * CD.COSTOUNITARIO) " & _
        " + ROUND(ISNULL((SELECT MAX(GP.PORCENTAJE) FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO INNER JOIN COMPRASGASTOSPRODUCTOS GP ON CG.CODGASTO = GP.CODGASTO AND " & _
        " GP.CODPRODUCTO = P.CODPRODUCTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '3'),0) " & _
        " * (ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '1'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) + " & _
        " ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '15'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) " & _
        " + (CD.CANTIDADCOMPRA * CD.COSTOUNITARIO)) / 100,2) " & _
        " + ROUND(ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '16'),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) " & _
        " AS TOTALCOSTODIRECTO, " & _
        " ROUND(ISNULL((SELECT SUM(CG.IMPORTE) FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA " & _
        " AND G.NUMGASTO NOT IN('1', '3', '15','16', '31')),0) " & _
        " * ROUND(CD.CANTIDADCOMPRA * CD.COSTOUNITARIO * 100 / C.TOTALCOMPRA,2)/100,2) AS TOTALCOSTOINDIRECTO, " & _
        " ROUND(ISNULL((SELECT SUM(D.CANTIDADCOMPRA * D.COSTOUNITARIO) FROM COMPRASDETALLE D " & _
        " WHERE D.CODCOMPRA = C.CODCOMPRA AND D.CODPRODUCTO = CD.CODPRODUCTO AND D.CODPRODUCTO IN(SELECT GP.CODPRODUCTO FROM COMPRASGASTOSPRODUCTOS GP " & _
        " INNER JOIN COMPRASGASTOS CG ON CG.CODGASTO = GP.CODGASTO AND CG.CODCOMPRA = GP.CODCOMPRA " & _
        " INNER JOIN GASTOCOMPRA G ON G.CODGASTO = CG.CODGASTO WHERE G.NUMGASTO = '31')),0) * 100 / " & _
        " ISNULL((SELECT SUM(D.CANTIDADCOMPRA * D.COSTOUNITARIO) FROM COMPRASDETALLE D " & _
        " WHERE D.CODCOMPRA = C.CODCOMPRA AND D.CODPRODUCTO IN(SELECT GP.CODPRODUCTO FROM COMPRASGASTOSPRODUCTOS GP " & _
        " INNER JOIN COMPRASGASTOS CG ON CG.CODGASTO = GP.CODGASTO AND CG.CODCOMPRA = GP.CODCOMPRA " & _
        " INNER JOIN GASTOCOMPRA G ON G.CODGASTO = CG.CODGASTO WHERE G.NUMGASTO = '31')),1),2) AS PARTICIPACIONMAQUINARIA, " & _
        " ISNULL((SELECT CG.IMPORTE FROM COMPRASGASTOS CG INNER JOIN GASTOCOMPRA G " & _
        " ON CG.CODGASTO = G.CODGASTO WHERE CG.CODCOMPRA = C.CODCOMPRA AND G.NUMGASTO = '31'),0) " & _
        " * ROUND(ISNULL((SELECT SUM(D.CANTIDADCOMPRA * D.COSTOUNITARIO) FROM COMPRASDETALLE D " & _
        " WHERE D.CODCOMPRA = C.CODCOMPRA AND D.CODPRODUCTO = CD.CODPRODUCTO AND D.CODPRODUCTO IN(SELECT GP.CODPRODUCTO FROM COMPRASGASTOSPRODUCTOS GP " & _
        " INNER JOIN COMPRASGASTOS CG ON CG.CODGASTO = GP.CODGASTO AND CG.CODCOMPRA = GP.CODCOMPRA " & _
        " INNER JOIN GASTOCOMPRA G ON G.CODGASTO = CG.CODGASTO WHERE G.NUMGASTO = '31')),0) * 100 / " & _
        " ISNULL((SELECT SUM(D.CANTIDADCOMPRA * D.COSTOUNITARIO) FROM COMPRASDETALLE D " & _
        " WHERE D.CODCOMPRA = C.CODCOMPRA AND D.CODPRODUCTO IN(SELECT GP.CODPRODUCTO FROM COMPRASGASTOSPRODUCTOS GP " & _
        " INNER JOIN COMPRASGASTOS CG ON CG.CODGASTO = GP.CODGASTO AND CG.CODCOMPRA = GP.CODCOMPRA " & _
        " INNER JOIN GASTOCOMPRA G ON G.CODGASTO = CG.CODGASTO WHERE G.NUMGASTO = '31')),1),2) AS IMPORTEMAQUINARIA " & _
        " FROM COMPRAS C INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & _
        " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & _
        " INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE T ON C.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON C.CODPROVEEDOR = PRO.CODPROVEEDOR " & _
        " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & _
        " LEFT OUTER JOIN PLANCUENTAS PLA ON P.CUENTAMERCADERIA = PLA.CODPLANCUENTA " & _
        " WHERE P.CODEMPRESA =  " & empCodigo & "  " & condiciones & " " & _
        " AND C.IMPORTACION = 1 AND BASEIMPONIBLE <> 0 " & _
        " ORDER BY NUMSUCURSALORDEN, NUMTIPOCOMPROORDEN, NROCOMPROBANTE, CD.LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo1") = dr("SUCURSAL")
                    row.Item("Campo3") = dr("TIPOCOMPROBANTE")
                    row.Item("Campo4") = dr("NROCOMPROBANTE")
                    row.Item("Campo7") = dr("CODIGO")
                    row.Item("Campo9") = "0"
                    row.Item("Campo2") = dr("FECHACOMPRA")
                    row.Item("Campo5") = dr("PROVEEDOR")
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("TOTALGRAVADA")
                    row.Item("Numero3") = dr("TOTALIVA")
                    row.Item("Campo6") = dr("MONEDA")
                    row.Item("Numero4") = dr("COTIZACION")
                    row.Item("Campo8") = dr("DESCRIPCION")
                    row.Item("Numero8") = dr("TOTALDESCUENTO")
                    row.Item("Numero9") = dr("TOTALCOMPRA")
                    row.Item("Campo13") = dr("CUENTAMERCADERIA")

                    If dr("MODALIDADPAGO") = "0" Then
                        row.Item("Campo12") = "Contado"
                    Else
                        row.Item("Campo12") = "Crédito"
                    End If

                    row.Item("Numero5") = dr("CANTIDAD")
                    row.Item("Numero6") = dr("COSTOBRUTO")
                    row.Item("Numero7") = dr("TOTAL")
                    row.Item("Numero13") = dr("ARANCEL")
                    row.Item("Numero14") = dr("PARTICIPACION")
                    row.Item("Numero15") = dr("SEGURO")
                    row.Item("Numero16") = dr("FLETE")
                    row.Item("Numero17") = dr("BASEIMPONIBLE")
                    row.Item("Numero18") = dr("DERECHOADUANERO")
                    row.Item("Numero19") = dr("TASAADUANERA")
                    row.Item("Numero20") = dr("TOTALCOSTODIRECTO")
                    row.Item("Numero21") = dr("TOTALCOSTOINDIRECTO")
                    row.Item("Numero23") = dr("IMPORTEMAQUINARIA")
                    row.Item("Numero22") = dr("TOTALCOSTODIRECTO") + dr("TOTALCOSTOINDIRECTO") + dr("IMPORTEMAQUINARIA")
                    row.Item("Numero12") = dr("COSTOFINAL")

                    row.Item("Campo20") = dr("CODCOMPRA")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                'Numero1 = 0 Encabezado en primera hoja
                'Numero1 = 1 Encabezado en todas las hojas
                row.Item("Numero1") = titulo

                row.Item("Campo1") = empDescripcion

                If tipoCosto = 0 Then
                    row.Item("Campo2") = "Promedio"
                Else
                    row.Item("Campo2") = "Unitario"
                End If

                row.Item("Campo16") = suc_descripcion_desde
                row.Item("Campo17") = suc_descripcion_hasta
                row.Item("Campo18") = cod_descripcion_desde
                row.Item("Campo19") = cod_descripcion_hasta
                row.Item("Campo24") = comprobante_descripcion_desde
                row.Item("Campo25") = comprobante_descripcion_hasta
                row.Item("Campo26") = moneda_descripcion_desde
                row.Item("Campo27") = moneda_descripcion_hasta
                row.Item("Campo14") = fecha_desde
                row.Item("Campo15") = fecha_hasta
                row.Item("Campo28") = moneda_descripcion
                row.Item("Campo29") = cotizacion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try
        Return ds
    End Function

    Public Function InfEstadisticoVentasMejorado(ByVal Codempresa As Long, ByVal desempresa As String, _
  ByVal DesdeFecha As String, ByVal HastaFecha As String, _
  ByVal DesdeSucursal As String, ByVal HastaSucursal As String, ByVal DesdeFamilia As String, _
  ByVal HastaFamilia As String, ByVal DesdeLinea As String, ByVal HastaLinea As String, _
  ByVal DesdeRubro As String, ByVal HastaRubro As String, _
  ByVal desdeCategoria As String, ByVal hastaCategoria As String, _
  ByVal desdeSubCategoria As String, ByVal hastaSubCategoria As String, _
  ByVal desdeMarca As String, ByVal hastaMarca As String, _
  ByVal DesdeProducto As String, ByVal HastaProducto As String, ByVal MonedaInforme As Long, ByVal desMonedaInforme As String, ByVal CotizacionMonedaInf As Decimal, _
  ByVal DesSuc1 As String, ByVal DesSuc2 As String, ByVal DesFami1 As String, ByVal DesFami2 As String, _
  ByVal DesLin1 As String, ByVal DesLin2 As String, ByVal DesRub1 As String, ByVal DesRub2 As String, _
  ByVal DesProd1 As String, ByVal DesProd2 As String, ByVal DTipoDeVta As Integer, _
  ByVal HTipoDeVta As Integer, ByVal Orden As String, ByVal Ascendente As String, _
  ByVal OrdenDelInfor As String, ByVal canDecimales As Integer, _
  ByVal condicionesVenta As String, _
  ByVal condicionesDevolucion As String, _
  ByVal tipocosto As Integer, _
  ByVal tipoPrecio As Integer) As DataSet

        Dim contador As Int64
        Dim i As Integer
        Dim items As Long = 0

        Dim xxxx As String

        ds.Clear()

        If HastaFecha = "" Then
            HastaFecha = Now.ToShortDateString
        End If

        sql = " DECLARE @EMPRE AS NUMERIC(9) " & _
        "       SET @EMPRE = " & Codempresa & " " & _
        "       SELECT MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO)) AS DESPRODUCTO, " & _
        "       MAX(V.CODSUCURSAL) AS CODSUCURSAL, MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(DESSUCURSAL)) AS DESSUCURSAL, " & _
        "       ISNULL(MAX(P.CODFAMILIA), 0) AS CODFAMILIA, " & _
        "       ISNULL(MAX(P.CODLINEA), 0) AS CODLINEA, " & _
        "       ISNULL(MAX(P.CODRUBRO), 0) AS CODRUBRO, " & _
        "       ISNULL(MAX(RTRIM(F.NUMFAMILIA)), '') AS NUMFAMILIA, ISNULL(MAX(RTRIM(F.DESFAMILIA)), '') AS DESFAMILIA, " & _
        "       ISNULL(MAX(RTRIM(L.NUMLINEA)), '') AS NUMLINEA, ISNULL(MAX(RTRIM(L.DESLINEA)), '') AS DESLINEA, " & _
        "       ISNULL(MAX(RTRIM(R.NUMRUBRO)), '') AS NUMRUBRO, ISNULL(MAX(RTRIM(R.DESRUBRO)), '') AS DESRUBRO, " & _
        "       REPLICATE('0',10-LEN(MAX(S.NUMSUCURSAL)))+MAX(LTRIM(RTRIM(S.NUMSUCURSAL))) AS NUMSUCURSALORDEN, " & _
        "       REPLICATE('0',10-LEN(MAX(F.NUMFAMILIA)))+MAX(LTRIM(RTRIM(F.NUMFAMILIA))) AS NUMFAMILIAORDEN, " & _
        "       REPLICATE('0',10-LEN(MAX(L.NUMLINEA)))+MAX(LTRIM(RTRIM(L.NUMLINEA))) AS NUMLINEAORDEN, " & _
        "       REPLICATE('0',10-LEN(MAX(R.NUMRUBRO)))+MAX(LTRIM(RTRIM(R.NUMRUBRO))) AS NUMRUBROORDEN, " & _
        "       REPLICATE('0',25-LEN(MAX(P.CODIGOBARRA)))+MAX(LTRIM(RTRIM(P.CODIGOBARRA))) AS CODIGOORDEN, " & _
        "       MAX(P.CODPRODUCTO) AS CODPRODUCTO, " & _
        "       SUM(VD.CANTIDADVENTA) AS CANTIDADVENTA, " & _
        "       AVG(DISTINCT VD.PRECIOVENTANETO * V.COTIZACION1) AS PROMEDIOVENTA, " & _
        "       AVG(DISTINCT VD.COSTOPROMEDIO * V.COTIZACION1) AS PROMEDIOCOSTO, " & _
        "" & _
        "       MAX(V.CODMONEDA) AS CODMONEDA, " & _
        "       MAX(V.COTIZACION1) AS COTIZACION1, MAX(V.COTIZACION2) AS COTIZACION2, " & _
        "       AVG((VD.PRECIOVENTANETO * V.COTIZACION1)) AS PRECIONETO, " & _
        "" & _
        "       MAX(V.CODMONEDA)AS  CODMONEDA, " & _
        "       SUM(((VD.PRECIOVENTANETO * V.COTIZACION1) * VD.CANTIDADVENTA)) AS PRECIOMONEDAPRINCIPAL, " & _
        "" & _
        "       SUM(VD.CANTIDADVENTA * VD.COSTOPROMEDIO * V.COTIZACION1) AS TOTALCOSTOVENTA, " & _
        "" & _
        "       ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA) " & _
        "       FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
        "       INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "       INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        "       LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
        "       LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
        "       LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
        "       WHERE D.CODEMPRESA = @EMPRE  AND D.ESTADO = 0 " & _
        "       AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
        "       GROUP BY PR.CODPRODUCTO), 0) AS CANTIDADDEVUELTA, " & _
        "" & _
        "       ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA) " & _
        "       FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
        "       INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "       INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        "       LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
        "       LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
        "       LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
        "       WHERE D.CODEMPRESA = @EMPRE  AND D.ESTADO = 0 " & _
        "       AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
        "       GROUP BY PR.CODPRODUCTO), 0) AS TOTALCANTDEVO, " & _
        "" & _
        "       (ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.COSTOPROMEDIO * D.COTIZACION1) " & _
        "       FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
        "       INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "       INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        "       LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
        "       LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
        "       LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
        "       WHERE D.CODEMPRESA = @EMPRE AND D.ESTADO = 0 " & _
        "       AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
        "       GROUP BY PR.CODPRODUCTO), 0)) AS COSTODEVOLUCION, " & _
        "" & _
        "       ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * (DD.COSTOPROMEDIO * D.COTIZACION1)) " & _
        "       FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
        "       INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "       INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        "       LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
        "       LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
        "       LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
        "       WHERE D.CODEMPRESA = @EMPRE  AND D.ESTADO = 0  " & _
        "       AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
        "       GROUP BY PR.CODPRODUCTO), 0) AS TOTALCOSTODEVO, " & _
        "" & _
        "       ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1) " & _
        "       FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
        "       INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "       INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        "       LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
        "       LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
        "       LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
        "       WHERE D.CODEMPRESA = @EMPRE  AND D.ESTADO = 0 " & _
        "       AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
        "       GROUP BY PR.CODPRODUCTO), 0) AS PRECIODEVOLUCION, " & _
        "" & _
        "       ISNULL((SELECT SUM(DD.CANTIDADDEVUELTA * (DD.PRECIONETO * D.COTIZACION1)) " & _
        "       FROM DEVOLUCION D INNER JOIN SUCURSAL SU ON D.CODSUCURSAL = SU.CODSUCURSAL " & _
        "       INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
        "       INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = P.CODPRODUCTO " & _
        "       LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
        "       LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
        "       LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
        "       WHERE D.CODEMPRESA = @EMPRE  AND D.ESTADO = 0 " & _
        "       AND PR.CODPRODUCTO = P.CODPRODUCTO " & condicionesDevolucion & _
        "       GROUP BY PR.CODPRODUCTO), 0) AS TOTALPRECIODEVO " & _
        "" & _
        "       FROM VENTAS V INNER JOIN SUCURSAL S ON S.CODSUCURSAL = V.CODSUCURSAL " & _
        "       INNER JOIN VENTASDETALLE VD ON VD.CODVENTA = V.CODVENTA " & _
        "       INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = VD.CODPRODUCTO " & _
        "       INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        "       INNER JOIN LINEA L ON L.CODLINEA = P.CODLINEA " & _
        "       INNER JOIN RUBRO R ON R.CODRUBRO = P.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        "       WHERE V.CODEMPRESA = @EMPRE  " & _
        "       AND V.ESTADO = 0 " & condicionesVenta & _
        "       GROUP BY F.CODFAMILIA, P.CODPRODUCTO " & _
        "       ORDER BY NUMFAMILIAORDEN, CODIGOORDEN "

        sql = sql + Orden + Ascendente

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd.CommandTimeout = 300000
            dr = cmd.ExecuteReader

            Dim PRECIOVENTA As Decimal
            Dim codigo As String
            Dim cantidad As Decimal
            Dim candevo As Decimal
            Dim costoventa As Decimal
            Dim costodevolucion As Decimal
            Dim venta As Decimal
            Dim devolucion As Decimal
            Dim costoneto As Decimal
            Dim utilidad As Decimal
            Dim cantidadneta As Decimal
            Dim precioneto As Decimal
            Dim precionetodevo As Decimal
            Dim aux As Decimal
            Dim aux2 As Decimal
            Dim porcen As Decimal




            Do While dr.Read
                row = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                row.Item("Campo1") = dr("NUMFAMILIA")
                row.Item("Campo2") = dr("NUMLINEA")
                row.Item("Campo3") = dr("NUMRUBRO")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("DESLINEA")
                row.Item("Campo6") = dr("DESRUBRO")
                row.Item("Campo7") = dr("CODIGOBARRA")

                row.Item("Campo8") = dr("DESPRODUCTO")

                codigo = dr("CODIGOBARRA")

                row.Item("Numero1") = dr("CANTIDADVENTA")
                row.Item("Numero2") = Math.Round(dr("PRECIOMONEDAPRINCIPAL") / CotizacionMonedaInf, canDecimales)
                row.Item("Numero3") = CotizacionMonedaInf
                row.Item("Numero4") = Math.Round(dr("TOTALCOSTOVENTA") / CotizacionMonedaInf, canDecimales)
                row.Item("Numero5") = dr("CANTIDADDEVUELTA")
                row.Item("Numero6") = Math.Round(dr("PRECIODEVOLUCION") / CotizacionMonedaInf, canDecimales)
                row.Item("Numero7") = Math.Round(dr("COSTODEVOLUCION") / CotizacionMonedaInf, canDecimales)

                precioneto = row.Item("Numero2")
                precionetodevo = row.Item("Numero6")
                cantidad = row.Item("Numero1")
                candevo = row.Item("Numero5")
                costoventa = row.Item("Numero4")
                costodevolucion = row.Item("Numero7")
                cantidadneta = row.Item("Numero1") - row.Item("Numero5")
                costoneto = row.Item("Numero4") - row.Item("Numero7")

                row.Item("Numero8") = row.Item("Numero1") - row.Item("Numero5") 'Cantidad venta neta (cant.vta - cant.devo)
                row.Item("Numero9") = row.Item("Numero4") - row.Item("Numero7") 'Costo Neto  (costo vta. - costo devo) 
                row.Item("Numero10") = row.Item("Numero2") - row.Item("Numero6") 'Precio Vta. Neto (precio venta - precio devo)
                row.Item("Numero11") = row.Item("Numero2") - row.Item("Numero4") 'Utilidad de venta bruta (precio venta bruto - costo venta bruto) 
                row.Item("Numero12") = (row.Item("Numero2") - row.Item("Numero6")) - (row.Item("Numero4") - row.Item("Numero7"))

                Dim HOLA As String = row.Item("Numero12")

                If row.Item("Numero10") <> 0 Then
                    row.Item("Numero13") = (row.Item("Numero12") * 100) / row.Item("Numero10") 'Porcentaje de Utilidad (precio vta - costo venta) * 100 / precio vta.
                End If

                row.Item("Numero14") = dr("PROMEDIOVENTA")
                row.Item("Numero15") = dr("PROMEDIOCOSTO")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            dr.Close()

            '###################################
            '#    DEVOLUCIONES DEL PERIODO     #
            '###################################
            sql = ""
            sql = " SELECT D.TOTALGRAVADA + D.TOTALEXENTA - D.TOTALDESCUENTO AS TOTALDEVOLUCION, " & _
            " D.TOTALGRAVADA*D.COTIZACION1 + D.TOTALEXENTA*D.COTIZACION1 - D.TOTALDESCUENTO*D.COTIZACION1 AS TOTALDEVOLUCIONINFORME, " & _
            " D.NUMDEVOLUCION AS NUMDEVOLUCION, " & _
            " PR.COSTOPP AS COSTOPP, " & _
            " D.CODMONEDA AS CODMONEDA, " & _
            " PR.CODMONEDA AS COSTOPPMONEDA, " & _
            " D.COTIZACION1 AS COTIZACION1, " & _
            " D.COTIZACION2 AS COTIZACION2, " & _
            " /* dbo.fnCostosPromedio(" & empCodigo & ",CAST('" & HastaFecha & "' AS DATETIME),PR.CODPRODUCTO, 5) */ " & _
            " DD.COSTOPROMEDIO AS COSTOPPRECALCULADO, " & _
            " DD.CANTIDADDEVUELTA AS CANTIDADDEVUELTA, " & _
            " DD.CANTIDADDEVUELTA * DD.PRECIONETO  AS PRECIONETO, " & _
            " DD.CANTIDADDEVUELTA * DD.PRECIONETO * D.COTIZACION1 AS PRECIONETOINFORME " & _
            " FROM DEVOLUCION D INNER JOIN DEVOLUCIONDETALLE DD ON D.CODDEVOLUCION = DD.CODDEVOLUCION " & _
            " INNER JOIN SUCURSAL SU ON SU.CODSUCURSAL = D.CODSUCURSAL " & _
            " INNER JOIN PRODUCTOS PR ON DD.CODPRODUCTO = PR.CODPRODUCTO " & _
            " LEFT OUTER JOIN FAMILIA FA ON PR.CODFAMILIA = FA.CODFAMILIA " & _
            " LEFT OUTER JOIN LINEA LI ON PR.CODLINEA = LI.CODLINEA " & _
            " LEFT OUTER JOIN RUBRO RU ON PR.CODRUBRO = RU.CODRUBRO " & _
"LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON PR.CODCATEGORIA = CT.CODCATEGORIA " & _
"LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON PR.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
"LEFT OUTER JOIN MARCA MC ON PR.CODMARCA = MC.CODMARCA  " & _
            " WHERE D.CODEMPRESA =" & empCodigo & " AND D.ESTADO = 0 " & condicionesDevolucion & _
            " AND D.FECHADEVOLUCION BETWEEN CAST('" & DesdeFecha & "'AS DATETIME) AND CAST('" & HastaFecha & "'AS DATETIME)" & _
            " ORDER BY D.NUMDEVOLUCION "

            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader()

            Dim costopromedio As Decimal
            Dim TotalCantidadDevolucion As Decimal
            Dim TotalPrecioDevolucion As Decimal
            Dim TotalCostoDevolucion As Decimal
            Dim TotalUtilidadDevolucion As Decimal

            TotalCantidadDevolucion = 0
            TotalPrecioDevolucion = 0
            TotalCostoDevolucion = 0
            TotalUtilidadDevolucion = 0

            Do While dr.Read

                costopromedio = dr("COSTOPPRECALCULADO")

                If MonedaInforme = dr("CODMONEDA") Then
                    If MonedaInforme = dr("COSTOPPMONEDA") Then
                        TotalCostoDevolucion = TotalCostoDevolucion + (costopromedio * dr("CANTIDADDEVUELTA"))
                    Else
                        TotalCostoDevolucion = TotalCostoDevolucion + (Math.Round((costopromedio * dr("COTIZACION2") / CotizacionMonedaInf) * dr("CANTIDADDEVUELTA"), canDecimales))
                    End If
                Else
                    If MonedaInforme = dr("COSTOPPMONEDA") Then
                        TotalCostoDevolucion = TotalCostoDevolucion + (costopromedio * dr("CANTIDADDEVUELTA"))
                    Else
                        TotalCostoDevolucion = TotalCostoDevolucion + (Math.Round((costopromedio * dr("COTIZACION2") / CotizacionMonedaInf) * dr("CANTIDADDEVUELTA"), canDecimales))
                    End If
                End If

                If MonedaInforme = dr("CODMONEDA") Then
                    TotalPrecioDevolucion = TotalPrecioDevolucion + Math.Round(dr("PRECIONETO"), canDecimales)
                Else
                    TotalPrecioDevolucion = TotalPrecioDevolucion + (Math.Round((dr("PRECIONETOINFORME") / CotizacionMonedaInf) * dr("CANTIDADDEVUELTA"), canDecimales))
                End If

                TotalCantidadDevolucion = TotalCantidadDevolucion + dr("CANTIDADDEVUELTA")
            Loop

            TotalUtilidadDevolucion = TotalPrecioDevolucion - TotalCostoDevolucion

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea
            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = RTrim(DesSuc1)
            row.Item("Campo3") = RTrim(DesSuc2)
            row.Item("Campo4") = "Sección"
            row.Item("Campo5") = "Sub Sección"
            row.Item("Campo6") = "Grupo"
            row.Item("Campo10") = DesdeFecha
            row.Item("Campo15") = HastaFecha
            row.Item("Campo13") = desMonedaInforme
            row.Item("Campo7") = RTrim(DesFami1)
            row.Item("Campo8") = RTrim(DesFami2)
            row.Item("Campo16") = RTrim(DesLin1)
            row.Item("Campo17") = RTrim(DesLin2)
            row.Item("Campo18") = RTrim(DesRub1)
            row.Item("Campo19") = RTrim(DesRub2)
            row.Item("Campo11") = RTrim(DesProd1)
            row.Item("Campo12") = RTrim(DesProd2)
            row.Item("Campo21") = RTrim(desdeCategoria)
            row.Item("Campo22") = RTrim(hastaCategoria)
            row.Item("Campo23") = RTrim(desdeSubCategoria)
            row.Item("Campo24") = RTrim(hastaSubCategoria)
            row.Item("Campo25") = RTrim(desdeMarca)
            row.Item("Campo26") = RTrim(hastaMarca)
            row.Item("Campo14") = OrdenDelInfor

            row.Item("Numero1") = TotalCantidadDevolucion
            row.Item("Numero2") = TotalPrecioDevolucion
            row.Item("Numero3") = TotalCostoDevolucion
            row.Item("Numero4") = TotalUtilidadDevolucion

            If tipoPrecio = 1 Then
                row.Item("Campo20") = " - Normal"
            ElseIf tipoPrecio = 2 Then
                row.Item("Campo20") = " - Presupuesto"
            End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox("Error" & xxxx & ex.Message)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpTransferenciaConRemision(ByVal codtransferencia As Long, ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT TOP 13 T.CODTRANSFERENCIA AS CODTRANSFERENCIA, " & _
            " CONVERT(VARCHAR(10),T.FECHATRANSFERENCIA,103) AS FECHATRANSFERENCIA, " & _
            " RTRIM(T.NUMTRANSFERENCIA) AS NUMTRANSFERENCIA, " & _
            " RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALORIGEN, " & _
            " RTRIM(S.DESSUCURSAL) AS DESSUCURSALORIGEN, ISNULL(RTRIM(S.DIRECCION),'') AS DIRECIONORIGEN, " & _
            " RTRIM(SU.NUMSUCURSAL) AS NUMSUCURSALDESTINO, " & _
            " RTRIM(SU.DESSUCURSAL) AS DESSUCURSALDESTINO, ISNULL(RTRIM(SU.DIRECCION),'') AS DIRECIONDESTINO,  " & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, " & _
            " RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
            " ISNULL(TD.CANTIDADTRANFERENCIA ,0) AS CANTIDADTRANFERENCIA, " & _
            " ISNULL(TD.COSTOPROMEDIO,0) AS COSTOPROMEDIO, " & _
            " ISNULL(TD.COSTOULTIMO,0), " & _
            " P.CODPRODUCTO AS CODPRODUCTO , " & _
            " RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " P.CODLINEA AS CODLINEA, " & _
            " ISNULL(TD.COSTOULTIMO,0) AS COSTOULTIMO, " & _
            " (ISNULL(TD.COSTOULTIMO,0) * ISNULL(TD.CANTIDADTRANFERENCIA,0)) AS TOTALCOSTO " & _
            " FROM TRANFERENCIA T " & _
            " INNER JOIN SUCURSAL S ON T.CODSUCURSAL = S.CODSUCURSAL " & _
            " INNER JOIN SUCURSAL SU ON T.SUCURSALDESTINO = SU.CODSUCURSAL " & _
            " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
            " INNER JOIN TRANSFERENCIASDETALLE TD ON TD.CODTRANSFERENCIA=T.CODTRANSFERENCIA " & _
            " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO=TD.CODPRODUCTO " & _
            " WHERE T.CODTRANSFERENCIA = " & codtransferencia & " AND T.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY TD.LINEANUMERO "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Dim texfecha As String
                Dim numero, descomprobante, desorigen, desdestino As String

                Do While dr.Read()

                    row = ds.Tables("Detalle").NewRow()

                    texfecha = dr("FECHATRANSFERENCIA")
                    numero = dr("NUMTRANSFERENCIA")
                    desorigen = dr("DIRECIONORIGEN")
                    desdestino = dr("DIRECIONDESTINO")

                    row.Item("Campo9") = dr("CODIGOBARRA") & " - " & dr("DESPRODUCTO")
                    row.Item("Numero2") = dr("CANTIDADTRANFERENCIA")
                    row.Item("Numero3") = dr("COSTOULTIMO")
                    row.Item("Numero5") = Math.Round(dr("TOTALCOSTO"), canDecimales)

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion
                row.Item("Campo6") = funcion.Descripcion_Tabla("RTRIM(RUCCONTRIBUYENTE)", "EMPRESA", "CODEMPRESA", empCodigo, empCodigo)
                row.Item("Campo4") = desorigen
                row.Item("Campo5") = desdestino
                row.Item("Numero7") = numero
                row.Item("Campo3") = texfecha

                row.Item("Campo7") = "X"

                ds.Tables("Cabecera").Rows.Add(row)
            Catch

            Finally
                dr.Close()
                ser.Cerrar(sqlc)
            End Try
        Finally

        End Try
        Return ds
    End Function


    Public Function infEstadisticoVentasCantidadCOPIA(ByVal desdesucursal As String, ByVal hastasucursal As String, _
       ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
       ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
       ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
       ByVal desdeproducto As String, ByVal hastaproducto As String, _
       ByVal desdecategoria As String, ByVal hastacategoria As String, _
       ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
       ByVal desdemarca As String, ByVal hastamarca As String, _
       ByVal desdeFecha As String, ByVal hastaFecha As String, _
       ByVal canDecimales As Integer, ByVal condiciones As String, _
       ByVal titulo As Byte, ByVal tipo As Byte) As DataSet
        Dim promedio As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(V.FECHAVENTA)) AS MESFECHAVENTA, " & _
        " SUM(VD.CANTIDADVENTA) AS CANTIDAD, " & _
        " ISNULL(MAX(PS.CANTIDAD),0) as STOCKACTUAL " & _
        " FROM VENTAS V INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
        " INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON V.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " left outer join PRODUCTOSUCURSAL PS on PS.CODPRODUCTO = VD.CODPRODUCTO and PS.CODSUCURSAL = S.CODSUCURSAL " & _
        " WHERE V.ESTADO = 0 " & condiciones & _
        " AND V.CODEMPRESA = " & empCodigo & _
        " GROUP BY V.CODSUCURSAL, P.CODFAMILIA, P.CODPRODUCTO, MONTH(V.FECHAVENTA) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, FAMILIAORDEN, DESCRIPCION, MESFECHAVENTA "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, FAMILIAORDEN, CODIGOBARRAORDEN, MESFECHAVENTA "
        End If


        Dim campo1 As String = "" : Dim campo2 As String = "" : Dim campo3 As String = ""
        Dim suma As Integer = 0

        Dim imprime As Boolean
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd.CommandTimeout = 300000

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                row.Item("Numero15") = dr("STOCKACTUAL")


                'If campo2 = "" Then
                '    campo2 = dr("NUMFAMILIA")
                'End If

                'If campo1 <> dr("CODIGOBARRA") And campo2 = dr("NUMFAMILIA") Then
                '    campo1 = dr("CODIGOBARRA")
                '    suma = suma + dr("STOCKACTUAL")
                'ElseIf campo1 = dr("CODIGOBARRA") And campo2 = dr("NUMFAMILIA") Then
                '    campo1 = dr("CODIGOBARRA")
                'ElseIf campo1 <> dr("CODIGOBARRA") And campo2 <> dr("NUMFAMILIA") Then
                '    campo2 = dr("NUMFAMILIA")
                '    campo1 = dr("CODIGOBARRA")
                '    suma = 0
                '    suma = suma + dr("STOCKACTUAL")
                'End If


                promedio = 0

                Select Case CType(dr("MESFECHAVENTA"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 2
                        row.Item("Numero2") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 3
                        row.Item("Numero3") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 4
                        row.Item("Numero4") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 5
                        row.Item("Numero5") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 6
                        row.Item("Numero6") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 7
                        row.Item("Numero7") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 8
                        row.Item("Numero8") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 9
                        row.Item("Numero9") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 10
                        row.Item("Numero10") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 11
                        row.Item("Numero11") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 12
                        row.Item("Numero12") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = promedio / 12
                row.Item("Numero14") = promedio


                ' row.Item("Numero16") = suma


                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo17") = desdecategoria
            row.Item("Campo18") = hastacategoria
            row.Item("Campo19") = desdesubcategoria
            row.Item("Campo20") = hastasubcategoria
            row.Item("Campo21") = desdemarca
            row.Item("Campo22") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function
    'Eduardo 01/10/2014 REQ EstadisticoProduccionMateriaPrimaPorCantidad
    Public Function infEstadisticoProduccionMateriaCantidad(ByVal desdesucursal As String, ByVal hastasucursal As String, _
       ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
       ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
       ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
       ByVal desdeproducto As String, ByVal hastaproducto As String, _
       ByVal desdecategoria As String, ByVal hastacategoria As String, _
       ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
       ByVal desdemarca As String, ByVal hastamarca As String, _
       ByVal desdeFecha As String, ByVal hastaFecha As String, _
       ByVal canDecimales As Integer, ByVal condiciones As String, _
       ByVal titulo As Byte, ByVal tipo As Byte) As DataSet
        Dim promedio As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(OP.FECHAOP)) AS MESFECHAORDENPRODUCCION, " & _
        " SUM(OPMP.CANTIDAD) AS CANTIDAD, " & _
        " ISNULL(MAX(PS.CANTIDAD),0) as STOCKACTUAL " & _
        " FROM ORDENPRODUCCION OP INNER JOIN SUCURSAL S ON OP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPMP ON OPMP.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN PRODUCTOS P ON OPMP.CODPRODUCTOMATERIAPRIMA = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON OP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " left outer join PRODUCTOSUCURSAL PS on PS.CODPRODUCTO = OPMP.CODPRODUCTOMATERIAPRIMA and PS.CODSUCURSAL = S.CODSUCURSAL " & _
        " WHERE  OP.CODEMPRESA = " & empCodigo & _
          condiciones & _
        " GROUP BY OP.CODSUCURSAL, P.CODFAMILIA, P.CODPRODUCTO, MONTH(OP.FECHAOP) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, FAMILIAORDEN, DESCRIPCION, MESFECHAORDENPRODUCCION "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, FAMILIAORDEN, CODIGOBARRAORDEN, MESFECHAORDENPRODUCCION "
        End If


        Dim campo1 As String = "" : Dim campo2 As String = "" : Dim campo3 As String = ""
        Dim suma As Integer = 0

        Dim imprime As Boolean
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd.CommandTimeout = 300000

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                row.Item("Numero15") = dr("STOCKACTUAL")


                'If campo2 = "" Then
                '    campo2 = dr("NUMFAMILIA")
                'End If

                'If campo1 <> dr("CODIGOBARRA") And campo2 = dr("NUMFAMILIA") Then
                '    campo1 = dr("CODIGOBARRA")
                '    suma = suma + dr("STOCKACTUAL")
                'ElseIf campo1 = dr("CODIGOBARRA") And campo2 = dr("NUMFAMILIA") Then
                '    campo1 = dr("CODIGOBARRA")
                'ElseIf campo1 <> dr("CODIGOBARRA") And campo2 <> dr("NUMFAMILIA") Then
                '    campo2 = dr("NUMFAMILIA")
                '    campo1 = dr("CODIGOBARRA")
                '    suma = 0
                '    suma = suma + dr("STOCKACTUAL")
                'End If


                promedio = 0

                Select Case CType(dr("MESFECHAORDENPRODUCCION"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 2
                        row.Item("Numero2") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 3
                        row.Item("Numero3") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 4
                        row.Item("Numero4") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 5
                        row.Item("Numero5") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 6
                        row.Item("Numero6") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 7
                        row.Item("Numero7") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 8
                        row.Item("Numero8") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 9
                        row.Item("Numero9") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 10
                        row.Item("Numero10") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 11
                        row.Item("Numero11") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 12
                        row.Item("Numero12") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = promedio / 12
                row.Item("Numero14") = promedio


                ' row.Item("Numero16") = suma


                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo17") = desdecategoria
            row.Item("Campo18") = hastacategoria
            row.Item("Campo19") = desdesubcategoria
            row.Item("Campo20") = hastasubcategoria
            row.Item("Campo21") = desdemarca
            row.Item("Campo22") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    'Eduardo 01/10/2014 REQ EstadisticoProduccionProductoTerminadoPorCantidad
    Public Function infEstadisticoProduccionProductoCantidad(ByVal desdesucursal As String, ByVal hastasucursal As String, _
       ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
       ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
       ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
       ByVal desdeproducto As String, ByVal hastaproducto As String, _
       ByVal desdecategoria As String, ByVal hastacategoria As String, _
       ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
       ByVal desdemarca As String, ByVal hastamarca As String, _
       ByVal desdeFecha As String, ByVal hastaFecha As String, _
       ByVal canDecimales As Integer, ByVal condiciones As String, _
       ByVal titulo As Byte, ByVal tipo As Byte) As DataSet
        Dim promedio As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(PIP.FECHACOMPROBANTE)) AS MESFECHAINGRESO, " & _
        " SUM(PIPD.CANTIDAD) AS CANTIDAD, " & _
        " ISNULL(MAX(PS.CANTIDAD),0) as STOCKACTUAL " & _
        " FROM PRODUCCIONINGRESOPRODUCTO PIP INNER JOIN SUCURSAL S ON PIP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PRODUCCIONINGRESOPRODUCTODET PIPD ON PIPD.CODINGRESOPROTER = PIP.CODINGRESOPROTER " & _
        " INNER JOIN PRODUCTOS P ON PIPD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON PIP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " left outer join PRODUCTOSUCURSAL PS on PS.CODPRODUCTO = PIPD.CODPRODUCTO and PS.CODSUCURSAL = S.CODSUCURSAL " & _
        " WHERE  PIP.CODEMPRESA = " & empCodigo & _
          condiciones & _
        " GROUP BY PIP.CODSUCURSAL, P.CODFAMILIA, P.CODPRODUCTO, MONTH(PIP.FECHACOMPROBANTE) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, FAMILIAORDEN, DESCRIPCION, MESFECHAINGRESO "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, FAMILIAORDEN, CODIGOBARRAORDEN, MESFECHAINGRESO "
        End If


        Dim campo1 As String = "" : Dim campo2 As String = "" : Dim campo3 As String = ""
        Dim suma As Integer = 0

        Dim imprime As Boolean
        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd.CommandTimeout = 300000

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                row.Item("Numero15") = dr("STOCKACTUAL")


                'If campo2 = "" Then
                '    campo2 = dr("NUMFAMILIA")
                'End If

                'If campo1 <> dr("CODIGOBARRA") And campo2 = dr("NUMFAMILIA") Then
                '    campo1 = dr("CODIGOBARRA")
                '    suma = suma + dr("STOCKACTUAL")
                'ElseIf campo1 = dr("CODIGOBARRA") And campo2 = dr("NUMFAMILIA") Then
                '    campo1 = dr("CODIGOBARRA")
                'ElseIf campo1 <> dr("CODIGOBARRA") And campo2 <> dr("NUMFAMILIA") Then
                '    campo2 = dr("NUMFAMILIA")
                '    campo1 = dr("CODIGOBARRA")
                '    suma = 0
                '    suma = suma + dr("STOCKACTUAL")
                'End If


                promedio = 0

                Select Case CType(dr("MESFECHAINGRESO"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 2
                        row.Item("Numero2") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 3
                        row.Item("Numero3") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 4
                        row.Item("Numero4") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 5
                        row.Item("Numero5") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 6
                        row.Item("Numero6") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 7
                        row.Item("Numero7") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 8
                        row.Item("Numero8") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 9
                        row.Item("Numero9") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 10
                        row.Item("Numero10") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 11
                        row.Item("Numero11") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                    Case Is = 12
                        row.Item("Numero12") = dr("CANTIDAD")
                        'row.Item("Numero15") = dr("STOCKACTUAL")
                        promedio = promedio + dr("CANTIDAD")
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = promedio / 12
                row.Item("Numero14") = promedio


                ' row.Item("Numero16") = suma


                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo17") = desdecategoria
            row.Item("Campo18") = hastacategoria
            row.Item("Campo19") = desdesubcategoria
            row.Item("Campo20") = hastasubcategoria
            row.Item("Campo21") = desdemarca
            row.Item("Campo22") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function
    'Eduardo 01/10/2014 REQ EstadisticoProduccionMateriaPrimaPorCosto
    Public Function infEstadisticoProduccionMateriaCosto(ByVal desdesucursal As String, ByVal hastasucursal As String, _
   ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
   ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
   ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
   ByVal desdeproducto As String, ByVal hastaproducto As String, _
   ByVal desdecategoria As String, ByVal hastacategoria As String, _
   ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
   ByVal desdemarca As String, ByVal hastamarca As String, _
   ByVal desdeFecha As String, ByVal hastaFecha As String, _
   ByVal moneda As String, ByVal cotizacion As String, _
   ByVal canDecimales As Integer, ByVal condiciones As String, _
   ByVal titulo As Byte, ByVal tipo As Byte) As DataSet 'ByVal tipoImporte As Byte
        Dim promedio As Decimal
        Dim importe As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(OP.FECHAOP)) AS MESFECHAOPERACION, " & _
        " SUM(OPMP.CANTIDAD * OPMP.COSTO * OP.COTIZACION1) AS IMPORTENETO " & _
        " FROM ORDENPRODUCCION OP INNER JOIN SUCURSAL S ON OP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN ORDENPRODUCCIONMATERIAPRIMA OPMP ON OPMP.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN PRODUCTOS P ON OPMP.CODPRODUCTOMATERIAPRIMA = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON OP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " WHERE OP.CODEMPRESA = " & empCodigo & _
          condiciones & _
        " GROUP BY OP.CODSUCURSAL, P.CODPRODUCTO, MONTH(OP.FECHAOP) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, DESCRIPCION, MESFECHAOPERACION "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, CODIGOBARRAORDEN, MESFECHAOPERACION "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                promedio = 0
                importe = dr("IMPORTENETO")
                'importe = 0
                'If tipoImporte = 0 Then
                'importe = dr("IMPORTENETO")
                'Else
                'importe = dr("IMPORTEBRUTO")
                'End If

                Select Case CType(dr("MESFECHAOPERACION"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 2
                        row.Item("Numero2") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 3
                        row.Item("Numero3") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 4
                        row.Item("Numero4") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 5
                        row.Item("Numero5") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 6
                        row.Item("Numero6") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 7
                        row.Item("Numero7") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 8
                        row.Item("Numero8") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 9
                        row.Item("Numero9") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 10
                        row.Item("Numero10") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 11
                        row.Item("Numero11") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 12
                        row.Item("Numero12") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = (promedio / 12)
                row.Item("Numero14") = promedio

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo20") = desdecategoria
            row.Item("Campo21") = hastacategoria
            row.Item("Campo22") = desdesubcategoria
            row.Item("Campo23") = hastasubcategoria
            row.Item("Campo24") = desdemarca
            row.Item("Campo25") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha
            row.Item("Campo17") = moneda
            row.Item("Campo18") = cotizacion

            'If tipoImporte = 0 Then
            '    row.Item("Campo19") = " Neto"
            'Else
            '    row.Item("Campo19") = " Bruto"
            'End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    'Eduardo 01/10/2014 REQ EstadisticoProduccionProductoTerminadoPorCosto
    Public Function infEstadisticoProduccionProductoCosto(ByVal desdesucursal As String, ByVal hastasucursal As String, _
   ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
   ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
   ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
   ByVal desdeproducto As String, ByVal hastaproducto As String, _
   ByVal desdecategoria As String, ByVal hastacategoria As String, _
   ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
   ByVal desdemarca As String, ByVal hastamarca As String, _
   ByVal desdeFecha As String, ByVal hastaFecha As String, _
   ByVal moneda As String, ByVal cotizacion As String, _
   ByVal canDecimales As Integer, ByVal condiciones As String, _
   ByVal titulo As Byte, ByVal tipo As Byte) As DataSet 'ByVal tipoImporte As Byte
        Dim promedio As Decimal
        Dim importe As Decimal

        ds.Clear()

        sql = ""
        sql = " SELECT REPLICATE('0',5-LEN(MAX(RTRIM(S.NUMSUCURSAL))))+LTRIM(MAX(RTRIM(S.NUMSUCURSAL))) AS SUCURSALORDEN, " & _
        " MAX(RTRIM(S.NUMSUCURSAL)) AS NUMSUCURSAL, MAX(RTRIM(S.DESSUCURSAL)) AS DESSUCURSAL, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(F.NUMFAMILIA))))+LTRIM(MAX(RTRIM(F.NUMFAMILIA))) AS FAMILIAORDEN, " & _
        " MAX(RTRIM(F.NUMFAMILIA)) AS NUMFAMILIA, MAX(RTRIM(F.DESFAMILIA)) AS DESFAMILIA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(L.NUMLINEA))))+LTRIM(MAX(RTRIM(L.NUMLINEA))) AS LINEAORDEN, " & _
        " MAX(RTRIM(L.NUMLINEA)) AS NUMLINEA, MAX(RTRIM(L.DESLINEA)) AS DESLINEA, " & _
        " REPLICATE('0',5-LEN(MAX(RTRIM(R.NUMRUBRO))))+LTRIM(MAX(RTRIM(R.NUMRUBRO))) AS RUBROORDEN, " & _
        " MAX(RTRIM(R.NUMRUBRO)) AS NUMRUBRO, MAX(RTRIM(R.DESRUBRO)) AS DESRUBRO, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(CT.NUMCATEGORIA),0))) AS CATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(CT.NUMCATEGORIA)),0) AS NUMCATEGORIA, ISNULL(MAX(RTRIM(CT.DESCATEGORIA)),0) AS DESCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))))+ LTRIM(MAX(ISNULL(RTRIM(SCT.NUMSUBCATEGORIA),0))) AS SUBCATEGORIAORDEN, " & _
        " ISNULL(MAX(RTRIM(SCT.NUMSUBCATEGORIA)),0) AS NUMSUBCATEGORIA, ISNULL(MAX(RTRIM(SCT.DESSUBCATEGORIA)),0) AS DESSUBCATEGORIA, " & _
        " REPLICATE('0',5-LEN(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))))+ LTRIM(MAX(ISNULL(RTRIM(MC.NUMMARCA),0))) AS MARCAORDEN, " & _
        " ISNULL(MAX(RTRIM(MC.NUMMARCA)),0) AS NUMMARCA, ISNULL(MAX(RTRIM(MC.DESMARCA)),0) AS DESMARCA, " & _
        " REPLICATE('0',25-LEN(MAX(RTRIM(P.CODIGOBARRA))))+LTRIM(MAX(RTRIM(P.CODIGOBARRA))) AS CODIGOBARRAORDEN, " & _
        " MAX(RTRIM(P.CODIGOBARRA)) AS CODIGOBARRA, MAX(RTRIM(P.DESPRODUCTO))AS DESCRIPCION, " & _
        " MAX(MONTH(PIP.FECHACOMPROBANTE)) AS MESFECHAINGRESO, " & _
        " SUM(PIPD.CANTIDAD * PIPD.COSTO * PIP.COTIZACION1) AS IMPORTENETO " & _
        " FROM PRODUCCIONINGRESOPRODUCTO PIP INNER JOIN SUCURSAL S ON PIP.CODSUCURSAL = S.CODSUCURSAL " & _
        " INNER JOIN PRODUCCIONINGRESOPRODUCTODET PIPD ON PIPD.CODINGRESOPROTER = PIP.CODINGRESOPROTER " & _
        " INNER JOIN PRODUCTOS P ON PIPD.CODPRODUCTO = P.CODPRODUCTO " & _
        " INNER JOIN FAMILIA F ON P.CODFAMILIA = F.CODFAMILIA " & _
        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        " LEFT OUTER JOIN CATEGORIAPRODUCTO CT ON P.CODCATEGORIA = CT.CODCATEGORIA " & _
        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SCT ON P.CODSUBCATEGORIA = SCT.CODSUBCATEGORIA " & _
        " LEFT OUTER JOIN MARCA MC ON P.CODMARCA = MC.CODMARCA  " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON PIP.CODCOMPROBANTE = TC.CODCOMPROBANTE " & _
        " INNER JOIN UNIDADMEDIDA U ON U.CODMEDIDA = P.CODMEDIDA " & _
        " WHERE PIP.CODEMPRESA = " & empCodigo & _
          condiciones & _
        " GROUP BY PIP.CODSUCURSAL, P.CODPRODUCTO, MONTH(PIP.FECHACOMPROBANTE) "

        If tipo = 0 Then
            sql = sql & " ORDER BY NUMSUCURSAL, DESCRIPCION, MESFECHAINGRESO "
        Else
            sql = sql & " ORDER BY SUCURSALORDEN, CODIGOBARRAORDEN, MESFECHAINGRESO "
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMFAMILIA")
                row.Item("Campo4") = dr("DESFAMILIA")
                row.Item("Campo5") = dr("NUMLINEA")
                row.Item("Campo6") = dr("DESLINEA")
                row.Item("Campo7") = dr("NUMRUBRO")
                row.Item("Campo8") = dr("DESRUBRO")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESCRIPCION")

                promedio = 0
                importe = dr("IMPORTENETO")
                'importe = 0
                'If tipoImporte = 0 Then
                'importe = dr("IMPORTENETO")
                'Else
                'importe = dr("IMPORTEBRUTO")
                'End If

                Select Case CType(dr("MESFECHAINGRESO"), Integer)
                    Case Is = 1
                        row.Item("Numero1") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 2
                        row.Item("Numero2") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 3
                        row.Item("Numero3") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 4
                        row.Item("Numero4") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 5
                        row.Item("Numero5") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 6
                        row.Item("Numero6") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 7
                        row.Item("Numero7") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 8
                        row.Item("Numero8") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 9
                        row.Item("Numero9") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 10
                        row.Item("Numero10") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 11
                        row.Item("Numero11") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                    Case Is = 12
                        row.Item("Numero12") = importe / cotizacion
                        promedio = promedio + (importe / cotizacion)
                End Select

                Dim i As Integer
                For i = 1 To 12
                    If IsNumeric(row.Item("Numero" & i)) = False Then
                        row.Item("Numero" & i) = 0
                    End If
                Next

                row.Item("Numero13") = (promedio / 12)
                row.Item("Numero14") = promedio

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            'Numero1 = 0 Encabezado en primera hoja
            'Numero1 = 1 Encabezado en todas las hojas
            row.Item("Numero1") = titulo

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = familia
            row.Item("Campo3") = linea
            row.Item("Campo4") = rubro

            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdefamilia
            row.Item("Campo8") = hastafamilia
            row.Item("Campo9") = desdelinea
            row.Item("Campo10") = hastalinea
            row.Item("Campo11") = desderubro
            row.Item("Campo12") = hastarubro
            row.Item("Campo20") = desdecategoria
            row.Item("Campo21") = hastacategoria
            row.Item("Campo22") = desdesubcategoria
            row.Item("Campo23") = hastasubcategoria
            row.Item("Campo24") = desdemarca
            row.Item("Campo25") = hastamarca
            row.Item("Campo13") = desdeproducto
            row.Item("Campo14") = hastaproducto
            row.Item("Campo15") = desdeFecha
            row.Item("Campo16") = hastaFecha
            row.Item("Campo17") = moneda
            row.Item("Campo18") = cotizacion

            'If tipoImporte = 0 Then
            '    row.Item("Campo19") = " Neto"
            'Else
            '    row.Item("Campo19") = " Bruto"
            'End If

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfVentasxVendedorProductoListaPrecio(ByVal desdesucursal As String, ByVal hastasucursal As String, _
    ByVal desdevendedor As String, ByVal hastavendedor As String, _
    ByVal desdecliente As String, ByVal hastacliente As String, _
    ByVal desdeproducto As String, ByVal hastaproducto As String, _
    ByVal familia As String, ByVal desdefamilia As String, ByVal hastafamilia As String, _
    ByVal linea As String, ByVal desdelinea As String, ByVal hastalinea As String, _
    ByVal rubro As String, ByVal desderubro As String, ByVal hastarubro As String, _
    ByVal desdecategoria As String, ByVal hastacategoria As String, _
    ByVal desdesubcategoria As String, ByVal hastasubcategoria As String, _
    ByVal desdemarca As String, ByVal hastamarca As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdemoneda As String, ByVal hastamoneda As String, _
    ByVal canDecimales As Integer, ByVal condiciones As String, _
    ByVal titulo As Byte, ByVal tipo As Byte, ByVal Moneda1 As String, ByVal CODLISTA As Integer, ByVal LISTA As String) As DataSet

        ds.Clear()

        sql = ""
        '        sql = "SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL,  " & _
        '        " CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA, " & _
        '        " CAST(V.FECHAVENTA AS DATETIME) AS ORDENFECHA, " & _
        '        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, " & _
        '        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM (V.NUMVENTA) AS NROCOMPROBANTE,  " & _
        '        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,  " & _
        '        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS VENDEDOR,  " & _
        '        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        '        " VD.CANTIDADVENTA AS CANTIDAD,  " & _
        '        " VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO,  " & _
        '        " VD.PRECIOVENTANETO AS PRECIOVENTANETO, " & _
        '        " ((VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * VD.[DESC]) / 100) AS MONTODESCUENTO,  " & _
        '        " VD.CANTIDADVENTA * VD.PRECIOVENTANETO AS TOTALVENTA, " & _
        '        " RTRIM(MO.NUMMONEDA) AS NUMMONEDA, RTRIM(MO.DESMONEDA) AS MONEDA, MO.CODMONEDA AS CODMONEDA,  " & _
        '        " 0 AS ORDEN " & _
        '        " FROM VENTAS V  " & _
        '        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
        '        " INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA  " & _
        '        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE  " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        '        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR  " & _
        '        " INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA  " & _
        '        " INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO  " & _
        '        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        '        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        '        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        '        " LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA " & _
        '        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        '        " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
        '        " WHERE V.ESTADO = 0 And V.CODEMPRESA = " & empCodigo & "  " & condiciones & " " & _
        '        " AND V.FECHAVENTA BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME) " & _
        '" UNION ALL " & _
        '        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS SUCURSAL,  " & _
        '        " CONVERT(VARCHAR(10),V.FECHADEVOLUCION,103) AS FECHAVENTA, " & _
        '        " CAST(V.FECHADEVOLUCION AS DATETIME) AS ORDENFECHA, " & _
        '        " RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, " & _
        '        " RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, RTRIM(V.NUMDEVOLUCION) AS NROCOMPROBANTE,  " & _
        '        " RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,  " & _
        '        " RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VE.DESVENDEDOR) AS VENDEDOR,  " & _
        '        " V.COTIZACION1 AS COTIZACION, RTRIM(P.CODIGOBARRA) AS CODIGO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,  " & _
        '        " VD.CANTIDADDEVUELTA AS CANTIDAD,  " & _
        '        " VD.PRECIOBRUTO AS PRECIOBRUTO,  " & _
        '        " VD.PRECIONETO AS PRECIONETO, " & _
        '        " ((VD.PRECIOBRUTO * VD.CANTIDADDEVUELTA * VD.[DESC]) / 100) AS MONTODESCUENTO,  " & _
        '        " VD.CANTIDADDEVUELTA * VD.PRECIONETO AS TOTALVENTA, " & _
        '        " RTRIM(MO.NUMMONEDA) AS NUMMONEDA, RTRIM(MO.DESMONEDA) AS MONEDA, MO.CODMONEDA AS CODMONEDA,  " & _
        '        " 1 AS ORDEN " & _
        '        " FROM DEVOLUCION V  " & _
        '        " INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE  " & _
        '        " INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA  " & _
        '        " INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE  " & _
        '        " INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL  " & _
        '        " INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR  " & _
        '        " INNER JOIN DEVOLUCIONDETALLE VD ON V.CODDEVOLUCION = VD.CODDEVOLUCION  " & _
        '        " INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO  " & _
        '        " INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA " & _
        '        " INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA " & _
        '        " INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO " & _
        '        " LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA " & _
        '        " LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA " & _
        '        " LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
        '        " WHERE V.CODEMPRESA =  " & empCodigo & "  AND V.ESTADO = 0 " & condiciones & " " & _
        '        " AND V.FECHADEVOLUCION BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME) " & _
        '        " ORDER BY VENDEDOR, NUMMONEDA, DESCRIPCION , ORDENFECHA, TIPOCOMPROBANTE, NROCOMPROBANTE "
        sql = " " & _
        " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, " & _
" RTRIM(S.DESSUCURSAL) AS SUCURSAL,   " & _
" CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHAVENTA,  " & _
" CAST(V.FECHAVENTA AS DATETIME) AS ORDENFECHA,  " & _
" RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE,  " & _
" RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE,  " & _
" RTRIM (V.NUMVENTA) AS NROCOMPROBANTE,   " & _
" RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,   " & _
" RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR, " & _
" RTRIM(VE.DESVENDEDOR) AS VENDEDOR,   " & _
" V.COTIZACION1 AS COTIZACION, " & _
" RTRIM(P.CODIGOBARRA) AS CODIGO, " & _
" RTRIM(P.DESPRODUCTO) AS DESCRIPCION,   " & _
" VD.CANTIDADVENTA AS CANTIDAD,   " & _
" VD.PRECIOVENTABRUTO AS PRECIOVENTABRUTO,  " & _
" VD.PRECIOVENTANETO AS PRECIOVENTANETO,  " & _
" ((VD.PRECIOVENTABRUTO * VD.CANTIDADVENTA * VD.[DESC]) / 100) AS MONTODESCUENTO,   " & _
" VD.CANTIDADVENTA * VD.PRECIOVENTANETO AS TOTALVENTA,  " & _
" RTRIM(MO.NUMMONEDA) AS NUMMONEDA, " & _
" RTRIM(MO.DESMONEDA) AS MONEDA, " & _
" MO.CODMONEDA AS CODMONEDA,   " & _
" ISNULL((select case when max(pr.CODMONEDA) = 1  " & _
" then max(pr.PRECIOVENTA) " & _
" else max(pr.PRECIOVENTA) * V.COTIZACION2 end " & _
"  from PRECIO pr " & _
" inner join TIPOLISTA tl on tl.CODLISTA = pr.CODLISTA " & _
" where p.CODPRODUCTO = pr.CODPRODUCTO " & _
" and tl.CODlista = " & CODLISTA & " ),0) as PRECIOLISTA, " & _
" ISNULL((select case when max(pr.CODMONEDA) = 1  " & _
" then max(pr.PRECIOVENTA)  * VD.CANTIDADVENTA  " & _
" else (max(pr.PRECIOVENTA) * V.COTIZACION2) * VD.CANTIDADVENTA  end " & _
"  from PRECIO pr " & _
" inner join TIPOLISTA tl on tl.CODLISTA = pr.CODLISTA " & _
" where p.CODPRODUCTO = pr.CODPRODUCTO " & _
" and tl.CODlista = " & CODLISTA & " ),0) as TOTALPRECIOLISTA, " & _
" 0 AS ORDEN,   " & _
"  V.COTIZACION1 as COTIZACION1    " & _
" FROM VENTAS V   " & _
" INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE   " & _
" INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA   " & _
" INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE   " & _
" INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL   " & _
" INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR   " & _
" INNER JOIN VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA   " & _
" INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
" INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA  " & _
" INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA  " & _
" INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO  " & _
" LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA  " & _
" LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA  " & _
" LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
" WHERE V.ESTADO = 0 " & _
" And V.CODEMPRESA =  " & empCodigo & " " & _
" " & condiciones & " " & _
" AND V.FECHAVENTA BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) " & _
" AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME)   " & _
" " & _
" " & _
" UNION ALL " & _
" " & _
" " & _
" SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL,  " & _
" RTRIM(S.DESSUCURSAL) AS SUCURSAL,    " & _
" CONVERT(VARCHAR(10),V.FECHADEVOLUCION,103) AS FECHAVENTA,   " & _
" CAST(V.FECHADEVOLUCION AS DATETIME) AS ORDENFECHA,   " & _
" RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE,  " & _
" RTRIM(T.DESCOMPROBANTE) AS TIPOCOMPROBANTE, " & _
" RTRIM(V.NUMDEVOLUCION) AS NROCOMPROBANTE,   " & _
" RTRIM(RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE))AS CLIENTE,   " & _
" RTRIM(VE.NUMVENDEDOR) AS NUMVENDEDOR,  " & _
" RTRIM(VE.DESVENDEDOR) AS VENDEDOR,   " & _
" V.COTIZACION1 AS COTIZACION, " & _
" RTRIM(P.CODIGOBARRA) AS CODIGO, " & _
" RTRIM(P.DESPRODUCTO) AS DESCRIPCION,   " & _
" VD.CANTIDADDEVUELTA AS CANTIDAD,   " & _
" VD.PRECIOBRUTO AS PRECIOBRUTO,   " & _
" VD.PRECIONETO AS PRECIONETO,  " & _
" ((VD.PRECIOBRUTO * VD.CANTIDADDEVUELTA * VD.[DESC]) / 100) AS MONTODESCUENTO,   " & _
" VD.CANTIDADDEVUELTA * VD.PRECIONETO AS TOTALVENTA,  " & _
" RTRIM(MO.NUMMONEDA) AS NUMMONEDA, " & _
" RTRIM(MO.DESMONEDA) AS MONEDA, " & _
" MO.CODMONEDA AS CODMONEDA, " & _
" ISNULL((select case when max(pr.CODMONEDA) = 1  " & _
" then max(pr.PRECIOVENTA) " & _
" else max(pr.PRECIOVENTA) * V.COTIZACION2 end " & _
"  from PRECIO pr " & _
" inner join TIPOLISTA tl on tl.CODLISTA = pr.CODLISTA " & _
" where p.CODPRODUCTO = pr.CODPRODUCTO " & _
" and tl.CODlista = " & CODLISTA & " ),0) as PRECIOLISTA, " & _
" ISNULL((select case when max(pr.CODMONEDA) = 1  " & _
" then max(pr.PRECIOVENTA)  * VD.CANTIDADDEVUELTA  " & _
" else (max(pr.PRECIOVENTA) * V.COTIZACION2) * VD.CANTIDADDEVUELTA end " & _
"  from PRECIO pr " & _
" inner join TIPOLISTA tl on tl.CODLISTA = pr.CODLISTA " & _
" where p.CODPRODUCTO = pr.CODPRODUCTO " & _
" and tl.CODlista = " & CODLISTA & " ),0) as TOTALPRECIOLISTA, " & _
" 1 AS ORDEN,  " & _
"  V.COTIZACION1 as COTIZACION1    " & _
" FROM DEVOLUCION V   " & _
" INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE   " & _
" INNER JOIN MONEDA MO ON V.CODMONEDA = MO.CODMONEDA   " & _
" INNER JOIN TIPOCOMPROBANTE T ON V.CODCOMPROBANTE = T.CODCOMPROBANTE   " & _
" INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL   " & _
" INNER JOIN VENDEDOR VE ON V.CODVENDEDOR = VE.CODVENDEDOR   " & _
" INNER JOIN DEVOLUCIONDETALLE VD ON V.CODDEVOLUCION = VD.CODDEVOLUCION   " & _
" INNER JOIN PRODUCTOs P ON VD.CODPRODUCTO = P.CODPRODUCTO   " & _
" INNER JOIN FAMILIA F ON F.CODFAMILIA = P.CODFAMILIA  " & _
" INNER JOIN LINEA L ON P.CODLINEA = L.CODLINEA  " & _
" INNER JOIN RUBRO R ON P.CODRUBRO = R.CODRUBRO  " & _
" LEFT OUTER JOIN CATEGORIAPRODUCTO C ON P.CODCATEGORIA = C.CODCATEGORIA  " & _
" LEFT OUTER JOIN SUBCATEGORIAPRODUCTO SC ON P.CODSUBCATEGORIA = SC.CODSUBCATEGORIA  " & _
" LEFT OUTER JOIN MARCA M ON P.CODMARCA = M.CODMARCA " & _
" WHERE V.CODEMPRESA = " & empCodigo & " AND V.ESTADO = 0  " & condiciones & " " & _
" AND V.FECHADEVOLUCION BETWEEN CAST('" & desdeFecha & " 00:00:00 ' AS DATETIME) " & _
" AND CAST('" & hastaFecha & " 23:59:59 ' AS DATETIME)  " & _
" ORDER BY VENDEDOR, NUMMONEDA, DESCRIPCION , ORDENFECHA, TIPOCOMPROBANTE, NROCOMPROBANTE "





        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            cmd.CommandTimeout = 300000
            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMVENDEDOR")
                row.Item("Campo11") = dr("VENDEDOR")
                ''' row.Item("Campo2") = dr("CODIGO")
                row.Item("Campo12") = dr("NUMMONEDA")
                row.Item("Campo13") = dr("MONEDA")
                row.Item("Campo10") = dr("DESCRIPCION")
                row.Item("Campo4") = dr("NUMCOMPROBANTE")
                row.Item("Campo3") = dr("NROCOMPROBANTE")
                row.Item("Campo7") = dr("FECHAVENTA")
                row.Item("Campo8") = dr("SUCURSAL")
                row.Item("Campo9") = dr("NUMMONEDA")

                row.Item("Numero2") = dr("PRECIOVENTANETO")
                row.Item("Campo14") = dr("CODIGO")
                Dim redondeo As Integer = 0
                If dr("NUMMONEDA") = Moneda1 Then
                    redondeo = 0
                Else
                    redondeo = 2
                End If
                Select Case CType(dr("ORDEN"), Integer)
                    Case Is = 0
                        row.Item("Numero1") = dr("CANTIDAD")
                        row.Item("Numero3") = Math.Round(dr("TOTALVENTA"), redondeo)
                        row.Item("Numero8") = Math.Round(dr("TOTALVENTA") * dr("COTIZACION"), redondeo)
                        row.Item("Numero4") = dr("PRECIOLISTA")
                        row.Item("Numero9") = dr("TOTALPRECIOLISTA")
                        row.Item("Numero10") = dr("COTIZACION1")

                    Case Is = 1
                        row.Item("Numero1") = -dr("CANTIDAD")
                        row.Item("Numero3") = -Math.Round(dr("TOTALVENTA"), redondeo)
                        row.Item("Numero8") = -Math.Round(dr("TOTALVENTA") * dr("COTIZACION"), redondeo)
                        row.Item("Numero4") = -dr("PRECIOLISTA")
                        row.Item("Numero9") = -dr("TOTALPRECIOLISTA")
                        row.Item("Numero10") = dr("COTIZACION1")

                End Select


                ds.Tables("Detalle").Rows.Add(row)

                'End If
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Numero1") = titulo
            row.Item("Campo1") = empDescripcion
            row.Item("Campo5") = desdesucursal
            row.Item("Campo6") = hastasucursal
            row.Item("Campo7") = desdevendedor
            row.Item("Campo8") = hastavendedor
            row.Item("Campo9") = desdecliente
            row.Item("Campo10") = hastacliente
            row.Item("Campo11") = desdeproducto
            row.Item("Campo12") = hastaproducto
            row.Item("Campo13") = desdefamilia
            row.Item("Campo14") = hastafamilia
            row.Item("Campo15") = desdelinea
            row.Item("Campo16") = hastalinea
            row.Item("Campo17") = desderubro
            row.Item("Campo18") = hastarubro
            row.Item("Campo19") = desdecategoria
            row.Item("Campo20") = hastacategoria
            row.Item("Campo21") = desdesubcategoria
            row.Item("Campo22") = hastasubcategoria
            row.Item("Campo23") = desdemarca
            row.Item("Campo24") = hastamarca
            row.Item("Campo25") = desdeFecha
            row.Item("Campo26") = hastaFecha
            row.Item("Campo27") = desdemoneda
            row.Item("Campo28") = hastamoneda
            row.Item("Campo29") = LISTA
            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infTecnicos(ByVal tipo As Byte, Optional ByVal TITULO As String = "") As DataSet
        ds.Clear()

        sql = ""
        sql = "SELECT REPLICATE('0',5-LEN(RTRIM(NUMTECNICO)))+LTRIM(RTRIM(NUMTECNICO)) AS NUMERO, " & _
        "RTRIM(NUMTECNICO) AS CODIGO, RTRIM(DESTECNICO) AS DESCRIPCION FROM TECNICOS " & _
        "WHERE CODEMPRESA = " & empCodigo & " " & _
        "ORDER BY "

        If tipo = 1 Then
            sql = sql + " NUMERO"
        Else
            sql = sql + " CODIGO"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("CODIGO")
                row.Item("Campo2") = dr("DESCRIPCION")

                ds.Tables("Detalle").Rows.Add(row)
            Loop
            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = TITULO

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infVentaGarantia(ByVal codVenta As Long, ByVal empDescripcion As String, _
                                     ByVal titulo As String)

        Dim cliente As String

        ds.Clear()

        sql = ""
        sql = "SELECT VG.CODVENTA, VG.CODPRODUCTO, PR.CODIGOBARRA, PR.DESPRODUCTO, " & _
        "VG.CODEMPRESA, VG.SERIE, VG.GARANTIA, " & _
        "CASE VG.TIPOGARANTIA " & _
        " WHEN 'D' THEN 'DIAS' " & _
        " WHEN 'M' THEN 'MESES' " & _
        " WHEN 'Y' THEN 'AŃOS' " & _
        "END AS TIPOGARANTIA, " & _
        "ISNULL(CONVERT(VARCHAR(10), VG.FECINIGARANTIA, 103), '__/__/____') AS FECINIGARANTIA, " & _
        "ISNULL(CONVERT(VARCHAR(10), VG.FECFINGARANTIA, 103), '__/__/____') AS FECFINGARANTIA, " & _
        "ISNULL(VG.CODCLIENTEMAYORISTA, 0) AS CODCLIENTEMAYORISTA, " & _
        "ISNULL(VG.CODCLIENTEFINAL, 0) AS CODCLIENTEFINAL, " & _
        "WHEN 0 THEN RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) " & _
        " ELSE '' END AS CLIENTE " & _
        "FROM VENTASGARANTIA VG " & _
        "INNER JOIN PRODUCTOS PR ON VG.CODPRODUCTO = PR.CODPRODUCTO " & _
        "LEFT OUTER JOIN CLIENTES CL ON VG.CODCLIENTEFINAL = CL.CODCLIENTE " & _
        "WHERE CODVENTA = " & codVenta & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow

                row.Item("Campo1") = dr("CODIGOBARRA")
                row.Item("Campo2") = dr("DESPRODUCTO")
                row.Item("Campo3") = dr("SERIE")
                row.Item("Campo4") = dr("GARANTIA")
                row.Item("Campo5") = dr("TIPOGARANTIA")
                row.Item("Campo6") = dr("FECINIGARANTIA")
                row.Item("Campo7") = dr("FECFINGARANTIA")
                cliente = dr("CLIENTE")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            row = ds.Tables("Cabecera").NewRow

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = titulo
            row.Item("Campo3") = cliente

            ds.Tables("Cabecera").Rows.Add(row)

        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infVentaGarantia2(ByVal codVenta As Long, ByVal empDescripcion As String, _
                                        ByVal titulo As String)
        Dim filas As Integer

        ds.Clear()

        sql = ""
        sql = "SELECT VG.CODVENTA, VG.CODPRODUCTO, PR.CODIGOBARRA, PR.DESPRODUCTO, " & _
        "VG.CODEMPRESA, VG.SERIE, VG.GARANTIA, " & _
        "CASE VG.TIPOGARANTIA " & _
        " WHEN 'D' THEN 'DIAS' " & _
        " WHEN 'M' THEN 'MESES' " & _
        " WHEN 'Y' THEN 'AŃOS' " & _
        "END AS TIPOGARANTIA, " & _
        "ISNULL(CONVERT(VARCHAR(10), VG.FECINIGARANTIA, 103), '__/__/____') AS FECINIGARANTIA, " & _
        "ISNULL(CONVERT(VARCHAR(10), VG.FECFINGARANTIA, 103), '__/__/____') AS FECFINGARANTIA, " & _
        "ISNULL(VG.CODCLIENTEMAYORISTA, 0) AS CODCLIENTEMAYORISTA, " & _
        "ISNULL(VG.CODCLIENTEFINAL, 0) AS CODCLIENTEFINAL, " & _
        "RTRIM(CL.NOMBRE) + ' ' + RTRIM(CL.APELLIDO) AS CLIENTE, " & _
        "RTRIM(CL.DIRECCION) AS DIRECCION, RTRIM(VE.NUMVENTA) AS NUMVENTA " & _
        "FROM VENTASGARANTIA VG " & _
        "INNER JOIN PRODUCTOS PR ON VG.CODPRODUCTO = PR.CODPRODUCTO " & _
        "INNER JOIN VENTAS VE ON VE.CODVENTA = VG.CODVENTA " & _
        "INNER JOIN CLIENTES CL ON VE.CODCLIENTE = CL.CODCLIENTE " & _
        "WHERE VG.CODVENTA = " & codVenta & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow

                row.Item("Campo1") = dr("CODIGOBARRA")
                row.Item("Campo2") = dr("DESPRODUCTO")
                row.Item("Campo3") = dr("SERIE")
                row.Item("Campo4") = dr("GARANTIA")
                row.Item("Campo5") = dr("TIPOGARANTIA")
                row.Item("Campo6") = dr("FECINIGARANTIA")
                row.Item("Campo7") = dr("FECFINGARANTIA")
                row.Item("Campo8") = dr("CLIENTE")
                row.Item("Campo9") = dr("DIRECCION")
                row.Item("Campo10") = dr("NUMVENTA")

                'Para insertar salto de página.
                row.Item("Numero1") = 1

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            'Para no insertar salto de página.
            filas = ds.Tables("Detalle").Rows.Count

            If filas > 0 Then
                ds.Tables("Detalle").Rows(filas - 1)("Numero1") = 0
            End If

            'row = ds.Tables("Cabecera").NewRow

            'row.Item("Campo1") = empDescripcion
            'row.Item("Campo2") = titulo
            'row.Item("Campo3") = cliente

            'ds.Tables("Cabecera").Rows.Add(row)

        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infVentaGarantiaStickers(ByVal codVenta As Long, _
                                             ByVal empDescripcion As String, _
                                             ByVal titulo As String)

        Dim cliente As String

        ds.Clear()

        sql = ""
        sql = "SELECT VG.CODVENTA, VG.CODPRODUCTO, PR.CODIGOBARRA, SUBSTRING(PR.DESPRODUCTO, 1, 30) AS DESPRODUCTO, " & _
        "VG.CODEMPRESA, VG.SERIE, VG.GARANTIA, " & _
        "CASE VG.TIPOGARANTIA " & _
        " WHEN 'D' THEN 'DIAS' " & _
        " WHEN 'M' THEN 'MESES' " & _
        " WHEN 'Y' THEN 'AŃOS' " & _
        "END AS TIPOGARANTIA, " & _
        "CASE CL.MAYORISTA " & _
        " WHEN 0 THEN ISNULL(CONVERT(VARCHAR(10), VG.FECINIGARANTIA, 103), '__/__/____') " & _
        "ELSE '__/__/____' END AS FECINIGARANTIA, " & _
        "CASE CL.MAYORISTA " & _
        " WHEN 0 THEN ISNULL(CONVERT(VARCHAR(10), VG.FECFINGARANTIA, 103), '__/__/____') " & _
        "ELSE '__/__/____' END AS FECFINGARANTIA, " & _
        "ISNULL(VG.CODCLIENTEMAYORISTA, 0) AS CODCLIENTEMAYORISTA, " & _
        "ISNULL(VG.CODCLIENTEFINAL, 0) AS CODCLIENTEFINAL, " & _
        "CASE CL.MAYORISTA " & _
        "WHEN 0 THEN RTRIM(CL.APELLIDO) + ' ' + RTRIM(CL.NOMBRE) " & _
        " ELSE '' END AS CLIENTE " & _
        "FROM VENTASGARANTIA VG " & _
        "INNER JOIN PRODUCTOS PR ON VG.CODPRODUCTO = PR.CODPRODUCTO " & _
        "LEFT OUTER JOIN CLIENTES CL ON VG.CODCLIENTEFINAL = CL.CODCLIENTE " & _
        "WHERE CODVENTA = " & codVenta & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow

                row.Item("Campo1") = dr("CODIGOBARRA")
                row.Item("Campo2") = dr("DESPRODUCTO")
                row.Item("Campo3") = dr("SERIE")
                row.Item("Campo4") = dr("GARANTIA")
                row.Item("Campo5") = dr("TIPOGARANTIA")
                row.Item("Campo6") = dr("FECINIGARANTIA")
                row.Item("Campo7") = dr("FECFINGARANTIA")
                row.Item("Campo8") = dr("CLIENTE")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function infVentaGarantiaVale(ByVal codVenta As Long, _
                                         ByVal empDescripcion As String, _
                                         ByVal titulo As String)

        Dim cliente As String

        ds.Clear()

        sql = ""
        sql = "SELECT VG.CODVENTA, CONVERT(VARCHAR(10), VE.FECHAVENTA, 103) AS FECHAVENTA, " & _
        "VG.CODPRODUCTO, PR.CODIGOBARRA, SUBSTRING(PR.DESPRODUCTO, 1, 30) AS DESPRODUCTO, " & _
        "VG.CODEMPRESA, VG.SERIE, VG.GARANTIA, " & _
        "ISNULL(VG.CODCLIENTEMAYORISTA, 0) AS CODCLIENTEMAYORISTA, " & _
        "ISNULL(RTRIM(CLM.APELLIDO) + RTRIM(CLM.NOMBRE), '') AS DESCLIENTEMAYORISTA, " & _
        "ISNULL(VG.CODCLIENTEFINAL, 0) AS CODCLIENTEFINAL, " & _
        "ISNULL(RTRIM(CLF.APELLIDO) + RTRIM(CLF.NOMBRE), '') AS DESCLIENTEFINAL " & _
        "FROM VENTASGARANTIA VG " & _
        "INNER JOIN VENTAS VE ON VE.CODVENTA = VG.CODVENTA " & _
        "INNER JOIN PRODUCTOS PR ON VG.CODPRODUCTO = PR.CODPRODUCTO " & _
        "LEFT OUTER JOIN CLIENTES CLM ON VG.CODCLIENTEMAYORISTA = CLM.CODCLIENTE " & _
        "LEFT OUTER JOIN CLIENTES CLF ON VG.CODCLIENTEFINAL = CLF.CODCLIENTE " & _
        "WHERE VE.CODVENTA = " & codVenta & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read
                row = ds.Tables("Detalle").NewRow

                row.Item("Campo1") = dr("DESCLIENTEFINAL")
                row.Item("Campo2") = dr("FECHAVENTA")
                row.Item("Campo3") = dr("SERIE")
                row.Item("Campo4") = dr("DESCLIENTEMAYORISTA")

                ds.Tables("Detalle").Rows.Add(row)
            Loop

        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function


    Public Sub ImprimirTicket_NUEVO(ByVal NombreImpresora As String, _
         ByVal Codventa As Long, _
         ByVal Codsucursal As Long, _
         ByVal Descobrador As String, _
         ByVal candecimales As Integer, _
         ByVal empCodigo As Long, ByVal cambio As String, ByVal efectivo As String, ByVal puerto As String, ByVal NroTimbrado As String, ByVal fechavalidez As String, Optional ByVal boleta As String = "")
        Dim Ticket As New BarControls.Ticket

        Dim importe As New TxtMoneda.TxtMoneda
        Dim cantidad As New TxtMoneda.TxtMoneda
        Dim descuento As New TxtMoneda.TxtMoneda
        Dim precio As New TxtMoneda.TxtMoneda
        Dim vuelto As New TxtMoneda.TxtMoneda
        Dim cobrado As New TxtMoneda.TxtMoneda
        Dim gentileza As New TxtMoneda.TxtMoneda
        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalIva As Decimal
        Dim totalDescuento As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
        Dim sumaIva5, sumaIva10 As Decimal
        Dim descuentoexenta, descuento5, descuento10 As Decimal
        Dim imptotal As Decimal

        descuentoexenta = 0
        descuento5 = 0
        descuento10 = 0

        'For i = 1 To 3
        imptotal = 0
        sumaIva5 = 0
        sumaIva10 = 0
        totalDescuentoExenta = 0
        totalDescuentoGravada5 = 0
        totalDescuentoGravada10 = 0

        importe.Clear()
        cantidad.Clear()
        descuento.Clear()
        precio.Clear()
        vuelto.Clear()
        cobrado.Clear()
        gentileza.Clear()

        If candecimales <> 0 Then
            candecimales = 2
        End If

        importe.TxtMonedaDecimales = candecimales
        cantidad.TxtMonedaDecimales = 2
        descuento.TxtMonedaDecimales = candecimales
        precio.TxtMonedaDecimales = candecimales
        vuelto.TxtMonedaDecimales = candecimales
        cobrado.TxtMonedaDecimales = candecimales


        'Ticket.ImagenCabecera.FromFile("C:\edu.jpg")  'esta propiedad no es obligatoria 
        'Ticket.LongitudMaxima = 35
        'Ticket.LongitudMaximaDescripcion = 10
        'Ticket.CaracterParaLineas = "="
        'Ticket.Margen = 2
        'Ticket.NombreFuente = "Device Font 17cpi"
        'Ticket.TamańoFuente = 8
        'Ticket.PuertoImpresora = puerto

        'ser = New BD.ABD
        'cmd = New SqlCommand
        'cnn = ser.Abrir
        sql = ""
        Try
            sql = "SELECT RTRIM(E.NOMFANTASIA) AS NOMFANTASIA, " & _
                  "ISNULL(RTRIM(E.RUCCONTRIBUYENTE),'') AS RUC, " & _
                  "ISNULL(RTRIM(E.NOMREPRESENTANTE),'') AS NOMREPRESENTANTE, " & _
                  "ISNULL(RTRIM(S.DIRECCION),'') AS DIRECCION, " & _
                  "RTRIM(E.TELEFONO) AS TELEFONO   " & _
                  "FROM EMPRESA E, SUCURSAL S " & _
                  "WHERE E.CODEMPRESA =  " & empCodigo & " AND S.CODSUCURSAL = " & Codsucursal & " AND S.CODEMPRESA = E.CODEMPRESA "

            'Ticket.AddHeaderLine("    COMERCIAL CHAQUEŃA     ")
            '' Ticket.AddHeaderLine("        D y C  Confecciones")
            'Ticket.AddHeaderLine("     de Juan Carlos xxxxxx ")
            'Ticket.AddHeaderLine("          RUC : 422832-4   ")

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            Do While dr.Read
                Dim nomFantasia As String
                Dim rucEmpresa As String
                Dim direccionEmpresa As String
                Dim telefonoEmpresa As String

                nomFantasia = RecortaCaracteres(dr("NOMFANTASIA"))
                rucEmpresa = RecortaCaracteres("R.U.C. " + dr("RUC"))
                direccionEmpresa = RecortaCaracteres(dr("DIRECCION"))
                telefonoEmpresa = RecortaCaracteres("TEL. " & dr("TELEFONO"))

                Ticket.AddHeaderLine(RecortaCaracteres("* * * * *"))
                Ticket.AddHeaderLine("")
                Ticket.AddHeaderLine(nomFantasia)
                ' Ticket.AddHeaderLine("     de " + dr("NOMREPRESENTANTE"))
                Ticket.AddHeaderLine(rucEmpresa)
                Ticket.AddHeaderLine(direccionEmpresa)
                Ticket.AddHeaderLine(telefonoEmpresa)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
        End Try

        Ticket.AddHeaderLine(RecortaCaracteres("NRO. TIMBRADO " & NroTimbrado))
        Ticket.AddHeaderLine(RecortaCaracteres("VALIDEZ " & fechavalidez))
        Ticket.AddHeaderLine("")

        Dim contador As Long = 0
        Dim subtotal As Decimal = 0.0

        Dim numventa As String
        Dim cliente As String = ""
        Dim descripcion As String = ""
        Dim codigo As String = ""
        Dim cedula, ruc As String
        Dim sucursal As String
        Dim direccion As String = ""
        Dim fecha As String
        Dim vendedor As String = ""
        Dim dirCliente As String = ""
        Dim telefono As String = ""
        Dim MODALIDADPAGO As String = ""

        Try
            sql = ""
            sql = "SELECT V.CODVENTA AS CODVENTA, V.TOTALDESCUENTO AS DESCUENTO, VD.CANTIDADVENTA AS CANTIDAD, RTRIM(P.CODIGOBARRA) AS CODPRODUCTO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,VD.PRECIOVENTABRUTO AS PRECIO, " & _
                  "V.NUMVENTA AS NUMVENTA,V.MODALIDADPAGO, " & _
                  "VD.PRECIOVENTABRUTO AS PRECIOVENTA, " & _
                  "VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO AS TOTAL, V.TOTALEXENTA, V.TOTALIVA, " & _
                  "CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHA, " & _
                  "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
                  "RTRIM(CL.DIRECCION) AS DIRCLIENTE, RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                  "RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                  "RTRIM(CL.NUMCEDULA) AS CEDULA, ISNULL(RTRIM(CL.RUC),'') AS RUC, " & _
                  "P.CODPRODUCTO AS CODPRODUCTO,  " & _
                  "RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
                  "RTRIM(S.DIRECCION) AS DIRECCION, VD.IVA, VD.[DESC], " & _
                  "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR " & _
                  "FROM VENTAS V INNER JOIN  VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                  "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                  "INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                  "INNER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                  "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                  "WHERE V.CODVENTA = " & Codventa & " ORDER BY LINEANUMERO "


            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            contador = 0
            Dim largo As Long
            Dim preciotexto, importetexto As String

            Do While dr.Read
                contador += 1
                codigo = dr("CODPRODUCTO")
                precio.Text = dr("PRECIOVENTA")
                precio.TextoSQL(precio.Text)
                importe.Text = dr("TOTAL")
                importe.TextoSQL(importe.Text)
                subtotal += importe.Text
                descuento.Text = dr("DESCUENTO")
                numventa = dr("NUMVENTA")
                'cliente = dr("CLIENTE") & "  " & dr("NUMCLIENTE")
                cliente = dr("CLIENTE")
                ruc = dr("RUC")
                'cedula = dr("CEDULA")
                sucursal = dr("SUCURSAL")
                direccion = dr("DIRECCION")
                descripcion = dr("DESCRIPCION")
                fecha = dr("FECHA")
                cantidad.Text = dr("CANTIDAD")
                cantidad.TextoSQL(cantidad.Text)
                'gentileza.Text = dr("GENTILEZA")
                'gentileza.TextoSQL(gentileza.Text)
                vendedor = dr("DESVENDEDOR")
                totalExenta = dr("totalexenta")
                dirCliente = dr("DIRCLIENTE")
                telefono = dr("TELEFONO")
                MODALIDADPAGO = dr("MODALIDADPAGO")

                'Ticket.AddItem(codigo + "  " + descripcion, "", "")
                Ticket.AddItem(descripcion, "", "")

                'If descripcion.Length > 11 Then
                '    descripcion = descripcion.Substring(0, 10)
                'Else
                '    descripcion = descripcion + "                                            "
                'End If

                'Ticket.AddItem(descripcion.Substring(0, 10) + "  " + CStr(Math.Round(dr("CANTIDAD"), 2)), "", CStr(precio.Text) + "  " + CStr(importe.Text))

                preciotexto = precio.Text
                importetexto = importe.Text
                preciotexto = preciotexto.Replace(",", "")
                importetexto = importetexto.Replace(",", "")

                'Ticket.AddItem("          " + "  " + CStr(Math.Round(dr("CANTIDAD"), 2)), "", CStr(precio.Text) + "  " + CStr(importe.Text))
                'Ticket.AddItem("          " + "  " + CStr(Math.Round(dr("CANTIDAD"), 2)), "", preciotexto + "  " + importetexto)
                Ticket.AddItem(CStr(Math.Round(dr("CANTIDAD"), 2)).PadLeft(13), "", preciotexto.PadLeft(9) & importetexto.PadLeft(10))

                ''''''''''''''''
                'iva
                If dr("IVA") > 0 Then
                    'Productos Gravados

                    Select Case dr("IVA")
                        Case 5

                            If Not dr("DESC") = 0 Then
                                sumaIva5 = Math.Round(sumaIva5 + ((dr("PRECIOVENTA") * dr("CANTIDAD")) - (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD")), 0)
                                descuento5 = Math.Round(descuento5 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            Else
                                sumaIva5 = Math.Round(sumaIva5 + (dr("PRECIOVENTA") * dr("CANTIDAD")), 0)
                                descuento5 = Math.Round(descuento5 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            End If

                        Case 10
                            If Not dr("DESC") = 0 Then
                                sumaIva10 = Math.Round(sumaIva10 + ((dr("PRECIOVENTA") * dr("CANTIDAD")) - (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD")), 0)
                                descuento10 = Math.Round(descuento10 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            Else
                                sumaIva10 = Math.Round(sumaIva10 + (dr("PRECIOVENTA") * dr("CANTIDAD")), 0)
                                descuento10 = Math.Round(descuento10 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            End If
                    End Select
                End If
                ''''''''''''''''
                ''''''''''''''''

                'varTicket.AddItem("0620080202", "", "")
                'varTicket.AddItem("BERMUDA PI" + "  " + CStr(tempcantidad), "", "56.900  55.900")
            Loop
        Catch ex As Exception
            MsgBox(EX.ToString)
        Finally
            dr.Close()
        End Try
        cobrado.Text = efectivo
        vuelto.Text = cambio
        'vuelto.TextoSQL(vuelto.Text)

        If MODALIDADPAGO = "0" Then
            Ticket.AddHeaderLine(RecortaCaracteres("F A C T U R A  C O N T A D O"))
        Else
            Ticket.AddHeaderLine(RecortaCaracteres("F A C T U R A  C R E D I T O"))
        End If

        ' Ticket.AddHeaderLine(RecortaCaracteres("COMPROBANTE DE USO INTERNO"))

        Ticket.AddSubHeaderLine("FECHA   : " + fecha.Trim & " " & boleta)
        Ticket.AddSubHeaderLine("NUMERO  : " + numventa.Trim)
        Ticket.AddSubHeaderLine("CLIENTE : " + cliente.Trim)

        If ruc.Trim <> "" Then
            Ticket.AddSubHeaderLine("RUC/CI  : " & ruc)
        Else
            If cedula = "" Then
                Ticket.AddSubHeaderLine("RUC/CI  : XXXXX")
            Else
                Ticket.AddSubHeaderLine("RUC/CI  : " & cedula)
            End If
        End If

        'Ticket.AddSubHeaderLine("DIR.    : " + dirCliente.Trim)
        'Ticket.AddSubHeaderLine("TEL.    : " + telefono.Trim)

        'Dim total As Decimal = 0
        'total = subtotal - Math.Round(CType(descuento.Text, Decimal), candecimales) 'MODIFICADO SE AGREGO MATH ROUND


        'Dim pagar As New TxtMoneda.TxtMoneda

        'Dim lineafinal As String

        'pagar.TxtMonedaDecimales = candecimales
        'pagar.Text = total
        'pagar.TextoSQL(pagar.Text)
        ''codigo agregado
        'descuento.Text = Math.Round(CType(descuento.Text, Decimal), candecimales)
        ''----------------------------------------------------------------------
        'descuento.TextoSQL(descuento.Text)
        'Ticket.AddTotal("DESCUENTO", descuento.Text)
        'Ticket.AddTotal("TOTAL A PAGAR", pagar.Text)
        'Ticket.AddFooterLine("VENDEDOR : " + vendedor)
        'Ticket.AddFooterLine("CAJERO   : " + Descobrador)
        'Ticket.AddFooterLine(RecortaCaracteres("*MUCHAS GRACIAS POR SU COMPRA*"))
        ''Ticket.AddFooterLine(" - ")
        ''Ticket.AddFooterLine(" - ")
        ''Ticket.AddFooterLine(" - ")
        ''Ticket.AddFooterLine(" - ")
        ''Ticket.AddFooterLine(" - ")

        Dim total As Decimal = 0
        total = subtotal - Math.Round(CType(descuento.Text, Decimal), candecimales) 'MODIFICADO SE AGREGO MATH ROUND


        Dim pagar As New TxtMoneda.TxtMoneda
        pagar.TxtMonedaDecimales = candecimales
        pagar.Text = total
        pagar.TextoSQL(pagar.Text)
        'codigo agregado
        descuento.Text = Math.Round(CType(descuento.Text, Decimal), candecimales)
        '----------------------------------------------------------------------
        descuento.TextoSQL(descuento.Text)
        Ticket.AddTotal("DESCUENTO", descuento.Text)
        'Ticket.AddTotal("Atencion", gentileza.Text)
        Ticket.AddTotal("TOTAL A PAGAR", pagar.Text)
        pagar.Text = sumaIva10
        pagar.TextoSQL(pagar.Text)
        Ticket.AddTotal("Gravada 10%", pagar.Text)
        pagar.Text = sumaIva5
        pagar.TextoSQL(pagar.Text)
        Ticket.AddTotal("Gravada 5%", pagar.Text)
        'Ticket.AddTotal("", "")
        Ticket.AddTotal(RecortaCaracteres("--------------------------------"), "")

        totalIva = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, 0) + Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, 0)
        'pagar.Text = totalIva
        'pagar.TextoSQL(pagar.Text)
        'pagar.Text = sumaIva10 + sumaIva5
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("TOTAL GRAVADA", pagar.Text)
        'pagar.Text = Math.Round(CType(totalExenta, Decimal)) 'MODIFICADO SE AGREGO MATH ROUND
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("TOTAL EXENTA", pagar.Text)
        'Ticket.AddTotal(RecortaCaracteres("--------------------------------"), "")
        ' Ticket.AddTotal("", "")
        Ticket.AddTotal("LIQUIDACIÓN DEL IVA", "")
        pagar.TextoSQL(pagar.Text)
        pagar.Text = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, 0)
        pagar.TextoSQL(pagar.Text)
        Ticket.AddTotal("TOTAL I.V.A. 10%", pagar.Text)
        pagar.Text = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, 0)
        pagar.TextoSQL(pagar.Text)
        Ticket.AddTotal("TOTAL I.V.A. 5%", pagar.Text)
        totalIva = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, 0) + Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, 0)
        pagar.Text = totalIva
        pagar.TextoSQL(pagar.Text)
        Ticket.AddTotal("TOTAL I.V.A.", pagar.Text)
        Ticket.AddTotal("", "")
        pagar.Text = Math.Round(CType(totalExenta, Decimal)) 'MODIFICADO SE AGREGO MATH ROUND
        pagar.TextoSQL(pagar.Text)
        Ticket.AddTotal("TOTAL EXENTA", pagar.Text)
        Ticket.AddTotal("", "")
        Ticket.AddTotal("CAMBIO", vuelto.Text)
        'Ticket.AddFooterLine("ES INDISPENSABLE PRESENTAR")
        'Ticket.AddFooterLine("ESTE TICKET PARA REALIZAR CAMBIOS")
        'Ticket.AddFooterLine("DENTRO DE LOS SGTES. 8 DIAS")
        'Ticket.AddFooterLine("NO VALIDO PARA RESPALDAR GASTOS")
        'Ticket.AddFooterLine("COSTOS NI CREDITO FISCAL")
        'Ticket.AddFooterLine("DEL IMPUESTO AL VALOR AGREGADO")
        'Ticket.AddFooterLine("(IVA) A FAVOR DEL ADQUIRIENTE")
        'Ticket.AddFooterLine("")
        Ticket.AddFooterLine("VENDEDOR : " + vendedor)
        Ticket.AddFooterLine("CAJERO : " + Descobrador)
        Ticket.AddFooterLine("FECHA       HORA   TICKET")
        Ticket.AddFooterLine(CDate(fecha).ToShortDateString & " " & Now.ToShortTimeString & " " & numventa)
        Ticket.AddFooterLine("")
        Ticket.AddFooterLine("*MUCHAS GRACIAS POR SU COMPRA*")

        If Ticket.PrinterExists(NombreImpresora) = True Then
            Ticket.PrintTicket(NombreImpresora)
        End If



    End Sub

    Public Sub ImprimirTicket_NUEVO2020(ByVal NombreImpresora As String, _
         ByVal Codventa As Long, _
         ByVal Codsucursal As Long, _
         ByVal Descobrador As String, _
         ByVal candecimales As Integer, _
         ByVal empCodigo As Long, ByVal cambio As String, ByVal efectivo As String, ByVal puerto As String, ByVal NroTimbrado As String, ByVal fechavalidez As String, Optional ByVal boleta As String = "")
        Dim Ticket As New BarControls.Ticket

        Dim importe As New TxtMoneda.TxtMoneda
        Dim cantidad As New TxtMoneda.TxtMoneda
        Dim descuento As New TxtMoneda.TxtMoneda
        Dim precio As New TxtMoneda.TxtMoneda
        Dim vuelto As New TxtMoneda.TxtMoneda
        Dim cobrado As New TxtMoneda.TxtMoneda
        Dim gentileza As New TxtMoneda.TxtMoneda
        Dim totalExenta As Decimal
        Dim totalGravada As Decimal
        Dim totalIva As Decimal
        Dim totalDescuento As Decimal
        Dim totalDescuentoExenta As Decimal
        Dim totalDescuentoGravada10, totalDescuentoGravada5 As Decimal
        Dim sumaIva5, sumaIva10 As Decimal
        Dim descuentoexenta, descuento5, descuento10 As Decimal
        Dim imptotal As Decimal

        descuentoexenta = 0
        descuento5 = 0
        descuento10 = 0


        imptotal = 0
        sumaIva5 = 0
        sumaIva10 = 0
        totalDescuentoExenta = 0
        totalDescuentoGravada5 = 0
        totalDescuentoGravada10 = 0

        importe.Clear()
        cantidad.Clear()
        descuento.Clear()
        precio.Clear()
        vuelto.Clear()
        cobrado.Clear()
        gentileza.Clear()

        If candecimales <> 0 Then
            candecimales = 2
        End If

        importe.TxtMonedaDecimales = candecimales
        cantidad.TxtMonedaDecimales = 2
        descuento.TxtMonedaDecimales = candecimales
        precio.TxtMonedaDecimales = candecimales
        vuelto.TxtMonedaDecimales = candecimales
        cobrado.TxtMonedaDecimales = candecimales

        '----------------------------------------------------------------------------------------------------------------------------'
        '                                       **************    CABECERA    **************
        '----------------------------------------------------------------------------------------------------------------------------'
        sql = ""
        Try
            sql = "SELECT RTRIM(E.NOMFANTASIA) AS NOMFANTASIA, " & _
                  "ISNULL(RTRIM(E.RUCCONTRIBUYENTE),'') AS RUC, " & _
                  "ISNULL(RTRIM(E.NOMREPRESENTANTE),'') AS NOMREPRESENTANTE, " & _
                  "ISNULL(RTRIM(S.DIRECCION),'') AS DIRECCION, " & _
                  "RTRIM(E.TELEFONO) AS TELEFONO   " & _
                  "FROM EMPRESA E, SUCURSAL S " & _
                  "WHERE E.CODEMPRESA =  " & empCodigo & " AND S.CODSUCURSAL = " & Codsucursal & " AND S.CODEMPRESA = E.CODEMPRESA "

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            Do While dr.Read
                Dim nomFantasia As String
                Dim rucEmpresa As String
                Dim direccionEmpresa As String
                Dim telefonoEmpresa As String

                nomFantasia = RecortaCaracteres(dr("NOMFANTASIA"))
                rucEmpresa = RecortaCaracteres("R.U.C. " + dr("RUC"))
                direccionEmpresa = RecortaCaracteres(dr("DIRECCION"))
                telefonoEmpresa = RecortaCaracteres("TEL. " & dr("TELEFONO"))

                Ticket.AddHeaderLine(RecortaCaracteres("* * * * *"))
                Ticket.AddHeaderLine("")
                Ticket.AddHeaderLine(nomFantasia)

                Ticket.AddHeaderLine(rucEmpresa)
                Ticket.AddHeaderLine(direccionEmpresa)
                Ticket.AddHeaderLine(telefonoEmpresa)
            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
        End Try

        Ticket.AddHeaderLine("")

        Ticket.AddHeaderLine(RecortaCaracteres("COMPROBANTE DE USO INTERNO"))

        Ticket.AddHeaderLine("")

        Dim contador As Long = 0
        Dim subtotal As Decimal = 0.0

        Dim numventa As String
        Dim cliente As String = ""
        Dim descripcion As String = ""
        Dim codigo As String = ""
        Dim cedula, ruc As String
        Dim sucursal As String
        Dim direccion As String = ""
        Dim fecha As String
        Dim vendedor As String = ""
        Dim dirCliente As String = ""
        Dim telefono As String = ""
        Dim MODALIDADPAGO As String = ""


        '----------------------------------------------------------------------------------------------------------------------------'
        '                                **************    DETALLE    **************
        '----------------------------------------------------------------------------------------------------------------------------'

        Try
            sql = ""
            sql = "SELECT V.CODVENTA AS CODVENTA, V.TOTALDESCUENTO AS DESCUENTO, VD.CANTIDADVENTA AS CANTIDAD, RTRIM(P.CODIGOBARRA) AS CODPRODUCTO, RTRIM(P.DESPRODUCTO) AS DESCRIPCION,VD.PRECIOVENTABRUTO AS PRECIO, " & _
                  "V.NUMVENTA AS NUMVENTA,V.MODALIDADPAGO, " & _
                  "VD.PRECIOVENTABRUTO AS PRECIOVENTA, " & _
                  "VD.CANTIDADVENTA * VD.PRECIOVENTABRUTO AS TOTAL, V.TOTALEXENTA, V.TOTALIVA, " & _
                  "CONVERT(VARCHAR(10),V.FECHAVENTA,103) AS FECHA, " & _
                  "RTRIM(CL.NUMCLIENTE) AS NUMCLIENTE, " & _
                  "RTRIM(CL.DIRECCION) AS DIRCLIENTE, RTRIM(CL.TELEFONO) AS TELEFONO, " & _
                  "RTRIM(CL.APELLIDO)+' '+RTRIM(CL.NOMBRE) AS CLIENTE, " & _
                  "RTRIM(CL.NUMCEDULA) AS CEDULA, ISNULL(RTRIM(CL.RUC),'') AS RUC, " & _
                  "P.CODPRODUCTO AS CODPRODUCTO,  " & _
                  "RTRIM(S.DESSUCURSAL) AS SUCURSAL, " & _
                  "RTRIM(S.DIRECCION) AS DIRECCION, VD.IVA, VD.[DESC], " & _
                  "RTRIM(VEN.NUMVENDEDOR) AS NUMVENDEDOR, RTRIM(VEN.DESVENDEDOR) AS DESVENDEDOR " & _
                  "FROM VENTAS V INNER JOIN  VENTASDETALLE VD ON V.CODVENTA = VD.CODVENTA " & _
                  "INNER JOIN PRODUCTOS P ON VD.CODPRODUCTO = P.CODPRODUCTO " & _
                  "INNER JOIN CLIENTES CL ON V.CODCLIENTE = CL.CODCLIENTE " & _
                  "INNER JOIN VENDEDOR VEN ON V.CODVENDEDOR = VEN.CODVENDEDOR " & _
                  "INNER JOIN SUCURSAL S ON V.CODSUCURSAL = S.CODSUCURSAL " & _
                  "WHERE V.CODVENTA = " & Codventa & " ORDER BY LINEANUMERO "


            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            contador = 0
            Dim largo As Long
            Dim preciotexto, importetexto As String

            Do While dr.Read
                contador += 1
                codigo = dr("CODPRODUCTO")
                precio.Text = dr("PRECIOVENTA")
                precio.TextoSQL(precio.Text)
                importe.Text = dr("TOTAL")
                importe.TextoSQL(importe.Text)
                subtotal += importe.Text
                descuento.Text = dr("DESCUENTO")
                numventa = dr("NUMVENTA")
                'cliente = dr("CLIENTE") & "  " & dr("NUMCLIENTE")
                cliente = dr("CLIENTE")
                ruc = dr("RUC")
                'cedula = dr("CEDULA")
                sucursal = dr("SUCURSAL")
                direccion = dr("DIRECCION")
                descripcion = dr("DESCRIPCION")
                fecha = dr("FECHA")
                cantidad.Text = dr("CANTIDAD")
                cantidad.TextoSQL(cantidad.Text)
                'gentileza.Text = dr("GENTILEZA")
                'gentileza.TextoSQL(gentileza.Text)
                vendedor = dr("DESVENDEDOR")
                totalExenta = dr("totalexenta")
                dirCliente = dr("DIRCLIENTE")
                telefono = dr("TELEFONO")
                MODALIDADPAGO = dr("MODALIDADPAGO")


                Ticket.AddItem(descripcion, "", "")


                preciotexto = precio.Text
                importetexto = importe.Text
                preciotexto = preciotexto.Replace(",", "")
                importetexto = importetexto.Replace(",", "")

                'Ticket.AddItem("          " + "  " + CStr(Math.Round(dr("CANTIDAD"), 2)), "", CStr(precio.Text) + "  " + CStr(importe.Text))
                'Ticket.AddItem("          " + "  " + CStr(Math.Round(dr("CANTIDAD"), 2)), "", preciotexto + "  " + importetexto)

                Ticket.AddItem(CStr(Math.Round(dr("CANTIDAD"), 2)).PadLeft(13), "", preciotexto.PadLeft(9) & importetexto.PadLeft(10))

                ''''''''''''''''
                '     IVA
                ''''''''''''''''

                If dr("IVA") > 0 Then

                    'Productos Gravados

                    Select Case dr("IVA")
                        Case 5

                            If Not dr("DESC") = 0 Then
                                sumaIva5 = Math.Round(sumaIva5 + ((dr("PRECIOVENTA") * dr("CANTIDAD")) - (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD")), 0)
                                descuento5 = Math.Round(descuento5 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            Else
                                sumaIva5 = Math.Round(sumaIva5 + (dr("PRECIOVENTA") * dr("CANTIDAD")), 0)
                                descuento5 = Math.Round(descuento5 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            End If

                        Case 10
                            If Not dr("DESC") = 0 Then
                                sumaIva10 = Math.Round(sumaIva10 + ((dr("PRECIOVENTA") * dr("CANTIDAD")) - (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD")), 0)
                                descuento10 = Math.Round(descuento10 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            Else
                                sumaIva10 = Math.Round(sumaIva10 + (dr("PRECIOVENTA") * dr("CANTIDAD")), 0)
                                descuento10 = Math.Round(descuento10 + (dr("PRECIOVENTA") * dr("DESC") / 100) * dr("CANTIDAD"), 0)
                            End If
                    End Select
                End If
                ''''''''''''''''
                ''''''''''''''''

            Loop
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
        End Try
        cobrado.Text = efectivo
        vuelto.Text = cambio

        Ticket.AddSubHeaderLine("FECHA   : " + fecha.Trim & " " & boleta)
        Ticket.AddSubHeaderLine("NUMERO  : " + numventa.Trim)
        Ticket.AddSubHeaderLine("CLIENTE : " + cliente.Trim)

        If ruc.Trim <> "" Then
            Ticket.AddSubHeaderLine("RUC/CI  : " & ruc)
        Else
            If cedula = "" Then
                Ticket.AddSubHeaderLine("RUC/CI  : XXXXX")
            Else
                Ticket.AddSubHeaderLine("RUC/CI  : " & cedula)
            End If
        End If

        Dim total As Decimal = 0
        total = subtotal - Math.Round(CType(descuento.Text, Decimal), candecimales) 'MODIFICADO SE AGREGO MATH ROUND


        Dim pagar As New TxtMoneda.TxtMoneda
        pagar.TxtMonedaDecimales = candecimales
        pagar.Text = total
        pagar.TextoSQL(pagar.Text)
        'codigo agregado
        descuento.Text = Math.Round(CType(descuento.Text, Decimal), candecimales)
        '----------------------------------------------------------------------
        descuento.TextoSQL(descuento.Text)
        Ticket.AddTotal("DESCUENTO", descuento.Text)
        Ticket.AddTotal("TOTAL A PAGAR", pagar.Text)
        pagar.Text = sumaIva10
        pagar.TextoSQL(pagar.Text)


        '------------------------------------------------------------------------
        ' Comentado p/ no mostrar total iva porque es ticket sin valor fiscal | MV
        '------------------------------------------------------------------------
        'Ticket.AddTotal("Gravada 10%", pagar.Text)
        'pagar.Text = sumaIva5
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("Gravada 5%", pagar.Text)
        'Ticket.AddTotal("", "")
        '------------------------------------------------------------------------

        Ticket.AddTotal(RecortaCaracteres("--------------------------------"), "")

        totalIva = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, 0) + Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, 0)



        '---------------------------------------------------------------------------------------------------------------------------------------------------------
        '                                   COMENTADO 05082020 NO MOSTRAR IVA POR SER TICKET SIN VALIDEZ FISCAL MV
        '---------------------------------------------------------------------------------------------------------------------------------------------------------

        'Ticket.AddTotal("LIQUIDACIÓN DEL IVA", "")
        'pagar.TextoSQL(pagar.Text)
        'pagar.Text = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, 0)
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("TOTAL I.V.A. 10%", pagar.Text)
        'pagar.Text = Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, 0)
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("TOTAL I.V.A. 5%", pagar.Text)
        'totalIva = Math.Round(((sumaIva10 - totalDescuentoGravada10) / 1.1) * 10 / 100, 0) + Math.Round(((sumaIva5 - totalDescuentoGravada5) / 1.05) * 5 / 100, 0)
        'pagar.Text = totalIva
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("TOTAL I.V.A.", pagar.Text)
        'Ticket.AddTotal("", "")
        'pagar.Text = Math.Round(CType(totalExenta, Decimal)) 'MODIFICADO SE AGREGO MATH ROUND
        'pagar.TextoSQL(pagar.Text)
        'Ticket.AddTotal("TOTAL EXENTA", pagar.Text)
        'Ticket.AddTotal("", "")
        'Ticket.AddTotal("CAMBIO", vuelto.Text)
        '---------------------------------------------------------------------------------------------------------------------------------------------------------

        '-------------------------------------------------------
        '                PIE DE TICKET 
        '-------------------------------------------------------

        Ticket.AddFooterLine("NO VALIDO PARA RESPALDAR GASTOS")
        Ticket.AddFooterLine("COSTOS NI CREDITO FISCAL")
        Ticket.AddFooterLine("DEL IMPUESTO AL VALOR AGREGADO")
        Ticket.AddFooterLine("(IVA) A FAVOR DEL ADQUIRIENTE")

        'Ticket.AddFooterLine("")
        'Ticket.AddFooterLine("VENDEDOR : " + vendedor)
        'Ticket.AddFooterLine("CAJERO : " + Descobrador)

        Ticket.AddFooterLine("FECHA       HORA   TICKET")
        Ticket.AddFooterLine(CDate(fecha).ToShortDateString & " " & Now.ToShortTimeString & " " & numventa)
        Ticket.AddFooterLine("")
        Ticket.AddFooterLine("*MUCHAS GRACIAS POR SU COMPRA*")

        If Ticket.PrinterExists(NombreImpresora) = True Then
            Ticket.PrintTicket(NombreImpresora)
        End If


    End Sub

    Public Function RecortaCaracteres(ByVal caracter As String, _
       Optional ByVal longitud As Integer = 32) As String
        Select Case Len(caracter)
            Case Is > longitud
                caracter = caracter.Substring(0, 35)
            Case Is < longitud
                Dim longitudEspacio As Integer
                longitudEspacio = ((longitud - Len(caracter)) / 2) + Len(caracter)
                caracter = caracter.PadLeft(longitudEspacio)
        End Select

        Return caracter
    End Function
    Public Function ImpIngresoProductoDerivado(ByVal codIngresoProducto As Long, ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT PIP.CODINGRESOPROTER, RTRIM(PIP.NUMCOMPROBANTE) AS NUMCOMPROBANTE, CONVERT(VARCHAR(10), PIP.FECHACOMPROBANTE, 103) AS FECHA, " & _
        "T.CODCOMPROBANTE, RTRIM(T.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(T.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        "S.CODSUCURSAL, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & _
        "P.CODPROVEEDOR, RTRIM(P.NUMPROVEEDOR) AS NUMPROVEEDOR, RTRIM(RTRIM(P.APELLIDO)+' '+RTRIM(P.NOMBRE)) AS DESPROVEEDOR, " & _
        "PR.CODPRODUCTO, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRA, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTO, " & _
        "PIPD.CANTIDAD, ISNULL(PIPD.COSTO, 0), ISNULL((PIPD.CANTIDAD * PIPD.COSTO), 0) AS TOTAL, " & _
        "RTRIM(OP.NUMEROOP) AS NUMERO, TC.CODCOMPROBANTE, RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTEORDEN, " & _
        "RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTEORDEN, M.DESMONEDA, PIP.COTIZACION1 " & _
        "FROM PRODUCCIONDERIVADOINGRESOPRODUCTO PIP " & _
        "INNER JOIN TIPOCOMPROBANTE T ON PIP.CODCOMPROBANTE = T.CODCOMPROBANTE " & _
        "INNER JOIN SUCURSAL S ON PIP.CODSUCURSAL = S.CODSUCURSAL " & _
        "INNER JOIN PROVEEDOR P ON PIP.CODPROVEEDOR = P.CODPROVEEDOR " & _
        "INNER JOIN MONEDA M ON M.CODMONEDA = PIP.CODMONEDA " & _
        "INNER JOIN PRODUCCIONDERIVADOINGRESOPRODUCTODET PIPD ON PIPD.CODINGRESOPROTER = PIP.CODINGRESOPROTER " & _
        "INNER JOIN PRODUCTOS PR ON PIPD.CODPRODUCTO = PR.CODPRODUCTO " & _
        "INNER JOIN ORDENPRODUCCIONDERIVADO OP ON PIPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        "INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
        "WHERE PIP.CODINGRESOPROTER = " & codIngresoProducto & ""

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("DESCOMPROBANTE")
                ''row.Item("Campo6") = dr("NUMERO")
                row.Item("Campo6") = dr("NUMCOMPROBANTE")
                row.Item("Campo8") = dr("DESPROVEEDOR")
                row.Item("Campo12") = dr("DESMONEDA")
                row.Item("Campo14") = dr("NUMCOMPROBANTEORDEN") + " - " + dr("NUMERO")
                row.Item("Numero5") = dr("COTIZACION1")

                row.Item("Campo15") = dr("CODIGOBARRA")
                row.Item("Campo16") = dr("DESPRODUCTO")
                row.Item("Numero6") = dr("CANTIDAD")
                row.Item("Numero7") = dr("COSTO")
                row.Item("Numero8") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpOrdenProduccionDerivado(ByVal codOrdenProduccion As Long, ByVal canDecimales As Integer) As DataSet
        ds.Clear()

        sql = ""
        sql = " SELECT RTRIM(S.NUMSUCURSAL) AS NUMSUCURSALODEN, RTRIM(S.DESSUCURSAL) AS DESSUCURSALORDEN, " & _
        " CONVERT(VARCHAR(10), OP.FECHAOP, 103) AS FECHA, " & _
        " RTRIM(TC.NUMTIPOCOMPRO) AS NUMTIPOCOMPRO, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, " & _
        " RTRIM(OP.NUMEROOP) AS NUMERO, " & _
        " RTRIM(PRO.APELLIDO) + ' ' + RTRIM(PRO.NOMBRE) AS PROVEEDOR, " & _
        " RTRIM(OP.OBSERVACION) AS OBSERVACION, " & _
        " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, OP.COTIZACION1, " & _
        " F.CODFORMULA, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
        " OPD.CANTIDAD, ISNULL(OPD.COSTO, 0) AS COSTO, " & _
        " RTRIM(SMP.NUMSUCURSAL) AS DESSUCURSALMATERIAPRIMA, " & _
        " RTRIM(PMP.CODIGOBARRA) AS CODIGOBARRAMATERIAPRIMA, " & _
        " RTRIM(PMP.DESPRODUCTO) AS DESPRODUCTOMATERIAPRIMA, " & _
        " OPMP.CANTIDAD AS CANTIDADMATERIAPRIMA, ISNULL(OPMP.COSTO, 0) AS COSTOMATERIAPRIMA " & _
        " FROM ORDENPRODUCCIONDERIVADO OP INNER JOIN SUCURSAL S ON S.CODSUCURSAL = OP.CODSUCURSAL " & _
        " INNER JOIN TIPOCOMPROBANTE TC ON TC.CODCOMPROBANTE = OP.CODCOMPROBANTE " & _
        " INNER JOIN PROVEEDOR PRO ON PRO.CODPROVEEDOR = OP.CODPROVEEDOR " & _
        " INNER JOIN MONEDA M ON M.CODMONEDA = OP.CODMONEDA " & _
        " INNER JOIN ORDENPRODUCCIONDERIVADODETALLE OPD ON OPD.CODORDENPRODUCCION = OP.CODORDENPRODUCCION " & _
        " INNER JOIN PRODUCCIONDERIVADOFORMULA F ON F.CODFORMULA = OPD.CODFORMULA " & _
        " INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = OPD.CODPRODUCTO " & _
        " INNER JOIN ORDENPRODUCCIONDERIVADOMATERIAPRIMA OPMP ON OPD.CODORDENPRODUCCION = OPMP.CODORDENPRODUCCION " & _
        " AND OPD.CODPRODUCTO = OPMP.CODPRODUCTO " & _
        " INNER JOIN SUCURSAL SMP ON SMP.CODSUCURSAL = OPMP.CODSUCURSAL " & _
        " INNER JOIN PRODUCTOS PMP ON PMP.CODPRODUCTO = OPMP.CODPRODUCTOMATERIAPRIMA " & _
        " WHERE OP.CODORDENPRODUCCION = " & codOrdenProduccion & " " & _
        " ORDER BY DESSUCURSALORDEN, CAST(OP.FECHAOP AS DATETIME), DESCOMPROBANTE, NUMERO, OPD.CODLINEA, OPMP.CODLINEA "

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo2") = dr("DESSUCURSALORDEN")
                row.Item("Campo3") = dr("FECHA")
                row.Item("Campo5") = dr("DESCOMPROBANTE")
                row.Item("Campo6") = dr("NUMERO")
                row.Item("Campo8") = dr("PROVEEDOR")
                row.Item("Campo13") = dr("OBSERVACION")
                row.Item("Campo12") = dr("DESMONEDA")
                row.Item("Numero5") = dr("COTIZACION1")
                row.Item("Campo7") = dr("CODFORMULA")
                row.Item("Campo9") = dr("CODIGOBARRA")
                row.Item("Campo10") = dr("DESPRODUCTO")
                row.Item("Numero1") = dr("CANTIDAD")
                row.Item("Numero2") = dr("COSTO")
                row.Item("Numero3") = Math.Round(dr("CANTIDAD") * dr("COSTO"), canDecimales)
                row.Item("Campo14") = dr("DESSUCURSALMATERIAPRIMA")

                row.Item("Campo15") = dr("CODIGOBARRAMATERIAPRIMA")
                row.Item("Campo16") = dr("DESPRODUCTOMATERIAPRIMA")
                row.Item("Numero6") = dr("CANTIDADMATERIAPRIMA")
                row.Item("Numero7") = dr("COSTOMATERIAPRIMA")
                row.Item("Numero8") = Math.Round(dr("CANTIDADMATERIAPRIMA") * dr("COSTOMATERIAPRIMA"), canDecimales)

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function ImpReceta(ByVal codFormula As Long, _
       ByVal canDecimales As Integer, _
       ByVal tipo As Byte) As DataSet
        Dim fecha As String
        Dim numero As String
        Dim producto As String
        Dim activo As String
        Dim moneda As String

        ds.Clear()

        sql = ""

        If tipo = 0 Then
            sql = " SELECT PF.NUMRECETA AS CODRECETA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHARECETA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONRECETA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONRECETADETALLE PFD ON PFD.CODRECETA = PF.CODRECETA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODRECETA = " & codFormula & " " & _
            " ORDER BY PFD.CODLINEA"
        Else
            sql = " SELECT PF.NUMRECETA AS CODRECETA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHARECETA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONRECETA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONRECETADET PFD ON PFD.CODRECETA = PF.CODRECETA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODRECETA = " & codFormula & " " & _
            " ORDER BY PFD.CODLINEA"
        End If

        Try
            Dim rendimiento As Decimal

            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            rendimiento = 0

            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                fecha = dr("FECHA")
                numero = dr("CODRECETA")
                producto = dr("DESPRODUCTO")
                moneda = dr("DESMONEDA")
                activo = dr("ACTIVO")

                row.Item("Campo1") = dr("CODIGOBARRAMP")
                row.Item("Campo2") = dr("DESPRODUCTOMP")

                row.Item("Numero1") = dr("CANTIDAD")

                If dr("CODMONEDA") = dr("CODMONEDAMP") Then
                    row.Item("Numero2") = dr("COSTOPROMEDIO")
                    row.Item("Numero3") = Math.Round(dr("CANTIDAD") * dr("COSTOPROMEDIO"), canDecimales)
                Else
                    Dim cotizacionProducto As Decimal
                    Dim cotizacionMateriaPrima As Decimal
                    Dim costoPromedio As Decimal

                    cotizacionProducto = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                    dr("CODMONEDA"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                    cotizacionMateriaPrima = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                    dr("CODMONEDAMP"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                    costoPromedio = Math.Round((dr("COSTOPROMEDIO") * cotizacionMateriaPrima / cotizacionProducto), canDecimales)

                    row.Item("Numero2") = costoPromedio
                    row.Item("Numero3") = Math.Round(dr("CANTIDAD") * costoPromedio, canDecimales)
                End If

                ds.Tables("Detalle").Rows.Add(row)

                rendimiento = dr("RENDIMIENTO")
            Loop
            dr.Close()

            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = moneda
            row.Item("Campo4") = numero
            row.Item("Campo5") = fecha
            row.Item("Campo6") = producto
            row.Item("Campo7") = activo

            row.Item("NUMERO1") = rendimiento

            ds.Tables("Cabecera").Rows.Add(row)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function

    Public Function InfRecetas(ByVal canDecimales As Integer, _
    ByVal tipo As Byte) As DataSet
        ds.Clear()

        sql = ""

        If tipo = 0 Then
            sql = " SELECT PF.NUMRECETA AS CODRECETA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHARECETA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONRECETA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONRECETADET PFD ON PFD.CODRECETA = PF.CODRECETA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY PF.CODRECETA, PFD.CODLINEA"
        Else
            sql = " SELECT PF.NUMRECETA AS CODRECETA, " & _
            " PF.CODPRODUCTO, RTRIM(P.CODIGOBARRA) AS CODIGOBARRA, " & _
            " RTRIM(P.DESPRODUCTO) AS DESPRODUCTO, " & _
            " CONVERT(VARCHAR(10), PF.FECHARECETA, 103) AS FECHA, " & _
            " PF.ESTADO, M.CODMONEDA, M.NUMMONEDA, M.DESMONEDA, PF.COTIZACION1, PF.COTIZACION2, " & _
            " (CASE PF.ESTADO WHEN 0 THEN 'No' ELSE 'Si' END) AS ACTIVO, " & _
            " PFD.CODPRODUCTO AS CODPRODUCTOMP, RTRIM(PR.CODIGOBARRA) AS CODIGOBARRAMP, RTRIM(PR.DESPRODUCTO) AS DESPRODUCTOMP, " & _
            " PFD.CANTIDAD, PR.CODMONEDA AS CODMONEDAMP, PR.ULTIMOCOSTO AS COSTOULTIMO, ISNULL(PR.COSTOPP, 0) AS COSTOPROMEDIO, " & _
            " PF.RENDIMIENTO " & _
            " FROM PRODUCCIONRECETA PF INNER JOIN PRODUCTOS P ON P.CODPRODUCTO = PF.CODPRODUCTO " & _
            " INNER JOIN MONEDA M ON M.CODMONEDA = PF.CODMONEDA " & _
            " INNER JOIN PRODUCCIONRECETADET PFD ON PFD.CODRECETA = PF.CODRECETA " & _
            " INNER JOIN PRODUCTOS PR ON PR.CODPRODUCTO = PFD.CODPRODUCTO " & _
            " WHERE PF.CODEMPRESA = " & empCodigo & " " & _
            " ORDER BY PF.CODRECETA, PFD.CODLINEA"
        End If

        Try
            ds.ReadXml(direccion)

            ser.Abrir(sqlc)
            cmd.Connection = sqlc
            cmd.CommandText = sql

            dr = cmd.ExecuteReader

            Try
                Do While dr.Read()
                    row = ds.Tables("Detalle").NewRow()

                    row.Item("Campo9") = dr("CODRECETA")
                    row.Item("Campo10") = dr("DESPRODUCTO")
                    row.Item("Campo2") = dr("FECHA")
                    row.Item("Campo6") = dr("DESMONEDA")
                    row.Item("Campo12") = dr("ACTIVO")
                    row.Item("Campo7") = dr("CODIGOBARRAMP")
                    row.Item("Campo8") = dr("DESPRODUCTOMP")
                    row.Item("Numero5") = dr("CANTIDAD")

                    If dr("CODMONEDA") = dr("CODMONEDAMP") Then
                        row.Item("Numero6") = dr("COSTOPROMEDIO")
                        row.Item("Numero7") = Math.Round(dr("CANTIDAD") * dr("COSTOPROMEDIO"), canDecimales)
                    Else
                        Dim cotizacionProducto As Decimal
                        Dim cotizacionMateriaPrima As Decimal
                        Dim costoPromedio As Decimal

                        cotizacionProducto = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                        dr("CODMONEDA"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                        cotizacionMateriaPrima = CDec(funcion.Moneda_Cotizacion(empCodigo, _
                        dr("CODMONEDAMP"), Now.ToShortDateString).Tables("table").Rows(0)("Cotizacion1venta"))

                        costoPromedio = Math.Round((dr("COSTOPROMEDIO") * cotizacionMateriaPrima / cotizacionProducto), canDecimales)

                        row.Item("Numero6") = costoPromedio
                        row.Item("Numero7") = Math.Round(dr("CANTIDAD") * costoPromedio, canDecimales)
                    End If

                    row.Item("Numero1") = dr("RENDIMIENTO")

                    ds.Tables("Detalle").Rows.Add(row)
                Loop

                row = ds.Tables("Cabecera").NewRow()

                row.Item("Campo1") = empDescripcion

                ds.Tables("Cabecera").Rows.Add(row)

            Catch e As SqlException
                MsgBox(e.ToString)
            Finally
                ser.Cerrar(sqlc)
            End Try
        Catch e As Exception
            MsgBox(e.ToString)
        Finally

        End Try

        Return ds
    End Function

    Public Function infResumenComprasFechaCOPIA(ByVal desdeSucursal As String, ByVal hastaSucursal As String, _
    ByVal desdeProveedor As String, ByVal hastaProveedor As String, _
    ByVal desdeFecha As String, ByVal hastaFecha As String, _
    ByVal desdeMoneda As String, ByVal hastaMoneda As String, _
    ByVal codMoneda As Long, ByVal MonedaInforme As String, ByVal desMonedaInforme As String, _
    ByVal CotizacionMonedaInf As Decimal, ByVal decimalMonedaInf As Integer, _
    ByVal condiciones As String, _
    ByVal desdeComprobante As String, ByVal hastaComprobante As String, _
    ByVal compra As Byte, ByVal tipo As Integer) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)
        ser.Abrir(sqlc)


        If tipo = 3 Then
            sql = ""
            sql = " /*COMPRAS DEL SISTEMA DE PROVEEDORES*/ " & vbCrLf & _
            " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & vbCrLf & _
            " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & vbCrLf & _
            " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & vbCrLf & _
            " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & vbCrLf & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & vbCrLf & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & vbCrLf & _
            " C.TOTALEXENTA, C.TOTALGRAVADA, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (MI.IMPORTE / I.COHEFICIENTE)  END), 0) AS GRAVADA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (MI.IMPORTE / I.COHEFICIENTE)  END), 0) AS GRAVADA10, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN MI.IMPUESTO END), 0) AS IVA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN MI.IMPUESTO END), 0) AS IVA10, " & vbCrLf & _
            " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & vbCrLf & _
            " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & vbCrLf & _
            " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & vbCrLf & _
            " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & vbCrLf & _
            " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & vbCrLf & _
            " LEFT OUTER JOIN MAGICIVA MI ON C.CODCOMPRA = MI.CODCOMPRA " & vbCrLf & _
            " LEFT OUTER JOIN IVA I ON MI.CODIVA = I.CODIVA " & vbCrLf & _
            " WHERE C.ESTADO = 5 " & vbCrLf & _
            " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & vbCrLf & _
            " UNION ALL " & vbCrLf & _
            " /*COMPRAS DEL SISTEMA DE STOCK*/ " & vbCrLf & _
            " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & vbCrLf & _
            " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & vbCrLf & _
            " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & vbCrLf & _
            " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & vbCrLf & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & vbCrLf & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & vbCrLf & _
            " C.TOTALEXENTA, C.TOTALGRAVADA, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE) END), 0) AS GRAVADA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE) END), 0) AS GRAVADA10, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA10, " & vbCrLf & _
            " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & vbCrLf & _
            " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & vbCrLf & _
            " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & vbCrLf & _
            " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & vbCrLf & _
            " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & vbCrLf & _
            " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & vbCrLf & _
            " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & vbCrLf & _
            " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & vbCrLf & _
            " WHERE C.ESTADO IS NULL  AND C.IMPORTACION = 0 " & vbCrLf & _
            " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & vbCrLf & _
            " UNION ALL " & vbCrLf & _
            " /*COMPRAS DEL SISTEMA DE STOCK -  IMPORTACIONES */ " & vbCrLf & _
            " SELECT DISTINCT C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & vbCrLf & _
            " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & vbCrLf & _
            " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & vbCrLf & _
            " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & vbCrLf & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & vbCrLf & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & vbCrLf & _
            " C.TOTALEXENTA, C.TOTALGRAVADA, " & vbCrLf & _
            " 0 AS GRAVADA5, " & vbCrLf & _
            " C.TOTALGRAVADA AS GRAVADA10, " & vbCrLf & _
            " 0 AS IVA5, " & vbCrLf & _
            " C.TOTALIVA AS IVA10, " & vbCrLf & _
            " C.TOTALIVA, C.TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & vbCrLf & _
            " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & vbCrLf & _
            " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & vbCrLf & _
            " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & vbCrLf & _
            " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & vbCrLf & _
            " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & vbCrLf & _
            " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & vbCrLf & _
            " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & vbCrLf & _
            " WHERE C.ESTADO IS NULL AND C.IMPORTACION = 1 " & vbCrLf & _
            " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & vbCrLf & _
            " ORDER BY FECHAORDEN, NUMERO " & vbCrLf
        End If

        If tipo = 1 Then
            sql = ""
            sql = " /*COMPRAS DEL SISTEMA DE PROVEEDORES*/ " & vbCrLf & _
            " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & vbCrLf & _
            " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & vbCrLf & _
            " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & vbCrLf & _
            " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & vbCrLf & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & vbCrLf & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & vbCrLf & _
            " C.TOTALEXENTA, C.TOTALGRAVADA, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (MI.IMPORTE / I.COHEFICIENTE)  END), 0) AS GRAVADA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (MI.IMPORTE / I.COHEFICIENTE)  END), 0) AS GRAVADA10, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN MI.IMPUESTO END), 0) AS IVA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN MI.IMPUESTO END), 0) AS IVA10, " & vbCrLf & _
            " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & vbCrLf & _
            " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & vbCrLf & _
            " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & vbCrLf & _
            " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & vbCrLf & _
            " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & vbCrLf & _
            " LEFT OUTER JOIN MAGICIVA MI ON C.CODCOMPRA = MI.CODCOMPRA " & vbCrLf & _
            " LEFT OUTER JOIN IVA I ON MI.CODIVA = I.CODIVA " & vbCrLf & _
            " WHERE C.ESTADO = 5 " & vbCrLf & _
            " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & vbCrLf & _
            " ORDER BY FECHAORDEN, NUMERO " & vbCrLf
        End If
        If tipo = 2 Then
            sql = ""
            sql = " /*COMPRAS DEL SISTEMA DE STOCK*/ " & vbCrLf & _
            " SELECT  C.CODCOMPRA AS CODCOMPRA, RTRIM(S.NUMSUCURSAL) AS NUMSUCURSAL, RTRIM(S.DESSUCURSAL) AS DESSUCURSAL, " & vbCrLf & _
            " RTRIM(PR.NUMPROVEEDOR) AS NUMPROVEEDOR, LTRIM(RTRIM(PR.APELLIDO) + ' ' + RTRIM(PR.NOMBRE)) AS PROVEEDOR, " & vbCrLf & _
            " CONVERT(VARCHAR(10), C.FECHACOMPRA, 103) AS FECHACOMPRA, " & vbCrLf & _
            " CAST(C.FECHACOMPRA AS DATETIME) AS FECHAORDEN, " & vbCrLf & _
            " M.CODMONEDA, RTRIM(M.NUMMONEDA) AS NUMMONEDA, RTRIM(M.DESMONEDA) AS DESMONEDA, C.COTIZACION1 AS COTIZACION, " & vbCrLf & _
            " RTRIM(TC.NUMTIPOCOMPRO) AS NUMCOMPROBANTE, RTRIM(TC.DESCOMPROBANTE) AS DESCOMPROBANTE, RTRIM(C.NUMCOMPRA) AS NUMERO, " & vbCrLf & _
            " C.TOTALEXENTA, C.TOTALGRAVADA, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE) END), 0) AS GRAVADA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE) END), 0) AS GRAVADA10, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 5 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA5, " & vbCrLf & _
            " ISNULL((CASE WHEN I.PORCENTAJEIVA = 10 THEN (CD.COSTOBRUTO * CD.CANTIDADCOMPRA / I.COHEFICIENTE * I.PORCENTAJEIVA / 100) END), 0) AS IVA10, " & vbCrLf & _
            " C.TOTALIVA, TOTALCOMPRA AS TOTALFACTURA, ISNULL(RTRIM(PR.RUC),'') AS RUC  " & vbCrLf & _
            " FROM COMPRAS C INNER JOIN SUCURSAL S ON C.CODSUCURSAL = S.CODSUCURSAL " & vbCrLf & _
            " INNER JOIN PROVEEDOR PR ON C.CODPROVEEDOR = PR.CODPROVEEDOR " & vbCrLf & _
            " INNER JOIN TIPOCOMPROBANTE TC ON C.CODCOMPROBANTE = TC.CODCOMPROBANTE " & vbCrLf & _
            " INNER JOIN MONEDA M ON C.CODMONEDA = M.CODMONEDA " & vbCrLf & _
            " INNER JOIN COMPRASDETALLE CD ON C.CODCOMPRA = CD.CODCOMPRA " & vbCrLf & _
            " INNER JOIN PRODUCTOS P ON CD.CODPRODUCTO = P.CODPRODUCTO " & vbCrLf & _
            " INNER JOIN IVA I ON CD.IVA = I.PORCENTAJEIVA " & vbCrLf & _
            " WHERE C.ESTADO IS NULL  AND C.IMPORTACION = 0 " & vbCrLf & _
            " AND C.CODEMPRESA = " & empCodigo & " " & condiciones & vbCrLf & _
            " ORDER BY FECHAORDEN, NUMERO " & vbCrLf
        End If

        '''" ORDER BY NUMCOMPROBANTE, NUMPROVEEDOR, FECHAORDEN, NUMERO "

        cmd = New SqlCommand(sql, sqlc)
        dr = cmd.ExecuteReader()
        Try
            Do While dr.Read()
                row = ds.Tables("Detalle").NewRow()

                row.Item("Campo1") = dr("NUMSUCURSAL")
                row.Item("Campo2") = dr("DESSUCURSAL")
                row.Item("Campo3") = dr("NUMPROVEEDOR")
                row.Item("Campo4") = dr("PROVEEDOR")
                row.Item("Campo7") = dr("CODCOMPRA")
                ''row.Item("Campo8") = dr("NUMCOMPROBANTE") + " - " + dr("DESCOMPROBANTE")
                row.Item("Campo9") = dr("NUMERO")
                row.Item("Campo10") = dr("FECHACOMPRA")
                row.Item("Campo11") = dr("RUC")

                If codMoneda = dr("CODMONEDA") Then
                    row.Item("Numero1") = dr("TOTALEXENTA")
                    row.Item("Numero2") = dr("GRAVADA10")
                    row.Item("Numero3") = dr("IVA5")
                    row.Item("Numero4") = dr("IVA10")
                    row.Item("Numero5") = dr("GRAVADA5")
                    row.Item("Numero6") = dr("TOTALFACTURA")
                Else
                    row.Item("Numero1") = Math.Round(dr("TOTALEXENTA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero2") = Math.Round(dr("GRAVADA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero3") = Math.Round(dr("IVA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero4") = Math.Round(dr("IVA10") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero5") = Math.Round(dr("GRAVADA5") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                    row.Item("Numero6") = Math.Round(dr("TOTALFACTURA") * dr("COTIZACION") / CotizacionMonedaInf, decimalMonedaInf)
                End If

                ds.Tables("Detalle").Rows.Add(row)
            Loop

            '###################
            '#    CABECERA     #
            '###################
            row = ds.Tables("Cabecera").NewRow()

            row.Item("Campo1") = empDescripcion
            row.Item("Campo2") = desdeSucursal
            row.Item("Campo3") = hastaSucursal
            row.Item("Campo4") = desdeFecha
            row.Item("Campo5") = hastaFecha
            row.Item("Campo6") = desdeComprobante
            row.Item("Campo7") = hastaComprobante
            row.Item("Campo8") = desdeProveedor
            row.Item("Campo9") = hastaProveedor
            row.Item("Campo10") = desdeMoneda
            row.Item("Campo11") = hastaMoneda
            row.Item("Campo12") = desMonedaInforme

            Select Case compra
                Case Is = 0
                    row.Item("Campo14") = "TODOS"
                Case Is = 1
                    row.Item("Campo14") = "CONTADO"
                Case Is = 2
                    row.Item("Campo14") = "CRÉDITO"
            End Select

            ds.Tables("Cabecera").Rows.Add(row)
        Catch e As Exception
            MsgBox(e.ToString)
        Finally
            dr.Close()
            ser.Cerrar(sqlc)
        End Try

        Return ds
    End Function
    Public Function ImpEtiqueta(ByVal detdetalle As DataTable, ByVal Telefono As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)

        Dim dr As DataRow
        Dim items As Long
        'Dim ser As BD.ABD
        'ser = New BD.ABD
        'cnn = ser.Abrir
        'sql = ""

        Try

            Try
                'Dim texfecha As String
                'Dim numero, descomprobante, desorigen, desdestino As String
                Dim CODIGO As String
                Dim Prod As String
                items = 0
                Dim k, i As Long
                Dim precio, coefi As Decimal

                If detdetalle.Rows.Count > 0 Then
                    'For i = 0 To detdetalle.Rows.Count - 1
                    '    For k = 1 To detdetalle.Rows(i)("CANTIDAD")
                    '        dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                    '        Prod = detdetalle.Rows(i)("DESCRIPCION")
                    '        If Prod.Trim.Length > 56 Then
                    '            Prod = Prod.Substring(0, 56)
                    '        End If
                    '        dr.Item("Campo1") = Prod
                    '        dr.Item("Campo6") = RTrim(detdetalle.Rows(i)("CODIGO"))
                    '        dr.Item("Campo7") = Telefono
                    '        precio = detdetalle.Rows(i)("PRECIO")
                    '        dr.Item("Numero1") = detdetalle.Rows(i)("PRECIO")
                    '        CODIGO = RTrim(detdetalle.Rows(i)("CODIGO"))
                    '        CODIGO = bar128(CODIGO)
                    '        dr.Item("Campo4") = CODIGO
                    '        ds.Tables("Detalle").Rows.Add(dr)
                    '    Next
                    '    items = items + 1
                    'Next
                    Dim Vista As DataView
                    Vista = detdetalle.Copy.DefaultView
                    Vista.Sort = "CODIGO"
                    For i = 0 To Vista.Count - 1
                        For k = 1 To Vista(i)("CANTIDAD")
                            dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                            Prod = Vista(i)("DESCRIPCION")
                            If Prod.Trim.Length > 56 Then
                                Prod = Prod.Substring(0, 56)
                            End If
                            dr.Item("Campo1") = Prod
                            dr.Item("Campo6") = RTrim(Vista(i)("CODIGO"))
                            dr.Item("Campo7") = Telefono
                            precio = Vista(i)("PRECIO")
                            dr.Item("Numero1") = Vista(i)("PRECIO")
                            CODIGO = RTrim(Vista(i)("CODIGO"))
                            CODIGO = bar128(CODIGO)
                            dr.Item("Campo4") = CODIGO
                            ds.Tables("Detalle").Rows.Add(dr)
                        Next
                        items = items + 1
                    Next
                End If

                '###################
                '#    CABECERA     #
                '###################
                dr = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

                'dar.Close()         'Cierra el SQL DataReader
                ds.Tables("Cabecera").Rows.Add(dr)

            Catch e As Exception
                MsgBox(e.ToString)
            Finally
                'dar.Close()         'Cierra el SQL DataReader
                cnn.Close()         'Cierra la SqlConecction
            End Try
        Finally
        End Try
        'Una vez que tenemos todos los datos en el dataset, vamos a llamar al nuevo 
        'formulario y le vamos a pasar el dataset:
        Return ds
    End Function
    Public Function bar128(ByVal temp As String)
        lcStart = Chr(104 + 32)
        lcStop = Chr(106 + 32)
        lnCheckSum = Asc(lcStart) - 32
        lcRet = temp
        lnLong = Len(lcRet)
        For lnI = 1 To lnLong
            lnAsc = Asc(Mid(lcRet, lnI, 1)) - 32
            If Not lnAsc >= 0 And lnAsc <= 99 Then
                lcRet = Replace(lcRet, lnI, CStr(1), CStr(Chr(32)))
                lnAsc = Asc(Mid(lcRet, lnI, 1)) - 32
            End If
            lnCheckSum = lnCheckSum + (lnAsc * lnI)
        Next
        aa = lnCheckSum Mod 103
        aa = aa + 32
        lcCheck = Chr(aa)
        lcRet = lcStart + lcRet + lcCheck + lcStop
        lcRet = Replace(lcRet, Chr(32), Chr(232))
        lcRet = Replace(lcRet, Chr(127), Chr(192))
        lcRet = Replace(lcRet, Chr(128), Chr(193))
        bar128 = lcRet

    End Function
    Public Function ImpEtiquetaFleje(ByVal detdetalle As DataTable, ByVal Telefono As String) As DataSet
        Dim ds As New DataSet

        ds.ReadXml(direccion)

        Dim dr As DataRow
        Dim items As Long
        'Dim ser As BD.ABD
        'ser = New BD.ABD
        'cnn = ser.Abrir
        'sql = ""

        Try

            Try
                'Dim texfecha As String
                'Dim numero, descomprobante, desorigen, desdestino As String
                Dim CODIGO As String
                Dim Prod As String
                items = 0
                Dim k, i As Long
                Dim precio, coefi As Decimal

                If detdetalle.Rows.Count > 0 Then
                    'For i = 0 To detdetalle.Rows.Count - 1
                    '    For k = 1 To detdetalle.Rows(i)("CANTIDAD")
                    '        dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                    '        Prod = detdetalle.Rows(i)("DESCRIPCION")
                    '        If Prod.Trim.Length > 56 Then
                    '            Prod = Prod.Substring(0, 56)
                    '        End If
                    '        dr.Item("Campo1") = Prod
                    '        dr.Item("Campo6") = RTrim(detdetalle.Rows(i)("CODIGO"))
                    '        dr.Item("Campo7") = Telefono
                    '        precio = detdetalle.Rows(i)("PRECIO")
                    '        dr.Item("Numero1") = detdetalle.Rows(i)("PRECIO")
                    '        CODIGO = RTrim(detdetalle.Rows(i)("CODIGO"))
                    '        CODIGO = bar128(CODIGO)
                    '        dr.Item("Campo4") = CODIGO
                    '        ds.Tables("Detalle").Rows.Add(dr)
                    '    Next
                    '    items = items + 1
                    'Next
                    Dim Vista As DataView
                    Vista = detdetalle.Copy.DefaultView
                    Vista.Sort = "CODIGO"
                    For i = 0 To Vista.Count - 1
                        For k = 1 To Vista(i)("CANTIDAD")
                            dr = ds.Tables("Detalle").NewRow() 'Insertamos una nueva linea
                            Prod = Vista(i)("DESCRIPCION")
                            If Prod.Trim.Length > 50 Then
                                Prod = Prod.Substring(0, 50)
                            End If
                            dr.Item("Campo1") = Prod
                            dr.Item("Campo6") = RTrim(Vista(i)("CODIGO"))
                            dr.Item("Campo7") = Telefono
                            precio = Vista(i)("PRECIO")
                            dr.Item("Numero1") = Vista(i)("PRECIO")
                            CODIGO = RTrim(Vista(i)("CODIGO"))
                            CODIGO = bar128(CODIGO)
                            dr.Item("Campo4") = CODIGO
                            ds.Tables("Detalle").Rows.Add(dr)
                        Next
                        items = items + 1
                    Next
                End If

                '###################
                '#    CABECERA     #
                '###################
                dr = ds.Tables("Cabecera").NewRow() 'Insertamos una nueva linea

                'dar.Close()         'Cierra el SQL DataReader
                ds.Tables("Cabecera").Rows.Add(dr)

            Catch e As Exception
                MsgBox(e.ToString)
            Finally
                'dar.Close()         'Cierra el SQL DataReader
                cnn.Close()         'Cierra la SqlConecction
            End Try
        Finally
        End Try
        'Una vez que tenemos todos los datos en el dataset, vamos a llamar al nuevo 
        'formulario y le vamos a pasar el dataset:
        Return ds
    End Function

End Class