📘 Manual de Usuario — Uxmalia Pascal para Reportes
Desarrollado por Paudi — Programador informático y entusiasta de la tecnología. Instrumentista en el gobierno y apasionado por el desarrollo de software. ✨
🎯 ¿Qué es Uxmalia Pascal para Reportes?
Es un entorno de programación integrado en Uxmalia Tienda 25 que permite crear, personalizar e imprimir reportes contables, financieros, de inventario y ventas usando un lenguaje similar a Pascal estándar, con funciones propias para manejo de bases de datos Access, fechas, impresión y gráficos.
🧩 Estructura Básica de un Reporte
Todo reporte debe seguir esta estructura mínima:
Nombre del Reporte
Descripción breve
(C) Año - Empresa. URL
*******************************************************************************}
Pantalla; // Define que se mostrará en pantalla
Detalle(4, 27); // Área imprimible: margen izquierdo 4mm, alto 27cm
// === VARIABLES ===
VAR variable1, variable2: TIPO;
// === CONSTANTES ===
const _Desc = 'Título del Reporte';
// === FUNCIONES AUXILIARES ===
function NombreFuncion(param: TIPO): TIPO;
begin
// Código
Result := valor;
end;
// === PROCEDIMIENTOS ===
PROCEDURE NombreProcedimiento;
begin
// Código
end;
// --- INICIO DEL PROGRAMA ---
NuevoReporte(_Desc); // Inicia el reporte
// Tu lógica aquí: cálculos, SQL, impresión
Imprime; // ¡No olvides esta línea!
Imprime; es obligatoria. Sin ella, el reporte no se generará.
🧰 Funciones Básicas (Impresión y Formato)
ImpTexto(texto: STRING; x, y: FLOAT)
Imprime texto en coordenadas (x, y) en centímetros.
ImpTextoArt(texto: STRING; x, y: FLOAT; fuente: STRING; tamaño: INTEGER; negrita: BOOLEAN)
Imprime texto con formato (fuente, tamaño, negrita).
ImpTextoColor(texto: STRING; x, y: FLOAT; color: INTEGER)
⚠️ En tu sistema, esta función puede no estar disponible. Se recomienda redefinirla así:
begin
ImpTexto(t, x, y); // Ignora el color por compatibilidad
end;
ImpLinea(x1, y1, x2, y2, grosor: FLOAT)
Dibuja una línea entre dos puntos.
ImpCuadro(x, y, ancho, alto, grosor: FLOAT)
Dibuja un rectángulo (solo borde).
ImpCuadroColor(x, y, ancho, alto, grosor, color: FLOAT)
Dibuja un rectángulo con color de relleno.
ImpImagenDesde(archivo: STRING; x, y, ancho: FLOAT)
Inserta una imagen (JPG, BMP, etc.).
📊 Funciones de Fecha y Hora
Year, Month, Day: INTEGER
Devuelven el año, mes y día actuales del sistema.
MES := Month; // 6
DIA := Day; // 24
ATFechaHoy: STRING
Devuelve la fecha actual en formato legible.
FechaSQL(anio, mes, dia: INTEGER): STRING
Formatea fecha para SQL: #MM/DD/YYYY#
DiasEnMes(mes, anio: INTEGER): INTEGER
Calcula días del mes (incluye años bisiestos).
mess(mes: INTEGER): STRING
Devuelve nombre del mes en español.
📚 Funciones de Base de Datos (SQL)
SQL: STRING
Asigna una consulta SQL para ejecutar.
RegComoFlotante(campo: STRING): FLOAT
Devuelve el valor del campo como número decimal.
VENTAS := RegComoFlotante('TOTAL');
RegPrimero, RegSiguiente, RegEsUltimo
Para recorrer registros uno por uno (útil cuando hay múltiples filas).
while not RegEsUltimo do
begin
TOTAL := TOTAL + RegComoFlotante('CAMPO');
RegSiguiente;
end;
🧮 Funciones Matemáticas y de Texto
IntToStr(n: INTEGER): STRING
Convierte número entero a texto.
ATFloatToStr(f: FLOAT): STRING
Convierte número decimal a texto.
ATDinero(texto: STRING; decimales: INTEGER): STRING
Formatea como moneda (con símbolo $, comas y decimales).
UxLeft(s: STRING; n: INTEGER): STRING
Extrae los primeros n caracteres de una cadena.
UxRight(s: STRING; n: INTEGER): STRING
Extrae los últimos n caracteres de una cadena.
Length(s: STRING): INTEGER
Devuelve la longitud (número de caracteres) de una cadena.
Copy(s: STRING; inicio, cantidad: INTEGER): STRING
Extrae una subcadena desde la posición inicio con cantidad de caracteres.
📈 Funciones Avanzadas (Gráficas y Cálculos)
BarraHorizontal(x, y, valor, max_valor, ancho_max, alto: FLOAT)
Dibuja una barra horizontal proporcional al valor máximo. Ideal para gráficas comparativas.
Ejemplo de uso en gráfica:
procedure BarraHorizontal(x, y, valor, max_valor, ancho_max, alto: FLOAT; color: INTEGER);
var ancho_barra: FLOAT;
begin
if max_valor > 0 then
ancho_barra := (valor / max_valor) * ancho_max
else
ancho_barra := 0;
ImpCuadroColor(x, y, ancho_barra, alto, 1, color);
end;
🖨️ Control de Impresión
NuevoReporte(titulo: STRING)
Inicia un nuevo reporte. ¡Obligatorio!
Margen(cm: FLOAT)
Establece el margen izquierdo en centímetros.
Imprime
¡OBLIGATORIO! Finaliza e imprime el reporte. Sin esta línea, no se genera nada.
NuevaPagina
Salta a una nueva página en el reporte.
Arriba
Posiciona el cursor en la parte superior de la página actual.
🧪 Ejemplo Completo: Reporte de Ventas Diarias
Reporte: Ventas del Día
(C) 2025 Paudi Systems. https://paudi.work
*******************************************************************************}
Pantalla;
Detalle(4, 27);
VAR VENTAS: FLOAT;
VAR ANIO, MES, DIA: INTEGER;
function FechaSQL(anio, mes, dia: INTEGER): STRING;
begin
Result := '#' + UxRight('0' + IntToStr(mes), 2) + '/' +
UxRight('0' + IntToStr(dia), 2) + '/' +
IntToStr(anio) + '#';
end;
NuevoReporte('Ventas del Día');
ANIO := Year; MES := Month; DIA := Day;
SQL := 'SELECT SUM(TRA_TOTAL) AS TOTAL FROM TRANSACCIONES ' +
'WHERE TRA_FECHA = ' + FechaSQL(ANIO, MES, DIA) +
' AND TRA_TT LIKE "*Venta*"';
VENTAS := RegComoFlotante('TOTAL');
Margen(1);
ImpTextoArt('VENTAS DEL DÍA', 1.0, 2.0, 'Arial', 14, si);
ImpTexto('Fecha: ' + UxRight('0' + IntToStr(DIA), 2) + '/' +
UxRight('0' + IntToStr(MES), 2) + '/' + IntToStr(ANIO), 1.0, 3.0);
ImpTexto('Total: ' + ATDinero(ATFloatToStr(VENTAS), 2), 1.0, 4.0);
ImpLinea(0.8, 4.5, 19.0, 4.5, 0.2);
Imprime;
💡 Consejos y Buenas Prácticas
- Siempre termina con
Imprime;→ Si no, no se genera el reporte. - Prueba primero con
Pantalla;→ Para ver resultados sin imprimir. - Usa
ATDineroyATFloatToStr→ Para evitar errores de formato. - Valida si los totales son 0 →
if Result = 0 then Result := 0; - Comenta tu código → Facilita mantenimiento futuro.
- Usa
NuevaPaginayArriba→ Para reportes largos o con gráficas separadas. - Prueba en diferentes periodos → Diario, semanal, mensual, para asegurar que las fechas se calculan correctamente.
UxLeft, UxRight, FechaSQL) en un archivo base y cópialas en cada nuevo reporte. ¡Te ahorrarás mucho tiempo!
❓ ¿Dónde puedo aprender más?
- Revisa los reportes ya creados en tu sistema (son tu mejor guía).
- Experimenta modificando valores de posición (x, y) para ajustar diseño.
- Siempre prueba en modo
Pantallaantes de imprimir. - Visita https://paudi.work para más recursos y soporte.