Private Sub cmdAbrirDetalledePago_Click()
Dim dbName As String
Dim conn As ADODB.Connection
Dim strUpdate As String
Dim NumeroConfirmacionAActualizar As String
Dim ConceptoPagoAActualizar As String
Dim FechaTour As String
Dim FechaTourAActualizar As String
Dim FechaTrabajo As String
Dim Dia As String
Dim Mes As String
Dim Ao As String
Dim HoraTourAActualizar As String
Dim NombreClienteAActualizar As String
Dim CanalAActualizar As String
Dim SubCanalAActualizar As String
Dim AgenteTourAActualizar As String
Dim HotelAActualizar As String
Dim HabitacionAActualizar As String
Dim NumeroCuponAActualizar As String
Dim TarifaAgenciaAActualizar As Single
Dim TipoCambioAActualizar As Single
Dim PorcentajeComisionAActualizar As Single
Dim Formapago As String
Dim ImporteBruto As Single
Dim ImporteBrazalete As Single
Dim PaxAdulto As Integer
Dim PaxMenor As Integer
Dim Cambios1 As String
Dim Cambios2 As String
Dim Cambios3 As String
Dim Cambios4 As String
Dim Cambios5 As String
Dim strSelect As String
Dim Consecutivo As Integer
Dim ConceptoPago As String
Dim Cupon As String
Dim Tarifa As Single
Dim Importe As Single
Dim TipoCambio As Single
Dim PorcentajeComision As Single
Dim FilaPago As String
Dim HorarioEnTour As Boolean
Dim ActualHorarioParaTour As String
Dim TotalPax As Integer
Dim NumEmbarcacion As String
Dim TipoEmbarcacion As String
Dim Libres As Integer
Dim Asignados As Integer
Dim TotalAsignados As Integer
Dim TotalFaltaPorAsignar As Integer
Dim ConfirmacionConEmbarcacion As String
Dim Hora As String
Dim YaHayEnTour As Boolean
Dim PrimerRolAsignado As Integer
Dim PrimerRolAAsignar As Integer
Dim CodigoGuia As String
Dim NombreGuia As String
Dim i As Integer
Dim j As Integer
Dim LibresEncontrados As Boolean
Dim ConsecutivoEmbarcacion As Integer
Dim Ocupados As Integer
Dim TotalOcupados As Integer
Dim NumEmbarcacionABuscar As String
Dim TiempoUsoActual As Single
Dim TiempoUsoParaServicio As Single
Dim TiempoUsoPromedio As Single

Asigna a las variables los valores de los cuadros de texto y ComboBox
NumeroConfirmacionAActualizar = txtConfirmacion
ConceptoPagoAActualizar = ComboActividad
FechaTour = txtFecha
HoraTourAActualizar = txtHora
PaxAdulto = txtPaxAdulto
PaxMenor = txtPaxMenor
NombreClienteAActualizar = txtNombre
CanalAActualizar = ComboCanal
SubCanalAActualizar = ComboSubCanal
AgenteTourAActualizar = ComboAgente
HotelAActualizar = ComboHotel
HabitacionAActualizar = txtHabitacion
NumeroCuponAActualizar = txtCupon
TarifaAgenciaAActualizar = txtTarifa
TipoCambioAActualizar = txtTipoCambio
PorcentajeComisionAActualizar = txtPorcentajeComision

Calcula el importe del tour y el importe de Brazaletes a pagar
ImporteBruto = (TarifaAgenciaAActualizar) * ((PaxAdulto + (PaxMenor) / 2))
ImporteBrazalete = (PaxAdulto + PaxMenor) * 2

    Dia = Mid(txtFecha.Text, 4, 2)
    Mes = Left(txtFecha.Text, 2)
    Ao = Right(txtFecha.Text, 2)
    FechaTourAActualizar = Dia & "/" & Mes & "/" & Ao
    
strSelect = "Select FechaTrabajo From [Fecha Trabajo]"
    
    If rcds.State = adStateOpen Then rcds.Close
    rcds.Open strSelect, db, adOpenStatic, adLockOptimistic
rcds.MoveFirst
    FechaTrabajo = rcds(0).Value
    rcds.Close
   Si la fecha del tour es la de trabajo actual 
If FechaTour = FechaTrabajo Then
Se abre la tabla horarios para averiguar cual es el horario actual para tour
strSelect = "Select Horarios.Horario, Horarios.EnTour From Horarios where Servicio = '" & ConceptoPagoAActualizar & "' ORDER BY Horarios.Horario"
    If rcds.State = adStateOpen Then rcds.Close
    rcds.Open strSelect, db, adOpenStatic, adLockOptimistic
    rcds.MoveFirst
    ActualHorarioParaTour = rcds.Fields(0)
    HorarioEnTour = rcds.Fields(1)
    Si el primer horario de tour ya salio, entonces averiguar cual es el actual
    If HorarioEnTour = True Then
        rcds.MoveNext
        For i = 2 To rcds.RecordCount
        HorarioEnTour = rcds.Fields(1)
        If HorarioEnTour = False Then
            ActualHorarioParaTour = rcds.Fields(0)
            Exit For
        End If
        rcds.MoveNext
        Next i
        If HorarioEnTour = True Then
            MsgBox "Ya salieron todos los tours del da"
            Exit Sub
        End If
    End If
    rcds.Close
Si el actual horario para tour es diferente al horario del tour, entonces
    If ActualHorarioParaTour <> HoraTourAActualizar Then
        If MsgBox("El horario del Tour es diferente al actual: " & ActualHorarioParaTour & ", desea cambiar este tour a este horario?", vbYesNo, "Advertencia de Horario") = vbYes Then
            txtHora = ActualHorarioParaTour
            HoraTourAActualizar = txtHora
        Else
            Exit Sub
        End If
     End If
End If
    Se almacena en Cambios1 los cambios en ComboActividad y txthora
Cambios1 = "Grabar "
    If ActividadInicial <> ComboActividad Then
        Cambios1 = Cambios1 & "AC:" & ComboActividad
        If HoraInicial <> txtHora Then
            Cambios1 = Cambios1 & ",HR:" & txtHora
        End If
    Else
        If HoraInicial <> txtHora Then
            Cambios1 = Cambios1 & "HR:" & txtHora
        End If
    End If
    If Cambios1 <> "Grabar " Then
Se aade un registro a la tabla Userlog, con los cambios
    dbUlog.Recordset.AddNew
    dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
    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 = Cambios1
    dbUlog.Recordset.Update
    End If
Se almacena en Cambios2, los cambios en txtNombre, ComboHotel,
txtHabitacion y ComboHotel
    Cambios2 = "Grabar "
    If NombreInicial <> txtNombre Then
        Cambios2 = Cambios2 & "NOM:" & txtNombre
        If HotelInicial <> ComboHotel Then
            Cambios2 = Cambios2 & ",HOT:" & ComboHotel
            If HabitacionInicial <> txtHabitacion Then
            Cambios2 = Cambios2 & ",HAB:" & txtHabitacion
            End If
        Else
            If HabitacionInicial <> txtHabitacion Then
            Cambios2 = Cambios2 & ",HAB:" & txtHabitacion
            End If
        End If
    Else
        If HotelInicial <> ComboHotel Then
            Cambios2 = Cambios2 & "HOT:" & ComboHotel
            If HabitacionInicial <> txtHabitacion Then
            Cambios2 = Cambios2 & ",HAB:" & txtHabitacion
            End If
        Else
            If HabitacionInicial <> txtHabitacion Then
            Cambios2 = Cambios2 & "HAB:" & txtHabitacion
            End If
        End If
    End If
    If Cambios2 <> "Grabar " Then
Se aade un registro a la tabla Userlog con los cambios
    dbUlog.Recordset.AddNew
    dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
    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(Cambios2, 80)
    dbUlog.Recordset.Update
    End If
Se almacena en Cambios3, los cambios en txtCupon y txtNotas
    Cambios3 = "Grabar "
    If CuponInicial <> txtCupon Then
        Cambios3 = Cambios3 & "CUP:" & txtCupon
        If NotasInicial <> txtNotas Then
            Cambios3 = Cambios3 & ",NOT:" & txtNotas
        End If
    Else
        If NotasInicial <> txtNotas Then
            Cambios3 = Cambios3 & "NOT:" & txtNotas
        End If
    End If
    If Cambios3 <> "Grabar " Then
Se aade un registro a la tabla Userlog con los cambios
    dbUlog.Recordset.AddNew
    dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
    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(Cambios3, 80)
    dbUlog.Recordset.Update
    End If
    Cambios4 = "Grabar "
Se almacena en Cambios4, los cambios en ComboCanal, ComboSubCanal
y Combo Agente
    If CanalInicial <> ComboCanal Then
        Cambios4 = Cambios4 & "CA:" & ComboCanal
        If SubCanalInicial <> ComboSubCanal Then
            Cambios4 = Cambios4 & ",SU:" & ComboSubCanal
            If VendedorInicial <> ComboAgente Then
                Cambios4 = Cambios4 & ",VE:" & ComboAgente
            End If
        Else
            If VendedorInicial <> ComboAgente Then
                Cambios4 = Cambios4 & ",VE:" & ComboAgente
            End If
        End If
    Else
        If SubCanalInicial <> ComboSubCanal Then
            Cambios4 = Cambios4 & "SU:" & ComboSubCanal
            If VendedorInicial <> ComboAgente Then
                Cambios4 = Cambios4 & ",VE:" & ComboAgente
            End If
        Else
            If VendedorInicial <> ComboAgente Then
                Cambios4 = Cambios4 & "VE:" & ComboAgente
            End If
        End If
    End If
    If Cambios4 <> "Grabar " Then
    dbUlog.Recordset.AddNew
Se aade un registro a la tabla Userlog con los cambios
    dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
    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(Cambios4, 80)
    dbUlog.Recordset.Update
    End If
    Cambios5 = "Grabar "
Se almacena en Cambios5, los cambios en txtTarifa, txtTipoCambio y
txtPorcentajeComision
    If TarifaInicial <> txtTarifa Then
        Cambios5 = Cambios5 & "TA:" & txtTarifa
        If TipoCambioInicial <> txtTipoCambio Then
            Cambios5 = Cambios5 & ",TC:" & txtTipoCambio
            If PorcentajeComisionInicial <> txtPorcentajeComision Then
                Cambios5 = Cambios5 & ",PC" & txtPorcentajeComision
            End If
        Else
            If PorcentajeComisionInicial <> txtPorcentajeComision Then
                Cambios5 = Cambios5 & ",PC" & txtPorcentajeComision
            End If
        End If
    Else
        If TipoCambioInicial <> txtTipoCambio Then
            Cambios5 = Cambios5 & "TC:" & txtTipoCambio
            If PorcentajeComisionInicial <> txtPorcentajeComision Then
                Cambios5 = Cambios5 & ",PC:" & txtPorcentajeComision
            End If
        Else
            If PorcentajeComisionInicial <> txtPorcentajeComision Then
                Cambios5 = Cambios5 & "PC:" & txtPorcentajeComision
            End If
        End If
    End If
    If Cambios5 <> "Grabar " Then
    dbUlog.Recordset.AddNew
Se aade un registro a la tabla Userlog con los cambios
    dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
    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 = Cambios5
    dbUlog.Recordset.Update
    End If
  
    dbUlog.Refresh
    dbName = frmMain.Ap_Path & frmMain.dbName
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & dbName & ";" & _
        "Persist Security Info=False"
    conn.Open
    Se actualiza todos los cambios de la reservacin        
    strUpdate = "Update Reservaciones set Actividad = '" & ConceptoPagoAActualizar & _
    "', Hora = '" & HoraTourAActualizar & "', Nombre = '" & NombreClienteAActualizar & _
    "', Canal_venta = '" & CanalAActualizar & "', Sub_canal = '" & SubCanalAActualizar & _
    "', Agente = '" & AgenteTourAActualizar & "', No_cupon = '" & NumeroCuponAActualizar & _
    "', Hotel = '" & HotelAActualizar & "', Habitacion = '" & HabitacionAActualizar & _
    "', Tagencia = " & TarifaAgenciaAActualizar & ", Tipo_Cambio = " & TipoCambioAActualizar & _
    ", Porcentaje_comision = " & PorcentajeComisionAActualizar & " where NConfirmacion = '" & NumeroConfirmacionAActualizar & "'"
    conn.Execute strUpdate
  
Se borra el contenido de la tabla CFlowTemporal, que contendr el detalle
de los pagos realizados a esta reservacin
    conn.Execute "Delete CFlowTemporal.* from CFlowTemporal"
    Si el Canal de la reservacin es Agencia, entonces insertar como primer
registro de la tabla CFlowTemporal, los valores del pago que corresponde
al tour a tomar, con forma de pago Cupn, tarifa, tipo de cambio y porcentaje
de comisin de la Agencia
    If CanalAActualizar = "Agencia" Then
        conn.Execute "INSERT INTO CFlowTemporal VALUES (0,'" & ConceptoPagoAActualizar & " ', " & _
        "'Cupon agencia', '" & NumeroCuponAActualizar & "','" & TarifaAgenciaAActualizar & "'," & PaxAdulto & "," & PaxMenor & "," & ImporteBruto & "," & TipoCambioAActualizar & "," & PorcentajeComisionAActualizar & ")"
    Else
    Si el Canal de la reservacin no es Agencia, entonces insertar como
primer registro de la tabla CFlowTemporal, los valores del pago que
corresponde al tour a tomar, con forma de pago Dlares, tarifa, tipo de
cambio y porcentaje de comisin de el SubCanal
    conn.Execute "INSERT INTO CFlowTemporal VALUES (0,'" & ConceptoPagoAActualizar & "', " & _
        "'Dolares USA', '" & NumeroCuponAActualizar & "','" & TarifaAgenciaAActualizar & " '," & PaxAdulto & "," & PaxMenor & "," & ImporteBruto & "," & TipoCambioAActualizar & "," & PorcentajeComisionAActualizar & ")"
    End If
Si el pago corresponde a algn tour hacia los arrecifes, entonces insertar
como segunda registro el concepto de pago Brazalete Angel
    If ConceptoPagoAActualizar = "Cigarrette Angel" Or ConceptoPagoAActualizar = "Cigarrette Royal Sands" Then
    conn.Execute "INSERT INTO CFlowTemporal VALUES (1,'Brazalete Angel', " & _
        "'Dolares USA', '" & NumeroCuponAActualizar & "',2," & PaxAdulto & "," & PaxMenor & "," & ImporteBrazalete & ", 10,0)"
    End If
    
    dbUlog.Recordset.AddNew
Insertar un registro en la Tabla Userlog, con la descripcin de Abrir Detalle
de Pago
    dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
    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 = "Abrir detalle de pago"
    dbUlog.Recordset.Update
   dbUlog.Refresh
Se espera 1 segundo para insertar el siguiente registro en la Tabla Userlog
    Sleep 1000
    strSelect = "SELECT CflowTemporal.Consecutivo, CflowTemporal.CPago, CFlowTemporal.FPago, CFlowTemporal.Cupon, CFlowTemporal.Tarifa, CFlowTemporal.PaxAdulto, CFlowTemporal.PaxMenor, CFlowTemporal.Importe, CFlowTemporal.TipoCambio, CFlowTemporal.PorcentajeComision FROM CFlowTemporal"
       
rcds.Open strSelect, db, adOpenStatic, adLockOptimistic
    rcds.MoveFirst
            For i = 1 To rcds.RecordCount
            Consecutivo = rcds.Fields(0)
            ConceptoPago = rcds.Fields(1)
            Formapago = rcds.Fields(2)
            Cupon = rcds.Fields(3)
            Tarifa = rcds.Fields(4)
            PaxAdulto = rcds.Fields(5)
            PaxMenor = rcds.Fields(6)
            Importe = rcds.Fields(7)
            TipoCambio = rcds.Fields(8)
            PorcentajeComision = rcds.Fields(9)
            FilaPago = Consecutivo & "," & ConceptoPago & "," & Formapago & "," & Cupon & "," & Tarifa & "," & PaxAdulto & "," & PaxMenor & "," & Importe & "," & TipoCambio & "," & PorcentajeComision
            dbUlog.Recordset.AddNew
Inserta un registro en la tabla Userlog, con el contenido de la fila actual de la
tabla CFlowTemporal
            dbUlog.Recordset.Fields("Confirmacion").Value = txtConfirmacion
            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(FilaPago, 80)
            dbUlog.Recordset.Update
            dbUlog.Refresh
Se espera 1 segundo para moverse al siguiente registro de la tabla
CFlowTemporal
            Sleep 1000
            rcds.MoveNext
            Next i
    rcds.Close
    Aqu se empieza a asignar pasajeros
Total de pasajeros a asignar
    TotalPax = PaxAdulto + PaxMenor
    TotalAsignados = 0
Bandera que me indica que han sido encontrados todas las embarcaciones
necesarias para asignarle la cantidad de pasajeros de la reservacin
    LibresEncontrados = False
    dbFlujoEmbarcaciones.DatabaseName = frmMain.Ap_Path & frmMain.dbName
    dbFlujoEmbarcaciones.RecordsetType = 1
    dbFlujoEmbarcaciones.RecordSource = "Select * FROM [Flujo Embarcaciones]"
    dbFlujoEmbarcaciones.Refresh
       Set gDefaultDatabase = dbFlujoEmbarcaciones.Database
 Averiguar si el Servicio que va a tomar el cliente, requiere de asignacin
de embarcacin   
    If DLookup("AsignarEmbarcaciones", "Servicios", "IIdent='" & ConceptoPagoAActualizar & "'") = True Then
Si ya se le ha asignado alguna embarcacin a la reservacin, entonces
averiguar cuantos han sido asignados. (Esta rutina se usaba con
anterioridad, ya que antes se podan asignar en cualquier momento
embarcaciones a los pax, es decir se poda asignar una embarcacin, cerrar
el formulario para asignar embarcaciones, y luego volver a entrar para
asignar a los dems pasajeros las embarcaciones o lugares restantes. Sin
embargo se dej este cdigo ya que ahora para asignar embarcaciones a
los pasajeros, siempre va a arrojar que no hay ninguna embarcacin asignada, es decir nunca entro a esta parte del programa.
    ConfirmacionConEmbarcacion = DLookup("NConfirmacion", "Flujo Embarcaciones", "NConfirmacion  = '" & NumeroConfirmacionAActualizar & "'")
    If ConfirmacionConEmbarcacion <> "No Encontrado" Then
       strSelect = "SELECT [Flujo Embarcaciones].NConfirmacion, [Flujo Embarcaciones].PaxAsignados FROM [Flujo Embarcaciones] where NConfirmacion = '" & NumeroConfirmacionAActualizar & "'"
        If rcds.State = adStateOpen Then rcds.Close
        rcds.Open strSelect, db, adOpenStatic, adLockOptimistic
        rcds.MoveFirst
        For i = 1 To rcds.RecordCount
            Asignados = rcds.Fields(1)
            TotalAsignados = TotalAsignados + Asignados
            rcds.MoveNext
        Next i
        rcds.Close

        If TotalAsignados >= TotalPax Then
            MsgBox "Esta confirmacin ya tiene todos los pasajeros asignados a alguna embarcacin"
        Exit Sub
        End If
    End If
     
    Si la fecha del tour es la de trabajo
If FechaTour = FechaTrabajo Then
        Calcula cuantos pasajeros faltan por asignarle embarcacin   
    TotalFaltaPorAsignar = TotalPax  TotalAsignados
Se borra el contenido de la tabla Flujo Embarcaciones Temporal, donde se
va a almacenar las embarcaciones asignadas
    conn.Execute "Delete [Flujo Embarcaciones Temporal].* from [Flujo Embarcaciones Temporal]"
           Selecciona los guas que no estn en tour, y los ordena segn su rol    
    strSelect = "Select Guias.Codguia, Guias.Nombre, Guias.RolActual, Guias.EnTour From Guias where Servicio = '" & ConceptoPagoAActualizar & "' And EnTour = False ORDER BY Guias.RolActual"
    If rcds.State = adStateOpen Then rcds.Close
    rcds.Open strSelect, db, adOpenStatic, adLockOptimistic
    rcds.MoveFirst
    ConsecutivoEmbarcacion = 0
    For i = 1 To rcds.RecordCount
        Variable que se utilizar para conocer cuantos pasajeros tiene asignado el Gua, hasta que encuentre algn Gua con cero pasajeros asignados, deja de buscar Guas para asignar
        TotalOcupados = 0
        CodigoGuia = rcds.Fields(0)
        NombreGuia = rcds.Fields(1)
Si el gua actual no tiene asignado embarcacin para su uso, se detiene el
programa
        If DLookup("NumEmbarcacion", "Embarcaciones", "Guia = '" & CodigoGuia & "' AND (Status=6 Or Status =7)") = "No Encontrado" Then
            MsgBox "El Gua " & CodigoGuia & " no tiene asignado una embarcacin para su uso"
            Exit Sub
        End If
Selecciona las embarcaciones libres o prximas a salir a tour del Gua
           strSelect = "SELECT Guia, NumEmbarcacion, Libres, Ocupados, TipoEmbarcacion" & _
                      " FROM Embarcaciones WHERE (Status = 5 Or Status =9) And Guia = '" & CodigoGuia & "'"
        If rcds1.State = adStateOpen Then rcds1.Close
        rcds1.Open strSelect, db, adOpenStatic, adLockOptimistic
            rcds1.MoveFirst
            For j = 1 To rcds1.RecordCount
                NumEmbarcacion = rcds1.Fields(1)
                Libres = rcds1.Fields(2)
                Ocupados = rcds1.Fields(3)
                TipoEmbarcacion = rcds1.Fields(4)
                TotalOcupados = TotalOcupados + Ocupados
              Averigua que la embarcacin actual, no haya sido asignada a esta
reservacin, igual esta parte ya no se usa, se usaba cuando se asignaba
embarcaciones de manera dinmica, Es decir si en algn momento ya se
haba asignado por lo menos un pasajero a alguna embarcacin de una
confirmacin, esta embarcacin ya no estaba disponible para asignarle
algn pasajero ms de dicha confirmacin.
                         NumEmbarcacionABuscar = DLookup("Embarcacion", "Flujo Embarcaciones", "NConfirmacion = '" & NumeroConfirmacionAActualizar & "' AND Embarcacion = " & NumEmbarcacion)
                If NumEmbarcacionABuscar = "No Encontrado" Then
Calcula la cantidad de pasajeros que faltan por asignar embarcacin,
considerando los libres de la embarcacin actual
                TotalFaltaPorAsignar = TotalFaltaPorAsignar - Libres
                TiempoUsoActual = DLookup("TiempoUsoActual", "Embarcaciones", "NumEmbarcacion = " & NumEmbarcacion)
                TiempoUsoParaServicio = DLookup("TiempoUsoParaServicio", "Embarcaciones", "NumEmbarcacion = " & NumEmbarcacion)
                TiempoUsoPromedio = DLookup("TiempoUsoPromedio", "Servicios", "IIdent='" & ConceptoPagoAActualizar & "'")
                If TiempoUsoParaServicio <= TiempoUsoActual + TiempoUsoPromedio Then
Calcular si la embarcacin actual va a entrar en Mantenimiento Preventivo
despus de que regrese del tour
                    MsgBox "La Embarcacin " & NumEmbarcacion & " va a entrar en servicio la prxima vez que se libere de algn tour"
               End If
                If Libres > 0 Then
                    If LibresEncontrados = False Then
                        If TotalFaltaPorAsignar = 0 Then
ya se han encontrado todos los asientos necesarios para esta reservacin
                            LibresEncontrados = True
se inserta un registro en la tabla Flujo Embarcaciones Temporal, que asigna
todos los asientos libres de la embarcacin a la reservacin 
                            conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "', '" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & "," & Libres & ")"
                        Else
                        If TotalFaltaPorAsignar < 0 Then
ya se han encontrado todos los asientos necesarios para esta reservacin
                            LibresEncontrados = True
                            TotalFaltaPorAsignar = TotalFaltaPorAsignar + Libres
se inserta un registro en la tabla Flujo Embarcaciones Temporal, que asigna
nicamente los pasajeros que requieren asientos libres de la embarcacin 

                            conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "', '" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & "," & TotalFaltaPorAsignar & ")"
                            TotalFaltaPorAsignar = 0
                            Else
si todava no se han encontrado todos los asientos para la reservacin, se
inserta un registro en la tabla Flujo Embarcaciones Temporal, con los
asientos libres de la embarcacin actual asignados a esta confirmacin
                            conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "','" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & "," & Libres & ")"
                        End If
                        End If
                    Else
Si ya ha sido asignado asiento a todos los pasajeros, pero no ha sido encontradoalgn gua con todas sus embarcaciones libres, inserta un registro en la tabla Flujo Embarcaciones Temporal con los asientos libres sin asignarlos
                        conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "', '" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & ",0)"
                    End If
                End If
                End If
                ConsecutivoEmbarcacion = ConsecutivoEmbarcacion + 1
                rcds1.MoveNext
            Next j
Se sale de esta rutina cuando ya se ha asignado asiento a todos los pasajeros, y cuando el Gua tiene cero ocupados en sus embarcaciones
            If TotalOcupados = 0 And LibresEncontrados = True Then Exit For
            rcds.MoveNext
         Next i
          conn.Close
 si la fecha del tour no es la de trabajo, entonces      
Else
Calcula cuantos pasajeros faltan por asignar a la reservacin
    TotalFaltaPorAsignar = TotalPax  TotalAsignados
Se borra el contenido de la tabla Flujo Embarcaciones Temporal, donde se
va a almacenar las embarcaciones asignadas
    conn.Execute "Delete [Flujo Embarcaciones Temporal].* from [Flujo Embarcaciones Temporal]"
 Selecciona de la tabla Guias Rol Anterior, segn la fecha y hora del tour  los
guas que no estn en tour, y los ordena segn su rol    
        strSelect = "Select FechaTour, HoraTour, Codguia, Nombre, RolActual, EnTour From [Guias Rol Anteriores] where FechaTour = #" & FechaTourAActualizar & "# And HoraTour = '" & HoraTourAActualizar & "' And Servicio = '" & ConceptoPagoAActualizar & "' And EnTour = False ORDER BY RolActual"
    If rcds.State = adStateOpen Then rcds.Close
    rcds.Open strSelect, db, adOpenStatic, adLockOptimistic
    rcds.MoveFirst
    ConsecutivoEmbarcacion = 0
    For i = 1 To rcds.RecordCount
        Variable que se utilizar para conocer cuantos pasajeros tiene asignado el Gua, hasta que encuentre algn Gua con cero pasajeros asignados, deja de buscar Guas para asignar
        TotalOcupados = 0
        CodigoGuia = rcds.Fields(2)
        NombreGuia = rcds.Fields(3)
Si el gua actual no tiene asignado embarcacin para su uso, se detiene el
programa
        If DLookup("NumEmbarcacion", "Embarcaciones Status Anteriores", "FechaTour = #" & FechaTourAActualizar & "# And HoraTour ='" & HoraTourAActualizar & "' And Guia = '" & CodigoGuia & "' AND (Status=6 Or Status =7)") = "No Encontrado" Then
            MsgBox "El Gua " & CodigoGuia & " no tiene asignado una embarcacin para su uso"
            Exit Sub
        End If
Selecciona las embarcaciones del Gua que estaban libres o prximas a salir
a tour en aquella fecha y hora del tour
           strSelect = "SELECT Guia, NumEmbarcacion, Libres, Ocupados, TipoEmbarcacion" & _
                      " FROM [Embarcaciones Status Anteriores] WHERE FechaTour =#" & FechaTourAActualizar & "# And HoraTour ='" & HoraTourAActualizar & "' And (Status = 5 Or Status =9) And Guia = '" & CodigoGuia & "'"
        If rcds1.State = adStateOpen Then rcds1.Close
        rcds1.Open strSelect, db, adOpenStatic, adLockOptimistic
            rcds1.MoveFirst
            For j = 1 To rcds1.RecordCount
                NumEmbarcacion = rcds1.Fields(1)
                Libres = rcds1.Fields(2)
                Ocupados = rcds1.Fields(3)
                TipoEmbarcacion = rcds1.Fields(4)
                TotalOcupados = TotalOcupados + Ocupados
                Checa que la embarcacin actual, no haya sido asignada a esta
reservacin
                NumEmbarcacionABuscar = DLookup("Embarcacion", "Flujo Embarcaciones", "NConfirmacion = '" & NumeroConfirmacionAActualizar & "' AND Embarcacion = " & NumEmbarcacion)
                If NumEmbarcacionABuscar = "No Encontrado" Then
Calcula la cantidad de pasajeros que faltan por asignar embarcacin,
considerando los libres de la embarcacin actual
                TotalFaltaPorAsignar = TotalFaltaPorAsignar - Libres
                If Libres > 0 Then
                    If LibresEncontrados = False Then
                        If TotalFaltaPorAsignar = 0 Then
ya se han encontrado todos los asientos necesarios para esta reservacin
                            LibresEncontrados = True
se inserta un registro en la tabla Flujo Embarcaciones Temporal, que asigna
nicamente los pasajeros que requieren asientos libres de la embarcacin 
                            conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "', '" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & "," & Libres & ")"
                        Else
                        If TotalFaltaPorAsignar < 0 Then
ya se han encontrado todos los asientos necesarios para esta reservacin
                            LibresEncontrados = True
                            TotalFaltaPorAsignar = TotalFaltaPorAsignar + Libres
se inserta un registro en la tabla Flujo Embarcaciones Temporal, que asigna
nicamente los pasajeros que requieren asientos libres de la embarcacin 
                            conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "', '" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & "," & TotalFaltaPorAsignar & ")"
                            TotalFaltaPorAsignar = 0
                            Else
si todava no se han encontrado todos los asientos para la reservacin, se
inserta un registro en la tabla Flujo Embarcaciones Temporal, con los
asientos libres de la embarcacin actual asignados a esta confirmacin
                            conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "','" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & "," & Libres & ")"
                        End If
                        End If
                    Else
Si ya ha sido asignado asiento a todos los pasajeros, pero no ha sido encontrado algn gua con todas sus embarcaciones libres, inserta un registro en la tabla Flujo Embarcaciones Temporal con los asientos libres sin asignarlos
                        conn.Execute "INSERT INTO [Flujo Embarcaciones Temporal] VALUES (" & ConsecutivoEmbarcacion & ",'" & CodigoGuia & "', '" & NombreGuia & "'," & NumEmbarcacion & ",'" & TipoEmbarcacion & "'," & Libres & ",0)"
                    End If
                End If
                End If
                ConsecutivoEmbarcacion = ConsecutivoEmbarcacion + 1
                rcds1.MoveNext
            Next j
Se sale de esta rutina cuando ya se ha asignado asiento a todos los pasajeros, y cuando el Gua tiene cero ocupados en sus embarcaciones
            If TotalOcupados = 0 And LibresEncontrados = True Then Exit For
            rcds.MoveNext
         Next i
          conn.Close
End If
Enva variables al formulario para Asignar Embarcaciones, que luego se va
a mostrar
frmAsignaEmbarcaciones.txtConfirmacion=NumeroConfirmacionAActualizar
    frmAsignaEmbarcaciones.txtFechaTour = FechaTourAActualizar
    frmAsignaEmbarcaciones.txtHoraTour = HoraTourAActualizar
Si se encontraron todos los asientos libres, el cuadro de texto txtPax, que
muestra de manera dinmica a cuantos pasajeros le falta por asignarle
embarcacin se muestra como cero.
    If TotalFaltaPorAsignar <= 0 Then
    frmAsignaEmbarcaciones.txtTotalPax = TotalPax - TotalAsignados
    frmAsignaEmbarcaciones.txtPax = 0
    Else
    frmAsignaEmbarcaciones.txtTotalPax = TotalPax - TotalAsignados
    frmAsignaEmbarcaciones.txtPax = TotalFaltaPorAsignar
    End If
    Set gDefaultDatabase = Nothing
Se muestra de manera modal el formulario donde se despliega el detalle del
pago
    frmSubPagoTourNuevo.Show vbModal
    Else
    frmSubPagoTourNuevo.Show vbModal
    End If
End Sub
