Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
ada:sicoferp:compras:cartera [2021/05/27 22:44] 192.168.177.30 |
ada:sicoferp:compras:cartera [2026/04/28 16:13] (actual) brahian.castaneda |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Reporte Cartera ====== | ====== Reporte Cartera ====== | ||
| - | Este reporte muestra los bienes que tiene un funcionario. por defecto se tiene el chulo de todos los Funcionarios pero se puede generar para un solo funcionario. | + | Este reporte muestra los bienes que tiene un funcionario asignados. |
| + | Por defecto se tiene el chulo de todos los Funcionarios pero se puede generar para un solo funcionario. | ||
| + | Los parámetros para ejecutar el reporte son: Seleccionar un período y seleccionar un funcionario: | ||
| - | Si el funcionario para el periodo que se genera no tiene ya bienes asignados o no se le han asignado ningún bien sale el siguiente reporte de Paz y Salvo. | + | {{:ada:sicoferp:inventariosactivos:compras:ParametrosReporte.PNG?600|}} |
| + | {{:ada:sicoferp:inventariosactivos:compras:Cartera.PNG?600|}} | ||
| + | |||
| + | Si el funcionario para el periodo que se genera no tiene ya bienes asignados o no se le han asignado ningún bien sale el siguiente reporte de Paz y Salvo. (Si se tiene la constante en sicof.m_constantes 'REPORTE_PAZYSALVO_CARTERA' en Aplica = 'N', sino sale el reporte que se tenga configurado en esta constante). | ||
| {{:ada:sicoferp:compras:formatoPazySalvo.PNG?600|}} | {{:ada:sicoferp:compras:formatoPazySalvo.PNG?600|}} | ||
| + | Si se ejecuta el reporte para un periodo superior al periodo actual el sistema muestra mensaje indicando que para los parámetros no existe información. | ||
| + | |||
| + | {{:ada:sicoferp:inventariosactivos:compras:Mensaje1.PNG?300|}} | ||
| + | |||
| + | Exportar Archivo excell | ||
| + | |||
| + | Dar click en botón Exportar | ||
| + | |||
| + | {{:ada:sicoferp:compras:captura_expexcell.jpg?400|}} | ||
| + | |||
| + | exportar Archivo en PDF | ||
| + | |||
| + | Dar click en botón Imprimir | ||
| + | |||
| + | {{:ada:sicoferp:compras:captura_imppdf.jpg?400|}} | ||
| + | |||
| + | {{:ada:sicoferp:compras:captura_imppdf2.jpg?400|}} | ||
| + | |||
| + | {{:ada:sicoferp:compras:captura_imppdf3.jpg?400|}} | ||
| + | |||
| + | {{:ada:sicoferp:compras:captura_imppdf4.jpg?400|}} | ||
| + | |||
| + | {{:ada:sicoferp:compras:captura_imppdf5.jpg?400|}} | ||
| + | |||
| + | ===== Corrección de Reporte de Cartera por Funcionario vacio ====== | ||
| + | |||
| + | === 1. Descripción del Problema === | ||
| + | Módulo: Activos Fijos / Compras. Objeto: w_reportes_activos_fijos / dgr_asignacion_cartera. Síntoma: Al generar el reporte de "Cartera" para un funcionario específico, el sistema arroja el mensaje: "No existe información con esos parámetros", a pesar de que existen activos asignados al usuario y la consulta SQL ejecutada manualmente en base de datos retorna registros. | ||
| + | |||
| + | === 2. Análisis de Causa Raíz === | ||
| + | Se identificaron tres factores técnicos que impedían la correcta visualización de los datos: | ||
| + | |||
| + | Filtro restrictivo en el JOIN (SQL): La DataWindow realizaba un INNER JOIN con la tabla MAE_TERCEROS_SECCION. Si el funcionario tiene activos en DET_ARTICULOS_USUARIO pero no tiene una entrada vigente en la tabla de secciones/estructuras, el JOIN fallaba y excluía al tercero del reporte. | ||
| + | Contexto de Empresa: La consulta utiliza SYS_CONTEXT('CTX_SICOF','CODIGO_MEMPRESA'). Si el contexto no se inicializa correctamente antes del Retrieve, la base de datos devuelve 0 filas por seguridad multi-empresa. | ||
| + | Lógica de Carga en PowerScript: En la función f_cargar_reporte, el código realizaba un Retrieve inicial "de prueba" y luego cambiaba el DataObject dinámicamente según constantes, perdiendo en ocasiones la consistencia de los argumentos o el estado del objeto. | ||
| + | |||
| + | === 3. Solución Aplicada === | ||
| + | |||
| + | A. Modificación del SQL (dgr_asignacion_cartera.srd) | ||
| + | Se ajustó la cláusula WHERE para que el parámetro de entrada :an_codigo apunte directamente a la tabla de relación de activos, eliminando la dependencia obligatoria de la tabla de secciones para la recuperación de datos básicos. | ||
| + | |||
| + | dgr_asignacion_cartera.srd | ||
| + | |||
| + | ( MAE_PLACAS_ARTICULOS.CODIGO_PLACA = DET_ARTICULOS_USUARIO.CODIGO_PLACA ) and | ||
| + | ( ESTADOS_ARTICULO_PLACAS.CODIGO_ESTADO = MAE_PLACAS_ARTICULOS.ESTADO ) and | ||
| + | ( MAE_TERCEROS_SECCION.CODIGO_TERCERO = DET_ARTICULOS_USUARIO.COD_USUARIO_RECIBE ) and | ||
| + | ( MAESTRO_TERCEROS.CODIGO_TERCERO = MAE_TERCEROS_SECCION.CODIGO_TERCERO ) and | ||
| + | ( ( MAE_TERCEROS_SECCION.codigo_tercero = :an_codigo ) AND | ||
| + | ( ( DET_ARTICULOS_USUARIO.COD_USUARIO_RECIBE = :an_codigo ) AND | ||
| + | ((to_char (det_articulos_usuario.fecha_elaboracion,'YYYYMM') <= :as_periodo AND det_articulos_usuario.fecha_reintegro IS NULL) OR | ||
| + | B. Optimización de Lógica de Carga (w_reportes_activos_fijos.srw) | ||
| + | Se refactorizó el evento f_cargar_reporte para el caso asignacion_cartera: | ||
| + | |||
| + | Se añadió una validación previa para asegurar que in_usuario no sea 0/Null antes de proceder. | ||
| + | Se simplificó la selección del reporte basado en constantes (evitando retrieves dobles innecesarios). | ||
| + | Se garantizó la llamada a f_set_context_empresa(ts_transaccion) antes de la recuperación para asegurar la visibilidad de los datos por empresa. | ||
| + | |||
| + | i_dw_reporte.SetTransObject(ts_transaccion) | ||
| + | |||
| + | // Validar que se haya seleccionado un usuario si no es reporte general | ||
| + | IF isnull(in_usuario) OR in_usuario = 0 THEN | ||
| + | MessageBox("Atención", "Debe seleccionar un Funcionario para este reporte.") | ||
| + | ll_mensaje = 1 | ||
| + | Return | ||
| + | END IF | ||
| + | |||
| + | // Asegurar contexto de empresa | ||
| + | f_set_context_empresa(ts_transaccion) | ||
| + | |||
| + | // Determinar si existe un reporte de cartera personalizado por constante | ||
| + | SELECT trim(valor_alfa) INTO :ls_reporte FROM sicof.M_CONSTANTES | ||
| + | WHERE aplica = 'S' AND trim(descripcion) = 'REPORTE_CARTERA' USING ts_transaccion; | ||
| + | |||
| + | IF NOT (isnull(ls_reporte) OR ls_reporte = "") THEN | ||
| + | f_nombre_datawindow('dgr_' + ls_reporte) | ||
| + | END IF | ||
| + | |||
| + | // Ejecutar recuperación principal | ||
| + | IF i_dw_reporte.Retrieve(in_usuario, is_periodo) = 0 THEN | ||
| + | // Fallback: Si no hay cartera activa, intentar con el reporte de Paz y Salvo | ||
| + | SELECT trim(valor_alfa) INTO :ls_reporte FROM sicof.M_CONSTANTES | ||
| + | WHERE aplica = 'S' AND trim(descripcion) = 'REPORTE_PAZYSALVO_CARTERA' USING ts_transaccion; | ||
| + | |||
| + | IF isnull(ls_reporte) OR ls_reporte = "" THEN ls_reporte = 'cartera_funcionario_pazysalvo' | ||
| + | |||
| + | f_nombre_datawindow('dgr_' + ls_reporte) | ||
| + | i_dw_reporte.Retrieve(in_usuario, is_periodo) | ||
| + | END IF | ||
| + | |||
| + | === Desarrollado por: [Miguel Muñoz] Fecha: [28/04/2026] Versión de PB: 12.5 === | ||