Sistema de Gestión de Negocios "Hexa"
Base de datos de conocimiento.
| Doc. Ref. 29084 Título: Evolución de Existencias en hoja Excel Autor: Soltec Última actualización: 26/05/2025#excel #articulo #existencias #objeto #com #script |
Evolución de Existencias en hoja Excel
En este documento se presenta un ejemplo práctico orientado a mostrar, de forma clara y estructurada, la evolución de las existencias de uno o varios artículos mediante su representación en una hoja de cálculo de Microsoft Excel. A lo largo del mismo se describe el proceso completo, desde la obtención de los datos hasta su organización y visualización en formato tabular, permitiendo analizar de manera sencilla los cambios en el stock a lo largo del tiempo.
Adicionalmente, este ejemplo sirve como base para ilustrar el uso de técnicas de automatización en entornos de desarrollo, concretamente la generación dinámica de hojas Excel a partir de scripts en Hexa 9. Para ello, se emplea la automatización COM (OLE Automation), que permite interactuar programáticamente con Excel, crear documentos, introducir datos y aplicar formato sin intervención manual.
El objetivo es doble: por un lado, proporcionar una herramienta útil para el seguimiento y análisis de existencias; y por otro, ofrecer una referencia práctica sobre cómo integrar la generación de documentos Excel dentro de procesos automatizados, facilitando así la creación de informes personalizados y adaptados a las necesidades del sistema.
Sub Main (Criterio, Orden, Opciones)
If Not Interact.Aceptado Then 'Interact.NuevoValor Nombre, Texto, Tipo, Clave, Defecto, Tabla, Campo
FechaDesdeDefecto = fpc.DesplazaPeriodicidad (Now,"Diaria",-365)
FechaHastaDefecto = Now
Interact.Reinicia "Datos", "Rengo de fechas y artículos" : Interact.Cancelable = True
Interact.NuevoValor "ArticuloDesde", "Desde Artículo", "Texto", 0, "","Articulo","Codigo"
Interact.NuevoValor "ArticuloHasta", "Hasta", "Texto", 0, "","Articulo","Codigo"
Interact.NuevoValor "FechaDesde", "Desde Fecha", "Fecha", 0, FechaDesdeDefecto,"",""
Interact.NuevoValor "FechaHasta", "Hasta", "Fecha", 0, FechaHastaDefecto,"",""
Else
FechaInicio = Interact.Valor("FechaDesde")
Campos = "Codigo, Fecha, Articulo, Denominacion, FacturaPrefijo, AlbaranProveedorPrefijo, AlbaranInternoPrefijo, Cantidad, Base, Tipo, Precio, Cantidad"
Condicion = "Articulo>=" & fpc.SQLT (Interact.Valor("ArticuloDesde")) & " AND Articulo<=" & fpc.SQLT (Interact.Valor("ArticuloHasta")) & " AND Fecha>= " & fpc.SQLF(Interact.Valor("FechaDesde")) & " AND Fecha<="& fpc.SQLF(Interact.Valor("FechaHasta"))
BD.Rs.Consulta = "SELECT " & Campos & " FROM Movimiento WHERE " & Condicion & " ORDER BY Articulo,Fecha, Codigo"
BD.Rs.Abrir (false)
Set Hoja = CreateObject ("Excel.Application")
Hoja.Visible = -1 : Hoja.Workbooks.Add : Hoja.Workbooks(1).Sheets.Add 'Mostrar excel y crear una hoja
Hoja.Workbooks(1).Sheets(1).Activate
F = 1
Do While Not BD.Rs.Fin
if LCase (ArticuloActual) <> LCase(BD.Rs.Campo ("Articulo")) THEN
ArticuloActual= BD.Rs.Campo ("Articulo")
F = F + 1
Hoja.Cells (f, 1).Value="'" & BD.Rs.Campo ("Articulo"): Hoja.Cells (f, 1).Font.Bold = True: Hoja.Cells (f, 1).Font.Size = 14
Hoja.Cells (f, 2).Value= BD.Rs.Campo ("Denominacion"): Hoja.Cells (f, 2).Font.Bold = True: Hoja.Cells (f, 2).Font.Size = 14
Hoja.Cells (f, 3).Value= "Cantidad:": Hoja.Cells (f, 2).Font.Bold = True: Hoja.Cells (f, 2).Font.Size = 14
Hoja.Cells (f, 4).Value= BD.Cmp ("Articulo", "Cantidad", "Codigo=" & fpc.SQLT(BD.Rs.Campo ("Articulo")), false): Hoja.Cells (f, 2).Font.Bold = True: Hoja.Cells (f, 2).Font.Size = 14
F = F + 2
Hoja.Cells (f, 1).Value= "Fecha": Hoja.Cells (f, 1).Font.Bold = True
Hoja.Cells (f, 2).Value="Stock Inicial": Hoja.Cells (f, 2).Font.Bold = True
Hoja.Cells (f, 3).Value="Entradas": Hoja.Cells (f, 3).Font.Bold = True
Hoja.Cells (f, 4).Value="Salidas": Hoja.Cells (f, 4).Font.Bold = True
Hoja.Cells (f, 5).Value="Alb.Int.": Hoja.Cells (f, 5).Font.Bold = True
Hoja.Cells (f, 6).Value="Stock Final" : Hoja.Cells (f, 6).Font.Bold = True
stock = fpc.VAC (BD.Cmp ("Articulo", "CantidadInicial", "Codigo=" & fpc.SQLT(BD.Rs.Campo ("Articulo")), False)) - fpc.VAC (BD.Cmp ("Movimiento", "Sum (Cantidad)", "Articulo=" & fpc.SQLT(BD.Rs.Campo ("Articulo")) & " And Tipo='Salida' And Fecha< " & fpc.SQLF(FechaInicio), False)) + fpc.VAC (BD.Cmp ("Movimiento", "Sum (Cantidad)", "Articulo=" & fpc.SQLT(BD.Rs.Campo ("Articulo")) & " And Tipo='Entrada' And Fecha < " & fpc.SQLF(FechaInicio), False))
F = F + 1
end if
Hoja.Cells (F, 1).Value = "'" & BD.Rs.Campo ("Fecha")
Hoja.Cells (F, 2).Value = stock
If "" & BD.Rs.Campo ("AlbaranProveedorPrefijo") <> "" Then Hoja.Cells (F, 3).Value = BD.Rs.Campo ("Cantidad")
If "" & BD.Rs.Campo ("FacturaPrefijo") <> "" Then Hoja.Cells (F, 4).Value = BD.Rs.Campo ("Cantidad")
If "" & BD.Rs.Campo ("AlbaranInternoPrefijo") <> "" Then Hoja.Cells (F, 5).Value = BD.Rs.Campo ("Cantidad")
If BD.Rs.Campo ("Tipo") = "Entrada" Then stock = stock + fpc.vac(BD.Rs.Campo ("Cantidad")) Else stock = stock - fpc.vac(BD.Rs.Campo ("Cantidad"))
Hoja.Cells (F, 6).Value = stock
BD.Rs.Siguiente : F = F + 1
Loop
Hoja.Range("F:F").HorizontalAlignment = 1
Hoja.Columns("A:Z").EntireColumn.AutoFit
BD.Rs.Cerrar
Resultado="Generado"
Interact.Reinicia "MensajeFinal", Resultado
End If
End Sub
Comentarios sobre ek script.
- Se ejecuta en la técnica de dos fases con solicitud de datos en una interacción y ejecución del proceso con los datos introducidos por el usuario.
- Solicita un rango de fechas y de artículos.
- Genera una hoja Excel.
- Introduce todos los movimientos de los artículos seleccionados en el rango de fechas especificado.
- Genera una columna con la evolución del stock en función de la cantidad inicial y el saldo de cada entrada o salida.
- Cada vez que se cambia de artículo, se genera una nueva cabecera con el stock inicial.
- Al terminar se formatea las columnas con los anchos y alineaciones adecuadas.
- La excel queda abierta para que el usuario pueda examinarla y guardarla si lo considera necesario.
