leonardo-m
3/22/2018 - 10:01 PM

Clase importar archivos

Clase importar archivos

Imports LD.ObjetosSAP
Imports LD.AccesoDatos
Imports LDSAP_Lucema.LDCOMCARGbtnBus
Imports System.Collections.ObjectModel
Public Class LDCOMCARGbtnImp
    Implements IButton
    Dim CargaExcel As LDCOMCARGbtnBus
    Public Function AfterClick(pForma As SAPbouiCOM.Form, pVal As SAPbouiCOM.ItemEvent) As String Implements IButton.AfterClick
        Try

            Return ""
        Catch ex As Exception
            Return SBOLDObjeto.RetornoError + " " + ex.Message
        End Try
    End Function

    Public Function OnClick(pForma As SAPbouiCOM.Form, pVal As SAPbouiCOM.ItemEvent) As String Implements IButton.OnClick
        Try

            Dim result As Integer = MsgBox("¿Está seguro de cargar los datos de Comisiones?", MsgBoxStyle.YesNo, "SAP Business One")

            If result = MsgBoxResult.Yes Then
                Dim Ruta As SAPbouiCOM.EditText = pForma.Items.Item("txtCM").Specific
                LeerArchivo(Ruta.Value)

            Else
                SBOLDObjeto.SBO_Application.StatusBar.SetSystemMessage("Proceso cancelado", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error)

            End If



            Return ""
        Catch ex As Exception

            Return SBOLDObjeto.RetornoError + " " + ex.Message
        End Try
    End Function

    Function LeerArchivo(ByVal pNombreArchivo) As String
        Dim ListaErrores As Collection(Of LDCOMCARGAErrores) = _
        New Collection(Of LDCOMCARGAErrores)()

        Dim vDatosConn As New System.Data.OleDb.OleDbConnection
        Dim vDatosExcelCabecera As System.Data.OleDb.OleDbDataAdapter = Nothing
        Dim vDatosExcelDetalleMezcla As System.Data.OleDb.OleDbDataAdapter = Nothing
        Dim vDatosExcelDetalleAgente As System.Data.OleDb.OleDbDataAdapter = Nothing
        Dim DS_Ajuste_Excel As New DataSet()
        Dim vTabla_Cabecera As New DataTable("Tabla_Excel")
        Dim vTabla_Mezcla As New DataTable("Tabla_Mezcla")
        Dim vTabla_Agente As New DataTable("Tabla_Agente")
        Dim recset As SAPbobsCOM.Recordset
        Dim Erreor As LDCOMCARGAErrores = New LDCOMCARGAErrores()
        recset = SBOLDObjeto.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)

        Dim FormaCreada As SAPbouiCOM.Form
        FormaCreada = SBOLDObjeto.CreateForm("LDCOMCARG", SAPbouiCOM.BoFormMode.fm_OK_MODE)
        Dim txtNombreArchivo As SAPbouiCOM.EditText = FormaCreada.Items.Item("txtCM").Specific
        txtNombreArchivo.Value = pNombreArchivo




        '-----------------------------------------
        ' Archivo Excel seleccionado abrir
        '-----------------------------------------
        vDatosConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pNombreArchivo + ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1"""
        vDatosConn.Open()
        '-----------------------------------------
        ' Busca por defecto la hoja con el nombre Ajustes
        '-----------------------------------------
        vDatosExcelCabecera = New System.Data.OleDb.OleDbDataAdapter("Select * from [Meta$]", vDatosConn)
        vDatosExcelDetalleMezcla = New System.Data.OleDb.OleDbDataAdapter("Select * from [Mezcla$]", vDatosConn)
        vDatosExcelDetalleAgente = New System.Data.OleDb.OleDbDataAdapter("Select * from [Agente$]", vDatosConn)
        '-----------------------------------------
        ' Definicion de la tabla donde se cargaran los datos.
        '-----------------------------------------
        Try
            vDatosExcelCabecera.Fill(vTabla_Cabecera)
            vDatosExcelDetalleMezcla.Fill(vTabla_Mezcla)
            vDatosExcelDetalleAgente.Fill(vTabla_Agente)
        Catch ex As Exception
            Return SBOLDObjeto.RetornoError(+"" + "El archivo no pudo ser cargado.  Verifique que el nombre de la hoja de cálculo sea 'Hoja-Meta'")
        End Try

        '-----------------------------------------
        ' Verificar Metas del archivo
        '-----------------------------------------
        Dim Articulos As String = String.Empty


        If vTabla_Cabecera.Columns.Count > 3 Then
            Throw New Exception("la cantidad de columnas de archivo es incorrecta")
        End If
        If vTabla_Cabecera.Columns.Item(0).ColumnName <> "Codigo de Meta" Then

            Erreor.Hoja = "Meta"
            Erreor.Fila = 1
            Erreor.Descripcion = "El encabezado " & vTabla_Cabecera.Columns.Item(0).ColumnName & " es incorrecto. Debe de ser Codigo de Meta"
            ListaErrores.add(Erreor)

            Throw New Exception("El encabezado " & vTabla_Cabecera.Columns.Item(0).ColumnName & " es incorrecto. Debe de ser Codigo de Meta")
        End If

        If vTabla_Cabecera.Columns.Item(1).ColumnName <> "Descripcion" Then
            Erreor.Hoja = "Meta"
            Erreor.Fila = 1
            Erreor.Descripcion = "El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & " es incorrecto. Debe de ser Descripcion"
            ListaErrores.add(Erreor)

            Throw New Exception("El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & " es incorrecto. Debe de ser Descripcion")
        End If

        If vTabla_Cabecera.Columns.Item(2).ColumnName <> "Periodo" Then

            Erreor.Hoja = "Meta"
            Erreor.Fila = 1
            Erreor.Descripcion = "El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & "  es incorrecto. Debe de ser Periodo"
            ListaErrores.add(Erreor)
            Throw New Exception("El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & " es incorrecto. Debe de ser Periodo")
        End If
        Try
            Dim ExisteCobro As Boolean = False
            Dim ExisteVentaTotal As Boolean = False
            Dim listaAgentes As New ArrayList
            Dim ArrayAgentePeriodo(1) As String
            Dim vFila As Integer = 2

            For Each vDataRow As DataRow In vTabla_Cabecera.Rows

                ExisteCobro = False
                ExisteVentaTotal = False
                '-----------------------------------------
                ' Verificar los datos
                '-----------------------------------------
                If IsDBNull(vDataRow("Codigo de Meta")) Then

                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de código en la fila " & vFila & " es incorrecta."
                    ListaErrores.Add(Erreor)
                    Throw New Exception("La columna de código en la fila " & vFila & " es incorrecta.")
                End If

                If IsDBNull(vDataRow("Periodo")) Then
                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de Periodo en la fila " & vFila & " es incorrecta."
                    ListaErrores.Add(Erreor)
                    Throw New Exception("La columna de Periodo en la fila " & vFila & " es incorrecta.")
                End If

                If (vDataRow("Periodo").ToString.Length > 7 Or vDataRow("Periodo").ToString.Length < 7) Then
                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de Periodo en la fila " & vFila & " tiene formato incorrecto. Asegurese de tener formato AAAA-DD"
                    ListaErrores.Add(Erreor)
                    Throw New Exception("La columna de Periodo en la fila " & vFila & " tiene formato incorrecto. Asegurese de tener formato AAAA-DD")
                End If

                If IsDBNull(vDataRow("Descripcion")) Then

                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de Descripcion en la fila " & vFila & " es incorrecta."
                    ListaErrores.Add(Erreor)

                    Throw New Exception("La columna de Descripcion en la fila " & vFila & " es incorrecta.")
                End If

                Dim CodMetaCabecera As Integer = vDataRow("Codigo de Meta")
                Dim PeriodoNombre As String = vDataRow("Periodo")
                Dim Descripcion As String = vDataRow("Descripcion")
                Dim FechaIni As Date
                Dim FechaFin As Date

                Dim _Query As New TQuery(CreaTransaccion.Conexion)
                _Query.Selected(New TField("DocEntry"))
                _Query.Selected(New TField("U_LDT_UDF_Descrip"))
                _Query.From(New TFrom("@LDT_UST_COM_METAS"))
                _Query.Where(New TField("DocEntry"), OperadoresFiltros.Igual, New TValue(CodMetaCabecera))

                If _Query.Open Then
                    recset.DoQuery(_Query.SQL)
                    If recset.RecordCount > 0 Then

                        Throw New Exception("La meta " + CodMetaCabecera + " ya existe en SAP")
                    Else
                        _Query.Clear()
                        Dim oServiceOrigen As SAPbobsCOM.GeneralService
                        Dim oGeneralDataOrigen As SAPbobsCOM.GeneralData
                        Dim sCmp As SAPbobsCOM.CompanyService

                        Dim oChild As SAPbobsCOM.GeneralData
                        Dim ChildrenDetalleMezcla As SAPbobsCOM.GeneralDataCollection
                        Dim ChildrenDetalleAgente As SAPbobsCOM.GeneralDataCollection



                        Dim _QueryPer As New TQuery(CreaTransaccion.Conexion)
                        _QueryPer.Selected(New TField("F_RefDate"))
                        _QueryPer.Selected(New TField("T_RefDate"))
                        _QueryPer.From(New TFrom("OFPR"))
                        _QueryPer.Where(New TField("Name"), OperadoresFiltros.Igual, New TValue(PeriodoNombre))

                        If _QueryPer.Open Then
                            recset.DoQuery(_QueryPer.SQL)
                            If recset.RecordCount > 0 Then
                                recset.MoveFirst()
                                FechaIni = recset.Fields().Item("F_RefDate").Value
                                FechaFin = recset.Fields().Item("T_RefDate").Value
                            End If
                        End If



                        sCmp = SBOLDObjeto.Company.GetCompanyService

                        oServiceOrigen = sCmp.GetGeneralService("LDT_UST_COM_METAS")

                        oGeneralDataOrigen = oServiceOrigen.GetDataInterface(SAPbobsCOM.GeneralServiceDataInterfaces.gsGeneralData)
                        oGeneralDataOrigen.SetProperty("U_LDT_UDF_Descrip", Descripcion)
                        oGeneralDataOrigen.SetProperty("U_LDT_UDF_NomPeriodo", PeriodoNombre)
                        oGeneralDataOrigen.SetProperty("U_LDT_UDF_PerInicio", FechaIni)
                        oGeneralDataOrigen.SetProperty("U_LDT_UDF_PerFinal", FechaFin)
                        oGeneralDataOrigen.SetProperty("U_LDT_UDF_CodePeriodo", PeriodoNombre)

                        ChildrenDetalleMezcla = oGeneralDataOrigen.Child("LDT_UST_COM_MEZCLA")
                        ChildrenDetalleAgente = oGeneralDataOrigen.Child("LDT_UST_COM_MT_AG")

                        'recorro la hoja de excel Mezcla
                        Dim vFilaMezcla As Integer = 2
                        For Each detalleItem As DataRow In vTabla_Mezcla.Rows
                            Dim CodDetalle As Integer = detalleItem("Código Meta")
                            Dim TipoCat As Integer
                            Dim CodigoPropiedad As String = ""
                            Dim DescripcionDetalle As String = ""
                            Dim MontoMeta As Double = 0
                            Dim detallefoco As String = 0
                            Dim PorcentajeMeta As Double = 0



                            If Not IsNumeric(detalleItem("Tipo Categoria")) Then
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de Tipo Categoria en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Tipo Categoria en la fila " & vFilaMezcla & " es incorrecta.")
                            End If


                            If IsDBNull(detalleItem("Código o Propiedad")) Then

                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de Código o Propiedad en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Código o Propiedad en la fila " & vFilaMezcla & " es incorrecta.")
                            End If

                            If IsDBNull(detalleItem("Descripción")) Then

                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de Descripción en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Descripción en la fila " & vFilaMezcla & " es incorrecta.")
                            End If

                            If Not IsNumeric(detalleItem("Monto Meta")) Then
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de Monto Meta en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Monto Meta en la fila " & vFilaMezcla & " es incorrecta.")
                            End If

                            If IsDBNull((detalleItem("Foco"))) Then
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de foco en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de foco en la fila " & vFilaMezcla & " es incorrecta.")
                            ElseIf (detalleItem("Foco") <> "N" And detalleItem("Foco") <> "S") Then

                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de foco en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de foco en la fila " & vFilaMezcla & " es incorrecta.")
                            End If

                            If Not IsNumeric(detalleItem("Porcentaje Meta")) Then
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaMezcla
                                Erreor.Descripcion = "La columna de Porcentaje Meta en la fila " & vFilaMezcla & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Porcentaje Meta en la fila " & vFilaMezcla & " es incorrecta.")
                            End If


                            TipoCat = detalleItem("Tipo Categoria")
                            CodigoPropiedad = detalleItem("Código o Propiedad")
                            DescripcionDetalle = detalleItem("Descripción")
                            MontoMeta = detalleItem("Monto Meta")
                            detallefoco = detalleItem("Foco")
                            PorcentajeMeta = detalleItem("Porcentaje Meta")

                            If CodDetalle = (CodMetaCabecera) Then

                                If TipoCat = 4 Then
                                    If ExisteVentaTotal = False Then
                                        ExisteVentaTotal = True
                                    Else
                                        Throw New Exception("La categoria 4 ya existe para la meta " + CodMetaCabecera.ToString())
                                    End If


                                End If

                                If TipoCat = 5 Then
                                    If ExisteCobro = False Then
                                        ExisteCobro = True
                                    Else
                                        Erreor.Hoja = "Mezcla"
                                        Erreor.Fila = vFilaMezcla
                                        Erreor.Descripcion = "La categoria 5 ya existe para la meta " + CodMetaCabecera.ToString()
                                        ListaErrores.Add(Erreor)
                                        Throw New Exception("La categoria 5 ya existe para la meta " + CodMetaCabecera.ToString())
                                    End If


                                End If

                                If vTabla_Mezcla.Rows.Count = vFilaMezcla - 1 Then
                                    If ExisteVentaTotal = False Then
                                        Erreor.Hoja = "Mezcla"
                                        Erreor.Fila = vFilaMezcla
                                        Erreor.Descripcion = "La meta " + CodMetaCabecera.ToString() + " no tiene asociado la categoria de ventas alcanzadas"
                                        ListaErrores.Add(Erreor)
                                        Throw New Exception("La meta " + CodMetaCabecera.ToString() + " no tiene asociado la categoria de ventas alcanzadas")
                                    End If

                                    If ExisteCobro = False Then
                                        Erreor.Hoja = "Mezcla"
                                        Erreor.Fila = vFilaMezcla
                                        Erreor.Descripcion = "La meta " + CodMetaCabecera.ToString() + "no tiene asociado la categoria de Cobro"
                                        ListaErrores.Add(Erreor)
                                        Throw New Exception("La meta " + CodMetaCabecera.ToString() + "no tiene asociado la categoria de Cobro")
                                    End If


                                End If




                                oChild = ChildrenDetalleMezcla.Add()
                                oChild.SetProperty("U_LDT_UDF_TipoCat", TipoCat)
                                oChild.SetProperty("U_LDT_UDF_CodOProp", CodigoPropiedad)
                                oChild.SetProperty("U_LDT_UDF_Descripcion", DescripcionDetalle)
                                oChild.SetProperty("U_LDT_UDF_MontoMeta", MontoMeta)
                                oChild.SetProperty("U_LDT_UDF_Foco", detallefoco)
                                oChild.SetProperty("U_LDT_UDF_PorcMeta", PorcentajeMeta)




                            End If
                            vFilaMezcla += 1



                        Next

                        'recorro la hoja de excel Agente
                        Dim vFilaAgente As Integer = 2
                        Dim Lista_Agentes As String = ""
                        Dim Separador As String = ""
                        For Each DetalleAgente As DataRow In vTabla_Agente.Rows

                            Dim CodMetaAgente As Integer = DetalleAgente("Código Meta")
                            Dim CodAgente As String = ""
                            Dim NombreAgente As String = ""



                            If Not IsNumeric(DetalleAgente("Código Meta")) Then
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaAgente
                                Erreor.Descripcion = "La columna de Categoria en la fila " & vFilaAgente & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Categoria en la fila " & vFilaAgente & " es incorrecta.")
                            End If


                            If (IsDBNull(DetalleAgente("Código Agente"))) Then
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = vFilaAgente
                                Erreor.Descripcion = "La columna de Código o Propiedad en la fila " & vFilaAgente & " es incorrecta."
                                ListaErrores.Add(Erreor)

                                Throw New Exception("La columna de Código o Propiedad en la fila " & vFilaAgente & " es incorrecta.")
                            End If


                            CodMetaAgente = DetalleAgente("Código Meta")
                            CodAgente = DetalleAgente("Código Agente")

                            If CodMetaAgente = CodMetaCabecera Then

                                For i = 0 To listaAgentes.Count - 1

                                    Dim str = listaAgentes.Item(i)

                                    Dim query = From agente As Array In listaAgentes
                                    Where agente(0) = CodAgente And agente(1) = PeriodoNombre
                                    Select agente

                                    Dim result = query.Count
                                    If query.Count > 0 Then
                                        Erreor.Hoja = "Agente"
                                        Erreor.Fila = vFilaAgente
                                        Erreor.Descripcion = "Los Agentes no pueden estar repetidos en la misma meta o en un mismo periodo"
                                        ListaErrores.Add(Erreor)
                                        Throw New Exception("Los Agentes no pueden estar repetidos en la misma meta o en un mismo periodo")
                                    End If


                                Next i



                                Lista_Agentes &= Separador & " " & CodAgente
                                Separador = ","


                                If Not ValidarOtrosCalculos(Lista_Agentes, FechaIni, FechaFin, -1) Then
                                    Throw New Exception("Error al cargar los agentes")
                                End If



                                NombreAgente = obtenerNombreAgente(CodAgente)
                                oChild = ChildrenDetalleAgente.Add()
                                oChild.SetProperty("U_LDT_UDF_Cod_Agente", CodAgente)
                                oChild.SetProperty("U_LDT_UDF_Nom_Agente", NombreAgente)

                                ArrayAgentePeriodo(0) = CodAgente
                                ArrayAgentePeriodo(1) = PeriodoNombre
                                listaAgentes.Add(ArrayAgentePeriodo)

                            End If
                            vFilaAgente += 1

                        Next


                        'Add the new row, including children, to database
                        oServiceOrigen.Add(oGeneralDataOrigen)

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(oServiceOrigen)
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(oGeneralDataOrigen)
                        oGeneralDataOrigen = Nothing
                        oServiceOrigen = Nothing
                        GC.Collect()
                        SBOLDObjeto.SBO_Application.StatusBar.SetSystemMessage("Importado con éxito", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success)

                        If ListaErrores.Count > 0 Then
                            FormaCreada = SBOLDObjeto.CreateForm("LDCOMLOG", SAPbouiCOM.BoFormMode.fm_OK_MODE)

                            llenarGridErrores(FormaCreada, ListaErrores)
                        End If


                    End If

                Else
                    Return SBOLDObjeto.RetornoError(+" " + _Query.MSG_Error)
                    Return False
                End If




                vFila += 1

            Next


        Catch ex As Exception
            If ListaErrores.Count > 0 Then
                FormaCreada = SBOLDObjeto.CreateForm("LDCOMLOG", SAPbouiCOM.BoFormMode.fm_OK_MODE)
                llenarGridErrores(FormaCreada, ListaErrores)
                GC.Collect()
            End If
            Throw New Exception(ex.Message)
        End Try

        Return ""
    End Function

    Function obtenerNombreAgente(ByVal CodAgente As String) As String
        Dim recset As SAPbobsCOM.Recordset
        recset = SBOLDObjeto.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
        Dim Nombre As String = ""
        Dim Origen = ""
        Dim Parametros As String = ""
        Parametros = """T2"".""SlpCode"", ""T2"".""SlpName"""
        Parametros &= "FROM ""OSLP"" as ""T2"""
        Parametros &= " WHERE ""T2"".""SlpCode"" = " + CodAgente + ""
        Origen = "Select "
        Origen &= Parametros
        Origen &= " Order by ""SlpCode"" asc"



        recset.DoQuery(Origen)
        If recset.RecordCount > 0 Then
            recset.MoveFirst()
            Nombre = recset.Fields().Item("SlpName").Value

        End If



        Return Nombre
    End Function

    Sub llenarGridErrores(ByVal pForma As SAPbouiCOM.Form, ByVal pListErrores As Collection(Of LDCOMCARGAErrores))
        pForma.Freeze(True)

        Try
            Dim oForm As SAPbouiCOM.Form = pForma
            Dim oGrid As SAPbouiCOM.Grid = CType(oForm.Items.Item("MaxError").Specific, SAPbouiCOM.Grid)
            Dim dt As SAPbouiCOM.DataTable = oForm.DataSources.DataTables.Item("MaxError")
            Dim J As Integer = 0
            For Each ItemError In pListErrores

                dt.Rows.Add(1)
                dt.SetValue(0, J, ItemError.Hoja)
                dt.SetValue(1, J, ItemError.Fila)
                dt.SetValue(2, J, ItemError.Descripcion)
                J += 1
            Next


            oForm.Freeze(False)

        Catch ex As Exception
            MsgBox("Se ha producido un error grave: " + ex.Message)
        End Try
    End Sub


    Function ValidarOtrosCalculos(ByVal PListaAgentes As String, ByVal pDesde As Date, ByVal pHasta As Date, ByVal pCodMeta As String) As Boolean

        'Validar los agentes en Otros Calculos
        Dim Tot_Porcentaje_logro As Decimal = 0
        Dim Cantidad_agentes As Integer = 0
        Dim Nombre_Vista = "_SYS_BIC"".""LD_XS_Lucema.Views.CV/LDT_CAV_Agentes_Periodo"
        Dim recset As SAPbobsCOM.Recordset
        Dim Resultado As Boolean = True
        Dim Separador As String = ""
        Dim Mensaje_Error As String = ""

        Dim Parametros As String = ""
        Parametros = "  ( PLACEHOLDER.""$$LDT_IMP_Desde$$""     => TO_VARCHAR ('" & Format(CDate(pDesde), "yyyyMMdd") & "', 'YYYY/MM/DD HH24:mi')"
        Parametros &= "  ,PLACEHOLDER.""$$LDT_IMP_Hasta$$""     => TO_VARCHAR ('" & Format(CDate(pHasta), "yyyyMMdd") & "', 'YYYY/MM/DD HH24:mi')"
        Parametros &= "  ,PLACEHOLDER.""$$LDT_IMP_Cod_Meta$$""  => " & Val(pCodMeta) & ""
        Parametros &= "  ,PLACEHOLDER.""$$LDT_IMP_Agentes$$""   => '" & PListaAgentes & "'"
        Parametros &= ")"
        Dim MontoContribucion As Decimal = 0
        recset = SBOLDObjeto.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
        Try
            Dim Sql = ""
            Sql = " Select * from " & """" & Nombre_Vista & """"
            Sql &= Parametros
            recset.DoQuery(Sql)
            Dim I = 1
            If recset.RecordCount > 0 Then
                Resultado = False
                Separador = Chr(13)
                Do While recset.EoF = False
                    Mensaje_Error &= Separador & " (" & recset.Fields().Item("Cod_Agente").Value & ")- " & recset.Fields().Item("Nom_Agente").Value & " - Err: Existe en otra meta del mismo período"
                    recset.MoveNext()
                Loop



            End If
            System.Runtime.InteropServices.Marshal.ReleaseComObject(recset)
            recset = Nothing
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try


        '------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        'Validar las Configuración de los Agentes en meta actual

        Nombre_Vista = "_SYS_BIC"".""LD_XS_Lucema.Views.CV/LDT_CAV_Datos_Agentes"

        Parametros = "  ( PLACEHOLDER.""$$LDT_IMP_Cod_Agente$$""   => '" & PListaAgentes & "'"
        Parametros &= ")"
        recset = SBOLDObjeto.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
        Try
            Dim Sql = "Select ""SlpCode"", ""SlpName"", ""empID"", ""Salario_Comision"", ""Emp_Relacionado"", sum(""CMDN"") AS ""CMDN"" "
            Sql &= " from " & """" & Nombre_Vista & """"
            Sql &= Parametros
            Sql &= " GROUP BY ""SlpCode"", ""SlpName"", ""empID"", ""Salario_Comision"", ""Emp_Relacionado"""
            recset.DoQuery(Sql)
            Dim I = 1
            If recset.RecordCount > 0 Then
                Separador = Chr(13)

                Dim SlpCode As Integer = 0
                Dim SlpName As String = ""
                Dim Salario_Comision As Decimal = 0
                Dim Emp_Relacionado As Integer = 0
                Do While recset.EoF = False

                    SlpCode = recset.Fields().Item("SlpCode").Value
                    SlpName = recset.Fields().Item("SlpName").Value
                    Salario_Comision = recset.Fields().Item("Salario_Comision").Value
                    Emp_Relacionado = recset.Fields().Item("Emp_Relacionado").Value

                    If Salario_Comision <= 0 Then
                        Resultado = False
                        Mensaje_Error &= Separador & " (" & SlpCode & ") " & SlpName & " - Err: Sin Salario de Comisión definido"
                    End If

                    If Emp_Relacionado <= 0 Then
                        Resultado = False
                        Mensaje_Error &= Separador & " (" & SlpCode & ") " & SlpName & " - Err: Sin Empleado relacionado"
                    End If

                    recset.MoveNext()
                Loop
            End If
            System.Runtime.InteropServices.Marshal.ReleaseComObject(recset)
            recset = Nothing

            If Mensaje_Error <> "" Then
                MsgBox(Mensaje_Error)
            End If


        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try


        Return Resultado

    End Function
End Class