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 21:58]
192.168.177.30
ada:sicoferp:compras:cartera [2026/07/23 14:38] (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 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|}}  
 + 
 +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 === 
 + 
 +===== Ajuste en Reporte de cartera para el dw asignacion_cartera_ada ===== 
 + 
 +=== 1. Descripción del Problema === 
 + 
 +Se detectó una incidencia en el módulo de compras cuando se genera el reporte de cartera 
 + 
 +El sistema no esta mostrando las placas asignadas por periodo 
 + 
 +El error ocurría porque la consulta del dw no filtra correctamente los periodos y tiene filtros restrictivos de las ubicaciones de las placas  
 + 
 +=== 2. Causa Raíz === 
 + 
 +La causa del problema se encontraba en la consulta del dw dgr_asignacion_cartera_ada 
 + 
 +Esta consulta incluía una condición restrictiva en la cláusula WHERE para cod_ubicacion de las placas: 
 + 
 +Bloqu problematico de la consulta  
 +   ( ( v_usuarios_cartera.codigo_tercero = :an_codigo ) AND   
 +         ( det_articulos_usuario.cod_usuario_reintegra is null ) AND   
 +         ( to_char(mae_placas_articulos.fecha_entrada,'​YYYYMM'​) <= :as_periodo ) )   
 + and mae_placas_articulos.cod_ubicacion = mae_ubicaciones.codigo_ubicacion ​  
 +and det_articulos_usuario.CODIGO_MEMPRESA IN (SYS_CONTEXT('​CTX_SICOF','​CODIGO_MEMPRESA'​),'​9999999999'​) 
 + ​ and parametros_sistema.CODIGO_MEMPRESA IN (SYS_CONTEXT('​CTX_SICOF','​CODIGO_MEMPRESA'​),'​9999999999'​) 
 + ​ and mae_placas_articulos.CODIGO_MEMPRESA IN (SYS_CONTEXT('​CTX_SICOF','​CODIGO_MEMPRESA'​),'​9999999999'​) 
 + 
 +=== 3. Solución Implementada === 
 +Para solucionar la incidencia ​permitir la generación correcta del reporte se agrego el siguiente bloque  
 + ( ( 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  
 + (to_char (det_articulos_usuario.fecha_elaboracion,'​YYYYMM'​) <= :as_periodo AND to_char(det_articulos_usuario.fecha_reintegro,'​YYYYMM'​) > :​as_periodo))) and 
 +         ​det_articulos_usuario.CODIGO_MEMPRESA IN (SYS_CONTEXT('​CTX_SICOF','​CODIGO_MEMPRESA'​),'​9999999999'​) ​ and 
 +         ​parametros_sistema.CODIGO_MEMPRESA = mae_placas_articulos.CODIGO_MEMPRESA 
 + and MAE_UBICACIONES.CODIGO_INTERNO (+) = MAE_PLACAS_ARTICULOS.COD_UBICACION 
 +         and NOMINA.DEPARTAMENTOS.KA_NI_DEPARTAMENTO (+) = MAE_UBICACIONES.KA_NI_DEPARTAMENTO 
 +         and NOMINA.CIUDADES.KA_NI_CIUDAD (+) = MAE_UBICACIONES.KA_NI_CIUDAD 
 +and MAESTRO_ARTICULOS.CLASIFICACION <>'​S'​ 
 + 
 +=== Desarrollado por: [Miguel Muñoz] Fecha: [23/​07/​2026] Versión de PB: 12.5 ===
  
  
-{{:​ada:​sicoferp:​inventariosactivos:​compras:​reportes:​reportes_de_activos_fijos:​formatoPazySalvo.PNG?​600|}} 
ada/sicoferp/compras/cartera.1622152738.txt.gz · Última modificación: 2021/05/27 21:58 por 192.168.177.30