Access - Addnew no disponible desde fuera del Form

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 78 puestos en Access (en relación al último mes)
Gráfica de Access

Addnew no disponible desde fuera del Form

Publicado por oskita (2 intervenciones) el 02/06/2021 20:34:42
Hola a todos, me está sucediendo una cosa muy extraña.
Tengo un form de facturación con su encabezado y detalle donde se van añadiendo los productos a facturar.
Estos se añaden des otro subformulario dentro de este mismo de facturación, en donde estan fitrados por familias de productos y haciendo doble clic sobre ellos se insertan en el subform de detalle con un:
DoCmd.GoToRecord , , acNewRec. y pasandole con el ID como referencia realiza una búsqueda por ADO en la tabla y lo inserta

Hasta ahí todo bién, el problema viene ahora que he implementado en el subform de detalle, un botón que abre un Formulario emergente para buscar los productos con un CntrlList con el mismo sistema y código que al hacer doble clik sobre el producto envía la referencia al procedimiento pero este se pasa el DoCmd.GoToRecord , , acNewRec y no lo ejecuta y no tira ningún error, simplemente cambia el último producto insertado por el nuevo pero no añade ninguno a la lista.
También probé a incrustarlo en el formulario principal como subform y ahí funciono bien, lo cual indica que solo ocurre cuando se envía desde fuera del Form principal.
He probado con también DoCmd.RunCommand acCmdRecordsGoToNew y este si tira el error "El comando no esta disponible en este momento.
Otra cosa muy curiosa es que si pones un punto de interrupción y ejecutas paso a paso, entonces si lo acepta y lo hace bien, tanto con el acNewRec como con el acCmdRecordsGoToNew.

No se si alguien se vió antes en esta situación y como lo resolvió.
Saludos a todos y muchas gracias por las ayudas.

Este es el procedimiento por si ayuda:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
'Se envía desde aquí
Private Sub ListArticulos_DblClick(Cancel As Integer)
    Dim IntRefer As Integer
 
'Código del Form emergente
    IntRefer = Me.ListArticulos.Column(0)
    [Form_Facturación].Secundario12.SetFocus
    [Form_Facturación].[Secundario12].Form.BuscaRegistros IntRefer, 1
 
'Código del subform Familias
'    IntRefer = SeleccionarProducto.Column(0)
'    [Form_Facturación].Secundario12.SetFocus
'    [Form_Facturación].[Secundario12].Form.BuscaRegistros IntRefer, 1
'    Exit Sub
 
End Sub
 
Public Function BuscaRegistros(intRef As Integer, VengoDeFuera As Integer)
'Función común a todas las entradas para colocar los productos en el subFacturación.
'Se pasa el ID del producto como referencia y un 1 si es que se viene de fuera del subFacturacion
 
        Dim DB As DAO.Database, Rdset As DAO.Recordset
        Dim str As String
        Dim RetVal%
        'Variables de Alias
        Dim strRef As String
        Dim strAlias As String
        Dim strNombre As String
        Dim BlAlias As Boolean
 
        If VengoDeFuera = 1 Then 'Venimos de SubFamilias o CodeBar
            'Si no es nulo IDProducto/Servicios abrimos nuevo registro.
            If Not IsNull(IdProductosServicios) Then
               DoCmd.GoToRecord , , acNewRec
              ' DoCmd.RunCommand acCmdRecordsGoToNew
               'Debug.Print Me.IdProductosServicios
            End If
        End If
 
            str = CadenaDeConexionProd
            Set DB = OpenDatabase(str)
            Set Rdset = DB.OpenRecordset("Productos/Servicios")
            Rdset.Index = "PrimaryKey"
            Rdset.Seek "=", intRef
        If Rdset.NoMatch Then 'Si no encuentra el registro preguntar si se crea uno nuevo
            RetVal = MsgBox("El producto no está registrado." & vbCrLf & "¿ Desea registrarlo ahora?", 4164, "europa")
            Select Case RetVal
            Case 6   'Si
                DoCmd.OpenForm "Productos", acNormal, , , acAdd, acDialog, "Gotonew"
                Me.Parent.CBarras.SetFocus
                Me.Parent.CBarras = ""
                GoTo Cerrar
            Case 7   'No
                GoTo Cerrar
            End Select
        Else
            With Rdset
                Ref = ![IdProducto/Servicios]
                Precio = Round(![PrecioVentaPublico], 2)
                TipoIVA = ![IvaAplicable]
                TexGroup = Nz(![IdGrup], 0)
                TexFamily = ![IDFamilia]
                Me.TexStock = Nz(!UnidadesEnExistencia, 0)
 '**** ALIAS *********************************************************************
            'Obtenemos el Nombre del producto
                strNombre = ![Productos/Servicios]
            'Y ahora el alias y si este es Null se le da por defecto al control el valos del Nombre del producto
                strAlias = Nz(![Alias], strNombre)
                BlAlias = ![UsarAlias]
            End With
 
            If BlAlias Then 'Si se ha marcado UsarAlias
                IdProductosServicios = strAlias
                IdProductosServicios.ControlTipText = strNombre
            Else
                IdProductosServicios = strNombre
            End If
        End If
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Addnew no disponible desde fuera del Form

Publicado por Anonimo (3316 intervenciones) el 03/06/2021 01:02:58
Con esa sentencia se genera un nuevo registro en el formulario activo, si se desea seguir utilizándola será necesario enviarle el foco para que sea el objeto activo y tras ello ....

Una alternativa consistiría en insertar el registro en la tabla y regenerar el subformulario, en algunos casos se inserta en el formulario de forma oculta (en su RecordsetClone), es una forma de evitar los parpadeos que suelen aparecer cuando se manipula con código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 78 puestos en Access (en relación al último mes)
Gráfica de Access

Addnew no disponible desde fuera del Form

Publicado por Oskita (2 intervenciones) el 03/06/2021 01:09:02
Ya lo hago en:

[Form_Facturación].Secundario12.SetFocus

Pero no funciona.
En cuanto a lo del RecordsetClone, ¿Podrias explicarme un poco más?
No lo he manejado nunca.
Voy a buscar información en base a eso.

Muchas gracias por contestar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Addnew no disponible desde fuera del Form

Publicado por Anonimo (3316 intervenciones) el 03/06/2021 09:53:33
Hacer objeto activo el subformulario suele precisar dos pasos, uno ya se ha dado, el otro es pasarle el foco del subformulario -simple contenedor- a uno no de los elementos que contiene (un campo cualquiera al que se le pueda asignar un valor u obtenerlo de el).

EL 'RecordsetClone' es un simple recordset (del tipo DAO que es como trabaja internamente Access) , es el origen de datos real del formulario -su 'recordSource'- y copia fiel del origen en ese instante, aclaro esto:

Si se añaden datos al origen (de forma externa al formulario) en el formulario no aparecerán mientras no se vuelva a sincronizar (Requery) y los que se crean en el formulario se añaden al origen al guardar el registro.

Si se tiene claro como funciona se pueden obtener muchos beneficios de modo de funcionar (y se consumirán menos recursos que duplicándolo sin necesidad, practica bastante habitual).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar