DavixDavix ERPX
Modulos

Reportes de documentos de ventas

Consulta detallada de documentos de ventas y pedidos por vendedor, cliente, punto de venta y distrito con tarjeta de resumen, filtros avanzados y exportación a Excel

Desde Reportes Ventas puedes consultar un informe detallado de los documentos de venta y pedidos registrados en el Data Warehouse (DWH). El reporte muestra cada transacción individual con su vendedor, fecha, cliente, punto de venta, ubicación geográfica, montos y cantidades tanto de pedidos como de ventas. Incluye una tarjeta de resumen con totales consolidados, filtros por vendedor, cliente y distrito, además de exportación a Excel.

Esta vista se encuentra en la ruta Inicio > Sistema de Inteligencia Comercial > Reportes Ventas dentro del sistema. Requieres un perfil con permisos de acceso al módulo de analíticas para operar.


Vista principal — Reporte de documentos de ventas

Al ingresar al módulo, el sistema carga automáticamente los datos del mes actual (desde el día 1 del mes hasta la fecha y hora actual). La vista se compone de cuatro áreas: barra de herramientas, panel de filtros, tarjeta de resumen y tabla de datos.

Título de la página

En la parte superior izquierda se muestra el encabezado:

REPORTES VENTAS

Este es un título <h1> sin breadcrumb de navegación.


Barra de herramientas

En la parte superior derecha se encuentran dos botones de acción:

BotónIconoEstiloDescripción
Exportarpi pi-file-excelp-button-outlinedAbre un diálogo para exportar los datos filtrados a un archivo Excel (.xlsx)
Actualizarpi pi-refreshp-button-outlinedRecarga todos los datos del reporte ejecutando nuevamente la consulta al DWH

El botón Actualizar reinicia completamente el estado del reporte: limpia todas las listas de filtros, los totales del resumen, los datos de la tabla y ejecuta una nueva consulta al DWH con las fechas actuales.


Panel de filtros

Debajo de la barra de herramientas se encuentra un panel con 5 filtros organizados en una grilla responsiva de 4 columnas en escritorio (lg:col-3), 3 columnas en tablet (md:col-4) y columna completa en móvil.

Filtro de fechas

CampoComponenteFormatoValor por defectoDescripción
Fecha de iniciop-calendardd/mm/yyPrimer día del mes actual (YYYY-MM-01 00:00:00)Fecha desde la cual se consultan los documentos de venta
Fecha de finp-calendardd/mm/yyFecha y hora actual (YYYY-MM-DD HH:mm:ss)Fecha hasta la cual se consultan los documentos de venta

Ambos calendarios tienen las siguientes propiedades:

PropiedadValor
Mostrar íconoSí ([showIcon]="true")
Mostrar horaNo ([showTime]="false")
Mostrar segundosNo ([showSeconds]="false")
Formato de hora12 horas ([hourFormat]="'12'")
Posición del popupAnexado al body (appendTo="body")

Validación de rango máximo de 3 meses

Este reporte tiene un límite de rango de 3 meses. Si seleccionas un rango de fechas que supere los 3 meses, el sistema muestra una notificación de error: "Ingrese un rango de fecha menor a 3 meses por favor." (duración: 5 segundos, severidad: error). Luego, ajusta automáticamente la fecha de inicio a 3 meses antes de la fecha de fin y no ejecuta la consulta.

El sistema valida la diferencia en meses entre la fecha de inicio y la fecha de fin. Si |diferencia| > 3 meses:

  1. Muestra la notificación de error.
  2. Restablece la fecha de inicio a fecha_fin - 3 meses (formato YYYY-MM-DD 00:00:00).
  3. Mantiene la fecha de fin sin cambios.
  4. Desactiva el indicador de carga y no ejecuta la consulta.

Validaciones adicionales al cambiar fechas

Al modificar cualquiera de las dos fechas, se ejecutan las siguientes validaciones antes de la validación de rango:

Validar fecha de inicio no sea futura

Si la Fecha de inicio es posterior a la fecha actual, se restablece automáticamente a la fecha de hoy (YYYY-MM-DD 00:00:00).

Validar que fecha fin no sea anterior a fecha inicio

Si la Fecha de fin es anterior a la Fecha de inicio, se restablece automáticamente a la fecha y hora actual (YYYY-MM-DD HH:mm:ss).

Validar rango máximo

Se valida que el rango no supere 3 meses. Si lo supera, se muestra el error y se ajusta la fecha de inicio.

Recargar datos

Si todas las validaciones pasan, el sistema ejecuta la consulta al DWH con el nuevo rango.

Filtro de vendedores

PropiedadValor
Componentep-multiSelect
EtiquetaVendedores
Modo de visualizaciónChips (display="chip")
Campo de opcióntext (formato: \{apellido_paterno\} \{apellido_materno\} \{nombres\})
BúsquedaHabilitada, filtra por text
Botón limpiarSí ([showClear]="true")
PlaceholderSELECCIONE
Mensaje vacío"No se encontraron registros."
Mensaje filtro vacío"No se han encontrado resultados"
Evento al limpiaronClear: Limpia la selección y recalcula los filtros

Filtro de clientes

PropiedadValor
Componentep-multiSelect
EtiquetaClientes
Modo de visualizaciónChips (display="chip")
Campo de opcióntext
BúsquedaHabilitada, filtra por text
Botón limpiarSí ([showClear]="true")
PlaceholderSELECCIONE
Mensaje vacío"No se encontraron registros."
Mensaje filtro vacío"No se han encontrado resultados"
Evento al limpiaronClear: Limpia la selección y recalcula los filtros

El nombre del cliente se determina así: si el cliente tiene razon_social (y no es cadena vacía), se usa la razón social. Si no, se construye como \{apellido_paterno\} \{apellido_materno\} \{nombres\}.

Filtro de distritos

PropiedadValor
Componentep-multiSelect
EtiquetaDistritos
Modo de visualizaciónChips (display="chip")
Campo de opcióntext
BúsquedaHabilitada, filtra por text
Botón limpiarSí ([showClear]="true")
PlaceholderSELECCIONE
Mensaje vacío"No se encontraron registros."
Mensaje filtro vacío"No se han encontrado resultados"
Evento al limpiaronClear: Limpia la selección y recalcula los filtros

Los distritos se obtienen del campo ubigeo_codigo de cada punto de venta, traducido al nombre del distrito usando la tabla de ubigeos en caché local (erpx-global-ubigeos). La lista se ordena alfabéticamente y elimina duplicados.


Lógica de filtrado

Los filtros se aplican del lado del cliente sobre los datos ya cargados (data_complete). Cada filtro reduce progresivamente el conjunto de datos:

Filtrar por vendedores

Si hay vendedores seleccionados, solo se muestran los registros cuyo vendedor_id coincida. Si no se selecciona ninguno, pasan todos.

Filtrar por clientes

Si hay clientes seleccionados, solo se muestran los registros cuyo cliente_id coincida. Si no se selecciona ninguno, pasan todos.

Filtrar por distritos

Si hay distritos seleccionados, solo se muestran los registros cuyo cliente_punto_venta.ubigeo_nombre coincida con alguno de los distritos elegidos.

Ordenar resultados

Los datos filtrados se ordenan usando lodash sortBy por tres campos en orden de prioridad:

  1. vendedor_text (nombre del vendedor, ascendente)
  2. fecha (fecha de la transacción, ascendente)
  3. cliente_text (nombre del cliente, ascendente)

Recalcular totales del resumen

Se recalculan todos los contadores y totales de la tarjeta de resumen con los datos filtrados.

A diferencia de otros reportes, este módulo cuenta con un botón dedicado de limpiar (onClear) en cada multiselect. Al usar este botón, la selección se vacía explícitamente y los filtros se recalculan inmediatamente.


Tarjeta de resumen

Debajo de los filtros se muestra una tarjeta (p-card) con el título RESUMEN en el encabezado. La tarjeta contiene 8 indicadores distribuidos en dos columnas:

IndicadorColumnaDescripción
TOTAL VENDEDORESIzquierdaCantidad de vendedores únicos en los datos filtrados
TOTAL CLIENTESDerechaCantidad de clientes únicos en los datos filtrados
FECHAIzquierdaRango de fechas efectivo de los datos: \{fecha_mínima\} - \{fecha_máxima\} en formato DD/MM/YYYY hh:mm A
TOTAL DISTRITOSDerechaCantidad de distritos únicos en los datos filtrados
TOTAL PEDIDO MONTOIzquierdaSuma total de montos de pedidos, formateado con locale es-PE y 2 decimales
TOTAL PEDIDO PACKSDerechaSuma total de cantidades de pedidos (packs)
TOTAL VENTA MONTOIzquierdaSuma total de montos de ventas, formateado con locale es-PE y 2 decimales
TOTAL VENTA PACKSDerechaSuma total de cantidades de ventas (packs)

Los totales del resumen se recalculan cada vez que se aplica un filtro. Si filtras por un vendedor específico, los totales reflejan únicamente los datos de ese vendedor. El rango de fechas mostrado corresponde a la fecha mínima y máxima reales de los datos filtrados, no a las fechas de los filtros de calendario.


Tabla de datos

La tabla utiliza el componente p-table de PrimeNG con las siguientes propiedades:

PropiedadValor
Clave de filavendedor_id
Desplazamiento horizontalHabilitado ([scrollable]="true", responsiveLayout="scroll")
Columnas redimensionablesSí ([resizableColumns]="true", columnResizeMode="expand")
PaginaciónSí, 50 registros por página
Mostrar página actualSí, con plantilla personalizada: "Mostrando del {first} al {last} de {totalRecords} registros"
Estilop-datatable-gridlines erpx-main
Indicador de cargaSpinner mientras se consultan los datos

Indicador de paginación superior

Además de la paginación estándar de p-table, se muestra un texto informativo encima de la tabla:

Mostrando página {página_actual} con {registros_en_página} registros de {total_registros} entradas

Este indicador se actualiza al cambiar de página.

Columnas de la tabla

#ColumnaAnchoAlineaciónContenido
1VENDEDOR125px (fijo)DerechaNombre completo del vendedor
2FECHA VENTA150px (fijo)IzquierdaFecha y hora de la transacción en formato DD/MM/YYYY hh:mm A
3RAZON SOCIALAutoIzquierdaRazón social o nombre completo del cliente
4PUNTO VENTA150px (fijo)DerechaNombre del punto de venta del cliente
5DIRECCION300px (fijo)DerechaDirección completa del punto de venta
6DISTRITO125px (fijo)IzquierdaNombre del distrito obtenido del código de ubigeo
7LATITUD125px (fijo)IzquierdaCoordenada de latitud del punto de venta
8LONGITUD125px (fijo)IzquierdaCoordenada de longitud del punto de venta
9PEDIDO MONTO125px (fijo)DerechaMonto total de pedidos, formateado con locale es-PE y 2 decimales
10PEDIDO PACKS125px (fijo)DerechaCantidad de pedidos (packs), valor numérico entero
11VENTA MONTO125px (fijo)DerechaMonto total de ventas, formateado con locale es-PE y 2 decimales
12VENTA PACKS125px (fijo)DerechaCantidad de ventas (packs), valor numérico entero

A diferencia del reporte de avances de ventas, este reporte no incluye columnas de cuota ni porcentaje de alcance. En su lugar, incluye FECHA VENTA, LATITUD, LONGITUD y separa los montos y cantidades en pedidos y ventas.

Formato de moneda

Los montos en las columnas PEDIDO MONTO y VENTA MONTO se muestran con:

  • Separador de miles: punto (.) — locale es-PE
  • Separador de decimales: coma (,)
  • Decimales: exactamente 2

Ejemplo: 1.234,56

Los montos en este reporte no llevan prefijo S/. en la tabla (a diferencia del reporte de avances de ventas). Se muestra únicamente el valor numérico formateado.


Agrupación de datos

Los registros del DWH se agrupan por la combinación de cuatro claves:

vendedor_id + cliente_id + cliente_punto_venta_id + tiempo_codigo

La diferencia clave con el reporte de avances de ventas es que aquí se incluye tiempo_codigo en la clave de agrupación. Esto significa que cada registro mantiene su fecha y hora individual, permitiendo ver el detalle de cada transacción por separado.

Para cada grupo, se calculan cuatro valores a partir de los registros agrupados:

DatoIndicador DWHCálculo
pedidos_montoPEDIDOS_MONTOSuma de valor de todos los registros con este indicador
pedidos_cantidadPEDIDOS_CANTIDADSuma de valor de todos los registros con este indicador
ventas_montoDOCUMENTOS_VENTAS_MONTOSuma de valor de todos los registros con este indicador
ventas_cantidadDOCUMENTOS_VENTAS_CANTIDADSuma de valor de todos los registros con este indicador

Fecha de la transacción

La fecha se extrae del campo tiempo_codigo del primer registro del grupo. El formato almacenado es YYYYMMDDHHmm y se convierte a formato legible DD/MM/YYYY hh:mm A.

Ejemplo: 20260308143008/03/2026 02:30 PM


Consulta al Data Warehouse (DWH)

Al cargar o actualizar el reporte, el sistema ejecuta una única consulta al DWH (a diferencia del reporte de avances que ejecuta dos):

search=** AND fecha:[{fecha_inicio} TO {fecha_fin}] AND tipo:1 AND indicador_codigo:DOCUMENTOS_VENTAS_MONTO,DOCUMENTOS_VENTAS_CANTIDAD,PEDIDOS_MONTO,PEDIDOS_CANTIDAD
ParámetroValor
fecha_inicioFecha de inicio a las 00:00:00 en formato YYYYMMDD000000
fecha_finFecha de fin al final del día en formato YYYYMMDDHHmmss
tipo1
indicador_codigoDOCUMENTOS_VENTAS_MONTO,DOCUMENTOS_VENTAS_CANTIDAD,PEDIDOS_MONTO,PEDIDOS_CANTIDAD (4 indicadores separados por coma)
from0
size100,000,000

Endpoint DWH

EndpointMétodoURL base
v2.0.1/erpx/analiticas/dwhGEThttps://msserver1.davix.app

Este reporte consulta 4 indicadores en una sola petición al DWH, lo que lo hace más eficiente que el reporte de avances (que usa 2 peticiones separadas). Los indicadores son: montos de ventas, cantidades de ventas, montos de pedidos y cantidades de pedidos.


Procesamiento de datos del DWH

Una vez recibidos los datos del DWH, el sistema realiza el siguiente procesamiento:

Formatear nombres de clientes

Para cada registro, si el cliente tiene razon_social no vacía, se usa como texto. Si razon_social es null o cadena vacía, se construye como \{apellido_paterno\} \{apellido_materno\} \{nombres\}.

Resolver nombres de distritos

Para cada punto de venta, se toma el ubigeo_codigo y se busca en la tabla de ubigeos en caché local (erpx-global-ubigeos) para obtener el nombre del distrito.

Formatear nombres de vendedores

Para cada registro, se construye el nombre del vendedor como \{apellido_paterno\} \{apellido_materno\} \{nombres\}.

Extraer listas únicas para filtros

Se generan las listas de opciones para los multiselects:

  • Distritos: Nombres de distritos únicos, ordenados alfabéticamente
  • Clientes: Objetos cliente únicos por id
  • Vendedores: Objetos vendedor únicos por id

Agrupar registros

Se agrupan por la clave compuesta vendedor_id-cliente_id-cliente_punto_venta_id-tiempo_codigo. Para cada grupo se calculan los 4 montos/cantidades.

Ordenar y presentar

Los datos se ordenan por vendedor → fecha → cliente y se muestran en la tabla. Se calculan los totales para la tarjeta de resumen.


Exportar a Excel

Al hacer clic en el botón Exportar, se abre un diálogo dinámico (DynamicDialog) con las opciones de exportación.

PropiedadValor
TítuloExportar
Z-index base10000
Ancho50vw (50% del ancho de la ventana)
PosiciónPegado arriba (top: 0, bottom: 0, maxHeight: 100%)
ModalNo (modal: false)
Cerrar con EscapeNo (closeOnEscape: false)
Datos enviadosLos datos actualmente filtrados de la tabla (reportesDocumentosVentas.data)

Campos del diálogo de exportación

Nombre de archivo personalizado

PropiedadValor
Etiqueta"Customizar nombre de archivo"
Tooltip"Puede customizar el nombre del archivo a exportar." (ícono pi pi-exclamation-circle)
Componenteinput[type="text"] con pInputText dentro de un p-inputgroup
Valor por defectoreporte-export-\{timestamp\} (donde \{timestamp\} es new Date().getTime())
Botón de reinicioÍcono pi pi-refresh a la derecha del campo. Al hacer clic, restablece el nombre a pedidos-export-\{timestamp\} con un nuevo timestamp

Tipo de exportación

PropiedadValor
Etiqueta"Exportar"
Tooltip"Seleccione la exportación a realizar." (ícono pi pi-exclamation-circle)
Componentep-dropdown
OpcionesUna única opción: LISTA DE REPORTE (valor: 1)
Valor por defecto1 (LISTA DE REPORTE)
BúsquedaHabilitada ([filter]="true", filtra por name)
PlaceholderSELECCIONE

Los botones se ubican en un footer fijo en la parte inferior de la pantalla (position: fixed, bottom: 0, z-index: 10000):

BotónIconoEstiloAcción
Cancelarpi pi-timesp-button-primary p-button-textCierra el diálogo sin exportar
Guardarpi pi-checkp-button-primaryGenera y descarga el archivo Excel. Muestra indicador de carga mientras procesa

Estructura del archivo Excel generado

PropiedadValor
Nombre del archivo\{nombre_personalizado\}.xlsx
Nombre de la hojaPedidos
Libreríaxlsx-js-style
Estilo de bordesmedium, color #FFFFAA00
EncabezadosNegrita, tamaño 11, centrados, ajuste de texto
CuerpoNormal, tamaño 10, centrados, ajuste de texto

Columnas del Excel

ColumnaAnchoTipo dato
VENDEDOR30Texto
FECHA VENTA20Texto
RAZON SOCIAL30Texto
PUNTO VENTA30Texto
DIRECCION30Texto
DISTRITO20Texto
LATITUD8Texto
LONGITUD8Texto
PEDIDO TOTAL8Numérico (0.00)
PEDIDO PACKS8Numérico (0)
VENTA TOTAL8Numérico (0.00)
VENTA PACKS8Numérico (0)

Las columnas numéricas del Excel (PEDIDO TOTAL, PEDIDO PACKS, VENTA TOTAL, VENTA PACKS) se exportan con tipo numérico (t: 'n') y formato específico (z: '0.00' para montos, z: '0' para cantidades). Esto permite que Excel reconozca los valores como números y puedan usarse en fórmulas y cálculos.

El Excel exporta únicamente los datos que están visibles en la tabla en ese momento, es decir, los datos ya filtrados. Si deseas exportar todos los datos, asegúrate de que no haya filtros activos.


Diferencias con el reporte de avances de ventas

CaracterísticaReportes de avances de ventasReportes de documentos de ventas
Indicadores DWH1 (DOCUMENTOS_VENTAS_MONTO) + metas4 (DOCUMENTOS_VENTAS_MONTO, DOCUMENTOS_VENTAS_CANTIDAD, PEDIDOS_MONTO, PEDIDOS_CANTIDAD)
Consultas DWH2 (ventas + metas)1 (todos los indicadores)
Agrupaciónvendedor_id + cliente_id + punto_venta_idvendedor_id + cliente_id + punto_venta_id + tiempo_codigo
Tarjeta de resumenNoSí (8 indicadores)
Columna FECHA VENTANo
Columnas LATITUD/LONGITUDNo
Columnas PEDIDO MONTO/PACKSNo
Columnas CUOTA y % ALCANCENo
Filtro de zonasNo
Filtro de alcance de ventaSí (rango numérico)No
Validación rango 3 mesesNo
OrdenaciónSin ordenación específicaPor vendedor → fecha → cliente (lodash sortBy)
Prefijo moneda S/.No
Tipos numéricos en ExcelTexto (t: 's')Numérico (t: 'n')

Flujo completo de carga del reporte

Inicialización

Al ingresar, se establece la fecha de inicio como el primer día del mes actual y la fecha de fin como la fecha y hora actual. Se cargan los ubigeos desde la caché local del navegador.

Validación de rango

Se valida que el rango de fechas no supere 3 meses. Si lo supera, se muestra un error y se ajusta la fecha de inicio.

Consulta al DWH

Se ejecuta una consulta al DWH con los 4 indicadores de documentos de ventas y pedidos para el rango de fechas seleccionado.

Procesamiento de datos

Se formatean los nombres de clientes y vendedores, se resuelven los distritos por ubigeo, se extraen las listas únicas para los filtros y se agrupan los registros por vendedor-cliente-punto de venta-tiempo.

Cálculos y ordenación

Para cada grupo se calculan los 4 valores (pedido monto, pedido packs, venta monto, venta packs). Los datos se ordenan por vendedor, fecha y cliente.

Presentación

Los datos se muestran en la tabla paginada con 50 registros por página. Se calculan y muestran los totales en la tarjeta de resumen. Los filtros se llenan con las opciones disponibles.


Paginación personalizada

Este reporte implementa un control de paginación personalizado que rastrea:

ParámetroValor inicialDescripción
first1Índice del primer registro mostrado
totalRecords50Total de registros en los datos filtrados
current0Página actual (base 0)
size50Registros por página
totalCurrentList50Cantidad de registros visibles en la página actual

Al cambiar de página, el sistema calcula:

  • Si es la última página: totalCurrentList = totalRecords - (página × size)
  • Si no es la última página: totalCurrentList = size (50)

Autenticación

Todas las peticiones al servidor incluyen las siguientes cabeceras HTTP:

CabeceraValor
acceptapplication/json
AuthorizationBearer \{token\}
enterprise-idID de la empresa del usuario autenticado

Problemas comunes

ProblemaCausaSolución
Aparece el error "Ingrese un rango de fecha menor a 3 meses por favor"El rango de fechas seleccionado supera los 3 mesesReduce el rango de fechas a un máximo de 3 meses
La tabla no muestra datosNo hay documentos de venta ni pedidos en el DWH para el rango seleccionadoAmplía el rango de fechas o verifica que existan transacciones registradas
La tarjeta de resumen muestra todos los totales en 0No hay datos para el rango seleccionado o todos los filtros excluyen los datosLimpia los filtros y verifica que haya datos disponibles
El rango de FECHA en el resumen no coincide con las fechas del filtroEl resumen muestra las fechas mínima y máxima reales de los datos, no del filtroEs el comportamiento esperado; refleja el rango real de datos encontrados
La columna DISTRITO aparece vacíaEl punto de venta no tiene ubigeo_codigo configuradoVerifica que los puntos de venta tengan el ubigeo correctamente asignado
Los filtros de vendedores/clientes/distritos están vacíosNo hay datos en el DWH para el rango de fechas seleccionadoLas listas se generan dinámicamente; sin datos, no hay opciones
La fecha de inicio se restablece solaSe seleccionó una fecha futura o el rango superó 3 mesesEl sistema corrige automáticamente las fechas inválidas
El Excel muestra "PEDIDO TOTAL" en vez de "PEDIDO MONTO"Las columnas del Excel tienen nombres ligeramente diferentes a la tablaEs el comportamiento esperado; el Excel usa PEDIDO TOTAL y VENTA TOTAL
Los números en el Excel se muestran como textoError de formato en la exportaciónLos montos y cantidades se exportan como tipo numérico (t: 'n'); si hay un valor vacío, puede mostrarse como texto

Páginas relacionadas

  • Reportes de avances de ventas — Reporte de avances de ventas con metas y porcentaje de alcance.
  • Métricas — Configuración de métricas de rendimiento con indicadores personalizados.
  • Métricas — Detalles — Visualización de gráficos y datos de métricas configuradas.
  • Mapas de calor — Visualización geográfica de vendedores y puntos de venta en mapa interactivo.