Ingresar código de proveedor al agregar articulo nuevo

Necesito que al momento de agregar un código nuevo de articulo al no estar en la lista me agregue de forma automática el código del proveedor que ya ingrese previamente en la factura.

Tengo un formulario Fcompra con un subformulario DetalleFCompra y al momento de ingresar la factura ingreso el rut del proveedor y me aparecen todos los datos incluyendo el código del proveedor (que lo tengo oculto en formulario), luego paso a agregar los códigos de los artículos comprados en el subformulario y cuando un código no esta en la lilsta me da la opción para agregar este articulo nuevo en el formulario de artículos con un cuadro de mensaje "QUIERE AGREGAR ESTE ARTICULO" "SI" "NO", para agregar dicho código en el formulario digo que SI y se abre el formulario artículos con el código ya ingresado, y de esta misma forma me gustaría que me agregara el código del proveedor para saber quien me lo vendió al consultar por dicho articulo más adelante.

Este seria el código que tengo cuando un código de articulo no esta en la lista

Private Sub CODIGO_ARTICULO_FC_NotInList(NewData As String, Response As Integer)
Beep
Dim CodigoArticulonuevo As Integer, título As String ', mensaje As Integer
título = "EL CODIGO NO ESTA EN LA LISTA"
'mensaje = vbYesNo + vbDefaultButton1
CodigoArticulonuevo = MsgBox("DESEAS AGREGAR ESTE CODIGO", vbYesNo + vbQuestion, título)
If CodigoArticulonuevo = vbYes Then
DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "ARTICULOS", acNormal, "", "", acFormAdd, acDialog, NewData
Response = acDataErrAdded
End If
End Sub

y este codigo lo agregue en el evento al cargar registro del formulario articulos

Private Sub Form_Load()
If Nz(Me.OpenArgs, "") <> "" Then Me.CODIGO_ARTICULO_AOb = Me.OpenArgs
End Sub

Respuesta

¿Para que utiliza Docmd. RunCommand acCmdUndo?. Ahora cuando abre el formulario artículos sobra el código del evento Al cargar el formulario porque NewData está pasando el argumento automáticamente. Si quisiera fijar el nombre del proveedor ahí si es necesario algo como:

Me.proveedor=Forms!FormularioCompras.nombreproveedor

Observe este código de ejemplo:

Private Sub idte_NotInList(NewData As String, Response As Integer)
   Dim intReply As Variant
         intReply = MsgBox("El tercero '" & NewData & _
       "' no está en la lista. ¿Desea adicionarlo?", vbYesNo, "Software Ganadero")
       If intReply = vbYes Then
          'Abre el formulario frmClientes pasando los nuevos
          'datos en el paramétro OpenArgs
          DoCmd.OpenForm "frmRegistrarTerceros", , , , acFormAdd, acDialog, NewData
          'Registro añadido cancelamos el procedemiento predeterminado de Acces
          Response = acDataErrAdded
       Else
          MsgBox "Seleccione un tercero de la lista", vbInformation, "Software Ganadero"
          'Tratamos el error y decimos a Access que continue
          Response = acDataErrContinue
       End If
End Sub

Corrijo, esta bien que al abrir pase el argumento, la instrucción :

Me.proveedor=Forms!FormularioCompras.nombreproveedor es para llenar por ejemlo otra informacion.

Otra vez el ignorante dando calificación negativa a mis respuestas, vuelvo y le repito hágase a un lado que así se ve mejor, pero no obstaculice el buen funcionamiento en TodoExpertos.

Don Eduardo, entonces tengo que cambiar este código

If Nz(Me.OpenArgs, "") <> "" Then Me.CODIGO_ARTICULO_AOb = Me.OpenArgs

por este codigo

 Me.proveedor=Forms!FormularioCompras.nombreproveedor

y en este codigo, elimino lo que esta en negrilla

Private Sub CODIGO_ARTICULO_FC_NotInList(NewData As String, Response As Integer)
Beep
Dim CodigoArticulonuevo As Integer, título As String ', mensaje As Integer
título = "EL CODIGO NO ESTA EN LA LISTA"
'mensaje = vbYesNo + vbDefaultButton1
CodigoArticulonuevo = MsgBox("DESEAS AGREGAR ESTE CODIGO", vbYesNo + vbQuestion, título)
If CodigoArticulonuevo = vbYes Then
DoCmd.RunCommand acCmdUndo
DoCmd.OpenForm "ARTICULOS", acNormal, "", "", acFormAdd, acDialog, NewData
Response = acDataErrAdded
End If
End Sub

Probé el código que me envió pero no arroja el código del articulo que no esta en la lista de artículos

Tengo otra inquietud cuando habro el formulario artículos, ya que si no tengo el formulario de compras abierto me sale este error

:

El código que le suministré esta bien, el problema está en el evento del formulario proveedores, debe colocar en el evento Al abrir:

If not isnull( Me.Openargs) Then

  Me.CODIGO_ARTICULO_AOb = Me.OpenArgs

endif

De lo contrario arroja error porque no hay parámetro.

Al abrir el formulario artículos efectivamente le arroja error porque el formulario de compras está cerrado. Le adjunto este código para saber si un formulario esta cargado (así esté invisible)

Public Function EstaAbierto(ByVal strNombreFormulario As String) As Boolean
' Devuelve True si el formulario especificado está abierto en la vista Formulario.
    Const conVistaDiseño = 0
    Const conEstadoObjCerrado = 0
    EstaAbierto = False
    If SysCmd(acSysCmdGetObjectState, acForm, strNombreFormulario) <> _
       conEstadoObjCerrado Then
        If Forms(strNombreFormulario).CurrentView <> conVistaDiseño Then
            EstaAbierto = True
        End If
    End If
End Function

Copie esta función en un módulo, ahora si quiere saber un formulario está cargado al abrir un formulario, llame la función así:

IF estaAbierto("formulario") then
  Me.CodigoProveeedor=Forms![Cabecera Facturas de Compra].CODIGO_PROVEEDOR
END IF

Si ve que no puede envíeme la base de datos a [email protected], favor anotar en el asunto la pregunta, y no olvide valor mi respuesta ya que el inexperto Julián González le dio voto negativo.

Se me olvidó decirle que siga el modelo del código que le envíe, si puede retirar lo que escribió en negrita, además en su código falta evitar el mensaje de Access cuando cancele adicionar el registro. Observe

       Else
          MsgBox "Seleccione un registro de la lista", vbInformation, "Software Ganadero"
          'Tratamos el error y decimos a Access que continue
          Response = acDataErrContinue

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas