** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - RECORRER LINEAS FORMULARIOS
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

RECORRER LINEAS FORMULARIOS

 Responder Responder Página  12>
Autor
Mensaje
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Tema: RECORRER LINEAS FORMULARIOS
    Enviado: 12/Diciembre/2021 a las 08:39
Dentro de un Formulario continuo he de recorrer cada una de las lineas existentes y calcular los Precios de Venta.

He probado con estos dos rutinas:

Dim Rst As DAO.Recordset
Set Rst = Me.RecordsetClone
While Not Rst.EO  
   Call CALCULOPVP
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing

y con esta otra:

Dim bucle As Integer
Dim i As Integer
DoCmd.GoToRecord , , acFirst
For i = 1 To Me.Recordset.RecordCount
   Call CALCULOPVP
DoCmd.GoToRecord , , acNext
Next

Me funcionan bien las dos, pero en el momento que dentro del CALL, encuentran que abro otros formularios para extraer los datos para calcular el PVP, el proceso, se me queda en la primera linea sin hacer el recorrido por cada una de las lineas del Formulario Principal.
Os agradeceria si puedieseis indicarme otra forma de trabajo para que me pudiese funcionar.



jvob
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Diciembre/2021 a las 10:46
Hola
Podrias poner el codigo que realizas con "CALCULOPVP"
Saludos
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Diciembre/2021 a las 06:36
Este el codigo que hay en el CALL con la llamda a otrso formularios que contienen los datos complementarios para realizar el Calculo:

***************************
'--  RUTINA CALCULO PVP -- *
'***************************
Sub CALCULOPVP()
'*
Dim AREAPRODUCTO As Double
Dim AreaMaterial As Double
Dim UnidadesHoja As Double
Dim UnidadesMaterial As Double
Dim TOTALMTS2 As Double
'*
AREAPRODUCTO = ((Me.AnchoProducto / 1000) + (Me.AnchoSangrado / 1000)) * ((Me.AltoProducto / 1000) + (Me.AltoSangrado / 1000))
'*
AreaMaterial = Me.AMaterial
UnidadesHoja = Nz(Int([AreaMaterial] / [AREAPRODUCTO]))
If UnidadesHoja = 0 Then
    UnidadesHoja = 1
Else
End If
'*
Dim ValorDecimal As Double
Dim ParteEntera As Long
Dim ParteDecimal As Double
ValorDecimal = Nz([UNIDADESTOTALES] / [UnidadesHoja])
ParteEntera = Int(ValorDecimal)
ParteDecimal = ValorDecimal - ParteEntera
If ParteDecimal <> 0 Then
    UnidadesMaterial = ParteEntera + 1
Else
    UnidadesMaterial = ParteEntera
End If
TOTALMTS2 = 0
'*
If Me.GranFormato = "SI" Then
    If AreaMaterial < Me.AreaMinima Then
        AreaMaterial = Me.AreaMinima
    Else
    End If
Else
End If
'*
Dim SELECTORUNIDADES As Double
Dim SUMAGASTOSIMPRESION As Double
Dim SELECTORUNIDAD As Double
Dim SUMAGASTOSMATERIALES As Double
If GranFormato = "SI" Then
    SUMAGASTOSIMPRESION = SUMACOSTESIMPRESION
    SELECTORUNIDADES = Round(TOTALMTS2, 3)
    SELECTORUNIDAD = Round(TOTALMTS2, 3) / UNIDADESTOTALES
Else
    SUMAGASTOSIMPRESION = SUMACOSTESIMPRESION
    SELECTORUNIDADES = Round(UnidadesMaterial, 3)
    SELECTORUNIDAD = Round(UnidadesMaterial, 3) / UNIDADESTOTALES
End If
Me.Recalc
'*
If Me.GranFormato = "SI" Then
    SUMAGASTOSMATERIALES = SUMAMATERIALES
    SUMACOSTESMATERIALES = CosteMateriales
Else
    SUMAGASTOSMATERIALES = SUMAMATERIALES
    SUMACOSTESMATERIALES = CosteMateriales
End If
Me.Recalc
'*
DoCmd.OpenForm "COMPUESTOIMPRESIONTRABAJOINICIO"
DoCmd.OpenForm "COMPUESTOPREPOSTIMPRESIONTRABAJO"
'*
DoCmd.OpenForm "COMPUESTOPREPOSTIMPRESIONPRODUCTO"
DoCmd.OpenForm "COMPUESTOCOSTESIMPRESIONPRODUCTO"
'*
DoCmd.OpenForm "COMPUESTOCOSTESIMPRESIONMATERIAL"
DoCmd.OpenForm "COMPUESTOPREPOSTIMPRESIONMATERIAL"
DoCmd.OpenForm "COMPUESTOMATERIALESINICIO"
'*
Me.Recalc
Dim TOTAL1 As Double
Dim TOTAL2 As Double
TOTAL1 = Nz(Me.SUMAPRODUCTO * Me.UNIDADESTOTALES)
TOTAL2 = Nz(Me.SUMAMATERIAL * SELECTORUNIDADES)
Me.PVPLINEA = Nz(Me.SUMATRABAJO) + Nz(TOTAL1) + Nz(TOTAL2)
Me.Refresh
'*
DoCmd.Close acForm, "COMPUESTOIMPRESIONTRABAJOINICIO"
DoCmd.Close acForm, "COMPUESTOPREPOSTIMPRESIONTRABAJO"
'*
DoCmd.Close acForm, "COMPUESTOPREPOSTIMPRESIONPRODUCTO"
DoCmd.Close acForm, "COMPUESTOCOSTESIMPRESIONPRODUCTO"
'*
DoCmd.Close acForm, "COMPUESTOCOSTESIMPRESIONMATERIAL"
DoCmd.Close acForm, "COMPUESTOPREPOSTIMPRESIONMATERIAL"
DoCmd.Close acForm, "COMPUESTOMATERIALESINICIO"
'*
si necesitas mas informacion dimelo y te la indico.
Un saudo

jvob
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Diciembre/2021 a las 10:05
Hola
Dento de la llamada a CALCULOPVP no veo necesidad de poner ningún Me.Recalc ni tampoco el Me.Refresh que pones despues de la linea Me.PVPLINEA = Nz(Me.SUMATRABAJO) + Nz(TOTAL1) + Nz(TOTAL2).
Si deduzco bien Me.PVPLINEA es el único campo del formulario que actualizas  para cada registro

Prueba esto

Dim Rst As DAO.Recordset
Set Rst = Me.RecordsetClone
Rst.MoveFirst
Do Until Rst.EOF 
   Call CALCULOPVP
Rst.MoveNext
Loop
Rst.Close
Set Rst = Nothing
Me.Requery
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Diciembre/2021 a las 11:23
Me sique haciendo lo mismo. Solo calcula el PVP del primer registro.
Cuando le doy al boton del calculo noto que abre los Forms que tengo para recoger datos por cada uno de los productos dentro del Form principal. Pero solo calcula la primera linea y no avanza con las siguientes lineas.
Si elimino los Calcs y el Refresh no me hace bien los calculos, por eso fue el motivo de intercalarlos. He probado eliminarlos pero tampoco realiza bien el proceso.
Si lo ves conveniente te podria mandar el proceso para que lo vieses personalmente en tu ordenador.

jvob
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Diciembre/2021 a las 12:33
Hola, puedes enviarmelo si quieres no hay problema
O bien colgarlo en la nube y poner el enlace aqui en el foro para que otros miembros puedan ayudarte. Asi todos veran la solución.
Prueba a cambiar la linea
Me.PVPLINEA = Nz(Me.SUMATRABAJO) + Nz(TOTAL1) + Nz(TOTAL2)
Por estas
Rst.edit
Rst!PVPLINEA = Nz(Rst!SUMATRABAJO) + Nz(TOTAL1) + Nz(TOTAL2)
Rst.update

Sinó tendrias que sincronizar el registro del formularo con el del recordset
Algo asi

Dim Rst As DAO.Recordset
Set Rst = Me.RecordsetClone
Rst.MoveFirst
Do Until Rst.EOF
Me.Bookmark = Rst.Bookmark
   Call CALCULOPVP
Rst.MoveNext
Loop
Rst.Close
Set Rst = Nothing
Me.Requery
Saludos



Editado por main - 13/Diciembre/2021 a las 13:08
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Diciembre/2021 a las 16:46
No se como podria subirlo a la nube dime los pasos a seguir. O bien dime tu correo y te lo mando.

jvob
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Diciembre/2021 a las 19:04
Probaste algo de lo que te comente?
¿Que es lo que no te funcioa?
Utimamente las normas del foro son asi.
Tengo en el foro,como todos, un canal de  mensajes-
dirijete a el
Saludos
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Diciembre/2021 a las 04:54
He probado el eliminar las actualizaciones que me dijiste del Call y el Refresh y sigue sin funcionar. Solo actualiza la primera linea del Formulario.

jvob
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Diciembre/2021 a las 04:56
En este foro es la primera vez que entrado aunque ya hacia tiempo que estaba dado de alta. Donde se encuentra el canal de mensajes para poder acceder
jvob
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Diciembre/2021 a las 12:53
Prueba lo que te envie ayer a las 12:33 y comentas
Los mensajes los tienes en la parte superior izquierda de la pagina

Saludos


Editado por main - 14/Diciembre/2021 a las 12:55
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Diciembre/2021 a las 15:26
He probado lo que me dijiste ayer y me sigue haciendo lo mismo. Se queda en el primer producto.

jvob
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 144
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita joanka Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Diciembre/2021 a las 15:38
Hola,

Prueba con este código:

On Error Resume Next

Application.Echo False

Dim n As Long
n = Me.CurrentRecord
Me.Recordset.MoveFirst
Do While Not Me.Recordset.EOF

Call CALCULOPVP

Me.Recordset.MoveNext

Loop

Me.Recordset.MoveFirst

If n > 1 Then Me.Recordset.Move n - 1

Application.Echo True

Exit Sub
Arriba
jvob Ver desplegable
Nuevo
Nuevo


Unido: 30/Marzo/2016
Localización: Masculino
Estado: Sin conexión
Puntos: 41
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jvob Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 15/Diciembre/2021 a las 03:43
Gracias por tu ayuda. 
He probado este codigo que me has mandado pero no me hace nada. Se queda sin calcular nada.
El problema me viene que en el CALL al llamar a otros Forms. nse queda en la primera linea sin continuar con las siguientes del Formulario Pincipal.
Parace ser que el puntero no avanza con las lineas siguientes del formulario a calcular.
Si elimino la llamada a los formularios donde he de extraer datos para calculos me funciona perfectamente.
jvob
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 15/Diciembre/2021 a las 08:20
El módulo CalculoPVP tienes que rehacerlo, de forma que tire directamente de las tablas de datos (usando recordsets) y no de los campos de unos formularios.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable