Herramientas de usuario

Herramientas del sitio


ada:sicoferp:compras:maestro_de_ubicaciones

Maestro de Ubicaciones

En este maestro se configura las diferentes ubicaciones las cuales se le asignan a las placas en el registro de activos fijos.

Se lista la siguiente información:

  • Código
  • Descripción
  • Dirección

Los datos básicos que se deben de ingresar por ubicación son:

  • Descripción
  • Dirección
  • Ubicación Principal
  • Borrado

(Nota: El campo Cod.ubicación se llena automaticamente con el consecutivo SEQ_CONSECUTIVO_EXT_UBICACION)

Documentación de Ajuste Técnico: Módulo de Ubicaciones

1.Identificación del ProblemaRuta: Compras > Maestros > Maestro Ubicaciones (w_mae_ubicaciones.srw).

Síntoma: El sistema permitía modificar campos (descripción, departamento, ciudad), reportaba “Datos guardados correctamente”, pero los cambios no persistían en la base de datos tras cerrar y volver a abrir el módulo. Causa Raíz: Inconsistencia en el manejo de objetos de transacción. Se realizaba el SetTransObject con ts_transaccion , pero se ejecutaban comandos de control (COMMIT / ROLLBACK) utilizando el objeto SQLCA. Al no ser el mismo canal de comunicación, los cambios quedaban en un “limbo” transaccional y se perdían al cerrar la conexión.

2. Solución AplicadaSe reestructuró el evento ue_grabar bajo los siguientes pilares técnicos:

A. Unificación del Transaction ObjectSe migraron todas las sentencias SQL y controles de transacción para utilizar exclusivamente ts_transaccion. Esto garantiza que el Update() y el Commit viajen por el mismo túnel de comunicación. Antes: COMMIT Using SQLCA; Después: COMMIT Using ts_transaccion;

B. Sincronización de Interfaz (Buffer)Se añadió una validación estricta al inicio del evento de grabado:Fragmento de códigoIF idw_registro.AcceptText() <> 1 THEN Return Esto asegura que el último dato digitado por el usuario (ej. la nueva descripción) sea validado y trasladado de la UI al buffer del DataWindow antes de iniciar el proceso de guardado. C. Optimización del Ciclo de UpdateSe implementó el uso de Update(TRUE, FALSE) seguido de un ResetUpdate() manual tras el éxito del COMMIT.Propósito: Evita que el DataWindow limpie sus “flags” de modificación prematuramente. Si el COMMIT falla, el usuario aún tiene los cambios en pantalla para reintentar sin perder su trabajo.

3. Fragmento de Código Corregido (Lógica Principal)Fragmento de código// Sincronizar buffer

IF idw_registro.AcceptText() <> 1 THEN Return

… validaciones de departamento y ciudad Actualización usando el objeto correcto IF idw_registro.Update(TRUE, FALSE) = 1 THEN

  IF IsValid(idw_lista_ubicaciones) THEN
      idw_lista_ubicaciones.Update(TRUE, FALSE)
  END IF
  
  COMMIT Using ts_transaccion; // Unificación de transacción
  
  IF ts_transaccion.SQLCode = 0 THEN
      idw_registro.ResetUpdate()
      // Refrescar UI 
  ELSE
      ROLLBACK Using ts_transaccion;
  END IF

ELSE

  ROLLBACK Using ts_transaccion;

END IF

ada/sicoferp/compras/maestro_de_ubicaciones.txt · Última modificación: 2026/04/10 14:41 por brahian.castaneda