Herramientas de usuario

Herramientas del sitio


ada:sicoferp:financiero:tesoreria:conciliacionbancaria:conciliacioncargadedatos

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:financiero:tesoreria:conciliacionbancaria:conciliacioncargadedatos [2026/04/15 16:02]
brahian.castaneda
ada:sicoferp:financiero:tesoreria:conciliacionbancaria:conciliacioncargadedatos [2026/04/20 13:46] (actual)
brahian.castaneda
Línea 1: Línea 1:
 +
 +
 +
 ====== Conciliación (Carga de Datos) ====== ====== Conciliación (Carga de Datos) ======
  
Línea 157: Línea 160:
  
 Integridad en el "​Deshacer":​ Al estar el contexto correctamente mapeado, un ROLLBACK USING ts_transaccion limpiará efectivamente todas las inserciones temporales realizadas por las funciones de importación (wf_import_extracto,​ etc.). Integridad en el "​Deshacer":​ Al estar el contexto correctamente mapeado, un ROLLBACK USING ts_transaccion limpiará efectivamente todas las inserciones temporales realizadas por las funciones de importación (wf_import_extracto,​ etc.).
 +
 +===== Optimización y Corrección del Proceso de Conciliación Bancaria =====
 +
 +Bug ID: [#​53442] ​
 +
 +=== 1. Descripción del Problema ===
 +
 +Se detectó que movimientos contables de meses anteriores (ej. enero/​febrero) reaparecían en la conciliación del mes de abril a pesar de haber sido conciliados previamente. Adicionalmente,​ se identificaron bloqueos en la interfaz de usuario que impedían la gestión ágil de partidas conciliatorias y errores en la determinación del estado final de la conciliación.
 +
 +=== 2. Causa Raíz ===
 +
 +Falta de Estampa de Tiempo: Las funciones de cruce (automático y manual) no estaban asignando el valor a la columna periodo_conciliado en la tabla DET_ASIENTO_CONTABLE,​ dejando el registro como "​huérfano"​ para procesos futuros.
 +Limpieza Indiscriminada:​ La función de validación previa al guardado (wf_puede_guardar) realizaba una limpieza basada solo en periodo y banco, lo que bajo ciertas condiciones de concurrencia desmarcaba registros válidos.
 +Bloqueo de UI: La lógica de protección de columnas no incluía la columna conciliatoria,​ y el evento itemchanged de los cuadrantes no notificaba a la ventana la necesidad de habilitar el botón "​Grabar"​.
 +
 +=== 3. Soluciones Implementadas ===
 +
 +A. Integridad de Datos (Periodo de Conciliación)
 +Se modificaron los procesos de cruce para asegurar que cada registro marcado como conciliado reciba el periodo actual:
 +
 +Objeto n_cst_conciliacion_bancaria:​ En udf_conciliar_faltante,​ se añadió la asignación de is_periodo_conciliando.
 +Ventana w_conciliacion_bancos:​ En wf_conciliar,​ se añadió la asignación de is_periodo.
 +B. Lógica de Estado (Completa vs. Incompleta)
 +Se refinó la validación en el evento ue_grabar para evitar que una conciliación se marque como "​Completa"​ si no hay actividad real.
 +
 +Actividad Válida: Se considera actividad si existe al menos un registro con conciliado = 1 O una partida del extracto marcada como conciliatoria = '​S'​.
 +C. Mejoras en la Interfaz de Usuario (UX)
 +Edición Fluida: Se actualizó wf_bloquea_campos_detalles para que la columna conciliatoria sea editable cuando el estado es '​I'​ (Incompleta).
 +Habilitación Dinámica: Se insertó el evento ue_enable_grabar en los itemchanged de los DataWindows de la pestaña 3. Esto elimina la necesidad de salir y volver a entrar a la ventana para guardar cambios manuales.
 +D. Seguridad Transaccional
 +Se ajustó el SQL de la función wf_puede_guardar para incluir el identificador único id_cconciliacion en las cláusulas de exclusión, garantizando que el proceso de guardado actual no borre accidentalmente sus propias marcas.
 +
 +
 +=== 4. Objetos Modificados ===
 +
 +Objeto Tipo Método/​Evento
 +n_cst_conciliacion_bancaria SRU udf_conciliar_faltante
 +w_conciliacion_bancos SRW wf_conciliar,​ ue_grabar, wf_puede_guardar,​ wf_bloquea_campos_detalles
 +d_incoincidentes SRD Evento itemchanged
 +d_incoincidentes_extracto SRD Evento itemchanged
 +
 +=== A continuación presento los cambios realizados en los archivos: ===
 +
 +
 + if ll_encuentra_igual > 0 then
 + idw_incoincidentes.SetItem (ll_encuentra_igual,'​conciliado',​1)
 + idw_incoincidentes.SetItem (ll_encuentra_igual,'​periodo_conciliado',​is_periodo_conciliando)
 + idw_datos_incoincidentes.SetItem(ll_cont_ext,'​conciliado',​1)
 + idw_datos_incoincidentes.SetItem(ll_cont_ext,'​usuario_concilia',​cod_usuario)
 + idw_datos_incoincidentes.SetItem(ll_cont_ext,'​fecha_conciliado',​id_fecha)
 +
 +w_conciliacion_bancos.srw
 +
 +
 + If ll_docto_lib = ll_docto_ext And ld_valor_lib = ld_valor_ext Then
 + idw_coincidentes.SetItem (ll_cont_lib,'​conciliado',​1)
 + idw_coincidentes.SetItem (ll_cont_lib,'​periodo_conciliado',​is_periodo)
 + idw_datos_coincidentes.SetItem(ll_cont_ext,'​conciliado',​1)
 + idw_datos_coincidentes.SetItem(ll_cont_ext,'​usuario_concilia',​cod_usuario)
 + idw_datos_coincidentes.SetItem(ll_cont_ext,'​fecha_conciliado',​id_fecha)
 + idw_det_bancos.accepttext( )
 +
 + If lista_elementos <> '​eliminar_conciliacion'​ Then
 + // Garantizar que no se guarde como completa si no hay ningún registro marcado en los cuadrantes de la pestaña 3
 + // Garantizar que no se guarde como completa si no hay actividad (marcas de conciliado o partidas conciliatorias)
 + If idw_det_bancos.GetItemString(1,​ "​estado"​) = '​C'​ Then
 + If idw_coincidentes.Find("​conciliado = 1", 1, idw_coincidentes.RowCount()) <= 0 And &
 +    ​idw_incoincidentes.Find("​conciliado = 1", 1, idw_incoincidentes.RowCount()) <= 0 And &
 +    ​idw_datos_coincidentes.Find("​conciliado = 1", 1, idw_datos_coincidentes.RowCount()) <= 0 And &
 +    ​idw_datos_incoincidentes.Find("​conciliado = 1", 1, idw_datos_incoincidentes.RowCount()) <= 0 Then
 +    ​idw_datos_incoincidentes.Find("​conciliado = 1 OR conciliatoria = '​S'",​ 1, idw_datos_incoincidentes.RowCount()) <= 0 Then
 + idw_det_bancos.SetItem(1,​ "​estado",​ '​I'​)
 + End If
 + End If
 + idw_datos_incoincidentes.Modify('​ajuste.protect = ' + ps_protect)
 +End If
 +
 +If not( isnull(idw_datos_incoincidentes)) And isvalid(idw_datos_incoincidentes) Then
 + idw_datos_incoincidentes.Modify('​conciliatoria.protect = ' + ps_protect)
 +End If
 +
 +end subroutine
 +
 +public function boolean wf_puede_guardar ()
 + (SELECT 1
 +    FROM TESORE01.MAE_CONCILIACION MC
 +   WHERE MC.CODIGO_BANCO = :​ld_cod_inter_banco
 +     AND MC.PERIODO = :ls_periodo
 +     AND MC.ESTADO <> '​E'​
 +     AND MC.ESTADO <> '​E'​
 +     OR MC.CODIGO_CONCILIACION = :​id_cconciliacion
 + )     
 + USING sqlca;
 +
ada/sicoferp/financiero/tesoreria/conciliacionbancaria/conciliacioncargadedatos.1776268928.txt.gz · Última modificación: 2026/04/15 16:02 por brahian.castaneda