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