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/28 22:34]
192.168.177.30
ada:sicoferp:compras:cartera [2026/04/28 16:13] (actual)
brahian.castaneda
Línea 3: Línea 3:
 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. 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:​+Los parámetros para ejecutar el reporte son: Seleccionar ​un período y seleccionar un funcionario:​
  
 {{:​ada:​sicoferp:​inventariosactivos:​compras:​ParametrosReporte.PNG?​600|}} ​ {{:​ada:​sicoferp:​inventariosactivos:​compras:​ParametrosReporte.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.+{{:​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|}} ​
Línea 14: Línea 16:
  
 {{:​ada:​sicoferp:​inventariosactivos:​compras:​Mensaje1.PNG?​300|}} ​ {{:​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/compras/cartera.1622241257.txt.gz · Última modificación: 2021/05/28 22:34 por 192.168.177.30