Sentencia ON CHANGE OF

Que tal @Abapers!!!

En esta oportunidad les escribo para consultarles sobre el funcionamiento de la sentencia ON CHANGE OF.

Alguien puede explicar para que sirve dicho keyword?? les coloco la sentencia que estoy tratando de entender
GET BKPF.

CHECK BKPF-BUDAT IN S_BUDAT.
REFRESH: X_BSEG, Y_BSET, PO.
ON CHANGE OF BKPF-BUKRS.
CLEAR FLAG_LIFNR.
ENDON.
ON CHANGE OF BKPF-BELNR.
CLEAR FLAG_LIFNR.
ENDON.

Saludos…

Johnny, lo que está tratando de decirte es en el momento que cambia el campo dentro de la Base de datos lógica la cual estás tratando. Para más info tenés que ir a los atributos del reporte, fijarte cual es la Base de datos lógica y si la conocés, desde la se36 la podés visualizar cual es la estructura, por el código que colocás podría ser la BRF o BRM. Te fijás cual es la tabla en cuestión y se utiliza como una especie de corte de control.
Espero haber sido claro.
Cualquier duda avisá.
Saludos a tod@s.

1 me gusta

Hola,
Funciona casi igual que el AT NEW , según tu codigo, el ON CHANGE entrará cada vez que cambie la sociedad .

Lo bueno es que puedes usar operadores lógicos a diferencia del AT NEW.

Haden: La sentencia at new se refiere específicamente a tablas internas (datos ya recuperados de la base que se encuentran en memoria), mientras que la on change of es cuando está recuperando datos directamente de la base de datos lógica. Es muy difícil debuguear en BDL, muchas veces te da un dump.
Espero haber sido claro.
Saludos a tod@s.

@gopizarro Sí tienes toda la razón, pero lo he usado dentro de loops igualmente y funciona de maravillas. Esa es otra ventaja frente al AT NEW, que lo usas para BDL y/o fuera de Loops.

EDITADO:

Hay veces que en el AT NEW se te llenan los campos alfanumericos con asteriscos(****), en esos casos puedes usar ON CHANGE y esto no pasa.

Saludos @johnny282,

A medida que el GET BKPF va trayendo los datos el campo BKPF-BELNR va cambiando, precisamente lo que hace la sentencia:

ON CHANGE OF BKPF-BELNR. 
CLEAR FLAG_LIFNR. 
ENDON.

Es que cada vez que valor del mismo cambia, se ejecutará lo que sea que esté contenido dentro de dicho bloque.

4 Me gusta

Excelente muchachos,

Muchas Gracias a Todos por su explicación.

Saludos…