Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
ada:sicoferp:financiero:tesoreria:conciliacionbancaria:conciliacioncargadedatos [2026/05/12 15:49] brahian.castaneda |
ada:sicoferp:financiero:tesoreria:conciliacionbancaria:conciliacioncargadedatos [2026/07/17 13:38] (actual) brahian.castaneda |
||
|---|---|---|---|
| Línea 371: | Línea 371: | ||
| === Desarrollado por: [Miguel Muñoz] Fecha: [12/05/2026] Versión de PB: 12.5 === | === Desarrollado por: [Miguel Muñoz] Fecha: [12/05/2026] Versión de PB: 12.5 === | ||
| + | |||
| + | ===== Mejora en Conciliación Bancaria Manual ===== | ||
| + | |||
| + | === 1. Descripción General === | ||
| + | |||
| + | Se ha optimizado el proceso de conciliación bancaria manual en el objeto w_conciliacion_bancos. El cambio permite que el sistema cargue automáticamente las partidas conciliatorias (pendientes) del mes anterior sin necesidad de importar un archivo plano físico. | ||
| + | |||
| + | Anteriormente, cuando un periodo no tenía movimientos nuevos en libros ni en bancos, el sistema obligaba al usuario a cargar un archivo plano con valores en "cero" para poder visualizar y conciliar los saldos pendientes del mes anterior. | ||
| + | |||
| + | === 2. Problema Técnico ==== | ||
| + | |||
| + | La lógica que recuperaba los registros pendientes de la tabla MAE_CONCILIACION (donde conciliatoria = 'S') estaba encapsulada dentro de la función de importación dinámica de archivos. Si el usuario seleccionaba el modo Manual, esa ruta de código nunca se ejecutaba, resultando en una grilla de inconsistencias vacía a pesar de existir saldos por conciliar del periodo previo. | ||
| + | |||
| + | === 3. Solución Implementada === | ||
| + | |||
| + | 3.1. Nueva Función: wf_cargar_partidas_pendientes() | ||
| + | Se creó una función centralizada en la ventana para: | ||
| + | |||
| + | Identificar el periodo anterior (manejo de cambio de año en enero). | ||
| + | |||
| + | Consultar el código de conciliación del mes anterior en estado 'C' (Completada). | ||
| + | Recuperar los registros mediante el DataStore d_incoincidentes_extracto_ant. | ||
| + | Insertar dichos registros en el buffer de trabajo idw_datos_conciliacion del periodo actual. | ||
| + | |||
| + | 3.2. Cambio de Disparador (Trigger) | ||
| + | |||
| + | En lugar de depender del botón "Importar", la lógica ahora reside en el evento selectionchanged del control carpeta (Tab Control): | ||
| + | |||
| + | Momento de ejecución: Cuando el usuario hace clic en la pestaña 3 (Inconsistencias). | ||
| + | Condición de ejecución: Solo si el modo de conciliación es 'M' (Manual) y si aún no existen registros cargados en la base de datos para el periodo actual (SELECT COUNT preventivo). | ||
| + | Acción: Carga los pendientes, realiza un Update() automático a la base de datos y ejecuta el motor de conciliación (wf_conciliar_faltante) para cruzar los datos contra los libros contables. | ||
| + | 3.3. Mejoras en la Interfaz de Usuario (UI) | ||
| + | Cierre de Ventana Manual: Se modificó el evento clicked del DataWindow dw_datos_conciliacion para que los botones de "Cancelar" o "Cerrar" oculten correctamente el panel de captura, permitiendo al usuario retractarse sin quedar bloqueado. | ||
| + | Sincronización: Se añadieron comandos Retrieve explícitos al cambiar a la pestaña de Inconsistencias para asegurar que la grilla siempre refleje los datos guardados. | ||
| + | |||
| + | === 4. Impacto y Beneficios === | ||
| + | |||
| + | Eliminación de Procesos Manuales Externos: El usuario ya no debe crear archivos Excel/planos ficticios con valores en cero. | ||
| + | Integridad de Datos: Al automatizar la carga de pendientes al cambiar de pestaña, se reduce el riesgo humano de omitir saldos del mes anterior. | ||
| + | Eficiencia: El motor de conciliación automática ahora también procesa las partidas manuales apenas el usuario intenta ver los resultados. | ||
| + | |||
| + | === Desarrollado por: [Miguel Muñoz] Fecha: [12/06/2026] Versión de PB: 12.5 === | ||
| + | ===== Corrección del Flujo de Conciliación Manual ===== | ||
| + | |||
| + | Fecha de Cambio: 17/07/2026 Objeto Modificado: w_conciliacion_bancos.srw | ||
| + | |||
| + | === 1. Resumen del Problema === | ||
| + | |||
| + | Se detectó un comportamiento anómalo en el proceso de Conciliación Manual. El sistema presentaba los siguientes inconvenientes: | ||
| + | |||
| + | Al seleccionar el tipo de conciliación "Manual", el sistema solicitaba incorrectamente la importación de un archivo de extracto bancario. | ||
| + | Al intentar guardar una conciliación manual, el sistema mostraba el error "No se ha importado el Extracto!", impidiendo finalizar el proceso. | ||
| + | Al navegar a la pestaña de "Inconsistencias", se activaban validaciones que no correspondían al flujo manual. | ||
| + | El objetivo de la conciliación manual es permitir al usuario registrar y cruzar partidas sin la necesidad de un archivo, por lo que este comportamiento era incorrecto. | ||
| + | |||
| + | === 2. Causa Raíz === | ||
| + | |||
| + | El análisis del código reveló que la variable de instancia il_rows_import se utilizaba como un indicador global para determinar si se había cargado un archivo. | ||
| + | |||
| + | Para "engañar" al sistema y permitir el guardado, el modo manual asignaba il_rows_import = 1. | ||
| + | Sin embargo, este valor activaba otras lógicas (como la validación al cambiar de pestaña) que sí esperaban un archivo, causando los errores descritos. | ||
| + | La lógica de guardado y la de navegación entre pestañas no distinguían correctamente entre una conciliación por extracto y una conciliación manual. | ||
| + | 3. Solución Implementada | ||
| + | Se realizaron ajustes en tres eventos clave para crear un flujo lógico claro y separado para la conciliación manual, sin afectar el proceso de importación de extractos. | ||
| + | |||
| + | a) Evento dw_det_bancos::itemchanged (Selección de Tipo) | ||
| + | Se eliminó la asignación il_rows_import = 1 cuando el usuario selecciona el tipo 'M' (Manual). | ||
| + | Impacto: Ahora, en modo manual, la variable il_rows_import permanece en 0 (a menos que se carguen partidas pendientes del mes anterior), lo que evita que se disparen procesos automáticos de importación. | ||
| + | b) Evento carpeta::selectionchanging (Navegación entre Pestañas) | ||
| + | Se modificó la validación que impedía pasar a la pestaña de "Inconsistencias". | ||
| + | Lógica anterior: If oldindex = 2 and newindex > 2 and il_rows_import = 0 Then... | ||
| + | Lógica nueva: If oldindex = 2 and newindex > 2 and il_rows_import = 0 and idw_det_bancos.GetItemString(1, "tipo") <> 'M' Then... | ||
| + | Impacto: Esta validación ahora se ignora si el tipo de conciliación es 'M', permitiendo al usuario navegar libremente a la pestaña de inconsistencias para realizar el cruce manual. | ||
| + | c) Evento ue_grabar (Guardado de la Conciliación) | ||
| + | Se ajustó la condición principal para permitir el guardado en modo manual. | ||
| + | Lógica anterior: If il_rows_import > 0 Then... | ||
| + | Lógica nueva: If il_rows_import > 0 Or idw_det_bancos.GetItemString(1, "tipo") = 'M' Then... | ||
| + | Impacto: El sistema ahora permite guardar una conciliación si se ha importado un archivo O si el modo es manual. | ||
| + | Adicionalmente, se añadieron protecciones para que el cálculo de totales no genere errores en modo manual cuando los DataWindows del extracto están vacíos. | ||
| + | |||
| + | === 4. Comportamiento Corregido === | ||
| + | |||
| + | Con estos cambios, el flujo de la conciliación manual ahora funciona de la siguiente manera: | ||
| + | |||
| + | El usuario crea una nueva conciliación y selecciona el tipo "Manual". | ||
| + | El sistema no solicita importar ningún archivo. | ||
| + | El usuario puede navegar a la pestaña "Inconsistencias". Si existen partidas pendientes del mes anterior, estas se cargan automáticamente para su revisión. | ||
| + | El usuario puede realizar los cruces manuales entre las partidas de tesorería y las del extracto (que puede ingresar manualmente o que provienen del mes anterior). | ||
| + | El usuario puede guardar la conciliación en cualquier momento, ya sea en estado "Incompleta" o "Completada", sin recibir el mensaje de error sobre la falta de un extracto. | ||
| + | |||
| + | === 5. Referencia Técnica (Diff de Cambios) === | ||
| + | |||
| + | A continuación se presenta el diff consolidado con todas las modificaciones aplicadas al objeto w_conciliacion_bancos.srw. | ||
| + | |||
| + | idw_incoincidentes.GroupCalc() | ||
| + | idw_datos_incoincidentes.GroupCalc() | ||
| + | |||
| + | If il_rows_import > 0 Or idw_det_bancos.GetItemString(1, "tipo") = 'M' Then | ||
| + | If idw_coincidentes.RowCount() > 0 Then | ||
| + | ld_total_lib1 = idw_coincidentes.GetItemDecimal(1,"total_conciliado") | ||
| + | End If | ||
| + | |||
| + | // En modo manual, este DW puede no tener filas | ||
| + | If idw_datos_coincidentes.RowCount() > 0 And idw_det_bancos.GetItemString(1, "tipo") = 'E' Then | ||
| + | ld_total_ext1 = idw_datos_coincidentes.GetItemDecimal(1,"total_conciliado") | ||
| + | End If | ||
| + | |||
| + | If idw_incoincidentes.RowCount() > 0 Then | ||
| + | ld_total_lib2 = idw_incoincidentes.GetItemDecimal(1,"total_conciliado") | ||
| + | End If | ||
| + | |||
| + | // En modo manual, este DW puede no tener filas | ||
| + | If idw_datos_incoincidentes.RowCount() > 0 And idw_det_bancos.GetItemString(1, "tipo") = 'E' Then | ||
| + | ld_total_ext2 = idw_datos_incoincidentes.GetItemDecimal(1,"total_conciliado") | ||
| + | End If | ||
| + | |||
| + | If ld_total_lib1 <> ld_total_ext1 And lista_elementos <> 'eliminar_conciliacion' Then | ||
| + | MessageBox("Control Tesoreria","La suma total de las CONSISTENCIAS a Conciliar no coincide!") | ||
| + | |||
| + | If oldindex = 2 and newindex > 2 and il_rows_import = 0 Then | ||
| + | If oldindex = 2 and newindex > 2 and il_rows_import = 0 and idw_det_bancos.GetItemString(1, "tipo") <> 'M' Then | ||
| + | MessageBox("Control Tesoreria","Debe importar el Archivo!") | ||
| + | Return 1 | ||
| + | End If | ||
| + | |||
| + | f_permisos_campos() | ||
| + | //============================================================================== | ||
| + | |||
| + | If DATA= 'E' Then | ||
| + | il_rows_import = 0 | ||
| + | End If | ||
| + | |||
| + | il_rows_import = 0 | ||
| + | End If | ||
| + | |||
| + | END CHOOSE | ||
| + | |||
| + | === Desarrollado por: [Miguel Muñoz] Fecha: [17/07/2026] Versión de PB: 12.5 === | ||