PDA

Ver la Versión Completa : On change of


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

DavidXD_XD
19/02/09, 14:44:32
Hola ... pues veras la sentencia ON CHANGE OF como comentas cumple la condicion si algunos de los campos que se indica sufre un cambio (a excepcion del primer registro que siempre entra) ... y el AT END OF cumple la condicion cuando dentro del LOOP detecta que es el ultimo registro que tiene en comun el campo que se le indica ... por eso en el codigo con esos 2 registros entra al ON CHANGE OF en el primer registro pero con el segundo no porque tanto el codigo que se indica a la sentencia son iguales y en el AT END OF entraria en el segundo porque es el ultimo resgitro que tiene el mismo codigo pernr, espero te pueda ayudar ... :D

Glennda Grace
19/02/09, 16:35:52
Hola David gracias por responderme. Cuando he hecho un debug en el ON CHANGE OF si entra en los dos, ya en la parte del AT END OF solo entra en el segundo.

Cuando me indicas que en el On change of entra si el campo sufre un cambio, a q cambio te refieres? en ese momento del loop q cambio puede sufrir o lo compara con toda la tabla con todos los registros?
Entiendo que se queda con el segundo registro en el At end of, xq me dices que es el ultimo registro que tiene el mismo codigo pernr.

Ojala me haya explicado bien y te haya entendido bien.

Por lo que he encontrado estas sentencias ya no se usan, pero cuales serian las actuales o sus similares?

Gracias nuevamente

Grace

PD: te adjunto un excel que contiene los datos antes de que entre a esa parte y tambien otro con los resultados.

Glennda Grace
19/02/09, 16:38:47
Sorry no se adjutan bien:
Antes:
Línea PERNR ENAME ZDIRECCION
1 350056 FIDEL OLIVAS ESCUDERO 192 URBANZACION PANDO 1 etapa SAN MIGUEL
2 350082 TAPIA Y LAGUNA, JORGE LUIS ALBERTO
3 350082 TAPIA Y LAGUNA, JORGE LUIS ALBERTO
4 350192 ARICA 399 A1 LIMA
5 350469 NUEVO 1 PRUEBA 1, CARGA 1
6 350473 LAS PALMERAS ALTAS 150 SAN BORJA
7 350473 LOS GIRASOLES 150 SAN BORJA
8 350478 NUEVO PRUEBA, CARGA
9 350501

Despues
5 350473 LOS GIRASOLES 150 SAN BORJA


El problema surge xq se esta manejando las fechas de modificacion y las fechas de vigencia, es una bapi que trae los datos de infotipos modificados, pero invoca a otras internamente donde ahi no se manejan bien las fechas.

Gracias

Grace