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/09/24 22:23]
sonia.carmona
ada:sicoferp:compras:cartera [2026/07/23 14:38] (actual)
brahian.castaneda
Línea 16: 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 ===
 +
 +===== 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 y 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/compras/cartera.1632522233.txt.gz · Última modificación: 2021/09/24 22:23 por sonia.carmona