Lo más habitual en Access para este caso es usar una consulta de anexado (INSERT INTO) o una consulta de actualización (UPDATE) ejecutada cuando se termina de calcular la nómina.
Supongamos esta estructura
Tabla Detalle_Nomina
Contiene los cálculos de una nómina específica:
IdDetalleNominaIdNominaIdColaboradorSalarioHorasExtraTotalDevengadoTotalDeduccionesNetoPagar
Tabla Detalle_Colaborador
Quieres almacenar el histórico de todas las nóminas:
IdDetalleColaboradorIdNominaIdColaboradorSalarioHorasExtraTotalDevengadoTotalDeduccionesNetoPagar
Opción recomendada: INSERT INTO (guardar histórico)
Si cada nómina debe quedar registrada para cada colaborador, no debes actualizar registros existentes sino agregar nuevos registros.
INSERT INTO Detalle_Colaborador
(
IdNomina,
IdColaborador,
Salario,
HorasExtra,
TotalDevengado,
TotalDeducciones,
NetoPagar
)
SELECT
IdNomina,
IdColaborador,
Salario,
HorasExtra,
TotalDevengado,
TotalDeducciones,
NetoPagar
FROM Detalle_Nomina
WHERE IdNomina = Forms!Nomina!IdNomina;
Esto copiará todos los registros de la nómina actual desde Detalle_Nomina hacia Detalle_Colaborador.
Ejecutarlo desde un botón
En el formulario Nomina puedes colocar un botón:
Private Sub cmdGuardarHistorico_Click()
Dim sql As String
sql = "INSERT INTO Detalle_Colaborador " & _
"(IdNomina, IdColaborador, Salario, HorasExtra, " & _
"TotalDevengado, TotalDeducciones, NetoPagar) " & _
"SELECT IdNomina, IdColaborador, Salario, HorasExtra, " & _
"TotalDevengado, TotalDeducciones, NetoPagar " & _
"FROM Detalle_Nomina " & _
"WHERE IdNomina = " & Me.IdNomina
CurrentDb.Execute sql, dbFailOnError
MsgBox "Histórico de nómina guardado correctamente.", vbInformation
End Sub
Si deseas actualizar registros existentes
Si en Detalle_Colaborador ya existe un registro para el mismo colaborador y la misma nómina, entonces usarías una consulta UPDATE:
UPDATE Detalle_Colaborador AS DC
INNER JOIN Detalle_Nomina AS DN
ON DC.IdColaborador = DN.IdColaborador
AND DC.IdNomina = DN.IdNomina
SET
DC.Salario = DN.Salario,
DC.HorasExtra = DN.HorasExtra,
DC.TotalDevengado = DN.TotalDevengado,
DC.TotalDeducciones = DN.TotalDeducciones,
DC.NetoPagar = DN.NetoPagar;
Recomendación de diseño
Para conservar el historial correctamente:
- Nomina → Cabecera de cada nómina.
- Detalle_Nomina → Detalle calculado de cada colaborador por nómina.
- No reutilizar ni sobrescribir registros.
- Guardar cada cálculo mediante INSERT INTO en una tabla histórica (o incluso usar directamente Detalle_Nomina como histórico si cada registro ya tiene IdNomina e IdColaborador).
De hecho, si Detalle_Nomina ya almacena permanentemente los registros de cada nómina con su IdNomina, podría no ser necesario duplicar la información en Detalle_Colaborador. Bastaría consultar los datos históricos mediante consultas relacionadas por IdColaborador e IdNomina.