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.

Volver a la búsqueda anterior