Sistema de Facturación creado en Excel carga factura de manera correcta pero presenta un problema en el Inventario

Estoy nuevamente por acá solicitando ayuda con mi sistema de facturación. He detectado que a veces la existencia en el inventario no cuadra con la cantidad que hay en físico. Revisando y haciendo pruebas noté que cuando facturo 2 veces el mismo producto en la misma factura (esto pasa porque hay personas que compran en línea a un precio y luego en tienda tenemos otro costo) al momento de que el sistema automáticamente le da salida a la cantidad de productos vendidos solo me toma el primero colocado, no le da salida a la segunda cantidad del mismo producto y por ello tenemos problemas a la hora de cuadrar inventario con el sistema. Espero me puedan ayudar y que hayan entendido mi explicación. Solo deseo que la macro le de salida a las 2 cantidades del mismo producto y no solo al primero colocado en factura. Quiero acotar que cuando son diferentes productos en una misma factura funciona perfectamente. De antemano, muchas gracias. Adjunto la macro que utilizo para el proceso:

Sub inventario1()

Sheets("INVENTARIO").Select
ActiveSheet.Unprotect ("1234")

Dim cont As Long
Dim ultLinea As Long
Dim cantidad As Variant
Dim codigo As Variant
Dim Rango As Variant
ultLinea = Sheets("INVENTARIO").Range("A" & Rows.Count).End(xlUp).Row
Set Rango = Sheets("FACTURACION").Range("B19:N49")
For cont = 10 To ultLinea
codigo = Sheets("INVENTARIO").Cells(cont, 1)
cantidad = Application.VLookup(codigo, Rango, 10, False)
If IsError(cantidad) Then
cantidad = 0
End If
Sheets("INVENTARIO").Cells(cont, 26) = Sheets("INVENTARIO").Cells(cont, 6) + cantidad
Sheets("INVENTARIO").Cells(cont, 6) = Sheets("INVENTARIO").Cells(cont, 26)
Sheets("INVENTARIO").Cells(cont, 7) = Sheets("INVENTARIO").Cells(cont, 5) - Sheets("INVENTARIO").Cells(cont, 6)
Next cont
Sheets("INVENTARIO").Select
ActiveSheet.Protect ("1234")
End Sub

1 respuesta

Respuesta
1

Puedes poner un par de imágenes explicando el caso cuando tienes:

" Al momento de que el sistema automáticamente le da salida a la cantidad de productos vendidos solo me toma el primero colocado, no le da salida a la segunda cantidad del mismo producto "

Es decir, en una imagen pones la hoja facturación y en otra imagen me pones la hoja inventario.

Me explicas cuáles son los 2 productos con el mismo código y cuál de ellos no está siendo actualizado.

Gracias por responder. Disculpe la demora de mi parte es que no tuve internet durante el fin de semana. Este es un ejemplo de mi inventario antes de realizar la factura, si observa en los 2 primeros productos tengo una existencia de 9009 y 7 respectivamente:

Esta es mi factura. Claro es un formato que se adapta a nuestras facturas de imprenta. Realmente se están vendiendo 2 productos únicamente pero se muestran cuatro porque tienen diferentes precios, es decir se vendieron 5 a un precio y 10 a otro de un mismo producto e igualmente sucede con el otro producto:

Ahora este es mi inventario final:

Como se ve solo le dio salida a la cantidad que están de primero en cada producto o sea, al primero y al tercero de los cuatro artículos en la factura. Los segundos (segundo y cuarto) no los toma y no entiendo por qué. Esto sucede con cualquier producto no con alguno en específico. Espero me pueda ayudar. Muchas Gracias.

El problema de tu código es que tomas el código LBLB7W de tu hoja "inventario" y lo buscas en la hoja "facturación", lo encuentra y realiza la operación; y pasa al siguiente código, solamente lo buscaste una vez.

Una opción es realizar la búsqueda de otra forma. La opción es tomar los códigos de la hoja "facturación" y buscarlos en la hoja "inventario".


Falta incluir otras validaciones en el código, por ejemplo, si un código en "facturación" no existe en "inventario". Otra validación es, si no cuenta con la suficiente existencia para realizar la salida.

Qué se debe hacer en esos casos, se deben registrar las salidas que se puedan o detener toda la factura hasta que se corrijan todos los errores.

Te dejo que lo pienses, mientras te anexo el código para actualizar el inventario.

Sub inventario1()
'
    Set h1 = Sheets("FACTURACION")
    Set h2 = Sheets("INVENTARIO")
    h2.Unprotect ("1234")
    '
    'Recorre los códigos de la factura desde la fila 19 hasta la 49
    For i = 19 To 49
        codigo = h1.Cells(i, "B").Value
        cantidad = h1.Cells(i, "k").Value
        'si la fila está vacía entonces termina
        If codigo = "" Then
            Exit For
        End If
        '
        Set b = h2.Columns("A").Find(codigo, lookat:=xlWhole)
        If Not b Is Nothing Then
            h2.Cells(b.Row, 6) = h2.Cells(b.Row, 6) + cantidad
            h2.Cells(b.Row, 7) = h2.Cells(b.Row, 5) - h2.Cells(b.Row, 6)
        Else
            cad = cad & codigo & ", "
        End If
    Next
    If cad = "" Then
        MsgBox "Se actualizó el inventario"
    Else
        MsgBox "Se actualizó el inventario, pero estos códigos no se encontraron: " & cad
    End If
    h2.Protect ("1234")
End Sub


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola nuevamente. Usé el código que me enviaste pero no me funciona. Si lo coloco de esa manera no le da salida a nada en el inventario. Estuve analizando y tratando de darle la vuelta pero no logro dar con el problema. No sé si influye que cuando facturo yo no coloco el código directamente, yo en la columna "B" de "FACTURACION" agregué una lista de validación de datos en cada celda para así buscar el producto que requiera. Al final coloqué ComboBox para escoger si ese producto va con precio de tienda o mercado libre. Sinceramente no creo que eso tenga algo que ver pero es que ya no se me ocurre nada. Tu código me parece perfecto pero no me funciona. No arroja error ni nada, él trabaja bien pero no da salida al inventario. Te adjunto una imagen de mi hoja "FACTURACIÓN" (al final hay un botón al que le doy imprimir y hace todo):

Según tu macro, los códigos empiezan en la celda B19, es decir, en la fila 19

Set Rango = Sheets("FACTURACION").Range("B19:N49")

En tu pantalla, el primer código lo tienes en la B20, debes poner el primer código en la celda B19.

Prueba nuevamente.

¡Gracias! Un millón de gracias, sabía que no funcionaba seguro por una tontería. Ahora si funciona a la perfección. 

En esta línea de la macro decides de dónde a dónde se van a leer los códigos de la factura

For i = 19 To 49

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas