Validate en el campo de una Matrix

Buenos días, estoy necesitando actualizar el valor del campo de una Matrix cuando se realiza un cambio en el valor de otro campo que se encuentra dentro de la misma Matrix.
Para que se entienda mejor, al seleccionar un Pedido de Compras mi matrix se llena automáticamente con los detalles del Pedido (Articulo, Descripción, Cantidad en el Pedido, Saldo, Cantidad Confirmada).

Lo que necesito es que al modificar el Campo de Cantidad Conf, me actualice automáticamente el campo Saldo Ped (con el resultado de la resta de los valores Cantidad Ped. - El dato que ingreso en Cantidad Conf.) Por ejemplo siguiendo el ejemplo de la imagen de arriba, que yo al ingresar en el primer registro en el campo Cantidad Conf. la cantidad de 10, que el campo Saldo quede en 0.

Intente realizarlo al capturar el evento et_VALIDATE de la columna de mi Matrix (Col4 que corresponde a Cantidad Conf.), pero yo solo quiero que realice esto si se modifica este campo. Con el Vaidate me ingresa igual aunque no modifique el valor.

Cuál es la manera más optima de realizar esto que estoy necesitando?

Saludos cordiales.

Arturo Marecos.

1 me gusta

Buenas @Artu_Marecos,

El validate es un evento que valida por defecto cualquier componente del formulario. Supongo que estas filtrando por la columna 4, pero has de comprender, que cuando rellenas la matrix también se esta ejecutando el validate.

Si actualizas cualquier otro campo del formulario o la matrix que modifique esa casilla, también se ejecutara el validate.

Por lo que te recomiendo que te crees un booleano que se ponga activo/inactivo cuando necesites poder capturar.

No se si mis compañeros tendrán una mejor opción.

Pero para que te hagas una idea, si tu haces una validate de un campo y cambias ese mismo campo, puedes entrar en un bucle infinito.

Un saludo!

4 Me gusta

Yo usualmente hago una validacion de 2 tiempos, en el GotFocusAfter() del grid, asigno el valor inicial de la celda respectiva a una propiedad (o campo) (ejem: ValorInicialCelda), luego en el ValidateBefore() , comparo el ValorInicialCelda con el contenido actual, si son distintos, se modifica el campo respectivo.
Ojo todos los eventos deben ir condicionados a su respectiva columna.

Saludos.

2 Me gusta

Buenas tardes @GabrielGS, justamente realice algo muy similar a tu explicación utilizando el GotFocus y el Validate.
Ya modifico el campo respectivo y y realizo un LoadFromDataSource para actualizar dicho cambio en pantalla, pero como hago para que mi cursor luego de realizar el LoadFromDataSource se quede en la columna siguiente? en este caso mi Col5.

Atte.-

Para asignar el focus a una celda, lo que uso es lo siguiente:

 public static void SetFocusCell (SAPbouiCOM.Matrix oMatrix, dynamic Columnn ,int nRow)
        {
            try
            {
                oEdit = (SAPbouiCOM.EditText)oMatrix.Columns.Item(Columnn).Cells.Item(nRow).Specific;
                oEdit.Active = true;
                oEdit.Item.Enabled = true;
            }
            catch (Exception) { }
        }

Saludos.

2 Me gusta

Muchas gracias como siempre…!!
Atte.-

Artu M.

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.