Glennda Grace
19/02/09, 13:56:34
Hola a todos
Estoy analizando un código en el cual he encontrado la sentencia On change of y tambien At end new. Por las definiciones que he encontrado en ambas indica que se ejecutan cuando el campo que se hace referencia sufre algun cambio, pero no entiendo que clase de cambio o contra que se compara para ver si ha sufrido un campo.
El codigo que tengo es el siguiente:
DATA: t_empltmp LIKE zhremployee OCCURS 0 WITH HEADER LINE,
s_empltmp LIKE zhremployee,
s_empltmp1 LIKE zhremployee.
REFRESH: t_empltmp.
FIELD-SYMBOLS: <fs> TYPE ANY,
<fs1> TYPE ANY.
SORT t_employee by PERNR.
LOOP AT t_employee INTO s_empltmp.
ON CHANGE OF s_empltmp-pernr.
MOVE-CORRESPONDING s_empltmp TO s_empltmp1.
ENDON.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE s_empltmp TO <fs>.
IF sy-subrc <> 0. EXIT. ENDIF.
IF NOT <fs> IS INITIAL.
ASSIGN COMPONENT sy-index OF STRUCTURE s_empltmp1 TO <fs1>.
<fs1> = <fs>.
ENDIF.
ENDDO.
AT END OF pernr.
MOVE-CORRESPONDING s_empltmp1 TO t_empltmp.
APPEND t_empltmp.
ENDAT.
ENDLOOP.
REFRESH: t_employee.
CLEAR: t_employee.
t_employee[] = t_empltmp[].
El caso en particular y me pregunta es: que en la tabla inicial t_employee tengo dos registros de un codigo igual pero se diferencian en un campo:
codigo 350473
direccion Los palmeras
codigo 350473
direccion Los girasoles
y la tabla los ordena en esa secuencia, lo que quiero saber es por que al pasar por este codigo, en la ultima parte del At end of ... no entre para el primer registro y si para el segundo? Que esta comparando? Que es lo hace para decidir por el segundo y no el primero? Para mi lo correcto es que me muestre el primero y no el segundo.
Gracias
Grace
Estoy analizando un código en el cual he encontrado la sentencia On change of y tambien At end new. Por las definiciones que he encontrado en ambas indica que se ejecutan cuando el campo que se hace referencia sufre algun cambio, pero no entiendo que clase de cambio o contra que se compara para ver si ha sufrido un campo.
El codigo que tengo es el siguiente:
DATA: t_empltmp LIKE zhremployee OCCURS 0 WITH HEADER LINE,
s_empltmp LIKE zhremployee,
s_empltmp1 LIKE zhremployee.
REFRESH: t_empltmp.
FIELD-SYMBOLS: <fs> TYPE ANY,
<fs1> TYPE ANY.
SORT t_employee by PERNR.
LOOP AT t_employee INTO s_empltmp.
ON CHANGE OF s_empltmp-pernr.
MOVE-CORRESPONDING s_empltmp TO s_empltmp1.
ENDON.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE s_empltmp TO <fs>.
IF sy-subrc <> 0. EXIT. ENDIF.
IF NOT <fs> IS INITIAL.
ASSIGN COMPONENT sy-index OF STRUCTURE s_empltmp1 TO <fs1>.
<fs1> = <fs>.
ENDIF.
ENDDO.
AT END OF pernr.
MOVE-CORRESPONDING s_empltmp1 TO t_empltmp.
APPEND t_empltmp.
ENDAT.
ENDLOOP.
REFRESH: t_employee.
CLEAR: t_employee.
t_employee[] = t_empltmp[].
El caso en particular y me pregunta es: que en la tabla inicial t_employee tengo dos registros de un codigo igual pero se diferencian en un campo:
codigo 350473
direccion Los palmeras
codigo 350473
direccion Los girasoles
y la tabla los ordena en esa secuencia, lo que quiero saber es por que al pasar por este codigo, en la ultima parte del At end of ... no entre para el primer registro y si para el segundo? Que esta comparando? Que es lo hace para decidir por el segundo y no el primero? Para mi lo correcto es que me muestre el primero y no el segundo.
Gracias
Grace