Sistema de Gestión de Negocios "Hexa"

Base de datos de conocimiento.

Doc. Ref. 11163
Título: Balance de sumas y saldos en Excel
Autor: Hexa
Última actualización: 01/05/2016


documentos\Cliente-3223-HEXA-Ejemplo básico de listado en Excel-Doc.11163.htm

Balance de sumas y saldos en Excel

Generar desde Hexa listados en Excel mediante un script es muy sencillo

El siguiente script genera un balance de sumas y saldos en Excel. Se puede configurar como acción en un formulario de criterios eliminando las dos primeras líneas que definen los parámetros de criterio y orden (PS0 y PS1) o bien directamente en una opción de menú con los criterios especificados manualmente.

En el ejemplo el criterio especificado y el orden hacen que el listado salga sólo para subcuentas y ordenado por número.

También se puede de forma sencilla a partir de este ejemplo crear nuevas columnas, totales, etc.

Sub Main (PS0, PS1, PS2)
    PS0 = "Subcuenta = 1 And (Debe <> 0 Or Haber <> 0)"
    PS1 = "Numero"
    'Crear la hoja excel
    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
    Hoja.Cells (1, 1).Value="Cuenta"
    Hoja.Cells (1, 2).Value="Descripcion"
    Hoja.Cells (1, 3).Value="Debe" 
    Hoja.Cells (1, 4).Value="Haber" 
    Hoja.Cells (1, 5).Value="Saldo D" 
    Hoja.Cells (1, 6).Value="Saldo A" 
    Set Cuenta = CreateObject("ADODB.RecordSet") : Cuenta.CursorLocation = 3 'AdUseClient
    Cuenta.Open "SELECT Numero, Descripcion, Debe, Haber FROM Cuenta " & FH.SQLWO ("" & PS0, "" & PS1), Cn : Set Cuenta.ActiveConnection = Nothing
    F = 2
    Do While Not Cuenta.EOF
        Hoja.Cells (F, 1).Value = "'" & Cuenta.Fields ("Numero")
        Hoja.Cells (F, 2).Value = "'" & Cuenta.Fields ("Descripcion")
        Hoja.Cells (F, 3).Value = Cuenta.Fields ("Debe") 
        Hoja.Cells (F, 4).Value = Cuenta.Fields ("Haber")
        Saldo = FH.Aproximacion (Cuenta.Fields ("Debe") - Cuenta.Fields ("Haber"), 2)
        If Saldo > 0 Then Hoja.Cells (F, 5).Value = Saldo
        If Saldo < 0 Then Hoja.Cells (F, 6).Value = -Saldo
        Cuenta.MoveNext : F = F + 1
    Loop
    Hoja.Range("C:F").HorizontalAlignment = 1
    Hoja.Columns("A:F").EntireColumn.AutoFit
End Sub

El script anterior muestra los saldos "Actuales" de cada cuenta tal como están registrados en los campos "Debe" y "Haber". En el caso en que se quiera saber el saldo de un periodo de tiempo, habrá que calcularlo a partir de los apuntes tal como se hace en el siguiente script:

Sub Main (PS0, PS1, PS2)
    PS0 = "Fecha >='1/3/2016' And Fecha <= '31/3/2016'"
    PS1 = "Cuenta"
    'Crear la hoja excel
    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
    Hoja.Cells (1, 1).Value="Cuenta"
    Hoja.Cells (1, 2).Value="Descripcion"
    Hoja.Cells (1, 3).Value="Debe" 
    Hoja.Cells (1, 4).Value="Haber" 
    Hoja.Cells (1, 5).Value="Saldo D" 
    Hoja.Cells (1, 6).Value="Saldo A" 
    Set Apunte  = CreateObject("ADODB.RecordSet") : Apunte.CursorLocation = 3 'AdUseClient
    T = "SELECT Cuenta, Sum (Debe) As DebeTotal, Sum(Haber) As HaberTotal FROM Apunte"
    If "" & PS0 <> "" Then T = T & " WHERE " & PS0
    T = T & " GROUP BY Cuenta"
    If "" & PS1 <> "" Then T = T & " ORDER BY " & PS1
    Apunte.Open T, Cn : Set Apunte.ActiveConnection = Nothing
    F = 2
    Do While Not Apunte.EOF
        Hoja.Cells (F, 1).Value = "'" & Apunte.Fields ("Cuenta")
        Hoja.Cells (F, 2).Value =  "'" & BaseDeDatos.Cmp ("Cuenta", "Descripcion", "Numero=" & FH.sqlt(Apunte.Fields ("Cuenta")), False)
        Hoja.Cells (F, 3).Value = Apunte.Fields ("DebeTotal") 
        Hoja.Cells (F, 4).Value = Apunte.Fields ("HaberTotal")
        Saldo = FH.Aproximacion (Apunte.Fields ("DebeTotal") - Apunte.Fields ("HaberTotal"), 2)
        If Saldo > 0 Then Hoja.Cells (F, 5).Value = Saldo
        If Saldo < 0 Then Hoja.Cells (F, 6).Value = -Saldo
        Apunte.MoveNext : F = F + 1
    Loop
    Hoja.Range("C:F").HorizontalAlignment = 1
    Hoja.Columns("A:F").EntireColumn.AutoFit
    Apunte.Close : Set Apyunte=Nothing
End Sub

Volver a la búsqueda anterior