** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Actualizar totales de factura
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoActualizar totales de factura

 Responder Responder
Autor
Mensaje
maria35 Ver desplegable
Habitual
Habitual


Unido: 20/Enero/2016
Localización: España
Estado: Sin conexión
Puntos: 127
Enlace directo a este mensaje Tema: Actualizar totales de factura
    Enviado: 23/Marzo/2016 a las 11:27
Hola amigos, tengo una duda y no se como solucionarla. A ver si os la puedo explicar bien.
Tengo un programa de facturación son sus albaranes. Tengo 2 tablas una con la cabecera del albarán y otra con sus líneas, ya sabéis...en la cabecera tengo un campo llamado Total donde va el total del albarán, que se calcula sumando sus líneas, seguro que también os hacéis la idea. Para sumar las líneas de cada albarán y pasarle el valor al campo Total quiero hace una consulta de actualización que sume las líneas y le pase el valor al campo de la tabla de la cabecera pero no consigo hacerlo. He probado en hacer un consulta que me sume las líneas de cada albarán y que en otra consulta distinta añada la tabla cabecera con la consulta de totales relacionada con su número y le pase el total pero me dice que no es una consulta actualizable y no me deja y ya no se que mas hacer.
He probado a hacer un procedimiento con código que abra la tabla albaranes y uno a uno busque en la consulta que suma las líneas en total y actualice el campo en el recordset. Funciona bien pero muy lento, se tira un buen rato para hacerlo. ¿alguien tiene algo que le funcione o me pueda decir que hacer?
Gracias


Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1870
Enlace directo a este mensaje Enviado: 23/Marzo/2016 a las 12:37
Yo no te recomendaría que tengas un campo "Total" ya que te obligarás a estar actualizándolo siempre que hagas cambios en las líneas de la factura.

Déjatelo siempre como un campo calculado en una consulta y utilízalo siempre que lo necesites, en un formulario, un informe, etc.

Saludos.
Arriba
maria35 Ver desplegable
Habitual
Habitual


Unido: 20/Enero/2016
Localización: España
Estado: Sin conexión
Puntos: 127
Enlace directo a este mensaje Enviado: 23/Marzo/2016 a las 13:07
Hola Omnipresente ya lo tenía así, una consulta con los totales de cada albarán, y funcionaba bien, hasta que los registros fueron creciendo y tenía muchos albaranes. cada vez que entraba a la ventana donde me aparecen los albaranes se me tiraba hasta 10 segundos haciendo esa suma¡¡ al final lo tuve que quitar pues era inviable y vi en este foro esta opción que me da mayor velocidad pero tengo el problema que tu dices, siempre actualizando...lo que es un rollo, de la otra manera era comodísimo pero muy lento. No se si alguien tiene experiencia con esto y me aconseja que vuelva al modelo anterior de la consulta peor haciendo algo para mejorar la velocidad.
Gracias

Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1870
Enlace directo a este mensaje Enviado: 23/Marzo/2016 a las 13:32
Bueno, si te va muy lento lo que puedes hacer es revisar los índices de la tabla de líneas; ¿tienes indexado el Id de factura?.

Por otro lado, para actualizar tu campo de total, lo que puedes hacer es, en lugar de enlazar la consulta de totales porque así el recordset no es actualizable, es utilizar un Dsum, algo como:

UPDATE Facturas SET Total = Dsum("Importe","LineasDeFactura","Id = " & [Id])

Aunque si dices que tienes muchas líneas de albarán igual cualquier cosa te va a ir lenta. ¿De cuántos registros estamos hablando?.

Saludos.


Editado por OmniPresente - 23/Marzo/2016 a las 13:33
Arriba
maria35 Ver desplegable
Habitual
Habitual


Unido: 20/Enero/2016
Localización: España
Estado: Sin conexión
Puntos: 127
Enlace directo a este mensaje Enviado: 23/Marzo/2016 a las 13:56
de 110.000 líneas. tarda mucho, lo que no he revisado bien son los índices. Puedo probar...
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1870
Enlace directo a este mensaje Enviado: 24/Marzo/2016 a las 09:30
Hay ciertos volúmenes de datos, que, hagas lo que hagas, Access como motor de base de datos ya se queda corto, y es el momento de pensar en migrar a SQL Server o similar.

Ya nos contarás.

Saludos.


Editado por OmniPresente - 24/Marzo/2016 a las 09:31
Arriba
maria35 Ver desplegable
Habitual
Habitual


Unido: 20/Enero/2016
Localización: España
Estado: Sin conexión
Puntos: 127
Enlace directo a este mensaje Enviado: 24/Marzo/2016 a las 09:51
y con este volumen me lo recomendáis? pasarme a sql server? quizás estoy yo confundida y no es problema de que sea inviable hacer esa consulta que sume las líneas de los albaranes sino que access ya se queda corto en estos casos...
Gracias

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11210
Enlace directo a este mensaje Enviado: 24/Marzo/2016 a las 10:14
Este volumen de datos 110.000 registros es más que asequible para access, ... no necesitas pasarte para nada a SQL.

El problema viene en 'el diseño' de una aplicación, cuando se manejan grandes volúmenes de datos, no se debe estar sumando las líneas de cada albarán (o pedido, o factura, o lo que sea .... para sacar un total) es una pérdida de tiempo y recursos.

Lo suyo es que un albarán (lo que digo vale para pedidos, facturas, etc) tenga la información dividida en dos tablas, una de cabecera donde va el cliente, la fecha, el comercial, el % de IVA, ..... y ... LOS TOTALES que vayamos a necesitar y otra tabla con las líneas de detalle.

Para que esto funcione bien, implica que cuando introduzcas una línea actualices los totales. Obviamente en ese momento usas todos los registros con lo aparentemente no has ganado nada, pero ya en el resto de lugares que usas ese albarán, al imprimir, al consultar, etc ya tienes todos los campos calculados.

El siguiente paso, para que esto funcione bien de verdad, es duplicar las tablas en dos, por un lado operaciones vivas y por otro lado históricas (AlbaranCabecera, AlbaranLineas, HisAlbaranCabecera, HisAlbaranLineas), eso significa que una vez que cerramos ese albarán pasamos sus datos a las tablas históricas eliminándolos de vivas ... 
¿y qué ganamos con eso?, pues ganamos que los cálculos se hacen en tablas con 200, 300 registros que actualizan una tabla con 30, con lo que la velocidad ya te imaginas cuánto mejora.

Por cierto, como comprenderás todo esto que he dicho es una herejía, eso de mantener campos calculados, valores duplicados en más de una tabla, .... ¡¡¡ yuyu !!!! Evil Smile

...dicen que te condenas, pero recuerda, ... los ingenieros no van al infierno  (y los informáticos menos) LOL





Editado por Mihura - 24/Marzo/2016 a las 10:15
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable