Access - openreport

 
Vista:
Imágen de perfil de miguel
Val: 501
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

openreport

Publicado por miguel (312 intervenciones) el 08/08/2025 20:33:40
Hola a todos, hace tiempo solicite ayuda sobre impresion de facturas y me facilitaron el siguiente codigo que lo que hace es generar una tabla desde una consulta con los numeros de facturas que se tienen que imprimir:
Dim dbs1 As Database
Dim rFACTURAS As Recordset
Dim stDocName As String
stDocName = "T5"
DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, stDocName
DoCmd.SetWarnings True
stDocName = "c5"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Set dbs1 = CurrentDb
Set rFACTURAS = CurrentDb.OpenRecordset("t5")

If rFACTURAS.RecordCount > 0 Then
rFACTURAS.MoveFirst
leer:
Do While Not rFACTURAS.EOF
numw = rFACTURAS!NUMERO
DoCmd.OpenReport "prgfacimpf", , , "[facturas.numero] = " & numw

pero ahora quiero utilizar este codigo para otra impresion donde la seleccion se hace ademas de por el numero de factura por la serie de la factura pero no se ampliar la orden de openreport.
la tabla ya se genera con la serie y el numero
Espero que puedan ayudarme
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

openreport

Publicado por Anonimo (3413 intervenciones) el 10/08/2025 00:41:07
En base a este comentario:
.... el siguiente codigo que lo que hace es generar una tabla desde una consulta ....

Si todo funciona bien y no se necesitan modificaciones en el informe (quizás añadir la serie) solo se necesitara modificar la consulta de la que se extrae el origen de datos para el informe.

A la mencionada consulta se tiene que añadir que solicite la serie (al igual que probablemente ahora se le indique un rango de fechas o ....).

Aconsejo una copia de seguridad de la aplicación antes de modificar algo.

NOTA: asumo que el código publicado esta incompleto, pero no debería haber necesidad de modificarlo, pues los datos se condicionan por la serie en un paso anterior (la consulta).
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
Imágen de perfil de miguel bellido
Val: 501
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

openreport

Publicado por miguel bellido (312 intervenciones) el 10/08/2025 15:09:44
hola,
la consulta esta modificada de forma que la tabla t5 se genera con la serie y los numeros de facturas que se quiere imprimir pero el problema es que la opcion
DoCmd.OpenReport "prgfacimpf", , , "[facturas.numero] = " & numw solo controla el numero y necesito que tambien controle la serie porque pueden existir facturas del mismo numero y distinta serie, la pregunta es como se puede modificar la opcion
DoCmd.OpenReport "prgfacimpf", , , "[facturas.numero] = " & numw para que tambien controle la serie ya que la consulta tiene la serie pero nel formato openreport tal como esta solo controla el numero ¿como se puede incluir una doble condicion?
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
Imágen de perfil de miguel bellido
Val: 501
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

openreport

Publicado por miguel bellido (312 intervenciones) el 10/08/2025 18:04:34
he modificado los parametros de openreport y he incluido una doble condicion aunque no estotalmente correcta porque ahora antes de imprimir me pide el valor del parametro de la serie, es decir, me enseña el valor de la serie pero me lo pide y entonces imprime bien el documento logicamente el parametro no esta bien escrito y agradeceria que me indicara cual cree que es error

numw = rFACTURAS!NUMERO
SERIEW = rFACTURAS!SERIE

DoCmd.OpenReport "prgfacimpf", , , "[facturas.numero] = " & numw & " And [facturas.SERIE] = " & SERIEW
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

openreport

Publicado por Anonimo (3413 intervenciones) el 10/08/2025 19:15:56
Desconociendo la línea de procesamiento de esos datos es complicado que una única respuesta pueda aportar la solución, solo conceptos básicos que (en función del entorno) se han de ajustar.

Me pareció que el informe tomaban los datos de una consulta, su numeración no debería ser problema (la numeración debería continuar la existente incrementándola), para lo que se suele utilizar un DMAX para obtener la semilla (un DMAX sobre la tabla con las mismas condiciones esto es: con/sin series), el informe simplemente imprimirá el contenido recién creado (el resultado de la consulta: la supuesta 'tabla temporal').

Se me asemeja innecesario recrear la tabla, es menos oneroso vaciarla tras su uso (una simple consulta de borrado) para evitar que expanda el espacio ocupado por la consulta, (la tabla vacía de datos no ocupa espacio).

Con cada ejecución de la consulta (que puede obtener los parámetros de un formulario si se precisa reutilizarlos) se generará el nuevo contenido de la tabla que tras ser utilizada por el informe será vaciada.

El origen de datos para el informe seria la tabla antes mencionada (o una consulta que basada en ella obtenga los que se van a imprimir) y entre ellos estará la serie si se utilizase en el reporte. Asumo que en ese mismo proceso se hace la gestión adecuada de la factura recién generada.

Si se publicase el diagrama de flujo (el procesamiento de los datos) se dispondrá de un esquema básico que permita respuestas mas ajustadas al entorno real.

Me surge una duda:
Actualmente habrá facturas que por ser anteriores a la nueva necesidad no tendrán serie ¿se han de mantener o simplemente ese campo añadido a la tabla de facturas generadas se deja en blanco?.

Otra duda es si realmente se le añade un campo para la serie o se genera un nuevo 'orden de numeración' que contemple el nuevo dato (la serie).
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
Imágen de perfil de e

openreport

Publicado por e (362 intervenciones) el 10/08/2025 21:39:21
Para añadir el filtro por serie al comando DoCmd.OpenReport, necesitas concatenar la condición de la serie en la cadena de texto de la misma forma que ya se hace con el número de factura. Aquí está el código con los cambios necesarios:

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
Sub ImprimirFacturasPorNumeroYSerie()
 
Dim dbs1 As DAO.Database
Dim rFACTURAS As DAO.Recordset
Dim stDocName As String
Dim numw As Long ' O el tipo de dato que uses para el número (Integer, Double)
Dim seriew As String ' La serie es un campo de texto
 
' ----------------------------------------------------
' Paso 1: Crear la tabla temporal de facturas a imprimir
' ----------------------------------------------------
 
stDocName = "T5" ' Nombre de la tabla temporal
DoCmd.SetWarnings False ' Desactivar las advertencias para que no salgan los mensajes de eliminación
 
' Eliminar la tabla si ya existe para empezar de nuevo
On Error Resume Next ' Ignora el error si la tabla no existe
DoCmd.DeleteObject acTable, stDocName
On Error GoTo 0 ' Reactiva el manejo de errores
 
' Volver a activar las advertencias
DoCmd.SetWarnings True
 
' Abrir la consulta de selección y guardar el resultado en la tabla temporal T5
' "c5" es el nombre de tu consulta que selecciona las facturas
stDocName = "c5"
DoCmd.OpenQuery stDocName, acNormal, acEdit
 
' ----------------------------------------------------
' Paso 2: Recorrer la tabla e imprimir cada factura
' ----------------------------------------------------
 
' Abrir la tabla temporal para leer los registros
Set dbs1 = CurrentDb
Set rFACTURAS = dbs1.OpenRecordset("t5")
 
If rFACTURAS.RecordCount > 0 Then
    rFACTURAS.MoveFirst
 
    ' Bucle para recorrer cada registro de la tabla
    Do While Not rFACTURAS.EOF
        ' Obtener el número y la serie de la factura del registro actual
        numw = rFACTURAS!NUMERO ' Campo NUMERO de la tabla T5
        seriew = rFACTURAS!SERIE  ' Campo SERIE de la tabla T5
 
        ' Abrir el informe, filtrando por el número Y la serie
        DoCmd.OpenReport "prgfacimpf", acViewPreview, , "[facturas.numero] = " & numw & " AND [facturas.serie] = '" & seriew & "'"
 
        ' Mover al siguiente registro
        rFACTURAS.MoveNext
    Loop
Else
    ' Si no hay facturas en la tabla, mostrar un mensaje
    MsgBox "No hay facturas seleccionadas para imprimir.", vbInformation, "Impresión de facturas"
End If
 
' Cerrar el Recordset y liberar la memoria
rFACTURAS.Close
Set rFACTURAS = Nothing
Set dbs1 = Nothing
 
End Sub
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

openreport

Publicado por Anonimo (3413 intervenciones) el 11/08/2025 00:24:48
En principio simplificaría un poco el proceso, a mi juicio el paso uno es una redundancia, una consulta guardada se comporta como una tabla.

Se puede cargar el recordset [rsFacturas] directamente con la consulta guardada [c5] e ignorar la tabla [T5].

Una vez adjudicado el origen de datos a [rsFacturas] se verifica con RecordCount que tenga algún registro y en función de ello:
.- Si no devuelve un valor diferente de cero se envía un mensaje, tras ello se aborta el proceso.
.- En cualquier otro caso (hay datos) se continua y se envía el cursor al final [MoveLast], a continuación al inicio [MoveFirst] con el fin de que el recordset se cargue con todos los/sus datos (los recordset por defecto ya abren en su primer registro).

El resto en principio no deberá plantear ningún problema

El informe no debería solicitar ningún dato, si lo hace habrá que revisar la concordancia entre el origen de datos (del informe) y los cuadros de texto por una posible falta o diferencia (un nombre diferente entre el dato asignado al cuadro de texto y el nombre del campo en el origen de datos), pues como es de esperar, si no localiza un dato que espera encontrar lo solicitara.
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