Transferencias sin recepción
Página 2 de streamlit-reportes.
Identificar transferencias entre sucursales que ya fueron enviadas pero que no han sido recibidas en la sucursal destino — para dar seguimiento y evitar que la mercancía quede "perdida" entre ambos puntos.
Modelo de datos: el ciclo Solicitud → Envío → Recepción
Transferencia guarda las tres etapas del ciclo en la misma tabla,
encadenadas por Tr_Documento (apunta al Tr_Folio del registro padre) +
Tr_Tabla = 'Transferencia':
SL (solicitud) ──Tr_Documento──► EN (envío) ──Tr_Documento──► RC (recepción)
- 145,106 de 151,962 folios
EN(95%) traenTr_Documentoapuntando a unaSL— el resto se creó sin solicitud previa. - Confirmado cruzando folios reales:
RC.Tr_Documento = EN.Tr_Folio.
Estados por tipo (Tr_Tipo / Es_Cve_Estado), conteo de folios distintos al 2026-08-28
| Tr_Tipo | Es_Cve_Estado | Folios | Significado |
|---|---|---|---|
| EN | RCT | 135,011 | Recepcionado totalmente (confirmado con el usuario) |
| EN | CA | 11,504 | Cancelado |
| EN | CE | 5,276 | Cerrado — 100% de estos ya tiene un RC ligado |
| EN | AC | 171 | Activo = enviado, sin ningún RC ligado — esta es la "transferencia sin recepción" real |
El reporte filtra exactamente Tr_Tipo = 'EN' y Es_Cve_Estado = 'AC'.
Grano y fuente
Grano: línea de transferencia (Tr_Folio, Pr_Cve_Producto). Fuente:
TRIVASADB (.207), tabla Transferencia directa.
Query base
queries/transferencias_sin_recepcion.sql
en streamlit-reportes. Diseñada originalmente contra el warehouse Postgres
(raw.transferencia / raw.sucursal / raw.almacen / raw.producto,
poblados por dlt desde este mismo ERP) y adaptada 1:1 a T-SQL para correr
contra .207 en vivo (mismos alias de columna de salida; solo cambia
|| → + y se usan los nombres de tabla/columna reales de SQL Server,
confirmados vía INFORMATION_SCHEMA).
SELECT
t.Tr_Folio AS folio,
t.Tr_Fecha AS fecha,
t.Sc_Cve_Sucursal + N' - ' + so.Sc_Descripcion AS sucursal_origen,
t.Al_Cve_Almacen + N' - ' + a.Al_Descripcion AS almacen,
t.Sc_Cve_Sucursal_Recibe + N' - ' + sd.Sc_Descripcion AS sucursal_destino,
t.Pr_Cve_Producto AS producto_clave,
p.Pr_Descripcion AS producto_descripcion,
t.Tr_Cantidad_1 AS cantidad,
t.Tr_Unidad_1 AS unidad,
t.Tr_Importe_Costo AS importe,
t.Oper_Alta AS operador,
t.Tr_Comentario AS comentario
FROM Transferencia t
JOIN Sucursal so ON so.Sc_Cve_Sucursal = t.Sc_Cve_Sucursal
JOIN Sucursal sd ON sd.Sc_Cve_Sucursal = t.Sc_Cve_Sucursal_Recibe
JOIN Almacen a ON a.Sc_Cve_Sucursal = t.Sc_Cve_Sucursal AND a.Al_Cve_Almacen = t.Al_Cve_Almacen
JOIN Producto p ON p.Pr_Cve_Producto = t.Pr_Cve_Producto
WHERE t.Tr_Tipo = N'EN'
AND t.Es_Cve_Estado = N'AC'
ORDER BY t.Tr_Fecha DESC
Pendiente de confirmar con el usuario: operador usa Oper_Alta (quien
creó el registro) — podría ser en realidad Oper_Ult_Modif (última
modificación).
El Streamlit
Código: pages/2_Transferencias_sin_recepcion.py.
- Filtros: rango de fechas sobre
Tr_Fecha(default 1-enero del año en curso hasta la fecha más reciente en los datos), Sucursal origen, Almacén origen, Operador — cada uno como checkboxes dentro de un expander (con botones "Todos"/"Ninguno"), no un multiselect de selector único. - Métricas: folios distintos, líneas, importe total.
- Tabla:
streamlit-aggridcon filtro inline tipado por columna (texto/número/fecha), paginación de 50 filas,enable_enterprise_modules=False. - Descarga CSV del resultado ya filtrado. Query cacheada 10 min.
Fuente de exploración
Lógica validada en
trivasa-bi/proyectos-bi/transferencia-sin-recepcion.
Pendiente
- Confirmar si
operadordebe serOper_AltaoOper_Ult_Modif.