Herramientas de usuario

Herramientas del sitio


ada:sicoferp:compras:cartera

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
ada:sicoferp:compras:cartera [2021/05/27 22:05]
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 asignados.+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 no tiene ya bienes asignados o no se le han asignado ningún bien sale un reporte de Paz y Salvo.+{{:​ada:​sicoferp:​inventariosactivos:​compras:​ParametrosReporte.PNG?​600|}} ​
  
-El paz salvo +{{:​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 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|}}  
 + 
 +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 ===
  
  
-{{:​ada:​sicoferp:​inventariosactivos:​compras:​reportes:​reportes_de_activos_fijos:​formatoPazySalvo2.PNG?​600|}} 
ada/sicoferp/compras/cartera.1622153143.txt.gz · Última modificación: 2021/05/27 22:05 por 192.168.177.30