﻿REM  *****  BASIC  *****

'Este módulo normaliza la balanza de saldos extraída del sistema
'y la deja en el formato:
'	Rubro
'	Grupo
'	Mayores
'	Analíticas

Sub OrdenarBalanza()

'Obteniendo la última línea del reporte
	Dim InputData As String
	Dim Prompt As String
	Dim nRegs As Integer
	
	Prompt = "Introduzca el número de la última fila sin incluir los totales"
	InputData = Trim(InputBox(Prompt))
	
	If IsNumeric(InputData) Then
			'Se verifica que sea mayor que cero
			If CInt(InputData) <= 0 Then
				'Se notifica al usuario
					Beep
					MsgBox "El número de la Fila debe ser mayor o igual que 1" _
							& Chr(10) & "No se hará ningún cambio al documento", MB_OK, "Dato inadecuado"
				'Se detiene el procedimiento
					Exit Sub
			'Si el dato introducido es adecuado
			Else
				'Se establece el valor del iLastRow
					nRegs = CInt(InputData)
			End If
		'Si no es numérico
		Else
			'Se notifica al usuario
				Beep
				MsgBox "El número de la fila no puede ser de tipo 'Texto'" _
						& Chr(10) & "No se realizará ningún cambio al documento" _
						& Chr(10) & "Intente nuevamente", MB_OK, "Dato inadecuado"
			'Se detiene el procedimiento
				Exit Sub
		End If

'Acceso al libro de trabajo
	Dim iBk As Object
	iBk = ThisComponent()
	
	'Acceso a la hoja de trabajo
	Dim wkSheet As Object
	wkSheet = iBk.getSheets.GetByName("Sheet1")
	
	'Eliminando la columna A
	Dim xRange As Object
	xRange = wkSheet.getCellRangeByName("A1")
	xRange.getColumns.removeByIndex(0, 1)
	
	'Eliminando las filas 1 a 6
	xRange = wkSheet.getCellRangeByName("A1:A6")
	xRange.getRows.removeByIndex(0, 6)
	
	'Accediendo a la matriz de datos
	Dim Db As Object
	Db = wkSheet.getCellRangeByName("A1:F" & nRegs - 6)
	
	'Cargando datos de la matriz a memoria temporal
	Dim TmpDb As Object
	Dim TmpRegs As Integer
	TmpDb = Db.getDataArray()
	
	'Definiendo matriz temporal para salida de datos
	Dim Rst()
	Dim NextItem As Integer
	Dim Cntr As Integer
	Dim CodeLen As Integer
	
	'Examinando cada línea de registro para depurar el reporte
	TmpRegs = UBound(TmpDb)
	Dim iRow()
	
	For Cntr = 0 To TmpRegs
		iRow = TmpDb(Cntr)
		'Examinando la longitud del código
		CodeLen = len(iRow(0))
		'Definiendo inclusión o exclusión de registros según longitud del código
		Select Case CodeLen
			'Cuenta de Rubro, Clase, Mayor, Analítica
			Case 1, 2, 3, 11,12
				'Se incluyen en el registro
				'Definiendo espacio para el siguiente registro en matriz de salida
				NextItem = UBound(Rst) + 1
				Redim Preserve Rst(NextItem)
				Rst(NextItem) = iRow()	
		End Select
	Next

'Limpiando área de pegado de datos
	wkSheet.getCellRangeByName("A1:A" & nRegs - 6).getRows.removeByIndex(0, nRegs - 6)
	
'Area de impresión de datos depurados
	Dim PrintArea As Object
	PrintArea = wkSheet.getCellRangeByName("A1:F" & NextItem + 1)
	
'Se imprime el resultado
	PrintArea.setDataArray(Rst)

'Notificación del trabajo
	MsgBox "El reporte ha sido depurado", MB_OK, "Balanza Normalizada"

End Sub
