Crear un nuevo botón

Tengo las siguientes Tablas:
- Proveedores (CIF, .) La Clave Principal es de tipo Texto.
- Control Facturas (ID Compromiso, CIF Proveedor, Nombre, Año, Fecha, Ref Proveedor) La Clave Principal es de tipo contador.
- Tipos Facturas (NºTipoFactura, ID Compromiso, NombreTipoFactura) La Clave Principal es de tipo contador.
- Lineas (NºLinea, ID Compromiso, NombreLinea, NumTipoFactura) La Clave Principal es de tipo contador.
Las relaciones entre ellas son:
Proveedores (CIF) 1:N (CIF Proveedor) Control Facturas
Control Facturas (ID Compromiso) 1:N (ID Compromiso) Tipos Facturas
Tipos Facturas (NºTipoFactura) 1:N (NumTipoFactura) Lineas
Llamamos Compromiso al INNER JOIN entre Proveedores y Control Facturas (Consulta1).
En un Formulario F1 saco los Compromisos mediante la consulta Consulta1. En este mismo formulario F1 tengo un Botón B1 con la siguiente función: como casi siempre los compromisos de un año nuevo son iguales a los del año anterior, lo que hago es copiar los compromisos del año anterior (o año que le indique) pero con un año nuevo (para no tener que volver a introducir datos casi todos iguales. Prefiero copiar todos los de un año y modificar sobre ellos).
Me explico, en el botón B1 se pide año modelo y año a crear. Lo que hace es coger de la Tabla Control Facturas registros con el año modelo que le indique y me crea nuevas pero con el año a crear que también le indico.
El código del Botón B1 es el siguiente:
Sub BotónB1_Clic()
Dim resp1, resp2, resp3, resp4, resp5, var As Integer
Dim tit1, tit2, msg1, msg2, msg3, msg4, msg5 As String
Dim Comp As Recordset
Dim DBPresup As Database
Set DBPresup = DBEngine.Workspaces(0).Databases(0)
Set Comp = DBPresup.OpenRecordset("Control Facturas")
msg1 = "Escriba el año modelo (alguno para el que existan compromisos):"
msg2 = "Escriba el año a crear:"
msg3 = "Compromisos generados"
msg4 = "Compromisos generados con anterioridad"
msg5 = "No hay compromisos creados en el año modelo elegido"
tit1 = "Año modelo"
tit2 = Año a crear"
resp1 = InputBox(msg1, tit1, , 1500, 1000)
resp2 = InputBox(msg2, tit2)
Comp.MoveFirst
While Not Comp.eof
If Comp![Año] = resp2 Then var = 1
Comp.MoveNext
Wend
Comp.MoveFirst
While (Not Comp.eof) And (var <>1)
If Comp![Año] = resp1 Then DoCmd GoToRecord , , A_NEWREC: Me ![CIF Proveedor] = Comp![CIF Proveedor]: Me![Nombre] = Comp![Nombre]: Me![Año] = resp2: Me![Ref Proveedor] = Comp![Ref Proveedor]: var = 2
Comp.MoveNext
Wend
If var = 1 Then
resp4 = MsgBox(msg4, 0+64)
ElseIf var = 2 Then
resp3 = MsgBox(msg3, 0+64)
Else resp5 = MsgBox(msg5, 0+64)
End If
End Sub
Lo que quiero hacer ahora es algo parecido. Además de hacer lo que hace el Botón B1 quiero que además también me cree nuevos registros en las Tablas Tipos Facturas y Lineas copiando también los y las de años anteriores. Es decir, me cree nuevos Tipos de Facturas y Lineas iguales a las del año modelo pero con el año a crear que le haya dicho.
He intentado añadir algo de código al Botón B1 pero no lo consigo. Mi idea era la siguiente: una vez que has localizado el registro a copiar en Control Facturas, con ID Compromiso (ya que es la clave que las relaciona) accedes a la tabla Tipos Facturas y buscas su(s) correspondiente(s) registro(s). Una vez que la(s) detectas la(s) copias y con su NºTipoFactura (clave que relaciona las tablas Tipos Facturas y Lineas) buscas su(s) Linea(s).
En las tablas Tipos de Facturas y Lineas NO tienen un campo con el AÑO. Igual resulta que éste existiera.
He intentado explicarlo lo mejor posible. No sabía como preguntarlo y al final he optado, por explicar todo detalladamente. A ver si podéis echar una mano ya que con esto termino todos los cambios que quería hacer a la aplicación.
1

1 respuesta

Respuesta
1
Para incorporar las facturas del año anterior, puedes incluir unas lineas de código a tu función.
Primeramente, puedes preguntar mediante msgbox si el usuario desea incorporar las facturas del año anterior:
If msgbox("¿Desea incorporar las facturas del año anterior?.",33,"Titulo")=1 then
Si el usuario acepta, entonces debes recorrer el recordset "Control Facturas" aprovechando el recorrido DO WHILE que haces en tu función, unicamente debes añadir con ADDNEW los nuevos registros a la tabla variando el año, y antes de efectuar UPDATE, capturar el identificador interno o contador que Access te asigna automáticamente, para después ofrecersele al recordset de las lineas.
Para las lineas, debes abrir el recordset "Lineas" y mientras tengas el mismo "NºTipoFactura", efectuar un ADDNEW con el valor capturado del contador de "Control Facturas".
Realmente lo más difícil ya lo tienes solucionado, ahora solo tienes que añadir un nuevo recordset y con paciencia conseguirás una función chapo.
También puedes optar por separar las funciones, y crear una nueva que se llame "Añadir_Facturas" o algo similar, y llamarla desde "BotonB1_Clic(), enviando los valores que necesites. Quizás de esta forma el código te quede más legible.
Espero haberte ayudado. No obstante si necesitas ampliar el desarrollo de la solución, puedes ponerte en contacto conmigo en este sitio o a través de [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas