Crear un tabla temporal para almacenar datos para luego pegarlos en la tabla original
Quisiera saber si se puede crear una Tabla temporal para poder ingresar los datos de otra tabla original, y una vez capturados los datos de los campos darle la función de copiar y pegar a la Tabla original. Esto es porque es para descontar del inventario unos artículos. Y si lo hago desde la tabla original y sin querer cometo el error de darle un clic en cualquier campo de la tabla original, me descuenta automáticamente la cantidad que tenga puesta sin esperar a la función de guardar.
O si me pueden decir si hay otra alternativa de bloqueo o retención de datos para ir capturando los datos en mi Subformulario (hoja de datos) y que le pueda indicar que cuando ya haya terminado todas mis capturas pueda darla opción de proceder a descontar del inventario.
Tengo la Tabla de Catálogo de Artículos que relaciona la tabla de Artículos de los pedidos y la del InventarioAlmacenes
1 Respuesta
A mi modo de ver, el camino que me parece más corto es programar algún Evento del Formulario, que te haga repasar los datos.
De forma Global estaría el:
Private Sub Form_Unload(Cancel As Integer)
'Aquí pones la pregunta que quieras te haga y las acciones
End Sub
Puedes mirar de todos los Eventos, cual se ajusta más a tus necesidades.
Además de eso tienes los Eventos de los controles.
Quzá alguien opine lo contrario, pero yo no crearía una Tabla temporal, porque entre otras cosas, tampoco puedo asegurar la bondad de los datos. Mis saludos >> Jacinto
Hola y Gracias por tu opinión. Creo que esa puede ser mi solución.
Lo que no consigo es como plantear las preguntas de condiciones para hacer que repase mis datos cargados sin que me cargue el valor cuando doy el dato al campo. Me puedes sugerir con algún ejemplo si no es mucha molestia.
Gracias otra vez.
Si me comentas un poco más el proceso, quizá te pueda sugerir algo concreto.
Ejemplo: Si tu SubFormulario está Vinculado al principal por un IdArticulo, y en el Subformulario vas entrando Fechas, Concepto de la salida, Cantidad... Mis saludos >> Jacinto
Gracias Jacinto por tu pronta ayuda. Te lo voy a explicar mejor gráficamente con unas imágenes y reitero GRACIAS POR DEDICARME TU TIEMPO:
1.- Mi Pantalla de captura del Formulario (VerificacionYDescarga) con el subformulario (Subformulario Captura_Art) que es donde pongo mi captura del artículo su precio y cantidad. Y que cuando el artículo esta ya visible, si de doy clic en cualquier campo del subformulario esté vacío o no, no importa. Cada clic, me resta de mi inventario las cantidades señaladas de todos los artículos que muestre mi subformulario.
2.- Vista de diseño.
3.- Relación de mi consulta.
4.- Formulario de mi inventario
5.- Relación con mi inventario
5.- Relaciones de las Tablas de inicio a final
6.- Mi código de descarga al salir del Subformulario:
Private Sub Subformulario_CapturaArt_2_26_Exit(Cancel As Integer)
Dim rs As Recordset
Dim cnn As ADODB.Connection
Dim strSQL As String
Dim PEDIDO As Double
Dim subalma As Single
Dim sePudo As Boolean
Dim regMovimiento As Boolean
Dim arti As Double
Dim canti As Single
sePudo = False
PEDIDO = Me.Numero_de_pedido
If IsNull(Me.Texto17) Then
MsgBox "capturar un subalmacen"
GoTo salidaError
End If
subalma = Me.Texto17
On Error GoTo salidaError
Set rs = New ADODB.Recordset
Set cnn = Application.CurrentProject.Connection
strSQL = "SELECT [Clave del Articulo],[Cantidad de Articulos] FROM [Articulos de los pedidos] WHERE [Numero de pedido] = " & PEDIDO
rs.Open strSQL, cnn
rs.MoveFirst
inicioCiclo:
If rs.EOF Then
GoTo finCiclo
End If
arti = rs(0)
canti = rs(1)
sePudo = descargaAlmacen(arti, subalma, canti)
regMovimiento = registroMovimiento(arti, subalma, canti, PEDIDO)
If Not sePudo Then
MsgBox "Error al descargar el artículo " & arti & " del registro " & PEDIDO & vbCrLf & "FAVOR DE REVISAR SI YA ESTÁ ASIGNADO O SI TIENE EXISTENCIAS EL ALMACÉN ASIGNADO DE LA PARTE INFERIOR DERECHA", vbCritical
End If
rs.MoveNext
GoTo inicioCiclo
finCiclo:
rs.Close
cnn.Close
VERIFICACION.Value = False
salidaError:
End Sub
La verdad es que según la longitud, parece que hay mucha tela que cortar y a éstas horas la tijera ya está poco afilada. Mañana lo miro y te comento. Mis saludos >> Jacinto
GRACIAS JACINTO ENCONTRÉ EL PROBLEMA.
El error lo tenía precisamente en poner el código de descarga al salir del subformulario (me dí cuenta al explicarte de cómo lo tenía puesto), simplemente lo cambié y lo puse al recibir el enfoque del abono en el formulario principal y ya con eso quedó.
De todas maneras no sé si sería mucha molestia en que me revisaras mi código de descarga porque me falla en algo y no sé porqué pero no me trabaja al 100, a veces me falla y sin artículos o con artículos en negativo.
Gracias por tomar de tu tiempo para ayudarme.
Me alegra que solucionaras el problema.
De entrada te comento que viendo las imágenes, a mi modo de ver el mejor sitio para dar la "Instrucción" de rebajar o aumentar un Stock, siempre desde el Evento AfterUpdate de la "Cantidad"
Si pones la Instrucción en un Evento "LostFocus", te Descontará/Aumentará esa o esas cantidades tantas veces como pongas el cursor en ese control y salgas de él, sin modificar o modificando la Cantidad.
Lo que es el "Cuerpo" general del Código parece estar bien, aunque yo no hubiese utilizado ADO, pero eso son costumbres personales.
Otro tema es el Código que llama ese "Codigo", que lógicamente habrá que mirarlo en el conjunto.
Me refiero a lo que creo es la llamada a una Función y otra a un Procedimiento.
sePudo = descargaAlmacen(arti, subalma, canti)
regMovimiento = registroMovimiento(arti, subalma, canti, PEDIDO)
Dependerá lo que tengas ahí puede o no causarte anomalías. Mis saludos >> Jacinto
Hola Jacinto, espero hayas tenido buen fin de semana.
con respecto al procedimiento de descarga ya me está funcionando bien excepto el Msgbox que no me lo está mandando cuando mi inventario está en ceros o en negativo.
el procedimiento de descarga lo puse al Perder el efoque de mi abono por que ahí bloqueo mis campos para que ya no se puede seguir capturandolo y no me reste más de mis inventarios.
Quisiera poner una antesala en el evento de al perder el enfoque o al de después de actualizar, del campo Cantidad de Artículos (como tu me sugeriste) para que ahí en caso negativo o cero, ya me esté mandando el Msgbox antes de proceder a descargar. A ver si me puedes ayudar con esto... por favor.
Muchas gracias.
En cualquiera de los dos Eventos lo puedes hacer, aunque ya habrá tomado el valor que hayas puesto. Quizá sería mejor ponerlo en el Evento de Antes de Actualizar. Algo así como lo siguiente, adaptado a tus Nombres.
Private Sub Cantidad_BeforeUpdate(Cancel As Integer) Dim CriterioUno As String Dim CantStock As Double CriterioUno = "IdProducto = " & Me.IdProducto CantStock = DLookUp("[Existencia]", "TablaExistencias", CriterioUno) If CantStock < Me.Cantidad Then MsgBox "No hay suficiente Producto para cubrir esa salida........" & vbCrLf & "Obra en consecuencia", vbCritical, "FALTAN UNIDADES" DoCmd.CancelEvent Me!Cantidad.Undo End If End Sub
Mis saludos >> Jacinto
¡Gracias! Jacinto. Me funciona perfectamente.
Te agradezco haberme dedicado tu tiempo, que Dios te Bendiga.
Hola Jacinto, que tal espero que todo te vaya bien.
Quisiera ver si me puedes volver a ayudar con un código de poner un botón para copiar mi carpeta donde tengo alojada mi base de datos que la tengo aparte del programa con mis Tablas Vinculadas. Y poderla copiar aunque sea a “mis documentos” aunque claro que lo ideal sería que me pidiera una ruta donde poderla guardar, ya sea una USB, disco externo o lo que quiera elegir. Pido ayuda porque lo que he conseguido hasta ahora es solamente copiar y pegar archivos nada más, pero no lo logro ni con carpetas ni con basedatos.mdb
Gracias de antemano.
Te facilito unas líneas de código, que te copiarán de un Origen a un destino.
Private Sub BtnCopiaArchivo_Click() Dim NombreFichero As String, UbicaOrigen As String, UbicaDestino As String Dim FS As Object NombreFichero = "ElFicheroACopiar.mdb" UbicaOrigen = "C:\PrimeraCarp\SegCarpeta\TercCarpeta\" & NombreFichero UbicaDestino = "C:\CarpetaAlfa\CarpetaBeta\" & NombreFichero Set FS = CreateObject("Scripting.FileSystemObject") FS.CopyFile UbicaOrigen, UbicaDestino, True MsgBox "Se Ha copiado el Fichero: " & NombreFichero & " desde " & UbicaOrigen & " a " & UbicaDestino, vbInformation, "FICHERO COPIADO!!!" End Sub
Si lo que pretendes además es elegir el destino, hay más de una manera de conseguirlo.
Mi sugerencia es que generes una pregunta sobre ello y creo será mejor para ti, puesto que puedes recibir más de una respuesta, y elegir la que mejor se adapte a tú necesidad.
Mis saludos >> Jacinto
Gracias Jacinto por tu pronta respuesta.
eso es justamente lo que he estado probando el fs.copyFile y el copy Folder pero no hay manera, no me encuentra la ruta que es una ubicación bien sencilla: C:\AR_BaseDatos\AR_BaseDatos.mbd
a veces me dice que no Está Permitido o que no encuetra la ruta o el archivo depende como lo ponga. Saludos
¡Gracias! Jacinto.... ya encontré el error, se me había colado el End sub por ahí.......
Discúlpame.... Y GRACIAS DE NUEVO POR TU APOYO.
Estupendo que hayas encontrado el error.
Ten en cuenta que si quieres guardar en alguna carpeta que sea de solo lectura, no te dejará hacerlo. Mis saludos >> Jacinto
Hola Jacinto, que tal como estás. Fíjate que tengo un informe que me muestra un listado de registros y quiero una vez ya dentro del Informe, poner un cuadro combinado (o un cuadro de texto no me importa) para poner el número de registro que busco y que me lleve y me ponga el foco en ese número de registro. Pero no lo consigo. Con Formularios no tengo problema, pero con el Informe no puedo ni con Recordset, ni con criterio en Macros… no sé vaya. A ver si me puedes ayudar, por favor.
Si puedo encantado, pero dado que se aparta del tema principal de la pregunta original, mi sugerencia es que generes una nueva con un poco más de detalle de lo que quieres conseguir y como llamas al Informe, y así te podrás beneficiar de más de una respuesta y elegir la que más se adapte a tus necesidades.
Lo que sí te adelanto es que normalmente a los informes se les debe de pasar la necesidad en la llamada, pero según te comento puede haber otras ideas. Mis saludos >> Jacinto
Hola Jacinto, haber si me puedes ayudar por favor.
Tengo una consulta que me muestra el número de registro (número de pedido) fecha de abono y monto del abono. Y quisiera que en un informe me pudiera mostrar por un periodo solicitado el número del registro y el abono, mostrando todo consecutivo seguido de coma o punto y coma. Ejemplo 1=$200.00; 2=$150.00; 3=1,500.00; 4=$500.00;5=.......
Gracias.
Quizá y dada la antigüedad de la pregunta original, y la cantidad de texto que ya tiene, es mejor que generes una nueva, con esa exposición y si esposible algún dato más. Tendrás la ventaja de que si a mi no se me ocurre una solución, seguro que hay alguien que te dará una respuesta.
Espero verla y la analizo con un poco más de tiempo. Mis saludos >> Jacinto
- Compartir respuesta