Nada, sigo atascado.
He hecho muchas pruebas y nada.
TODOS LOS DATOS HAN SIDO MODIFICADOS.
Creo que la cuestión está en que ConDetReservas contiene
varios IdDetReservas que son los días previamente cargados desde el botón
Cargar del frmDetReservas.
Esos IdDetReservas si han sido cargados con el botón Cargar
crea la fecha Desde (inicial) y Hasta (Final). Si anoto un cargo manual (bar,
Rte, etc. Incluso otro cargo) en el FrmDetReservas no se crean esas fechas
Desde-Hasta (sí los cargos en la consulta ConDetReservas) pq. Quiero que al
comparar fechas (entre éstas) sólo tenga en cuenta si las he creado desde el
botón Cargar (pq. El Cargo Automático Diario –CAD- sólo tiene en cuenta esos
rangos y es más, cuando creo cargos desde ese botón Cargar todos se cambian con
esas últimas fechas para que el CAD sólo permita búsqueda entre esas fechas).
Enlace a parte de las tablas y consulta implicada: https://www.dropbox.com/s/qcypuoycbr6919v/Entre%20Fechas.rar?dl=0
Enlace al frmDetReservas:
https://www.dropbox.com/s/987zvbyec1wpozx/FrmDetReservas.jpg?dl=0
(Hay varias
variables que son Globales
Botón
Cargar:
Private Sub
cmdCargo_Click()
On Error
GoTo Err_cmdCargo_Click
Call
CargoFiltrodias 'aqui -> carga los días entre fechas:FDesde – Fhasta
Me.FDesde =
Null
Me.FHasta =
Null
Me.cmdCerrar.SetFocus
Exit_cmdCargo_Click:
Exit Sub
Err_cmdCargo_Click:
MsgBox Err.Description
Resume Exit_cmdCargo_Click
End Sub
‘---------------------------------------------------------------------------
CargoFiltrodias:
Public Sub
CargoFiltrodias()
On Error
Resume Next
'Cargo de
todos los días.
Dim PedidoReq As Integer, contador As
Integer
Dim Rst As DAO.Recordset, db As DAO.Database
Dim Departamento As Variant
Dim SecuenciaTrans As Integer, DifDias As
Integer, IntDias As Integer
Dim sCargo As Boolean
'Si no hay datos en las fechas
If IsNull(Me.FDesde) Or
IsNull(Me.FHasta) Then
MostrarMensaje
("Es necesario una fecha DESDE y HASTA")
Me.FDesde =
Null
Me.FHasta =
Null
Me.cmdCargo.SetFocus
Exit Sub
Else
'---------------------------------------------------------
Set db = CurrentDb()
Set Rst = db.OpenRecordset("ConDetReservas")
DifDias =
DateDiff("d", [FDesde], [FHasta])
sCargo = Confirmación("Días para
cargar: " & DifDias & Chr(13) & Chr(13) & _
"¿Quieres continuar?")
If sCargo Then
For SecuenciaTrans = 1 To DifDias
With Rst
.AddNew
!IdOcupacion = Me.IdOcupacion
!desde = Me.FDesde
!hasta = Me.FHasta
'Convierte las fechas desde y
hasta en último cargo de fechas
'--------------------------------------------------
Set sFra =
CurrentDb.OpenRecordset("select * from ConDetReservas where
idocupacion=" & Me.IdOcupacion)
Do Until sFra.EOF
'sFra.MoveLast
sFra.Edit
' If !IdDetReservas > 0 Then
sFra!desde = !desde
'Me.FDesde
sFra!hasta = !hasta 'Me.FHasta
'!fHoy = Date - 1
sFra.Update
sFra.MoveNext
'End If
Loop
sFra.Close: Set sFra = Nothing
'--------------------------------------------------
'!fHoy = Date - 1
!IdServ = 1
'--------------------------------------------------
CARGA DE
PRECIOS, ETC. QUE ESTÁ BIEN Y ES MUY EXTENSO
'--------------------------------------------------
Set sExiste =
CurrentDb.OpenRecordset("select * from tbservicios")
If sExiste.EOF = False Then 'si
hay registros
'Como el IVA es el mismo...
!IVA = sExiste!IVA
!IVAinc = False
!Cantidad = 1
!FechaCargo = DateAdd("d",
SecuenciaTrans, [FDesde] - 1)
sExiste.Close: Set sExiste = Nothing
End If
'--------------------------------------------
Dim sValor As String
sValor = Nz(DMax("iddetreservas", "tbdetreservas"),
0) + 1
If sValor = 1 Then
sValor = !IdDetReservas
DoCmd.RunCommand acCmdSaveRecord
'Grabamos el registro
End If
!IdDet = sValor
'End If
'---------------------------------------------
.Update
End With
Next SecuenciaTrans
Else 'scargo
Me.FDesde = Null
Me.FHasta = Null
'Me.cmdCargo.SetFocus
Me.FDesde.SetFocus
Rst.Close
Set db = Nothing
Set Rst = Nothing
Exit Sub
End If 'scargo
End If 'campos con fechas
Rst.Close
Set db = Nothing
Set Rst = Nothing
Me.SubfrmDetReservas.Requery
End Sub
‘---------------------------------------------------------------------------------------
Después de
cargar las fechas en otro formulario digamos general, está en botón CAD:
Private Sub
cmdCargoAutormaticoDiario_Click()
On Error Resume Next
Dim CargoDiario As Boolean
Dim sFechaOcupada As String
Dim Rst As DAO.Recordset
Dim bCargo
As Boolean
CargoDiario
= Confirmación("¿Quieres cargar el día : " & Date - 1 &
" a las habitaciones?")
If CargoDiario Then
Set sExiste =
CurrentDb.OpenRecordset("select * from tbReservas where alta=true")
If
sExiste.EOF = False Then 'si hay registros
Do Until sExiste.EOF
'Si es AF.3000 que salte al siguiente
If sExiste!Habitacion = 3000 Then
'Exit Sub
sExiste.MoveNext
End If
'Si la fecha de salida es igual a hoy salta
al siguiente
If sExiste!FechaSalida = Date - 1 Then
sExiste.MoveNext
'Exit Sub
End If
MsgBox "Id: " & sExiste!IdOcupacion
IdOcupa = sExiste!IdOcupacion
'------------------------------------------------------------------
'Antes de insertar un nuevo registro
comprobamos que esté libre la habitación en esos dias
'En caso contrario abortamos
If CompruebaDisponibilidad2 = False
Then
MsgBox "Está cargado."
'Exit Sub
Else
MsgBox "No cargado."
End If
'------------------------------------------------------------------
'----------------------------------------------------------------
Set Srec = CurrentDb.OpenRecordset("select * from
ConDetReservas")
With Srec
'If .EOF = true Then 'si no hay registros -
hayan o no hay que anotar los nuevos
.AddNew
'!idDetReservas - autonumérico
!IdOcupacion = sExiste!IdOcupacion
!Habitacion = sExiste!Habitacion
!Regimen = sExiste!Regimen
!NumPersonas = sExiste!NumPersonas
!FechaEntrada = sExiste!FechaEntrada
!FechaSalida = sExiste!FechaSalida
!FechaCargo = Date - 1
'------------------------------------------------------------------
'Globales
Hab = !Habitacion
'IdOcupa = !IdOcupacion
FDesde = !desde
FHasta = !hasta
FCargo = !FechaCargo
'--------------------------------------------------
CARGA DE
PRECIOS, ETC. QUE ESTÁ BIEN Y ES MUY EXTENSO
'--------------------------------------------------
'!PrecioVta = sExiste!PrecioFijado
!Cantidad = 1
!IVAinc = False
'--------------------------------------------------
Set sSelecc =
CurrentDb.OpenRecordset("select * from tbservicios")
If sSelecc.EOF = False Then 'si
hay registros
'Como el IVA es el mismo para todos...
!IVA = sSelecc!IVA
End If
sSelecc.Close: Set sSelecc = Nothing
'--------------------------------------------
' !FechaCargo = Date - 1
!IdCte = sExiste!IdCte
'!Cliente = sExiste!Nombre & "
" & sExiste!Apellido1 & " " & sExiste!Apellido2
'''!FechaEntrada = sExiste!FechaEntrada
'''!FechaSalida = sExiste!FechaSalida
' !PrecioServ = sExiste!PrecioFijado
!CIF = sExiste!CIF
!Tipo = sExiste!Tipo
!IdDet = !IdDetReservas
.Update
'End If 'Srec
End With
Srec.Close: Set Srec = Nothing
'----------------------------------------------------------------
sExiste.MoveNext
Loop
End If
sExiste.Close:
Set sExiste = Nothing
MostrarMensaje
("Cargos diarios completados.")
Else
'CargoDiario
'MostrarMensaje
("Cargos diarios anulados.")
End If
End Sub
‘------------------------------------------------------------------------------
… Antes de
agregar comprueba con: CompruebaDisponibilidad2 que no hayan duplicados:
Function
CompruebaDisponibilidad2() As Boolean
Dim Rst As
DAO.Recordset
Set Srec = CurrentDb.OpenRecordset("select * from tbDetReservas
where idocupacion = " & IdOcupa)
With Srec
'----------------------------------------------------------------
Set Rst =
CurrentDb.OpenRecordset("SELECT * FROM ConDetReservas WHERE IdOcupacion
<> " & !IdOcupacion & " AND Habitacion = '" &
!Habitacion & "'" & _
" AND
((fhoy BETWEEN #" & Format(!desde, "mm/dd/yyyy") &
"# AND #" & _
Format(DateAdd("d",
-1, !hasta), "mm/dd/yyyy") & "#) OR (DateAdd('d', -1, hasta)
BETWEEN #" & Format(!desde, "mm/dd/yyyy") & _
"# AND
#" & Format(DateAdd("d", -1, !hasta),
"mm/dd/yyyy") & "#)Or fhoy < #" &
Format(DateAdd("d", -1, !hasta), "mm/dd/yyyy") & _
"# AND
(DateAdd('d', -1, Hasta) > #" & Format(!desde,
"mm/dd/yyyy") & "#))")
If Not
Rst.EOF And Not Rst.BOF Then
MostrarMensaje
("Cargo duplicado: " & !Habitacion & Chr(13) & Chr(13)
& _
CompruebaDisponibilidad2 = False
Else
CompruebaDisponibilidad2 = True
End If
Rst.Close
Set Rst =
Nothing
End With
End Function
'----------------------------------------------------------------
En el
ejemplo: La consulta ConDetReservas CompruebaDisponibilidad2
dice que está cargado (cuando debe ser true – no cargado – pues fhoy es igual a:
11/04/19 y entre Desde-Hasta (8 y 9/4) no está el 11/4.