Ayuda SAP

Valor de un parameter desde una variable

Buenas.
De nuevo estoy aquí planteando dudas sobre ABAP.
En esta ocasión, se me está cruzando la inclusión de valores anteriormente calculados en parameters. No se si es posible, creo que si, ya que en la primera pantalla de SAP aparece el campo mandante y el número del mandante.

El caso es, tengo un parameter que quiero que coja un valor anteriormente calculado con un “Describe”, para que me impresione el número de ID que se va a dar de alta, pero no consigo que me marque nada.
Creo, por otra parte, que estoy utilizando incorrectamente los eventos.
El problema es en el pa_id, que no registra el valor de gv_reg.

Os pego el código, a ver si me podéis echar una mano.

DATA: wa_consultas TYPE STANDARD TABLE OF zempleados_ap329,
      wa_empleados TYPE zempleados_ap329,
      gv_reg TYPE i.

SELECT *
  FROM zempleados_ap329
  INTO TABLE wa_consultas.
*Número de registros en la tabla -> ID
IF sy-subrc EQ 0.
  DESCRIBE TABLE wa_consultas LINES gv_reg.
  "WRITE: / gv_registros.
ENDIF.
gv_reg = gv_reg + 1.


  SELECTION-SCREEN BEGIN OF BLOCK id.
  PARAMETERS: pa_id TYPE i DEFAULT gv_reg.
  SELECTION-SCREEN END OF BLOCK id.
  SELECTION-SCREEN BEGIN OF BLOCK balta WITH FRAME TITLE text-002.
  PARAMETERS:
  pa_nom  TYPE znombre_ap00329    MODIF ID b1,
  pa_ape1 TYPE zapellido1_ap00329 MODIF ID b1,
  pa_ape2 TYPE zapellido2_ap00329 MODIF ID b1,
  pa_dni  TYPE zdni_ap00329       MODIF ID b1 OBLIGATORY,
  pa_tel  TYPE asld2tel           MODIF ID b1,
  pa_dpto TYPE zdpto_ap00329      MODIF ID b1.
*Introducir otro parametro con fecha de alta.
  SELECTION-SCREEN END OF BLOCK balta.

Muchas gracias.

tienes que jugar con los eventos de la pantalla de seleción, en este enlace creo que viene bastante claro,
h_tp://formacion.desarrollando.net/cursosfiles/formacion/curso_390/sap-05-06.pdf
ademas viene también explicado en caso de usar dynpros que te será de utilidad para mas adelante :slight_smile:
si te surge cualquier duda ya sabes,

DATA: wa_consultas TYPE STANDARD TABLE OF zempleados_ap329,
      wa_empleados TYPE zempleados_ap329,
      gv_reg TYPE i.


  SELECTION-SCREEN BEGIN OF BLOCK id.
  PARAMETERS: pa_id TYPE i DEFAULT gv_reg.
  SELECTION-SCREEN END OF BLOCK id.
  SELECTION-SCREEN BEGIN OF BLOCK balta WITH FRAME TITLE text-002.
  PARAMETERS:
  pa_nom  TYPE znombre_ap00329    MODIF ID b1,
  pa_ape1 TYPE zapellido1_ap00329 MODIF ID b1,
  pa_ape2 TYPE zapellido2_ap00329 MODIF ID b1,
  pa_dni  TYPE zdni_ap00329       MODIF ID b1 OBLIGATORY,
  pa_tel  TYPE asld2tel           MODIF ID b1,
  pa_dpto TYPE zdpto_ap00329      MODIF ID b1.
*Introducir otro parametro con fecha de alta.
  SELECTION-SCREEN END OF BLOCK balta.


inicialization. 'evento que se ejecuta antes de mostrar la pantalla de seleccion '
SELECT *
  FROM zempleados_ap329
  INTO TABLE wa_consultas.
*Número de registros en la tabla -> ID
IF sy-subrc EQ 0.
  DESCRIBE TABLE wa_consultas LINES gv_reg.

ENDIF.
  pa_id  = gv_reg + 1.

start-of-selection.
'la lógica de programa

Lo que yo creo que no me está leyendo, es la sentencia select, porque no me inserta el valor de la variable “gv_reg”.
La verdad es que también estoy algo perdido con los eventos.
He probado a colocar los eventos como indicas, pero me sigue sin leer el valor.
He puesto un breakpoint y también se salta esta fase.

DATA: itab TYPE STANDARD TABLE OF X,
      gv_reg TYPE I.

SELECTION-SCREEN BEGIN OF BLOCK ID.
  PARAMETERS: pa_id TYPE I DEFAULT gv_reg.
SELECTION-SCREEN END OF BLOCK ID.

initialization.

SELECT * FROM X
INTO TABLE itab.
*Número de registros en la tabla -> ID
IF sy-subrc EQ 0.
  DESCRIBE TABLE itab LINES gv_reg.
ENDIF.
pa_id  = gv_reg + 1.

revisa a ver porque he hecho la prueba con una tabla cualquiera y si que sale, si debugueas aparece cero porque el valor no se recoge por decirlo asi hasta que ejecutas pero si que se muestra

2 Me gusta

Si, he probado el código y si que funciona.
No se porqué en el programa no sale así.
Tendré que revisar los eventos, porque yo creo que tiene que ser de eso.
Voy a hacer unas pruebas, a ver que sale.

Gracias por la ayuda.

si no te sale pega el código y lo revisamos :wink:

Pues después de hacer varias pruebas y de colocar el evento “INITIALIZATION” en todas las posiciones, he pegado el código en otro programa y ya me ha funcionado :flushed:

He estado investigando también y he encontrado esta explicación:
h_tps://luislokox.wordpress.com/2016/04/03/pregunta-1-preparacion-examen-abap/

Gracias @adalove por las aclaraciones. Pego el código de como ha quedado al final, por si a alguien le sirve.

1 me gusta

Excelente contribuciones @adalove, y @Machord, gracias por pasar el código final, se subió al repositorio. :thumbsup: