Registros Duplicados en el Loop

Buenas noches amigos, otra vez yo por aquí con una de mis dudas de muy novato en abap.

Siguiendo el hilo de ejercicios que he estado practicando en mi trabajo…

  • hacer una copia de hrp1000 y hrp1001 a tablas (zcm_hrp1000 y zcm_hrp1001) - listo

…me sugirieron realizar un pequeño reporte donde se solicita la cédula (id) al usuario (en este caso un estudiante) y sacar información de 3 tablas distintas, eso lo hice de manera básica, luego me dijeron que lo mejorara usando un PERFORM, ya lo hice pero al ejecutar me duplica los resultados, en realidad no entiendo por que lo hace, me gustaría copiar el código a ver que me sugieren porque mis ojos de novato no dan con el error.

Cabe destacar que luego de eso me pidieron eliminar registros repetidos y contar cuantas veces se repite la información contenida en el campo SCLAS de la zcm_hrp1001 (nada de eso me he puesto a hacerlo, acepto ideas porque estoy medio perdido, a veces es difícil estudiar solo =D ).

Quizás sea una consulta tonta pero de verdad estoy medio perdido en todo esto, con todo y que leo manuales y veo tutoriales cuando puedo pero no tengo la salida a este ejercicio aun jeje.

Buenas noches amigos, pude resolver una parte del ejercicio separando los “FORM”, cree uno para el proceso de captura y corrido de la tabla y el otro lo cree solo para la salida en pantalla, adjunto el código como lo llevo.

Ahora me falta solo una cosa y en realidad le he dado vueltas y no he logrado completarla, al ingresar un número de cédula a mi programa me arroja los resultados de esta manera:

En la columna del “Sclas” tengo varios valores (BP, CQ, SM, etc.), allí es donde necesito contar cuantos registros tengo por cada valor, me explico, que al ingresar cualquier número de cédula valido, me salga cuantos BP tiene el estudiante, cuantos CQ, etc.

¿Alguien tendrá alguna idea de como puedo hacer esto?.

PD: Me disculpo por haber copiado el código sin formatearlo antes, recordé como subirlo de manera adecuada y allí esta.

1 me gusta

No hay problema, ya los he colgado en el repositorio. :+1:
Estoy viendo de crear un programa que permitirá subir código de forma anónima al repositorio, pero aún no está funcionando como quisiera :sob:

Saludos, y disculpa el off-topic

1 me gusta

necesitas contar el número de veces que aparece cada clase o que en ese campo aparezca el número ?

en cuanto a la seleccion de datos yo lo haria en un solo paso con un join

1 me gusta

Hola @adalove buenos días, en efecto en un principio lo hice con un inner join pero tardaba una barbaridad en mostrarme los datos, no se si se deba a que el ambiente de desarrollo donde trabajo esta en un servidor virtual y no en uno fisico, en fin, lo realice de esa manera y es mucho mas rápido, en cuanto a lo que deseo mostrar si, necesito contar el número de veces que aparece cada clase, ejemplo: podría escribir en otra linea:

El número de BP para el estudiante aaaa es: 7 veces
El número de CQ para el estudiante aaaa es: 2 veces.

basandome en tu codigo la forma mas sencilla seria que crearas contadores, uno para cada clase y los rellenaras en el loop

LOOP AT it_1001 INTO wa_1001.
case wa_1001-sclass.
when 'BP'.
ADD 1 TO CNT_BP.
...
ENDCASE.
        MOVE-CORRESPONDING wa_1000 TO wa_salida.
        MOVE-CORRESPONDING wa_1001 TO wa_salida.
        APPEND wa_salida TO it_salida.
ENDLOOP.
2 Me gusta

Si, el único inconveniente es que ese campo “sclas” tiene muchas clases, quería saber si había una manera de recorrerlo y sacar la info que necesito sin necesidad de hacer un contador para cada clase. Y muchas gracias por tomarte el tiempo de darme opciones.

asi sobre la marcha y sin complicar mucho el tema

  • me crearia una tabla interna con dos columnas una para la clase y otra para el contador en si . lt_cnt por ejemplo
  • un field symbol del mismo tipo FIELD-SYMBOLS: <fs_cnt> LIKE LINE OF lt_cnt
    NO se si estas familiarizado con los field-symbols consideralo un puntero a una linea de tu tabla, es la manera mas facil de modificar registros en una tabla interna
  • rellenaria el campo sclass con un select distinct sclas …

y dentro del loop de antes

LOOP AT it_1001 INTO wa_1001.

read lt_cnt with key sclass = wa_1001-sclass assigning <fs_cnt>.
add 1 to <fs_cnt>-cnt.
...

ENDLOOP.
1 me gusta

Muchas gracias, en realidad no estoy familiarizado con los field-symbols aun pues estoy comenzando en abap, pero leeré sobre eso e intentare tu solución a ver que tal me sale y les estaré comentando.

la alternativa con work area seria

read table itab with key  sclass = wa_1001-sclass into wa

add 1 to wa-cnt
modify itab from wa.
2 Me gusta

Chevere, leeré sobre Field-Symbols para entender en realidad que estoy haciendo y les comento el resultado cuando lo tenga listo, no quiero solo copiar sin entender lo que hago, es medio difícil estudiar solo con manuales y videos en ingles (solo medio sabiendo el inglés técnico jaja), se hace muy lento pero allí voy, muchas gracias.

EEy como vas con éste tema?
O le damos montón?
Saludos

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