Private Function validateRow() As Boolean
Dim i As Integer
Dim iRow As Integer
Dim ConceptoPago As String
Dim Formapago As String
Dim TipoCambioCupon As Single
Dim SiguienteConsecutivo As Integer
Dim strSelect As String
Dim strUpdate As String
Dim strInsert As String
Dim strDelete As String
Dim ImporteTarjetaCredito As Single
Dim ImporteTarjetaCreditoDolares As Single
Dim ComisionTarjetaCredito As Single
Dim ComisionTarjetaCreditoDolares As Single
Dim TipoCambioTarjetaCreditoDolares As Single
Dim CuponTour As String
Dim tFields() As String
Dim sTmp As String
Dim Tarifa As String
Dim PaxAdulto As String
Dim PaxMenor As String
Dim Importe As String
Dim TipoCambio As String
Dim PorcentajeComision As String
Dim NumeroConfirmacion As String
    
    NumeroConfirmacion = frmPagoTour.txtConfirmacion
    ImporteTarjetaCredito = 0
    ImporteTarjetaCreditoDolares = 0
    validateRow = True
Si no ha cambiado ningn dato sale de la funcin
    If Not blnFieldChanged Then Exit Function
    
    iRow = SCGrid1.CurrentRow
Redimensiona un array, donde va a almacenar los valores de las celdas
    ReDim tFields(SCGrid1.Cols - 1)
      
    For i = 0 To SCGrid1.Cols  1
Valida el valor de las celdas, si hay algn dato mal capturado no te deja
continuar hasta que se corrija, el cdigo frmSubPagoTourNuevo-validateFields, muestra la funcin para validar las celdas
        If Not validateFields(iRow, i) Then
            validateRow = False
            Exit Function
        End If
        Segn la columna, almacena el valor del valor de la celda en el array,
pero formateado segn el tipo de dato, para ejecutar de manera correcta la
orden SQL que guarda o inserta el registro (en el caso de que sea nuevo)
        sTmp = SCGrid1.Text(iRow, i)
        Select Case i
        Case 3
            sTmp = Replace(sTmp, "'", "''")
            tFields(i) = "'" & sTmp & "'"
        Case 4 To 6
            sTmp = Replace(sTmp, ",", ".")
            tFields(i) = sTmp
        Case 7
                tFields(i) = sTmp
         Case 8, 9
            sTmp = Replace(sTmp, ",", ".")
            tFields(i) = sTmp
        Case 0
            tFields(i) = sTmp
        Case 1, 2
            tFields(i) = "'" & SCGrid1.Text(iRow, i) & "'"
        End Select
    Next i
        
    On Error GoTo ErrorHandle
    Si el registro es nuevo, entonces inserta un registro en la tabla
CFlowTemporal
    If blnNewRow Then
        rcds.Open "select max([Consecutivo]) as [UltimoConsecutivo] from CFlowTemporal", db
        SiguienteConsecutivo = rcds![UltimoConsecutivo] + 1
        rcds.Close
        SCGrid1.Text(iRow, 0) = SiguienteConsecutivo
        strInsert = "insert into CFlowTemporal values ("
        strInsert = strInsert & SiguienteConsecutivo
        For i = 1 To SCGrid1.Cols - 1
            strInsert = strInsert & "," & tFields(i)
        Next i
        strInsert = strInsert & ")"
        db.Execute strInsert
        displayList
        strInsert = "I:" & SiguienteConsecutivo
        For i = 1 To SCGrid1.Cols - 1
            strInsert = strInsert & "," & Trim(SCGrid1.Text(iRow, i))
        Next i
        StatusBar1.Panels(2).Text = "Pago insertado"
        Inserta un registro en la tabla Userlog, donde indica los datos que se
insertaron
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = Left(strInsert, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
            Borra todos los conceptos de pago de Comisiones de Tarjeta de
Crdito, para aadir en forma automtica cuanto es lo que corresponde a
dichas comisiones segn lo que se haya pagado en Tarjeta de Crdito
        strDelete = "delete * from CFlowTemporal where CPago = 'Comisiones Tarjeta Credito' Or CPago = 'Comisiones Tarjeta Credito Dol'"
        db.Execute strDelete
        
        For i = 0 To SCGrid1.Rows - 1
        ConceptoPago = SCGrid1.Text(i, 1)
        Formapago = SCGrid1.Text(i, 2)
        If Formapago = "Tarjeta de credito" Then
            If ConceptoPago <> "Comisiones Tarjeta Credito" Then
            ImporteTarjetaCredito = ImporteTarjetaCredito + SCGrid1.Text(i, 7)
            End If
        End If
        If Formapago = "Tarjeta de credito dolares" Then
            If ConceptoPago <> "Comisiones Tarjeta Credito Dol" Then
            ImporteTarjetaCreditoDolares = ImporteTarjetaCreditoDolares + SCGrid1.Text(i, 7)
            End If
        End If
        Next i
        If ImporteTarjetaCredito <> 0 Then
inserta a CflowTemporal, lo que corresponde a Comisiones de
Tarjeta de crdito. Inserta tambin en Userlog que se eliminaron todos los
pagos de Comisiones de Tarjeta de Crdito, y se insertaron una vez ms
pero con la cantidad correcta
            
            CuponTour = frmPagoTour.txtCupon
            ComisionTarjetaCredito = ImporteTarjetaCredito * 0.06
            rcds.Open "select max([Consecutivo]) as [UltimoConsecutivo] from CFlowTemporal", db
            SiguienteConsecutivo = rcds![UltimoConsecutivo] + 1
              rcds.Close
            strInsert = "INSERT INTO CFlowTemporal VALUES (" & SiguienteConsecutivo & ",'Comisiones Tarjeta Credito', " & _
        "'Tarjeta de credito', '" & CuponTour & "','0',0,0," & ComisionTarjetaCredito & ",1,0" & ")"
             db.Execute strInsert
             strInsert = "IA:" & SiguienteConsecutivo & ",Comis. Tarj. Cred., " & _
        "Tarj. de cred.," & CuponTour & ",0,0,0," & ComisionTarjetaCredito & ",1,0"
        displayList
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = "Borrado autom. todos los conceptos de pago:Comis. Tarj. Cred."
            dbUlog.Recordset.Update
            dbUlog.Refresh
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = Left(strInsert, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
        End If
        
        If ImporteTarjetaCreditoDolares <> 0 Then
inserta a CflowTemporal, lo que corresponde a Comisiones de
Tarjeta de crdito en Dlares. Inserta tambin en Userlog que se eliminaron
todos los pagos de Comisiones de Tarjeta de Crdito, y se insertaron una
vez mas pero con la cantidad correcta
            TipoCambioTarjetaCreditoDolares = DLookup("Ftc", "FPagos", "FIdent='Tarjeta de credito dolares'")
            CuponTour = frmPagoTour.txtCupon
            ComisionTarjetaCreditoDolares = ImporteTarjetaCreditoDolares * 0.06
            rcds.Open "select max([Consecutivo]) as [UltimoConsecutivo] from CFlowTemporal", db
            SiguienteConsecutivo = rcds![UltimoConsecutivo] + 1
              rcds.Close
            strInsert = "INSERT INTO CFlowTemporal VALUES (" & SiguienteConsecutivo & ",'Comisiones Tarjeta Credito Dolares', " & _
        "'Tarjeta de credito dolares', '" & CuponTour & "','0',0,0," & ComisionTarjetaCreditoDolares & "," & TipoCambioTarjetaCreditoDolares & ",0" & ")"
             db.Execute strInsert
             strInsert = "IA:" & SiguienteConsecutivo & ",Comis. Tarj. Cred. Dol.," & _
        "Tarj. de cred. dol.," & CuponTour & ",0,0,0," & ComisionTarjetaCreditoDolares & "," & TipoCambioTarjetaCreditoDolares & ",0"
            displayList
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = "Borrado autom. todos los conceptos de pago:Comis. Tarj. Cred."
            dbUlog.Recordset.Update
            dbUlog.Refresh
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = Left(strInsert, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
        End If
    Else
Si el registro no es nuevo, entonces se ha modificado algo al registro y se
tiene que actualizar. As mismo tambin borra todos los registros donde
figure que se pago con Comisiones Tarjeta de Crdito, e inserta el nuevo
registro para Comisiones de Tarjeta de Crdito segn lo que se pago con
Tarjeta de Crdito
        strUpdate = "update CFlowTemporal set "
        strUpdate = strUpdate & SCGrid1.Key(-1, 1) & "=" & tFields(1)
        For i = 2 To SCGrid1.Cols - 1
           strUpdate = strUpdate & "," & SCGrid1.Key(-1, i) & "=" & tFields(i)
        Next i
        strUpdate = strUpdate & " where " & SCGrid1.Key(-1, 0) & "=" & tFields(0)
        db.Execute strUpdate
        StatusBar1.Panels(2).Text = "Pago modificado"
        strUpdate = "M:" & tFields(0)
        For i = 1 To SCGrid1.Cols - 1
            strUpdate = strUpdate & "," & SCGrid1.Text(iRow, i)
        Next i
        
        strDelete = "delete * from CFlowTemporal where CPago = 'Comisiones Tarjeta Credito' Or CPago = 'Comisiones Tarjeta Credito Dol'"
        db.Execute strDelete
        displayList
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = Left(strUpdate, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
        
        For i = 0 To SCGrid1.Rows - 1
        ConceptoPago = SCGrid1.Text(i, 1)
        Formapago = SCGrid1.Text(i, 2)
        If Formapago = "Tarjeta de credito" Then
            If ConceptoPago <> "Comisiones Tarjeta Credito" Then
            ImporteTarjetaCredito = ImporteTarjetaCredito + SCGrid1.Text(i, 7)
            End If
        End If
        If Formapago = "Tarjeta de credito dolares" Then
            If ConceptoPago <> "Comisiones Tarjeta Credito Dol" Then
            ImporteTarjetaCreditoDolares = ImporteTarjetaCreditoDolares + SCGrid1.Text(i, 7)
            End If
        End If
        Next i
        
        If ImporteTarjetaCredito <> 0 Then
        
            CuponTour = frmPagoTour.txtCupon
            ComisionTarjetaCredito = ImporteTarjetaCredito * 0.06
            rcds.Open "select max([Consecutivo]) as [UltimoConsecutivo] from CFlowTemporal", db
            SiguienteConsecutivo = rcds![UltimoConsecutivo] + 1
              rcds.Close
            strInsert = "INSERT INTO CFlowTemporal VALUES (" & SiguienteConsecutivo & ",'Comisiones Tarjeta Credito', " & _
        "'Tarjeta de credito', '" & CuponTour & "','0',0,0," & ComisionTarjetaCredito & ",1,0" & ")"
             db.Execute strInsert
            strInsert = "IA:" & SiguienteConsecutivo & ",Comis. Tarj. Cred., " & _
        "Tarj. de cred.," & CuponTour & ",0,0,0," & ComisionTarjetaCredito & ",1,0"
        displayList
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = "Borrado autom. todos los conceptos de pago: Comis. Tarj. Cred."
            dbUlog.Recordset.Update
            dbUlog.Refresh
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = Left(strInsert, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
        End If
        
        If ImporteTarjetaCreditoDolares <> 0 Then
            TipoCambioTarjetaCreditoDolares = DLookup("Ftc", "FPagos", "FIdent='Tarjeta de credito dolares'")
    
            CuponTour = frmPagoTour.txtCupon
            ComisionTarjetaCreditoDolares = ImporteTarjetaCreditoDolares * 0.06
            rcds.Open "select max([Consecutivo]) as [UltimoConsecutivo] from CFlowTemporal", db
            SiguienteConsecutivo = rcds![UltimoConsecutivo] + 1
              rcds.Close
            strInsert = "INSERT INTO CFlowTemporal VALUES (" & SiguienteConsecutivo & ",'Comisiones Tarjeta Credito Dolares', " & _
        "'Tarjeta de credito dolares', '" & CuponTour & "','0',0,0," & ComisionTarjetaCreditoDolares & "," & TipoCambioTarjetaCreditoDolares & ",0" & ")"
             db.Execute strInsert
             strInsert = "IA:" & SiguienteConsecutivo & ",Comis. Tarj. Cred. Dol.," & _
        "Tarj. de cred. dol.," & CuponTour & ",0,0,0," & ComisionTarjetaCreditoDolares & "," & TipoCambioTarjetaCreditoDolares & ",0"
             
            displayList
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = "Borrado autom. todos los conceptos de pago:Comis. Tarj. Cred."
            dbUlog.Recordset.Update
            dbUlog.Refresh
            Sleep 1000
            dbUlog.Recordset.AddNew
            dbUlog.Recordset.Fields("Confirmacion").Value = NumeroConfirmacion
            dbUlog.Recordset.Fields("Computadora").Value = FindComputerName
            dbUlog.Recordset.Fields("UsuarioWindows").Value = FindUserName
            dbUlog.Recordset.Fields("UsuarioSicres").Value = RsvUsuario.Text
            dbUlog.Recordset.Fields("Fecha").Value = Format(Now(), "dd/mm/yyyy")
            dbUlog.Recordset.Fields("Hora").Value = Format(Now(), "HH:MM:SS")
            dbUlog.Recordset.Fields("Actividad").Value = Left(strInsert, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
        End If
    End If
    
    If iRow >= 0 Then Set SCGrid1.CellPicture(iRow, -1) = Nothing
    initVariables
    SCGrid1.CurrentRow = -1
    cmdQuit.Enabled = True
    
Exit Function
ErrorHandle:
    MsgBox err.Description
    validateRow = False
End Function
