top of page
  • Foto del escritorSistema MRP

Emisión de Facturas para producción de forma automática con VBA y Excel


Hola emprendedores y entusiastas productivos. En este artículo vamos a realizar la emisión de facturas por correo electrónico de manera automática a un cliente que se encuentre en nuestra base de datos; vamos a generar una factura con los costos unitarios actualizados de cada producto y a almacenar los datos de la factura en otra base de datos. Esta factura se encuentra dirigida para personas que comienzan a emprender con sus actividades en producción, entusiastas o estudiantes. Bien, primero, observemos la definición de este concepto.


Factura

Según el portal web Reviso.com es aquel documento que autentifica que se ha recibido un servicio o adquirido un producto y es de cumplimiento obligatorio en las operaciones mercantiles. Debe contener como mínimo los siguientes requisitos básicos:


- Número de factura.

- Fecha de emisión.

- Datos del emisor de la factura: Nombre, cédula.

- Descripción de los bienes entregados.

- Tipo impositivo aplicado (IVA).

- Contraprestación total.


Con la teoría examinada, vamos a realizar un procedimiento para generar una factura para nuestra producción.


1. Identificación de los elementos de cálculo

Para el cálculo del ingreso de un producto elaborado debemos tener ciertos elementos imprescindibles e identificados sin ningún orden particular que se relacionan directa o indirectamente con este cálculo. Estos elementos son los siguientes:


- Costo Unitario. Cálculo que se obtiene al dividir el costo total de un periodo para las unidades elaboradas.

- Resumen de costos. Los costos de un producto van a variar respecto del tiempo, por lo tanto se requiere de una hoja siempre actualizada de los costos unitarios en orden de generar ingresos actualizados. Si se desea visualizar con más detenimiento a qué hacemos referencia con este elemento, puedes dirigirte a la última parte del post donde va este hipervínculo, allí encontrarás un video que hace mención solamente a este apartado.

- Base de datos de clientes. Es necesario tener lista una base de datos de clientes para adjuntar sus datos en nuestra factura rápidamente.

- Inventarios. Es importante tener el nivel de inventarios con que cuenta la compañía sobre un producto, para no vender lo que no se tiene.


Cada uno de estos componentes se pueden visualizar de forma detallada en diferentes artículos si se hace click sobre cualquiera de ellos.


2. Formulario para buscar los datos de clientes

El elemento que nos servirá para generar este formulario será la base de datos de clientes. Luego de ello, podremos realizar una búsqueda dentro de esta base de datos en un formulario B y pasar la información a otro formulario A. Si deseas descargar gratis este documento para la búsqueda de clientes dentro de una base de datos, puedes seguir el siguiente enlace: FORMULARIO PARA BUSCAR CLIENTES - DESCARGAR.


* El formulario A será similar al que se muestra en la siguiente figura:

Si aún no conoces cómo construir un formulario con VBA puedes seguir el enlace a continuación: Base de datos en Excel y VBA ; en el punto número 3 se muestra el proceso detallado para construir un formulario de manera rápida y sencilla.


* Mientras que el formulario B será similar al que se muestra en la siguiente figura:

Con ello se evitaría colocar a cada momento la información de un determinado cliente, y sólo se colocaría una nueva información si el cliente no se encontrara en la base de datos.


3. Formulario para emitir los datos del producto

Los elementos que nos servirán para desarrollar este formulario serán el resumen de costos y los inventarios; para tener el primer elemento, es necesario generar el costo unitario de cada producto elaborado; para el segundo, es necesario generar órdenes de producción y desarrollar el producto. Esto se explica con más detalle en el artículo de costo unitario dentro de esta web. A continuación, tendremos un formulario similar al que se muestra en la siguiente figura:


Bien, vamos a detallar algunos campos del formulario que se ha desarrollado:

* Producto: Es una lista desplegable donde se encuentran los productos elaborados, la misma puede establecerse a través de un rango dinámico, si deseas observar la ejecución detallada de este proceso, puedes ir al siguiente enlace: Rango dinámico y formularios en Excel y VBA.

* Código: Es el código que se establece para cada producto.

* Costo unitario: Es aquel costo perteneciente al artículo en cuestión y debería ser colocado de forma automática y actual; cuya búsqueda se realizaría por el producto que se ha colocado y la fecha más reciente en una hoja que podría llamarse resumen de costos.

* Margen de contribución: es el porcentaje que se espera ganar sobre el costo, entre mayor sea el margen, mayor la utilidad obtenida.

* P.V.U.: Con el margen de contribución y el costo unitario finalmente se puede obtener el precio de venta dando un click al botón que se encuentre a la derecha del casillero de margen de contribución. Para el precio de venta hay que tener en cuenta, el mercado y la estrategia de producción, sea la de menores costos, de mayor calidad o mejores costos.

* Cantidad: Es la cantidad que se va a vender de ese producto, teniendo en cuenta el inventario del producto aquel.

* Stock: Es un casillero informativo, sobre el stock existente para dicho producto. El stock se relaciona con el inventario elaborado, y se puede seguir con más detalle en el siguiente enlace: Gestor de inventarios sencillo en Excel y VBA.


4. Codificación VBA

Este formulario debe contener controladores de error para guiar al usuario y generar una correcta entrada de datos. Para ir dentro del formulario y colocar el código completo asociado al mismo basta con hacer click derecho en el formulario o UserForm y click en ver código.Bien, observemos parte del código que podría tener este formulario, específicamente para determinar el precio de venta cuando se hace click en el botón PVU del formulario visto anteriormente:

 

Private Sub CommandButton4_Click()

'calcular el precio de venta unitario

If mc.Text = "" Or costounitario.Text = "" Then

MsgBox ("Colocar valor en el margen de contribución para calcular el precio de venta."), vbCritical

Else

pvu.Text = (Format(mc.Text, "0.0000") * Format(costounitario.Text, "0.0000")) + Format(costounitario.Text, "0.0000")

End If

End sub

 

5. Botón para almacenar los ingresos en una base de datos

Con los datos ingresados en el formato de factura, es posible almacenar los datos de tal forma que puedan ser organizados por fecha, cliente y productos vendidos. Para ello, podemos insertar una figura la misma que contenga un código VBA que realice esta tarea. Bien, observemos parte del código que podría tener este botón, específicamente cuando se trate de controladores de error, para ello primero fijamos las variables del código para que se pueda comprender:


B15: Código del primer ítem de la factura.

C15: Descripción del primer ítem de la factura.

D15: Precio del primer ítem de la factura.

E15: Cantidad del primer ítem de la factura.


E4: Número de factura.

E5: Fecha de factura.

E8: Cliente asignado a la factura.

E9: Cédula.

E10: Dirección.

E11: Localidad.

E12: Correo electrónico.

Sheets("BD").Columns(45): Hoja de base de datos, columna 45. La cual corresponde a la columna de número de factura.

 

'Controlador de error 1: NO hay datos de producto

If Sheets("FACTURA").Range("B15") = "" Or Sheets("FACTURA").Range("C15") = "" Or Sheets("FACTURA").Range("D15") = "" Or Sheets("FACTURA").Range("E15") = "" Then

MsgBox ("Faltan datos del producto"), vbCritical

Exit Sub

End If


'Controlador de error 2: NO hay datos de cliente

If Sheets("FACTURA").Range("E4") = "" Or Sheets("FACTURA").Range("E5") = "" Or Sheets("FACTURA").Range("E8") = "" Or Sheets("FACTURA").Range("E9") = "" Or Sheets("FACTURA").Range("E10") = "" Or Sheets("FACTURA").Range("E11") = "" Or Sheets("FACTURA").Range("E12") = "" Then

MsgBox ("Faltan datos del cliente"), vbCritical

Exit Sub

End If


'Controlador de error 3: Evitar facturas duplicadas

Registro = Sheets("FACTURA").Range("E4").Value

contarduplicado = Application.WorksheetFunction.CountIf(Sheets("BD").Columns(45), Registro)


If contarduplicado > 0 Then

MsgBox ("Número de factura ya existe."), vbCritical

Exit Sub

End If

 

Estos pueden ser los controladores de error que tenga este botón, para de allí pasar la información del formato de la factura a una base de datos, que podría ser llamada "ingresos".


6. Extras ( impresión, PDF y factura por correo)

La factura puede estar acompañada de ciertos botones que generen acciones tales como vista previa para impresión, guardar el documento como archivo PDF, o guardar el documento en PDF y enviar la factura automáticamente por correo electrónico vía outlook. A continuación, vamos a observar el código para ejecutar una vista previa de impresión y para almacenar el documento como archivo PDF.

 

Sub Imprimirfactura()

' Vista previa de impresión de factura

ActiveWindow.SelectedSheets.PrintPreview

End Sub

 
 

Sub guardarPDF()


'Asignar variables

Dim wsA As Worksheet

Dim wbA As Workbook

Dim strName As String

Dim strPath As String

Dim strFile As String

Dim strPathFile As String

Dim myFile As Variant

On Error GoTo errHandler


Set wbA = ActiveWorkbook

Set wsA = ActiveSheet


'Nombre del libro activo

strPath = wbA.Path

If strPath = "" Then

strPath = Application.DefaultFilePath

End If

strPath = strPath & "\"


'Reemplazar espacios y periodos en la hoja

strName = Replace(wsA.Name, " ", "")

strName = Replace(strName, ".", "_")


'Nombre en Default

strFile = strName & "_" & Range("E4") & "_" & Format(Range("E5"), "dd-mm-yyyy") & ".pdf"

strPathFile = strPath & strFile


' Seleccionar la carpeta

myFile = Application.GetSaveAsFilename _

(InitialFileName:=strPathFile, _

FileFilter:="PDF Files (*.pdf), *.pdf", _

Title:="Seleccione una carpeta para guardar la factura")


'Exportar a PDF si el archivo es seleccionado

If myFile <> False Then

wsA.ExportAsFixedFormat _

Type:=xlTypePDF, _

Filename:=myFile, _

Quality:=xlQualityStandard, _

IncludeDocProperties:=True, _

IgnorePrintAreas:=False, _

OpenAfterPublish:=False

'Mensaje de confirmación

MsgBox ("El archivo PDF ha sido creado con la siguiente especificación: " _

& vbCrLf _

& myFile), vbInformation


End If

exitHandler:

Exit Sub

errHandler:

MsgBox ("Hubo un error, no se pudo crear el archivo pdf."), vbCritical

Resume exitHandler


End Sub

 

Para este último código asimismo las pocas variables son las mismas que las vistas con anterioridad en el paso #5.


Si deseas visualizar la ejecución del programa para realizar la facturación en un proceso de producción puedes observar el siguiente vídeo:


Eso sería el procedimiento para generar la facturación en un proceso de producción con VBA y Excel. Si deseas realizar tu propio sistema rápidamente a partir de nuestro código ya construido, puedes considerar adquirir nuestro sistema a un costo bastante accesible, el cual muestra todo el código empleado para los formularios en cuestión con un único pago y licencia perpetua, el mismo te permite editar todo el código sin ningún tipo de restricción, y muchos otros beneficios y funcionalidades que puedes observar en esta web en el apartado Descripción - Funciones.


Espero que este artículo te haya sido de ayuda o guía. Por mi parte, me despido, sin antes desearles un genial día. Y, no se olviden de sonreír, para recordar que la vida sonríe siempre.


Referencias bibliográficas:

Anónimo (2014). [En línea]. Extraído de la página web: https://www.reviso.com/es/que-es-una-factura

117 visualizaciones0 comentarios
bottom of page