elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Programa Facturacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa Facturacion  (Leído 1,584 veces)
corlo

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Programa Facturacion
« en: 18 Junio 2024, 00:00 am »

Hola
estoy tratando de acabar el programa de Facturacion que tengo dos problemas
en el formulario almacen todo funciona bien

1:cuando cargo los datos de un almacen con el combo del formulario venta los carga bien por primera vez, cuando cargo otro almecen no me lo carga al combo del formulario venta

2:en el formulario compra tendria que ver un combo para dichos articulos de compra del formulario de almacen, para poder hacer dicha compra del articulo.

aqui te dejo el archivo que tengo hasta ahora


https://workupload.com/archive/6DYH2KtENe

lo de subir el archivo no se si lo he hecho bien, si sale bien veras dos archivos iguales


gracias



En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Programa Facturacion
« Respuesta #1 en: 24 Junio 2024, 16:25 pm »

Sí, salen 2 archivos de 1'84Gb.
He de suponer que adjunta alguna o varias bases de datos. ¿No bastaba con con que tuvieran unas decenas de Mb.?.

Lo descargo ahora, a la noche que esté de vuelta en casa lo reviso por encima...


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Programa Facturacion
« Respuesta #2 en: 25 Junio 2024, 15:44 pm »

Anoche estuve revisando un poco por encima el código, pero como no me acordaba de que era lo que pedías, no me centré en nada concreto (ahora vengo a releer que problemas tenías).

De entrada se te coló un mp4 de 1'8Gb. en el zip... que es lo que le daba peso al archivo.
Las bases de datos, pues no hay... hay ficheros con nombre aleatorio corto de 0 y 1kb.

y por encima te comento solo algunas cosas, sería largo comentar todo:

Cuando abro el proyecto, observo que hay formularios cuasi repetidos, por ejemplo:
 Frmfile ahora tiene 2 clones: frmfile1 y Form3, de éstos, form3 solo se diferencia en una línea de códio que se ha añadido y que no precisa ser añadida ahí.
 Dado que dicho formulario tiene la funcionalidad exclusiva de seleccionar un fichero de 'facturación' y nada más, procede eliminar esa línea de código... se puede colocar desde el que invoca la llamada a esta ventana a su regreso...

Internamente (FrmFile) mantiene público el nombre del fichero elegido, la ruta dado que es local (creo recorar que yo la tenía en raíz, pero es preferible usar carpetas), podría establecerse al cargar la aplicación (proyecto, cuando se está en diseño), y usarla abreviadamente en lo sucesivo...
Así en el module1 podría añadirse:
       Public RutaFacturas as string
y al cargar en proyecto en la función que lo inicia 'Private Sub MDIForm_Load()'
       RutaFacturas = app.path & "\Almacen\"
Esto implica cambiarlo en todas partes donde aparezca 'app.path & "\Almacen\"' por 'RutaFacturas', excepto justamente donde se establce la ventana frmMdi. Aparte de ahorrar caracteres, el nombre es autodescriptivo allí donde aparezca.

Sobre el form3, sobra... la llamada que lo utiliza puede perfectamente ser sustituída por FrmFile.. y la línea allí añadida ser movida al lugar desde donde se llama.

Se puede comentar algunas cosas más (de lo que he mirado), pero baste así.... si no veo nada grave.
« Última modificación: 25 Junio 2024, 15:47 pm por Serapis » En línea

corlo

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Programa Facturacion
« Respuesta #3 en: 25 Junio 2024, 20:17 pm »

Hola Serapis
sobre los clones de frmfile solo era para que no entrara en conflicto con los archivos con el archivo de compras el de facturacion y el de almacen creo que son cosas totalmente diferentes solo es por no entrar en conflicto.

1:cuando cargo los datos de un almacen con el combo del formulario venta los carga bien por primera vez, cuando cargo otro almecen no me lo carga al combo del formulario venta

2:en el formulario compra tendria que ver un combo para dichos artic
ulos de compra del formulario de almacen, para poder hacer dicha compra del articulo.

gracias
En línea

corlo

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Programa Facturacion
« Respuesta #4 en: 26 Junio 2024, 01:35 am »

gracias por la ayuda Serapis
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Programa Facturacion
« Respuesta #5 en: 28 Junio 2024, 18:12 pm »

He estado mirando el código para hacerme una idea de los cambios que has realizado y deducir que intentas hacer.

Lo que veo, es que has clonado los formularios: Facturación (ahora pasan a llamarse FacturacionCompra y FacturacionVenta), el de compra y el carrito.

Según parece quieres que además de ofrecer una ventana para la facturación de las ventas de los productos, otro igual para la compra de los productos que luego se han de vender.
Para esto has creado sendos duplicados de la ventana de compras y el carrito... bien.

Sin embargo para que esto funciones bien, el almacén o bien debe modificarse o bien debe crearse otro almacén. Y me dirás por qué?.
Por que el almacén retirene los productos en stock a la venta, pero los datos que se reflejan en él son básicamente de cara a la venta, por ejemplo el precio de venta y el IVA, o si está en oferta. No obstante ya dejé ibniciado en el mismo registro la posibilidad de consignar otros detalles, como un umbral de aviso para reponer (comprar) cuando las unidades se vayan quedando sin existencias. Sin embargo no incluye el precio que se pagó por ello al comprarlo, ni si se aplicaron descuentos al comprar tal o cual producto.
Si creas un duplicado del almacén, esto es no tocas nada del actual, tendrías que crear otro registro para la compra de los artículos que iría asociado al formulario FacturacionCompras, que usaría la ventana compraStock (actualmente compras1) y al carritoStock (actualmente carrito1). Lógicamente los campos de los registros usados para ese almacén, deberán constar en el de facturación, compra y carrito propios.

Otra opción es que el almacén actual integre todos los campos precisos... el almacén actual, facturacionVentas, compra y carrito, no necesitan ser tocados básicamente, aunque hay que ver como afecta en lagunos casos (al leer registros puesto que el tamaño del registro cambiará).
Lo ideal es que los campos adicionales vayan al final de los campos actuales... debes decidir que campos serían esos, por ejemplo actualmente este es el registro del almacén:

Código
  1. Public Type RegArticulosAlmacen                             ' 52 bytes por registro de artículo en el almacén.
  2.    IdArticulo                          As Integer          ' 01   Identificador único autoincremental del artículo en el almacén.
  3.      Reservado1                        As Integer          ' 03     (Reservado: Por si se debe cambiar el Id a tipo long, sin alterar los ficheros).
  4.    IdOferta                            As Integer          ' 05   Identificador d ela oferta. Cada artículo SOLO puede tener asociada UNA oferta (el precio aquí no se toca).
  5.      Reservado2                        As Integer          ' 07     (Reservado: Por si se debe cambiar el Id a tipo long, sin alterar los ficheros).
  6.    ItemsEnStock                        As Integer          ' 09   Cantidad del artículo actualmente en stock en el almacén.
  7.    UnidadesPorCaja                     As Integer          ' 11   Cantidades que trae cada caja (cuando no precede se debe poner 1).
  8.    UmbralRelativoAvisoReponer          As Integer          ' 13   Alcanzada esta cantidad (porcentaje) o menos, se debe enviar un aviso al departamento de compras.
  9.    UmbralAbsolutoAvisoReponer          As Integer          ' 15   Cantidad mínima (absoluta) que alcanzada da aviso...
  10.      Reservado3                        As Long             ' 17   Para futurible ampliación 8 bytes disponibles (una vez ocupados añadir más campos supondrá modificar el fichero).
  11.      Reservado4                        As Long             ' 21      "     "         "
  12.    ImpuestoIVA                         As Single           ' 25   Porcentaje del precio unitario que supone el impuesto.
  13.    PrecioUnitario                      As Single           ' 29   Precio actual del artículo (sin descuentos, lleva el valor del impuesto incluído).
  14.    Nombre                              As String * FIXED_CHARS_ARTICULO   ' 33
  15. End Type
  16.  

Ahora se podrían añadir al menos 3 campos (al final se ven)... tú debes valorar si se requiere alguno más.
Código
  1. Public Type RegArticulosAlmacen                             ' 64 (52+12) bytes por registro de artículo en el almacén.
  2.    IdArticulo                          As Integer          ' 01   Identificador único autoincremental del artículo en el almacén.
  3.      Reservado1                        As Integer          ' 03     (Reservado: Por si se debe cambiar el Id a tipo long, sin alterar los ficheros).
  4.    IdOferta                            As Integer          ' 05   Identificador d ela oferta. Cada artículo SOLO puede tener asociada UNA oferta (el precio aquí no se toca).
  5.      Reservado2                        As Integer          ' 07     (Reservado: Por si se debe cambiar el Id a tipo long, sin alterar los ficheros).
  6.    ItemsEnStock                        As Integer          ' 09   Cantidad del artículo actualmente en stock en el almacén.
  7.    UnidadesPorCaja                     As Integer          ' 11   Cantidades que trae cada caja (cuando no precede se debe poner 1).
  8.    UmbralRelativoAvisoReponer          As Integer          ' 13   Alcanzada esta cantidad (porcentaje) o menos, se debe enviar un aviso al departamento de compras.
  9.    UmbralAbsolutoAvisoReponer          As Integer          ' 15   Cantidad mínima (absoluta) que alcanzada da aviso...
  10.      Reservado3                        As Long             ' 17   Para futurible ampliación 8 bytes disponibles (una vez ocupados añadir más campos supondrá modificar el fichero).
  11.      Reservado4                        As Long             ' 21      "     "         "
  12.    ImpuestoIVA                         As Single           ' 25   Porcentaje del precio unitario que supone el impuesto.
  13.    PrecioUnitario                      As Single           ' 29   Precio actual del artículo (sin descuentos, lleva el valor del impuesto incluído).
  14.    Nombre                              As String * FIXED_CHARS_ARTICULO   ' 33
  15.    '--- campos nuevos para la compra ---
  16.    PrecioCompra                        As Single           ' 53   Precio unitario que costó su compra.
  17.    ImpuestoIVACompra                   As Single           ' 57   Porcentaje del precio unitario que supone el impuesto al comprarlo.
  18.    DescuentoCompra                     As Single           ' 61   Cantidad descontada por las sumas de cualquier conceptos.
  19. End Type     ' 65 (64 bytes por registro)

De igual modo cuando leas este registro para la ventana FacturacionCompra, hay que crear una función que tome del registro solo los campos deseados.... a imitación de la función 'RegArticuloToString'.
Esta función (RegArticuloToString), ahora procedería llamarse 'RegArticuloVentaToString'. Ésta función tal cual está ahora no precisa cambios para la ventana de de FacturacionVentas.

Claro que cuando se realice una compra, no solo se debe actualizar un nuevo fichero 'FacturacionCompra', también se debe actualizar convenientemente el almacén.
Si el artículo no existe se crea un id nuevo para él, si ya existe hay varias consideraciones a tener en cuenta:
1 - La cantidad en stock se incrementa en la cantidad comprada (es decir se suma al valor de itemsEnStock).
2 - Si el precio de compra es ahora distinto del precio de compra de la vez anterior, tal vez sea preciso actuaizar también el precio de venta unitario.
3 - Algo similar con el porcentaje de impuesto si cambia...
4,5,6... etc...
Claro que en los casos 2 y 3, puede optarse por crear un artículo nuevo con nuevo precio y nuevo valor del impuesto (respectivamente según el caso), y seguir manteniendo el artículo previo hasta fin de existencias, con su precio e impuesto acorde al que tenían cuando se compró.
Esas son decisiones que se deben tomar conforme al cliente o a las leyes existentes en el país, si son de obligado cumplimiento.

Nota, que cuando se compran artículos, se puede mantener el mismo fichero de facturación (para compras y ventas) a condición de que el valor de costo se ponga en negativo. Así cuando se revisa la facturación puede cargarse en una sola ventana  de facturación o puedes tenerlo dividido en 2, FacturacionCompra y FacturacionVenta, en este caso al leer un registro se comprueba si su valor es mayor o menos que 0...
En la ventana de FacturacionVentas irán todos los registros cuyo valor es mayor de 0 (se vendió, se embolsa dinero), y en la ventana de FacturacionCompras irán todos los registros cuyo valor es menor que 0 (se compró, aflojamos el bolsillo)...

Yo usaría una sola ventana de facturación y un solo fichero de facturación. Pero si quieres mantener dos formularios por separado, quizás interesare también mantener asociado a cada formulario su propio fichero de facturación. Sea lo que sea lo que decidas, tienes que ser coherente y ver como afecta al resto de formularios, para actualizarlos según convenga.

Por último puesto que cambia el registro del almacén, también habrá que editar el formulario 'FrmEditarArticulo', para que recoja los nuevos campos que se añadan en el mismo (yo he propuesto 3 campos, quizás quieras modificarlos, eliminar o añadir alguno más).

Y creo que he resuelto las dudas que puedas tener...

Un error que si me ha parecido ver, es que has declarado en una de esas ventanas clones los canales de ficheros privados a la función que abre el fichero... eso es un error, porque fuera de esa función (salvo que se devuelva por referencia el canal), no habrá modo de acceder a él después de abierto... Esa puede ser la razón por la que tienes algún problema de los que describes.
Las variables que mantienen el número de canal abierto con los ficheros, deben ser públicos en un módulo si más de una ventana tiene necesidad de usarlos. Si solo usas x ficheros en un formulario, entonces basta que dichos canales estén declarados privados en ese formulario, así estarán disponibe para las diferentes funciones que lo usen.
Todavía si lo usa un formulario masivamente y en una o dos más solo una función, puedes declararlo privado en ese formulario y pasarlo como parámetro a las funciones de los otros formularios que lo precisaren...

Si hubieras creado clases (que es lo que debieras haber hecho transformando el proyecto),  habrías podido organizar mejor la privacidad (encapsuación), para los ficheros. Creando una clase para  manejar los ficheros, y que cada ventana que lo precise creara una instancia de ella (la clase clsFile)... Pero como no parece que vayas a hacer nada de todo esto, olvídalo.
En línea

corlo

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Programa Facturacion
« Respuesta #6 en: 28 Junio 2024, 22:02 pm »

Hola Serapis

es que son varias cosas y hay que hacer bastante codigo, yo creo que se podria hacer en un almacen . no tengo suficiente conocimiento en programacion para hacer eso que estas diciendo ,


gracias por la ayuda
En línea

corlo

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Programa Facturacion
« Respuesta #7 en: 29 Junio 2024, 18:33 pm »

Hola Serapis
yo solo quiero un combo para buscar los articulos del almacen y poder hacer la venta
y otro combo para buscar los articulos del almacen para hacer la compra, creo que con eso no necesitaria tanto codigo, solo es para terminar el programa que funcione con eso
gracias
En línea

corlo

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Programa Facturacion
« Respuesta #8 en: 5 Julio 2024, 21:59 pm »

Hola Serapis
Si me pidieses arreglar solo el combo de frmventas yo ya podria arreglar el combo de frmcompras
muchas gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
facturacion electronica en argentina « 1 2 »
Programación General
dlopardo 10 6,611 Último mensaje 22 Septiembre 2015, 15:47 pm
por dlopardo
programa en lenguaje c de facturacion.
Programación C/C++
jorge.helu 0 3,039 Último mensaje 15 Marzo 2018, 22:46 pm
por jorge.helu
Facturación cloud
Dudas Generales
huerto123 3 2,274 Último mensaje 11 Noviembre 2018, 08:59 am
por huerto123
Facturación xzoom
Software
huerto123 1 1,751 Último mensaje 22 Junio 2020, 13:41 pm
por ErahUnderground
facturacion
Programación Visual Basic
horlo 7 3,578 Último mensaje 28 Mayo 2022, 00:51 am
por horlo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines