Ayuda de Busqueda no toma parametros

Buenas tengo una consulta, hice por primera vez una ayuda de busqueda pero el problema es que no me está tomando la información de mis parametros (p_matnr, p_werks y otros). Yo divido los programas de la siguiente manera, el programa que llama un include top y uno funcion , el top son todas las defciniiones globales, tablas, parametros, pantallas de seleccion etc y funcion todo lo que es obtencion de data , llamada a smartforms, sapscript etc.

Lo hice de la siguiente manera:

En mi programa que llama a los include puse:

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_charg.
PERFORM show_charg_f4. 

En mi top puse:

****** Tabla para matchcode

DATA:
  BEGIN OF it_match OCCURS 0,  "Esta tabla nos devuelve la ayuda
    shlpname  LIKE ddshretval-shlpname,
    fieldname LIKE ddshretval-fieldname,
    recordpos LIKE ddshretval-recordpos,
    fieldval  LIKE ddshretval-fieldval,
    retfield  LIKE ddshretval-retfield,
  END OF it_match.
"Tabla para matchcode de campo Lote.
DATA:
  BEGIN OF gt_charg_f4 OCCURS 0,
    charg TYPE mseg-charg, "Lote
  END OF gt_charg_f4.

En mi include_funcion puse:

FORM show_charg_f4.

    SELECT charg
    FROM mseg
    INTO TABLE gt_charg_f4
    WHERE matnr EQ p_matnr
    AND werks EQ p_werks
    AND aufnr EQ p_aufnr
    AND bwart EQ '101'.

  IF gt_charg_f4[] IS NOT INITIAL.

   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE         = ' '
      retfield               =           'CHARG'
*     PVALKEY                = ' '
*     DYNPPROG               = ' '
*     DYNPNR                 = ' '
*     DYNPROFIELD            = ' '
*     STEPL                  = 0
      window_title           =             'Lote'
*     VALUE                  = ' '
      value_org              =                   'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     CALLBACK_METHOD        =
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
    TABLES
      value_tab              =              gt_charg_f4[]  "tabla que me trae los datos de mi tabla mseg segun lo que lleno en mis parametros
*     FIELD_TAB              =
      return_tab             = it_match[] 
*     DYNPFLD_MAPPING        =
    EXCEPTIONS
      parameter_error        = 1
      no_values_found        = 2
      OTHERS                 = 3
      .
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    READ TABLE it_match INDEX 1.
    MOVE  it_match-fieldval TO p_charg.
  ENDIF.
  
ENDFORM.

El gran problema que no he podido resolver es por que mi select no esta agarrando la informacion que le pongo en mis parametros _

   (p_matnr TYPE matnr OBLIGATORY,
   p_werks TYPE werks OBLIGATORY,
   p_aufnr TYPE aufnr OBLIGATORY,
   p_charg TYPE CHARG_D. " OBLIGATORY.)

y por ende no me are mi match code y me dice ue no hay entradas cuando por la se16n si las hay o si yo lleno ese campo si me trae data si lo ejecuto lo cual no es el punto porque para eso puse mi matchcode y porque se como llenar eso por algo puse una ayuda xD.

Antes del Select pon:

unpack p_matnr to p_matnr.
unpack p_aufnr to p_aufnr.

Hazlo y vuelve.

3 Me gusta

Mira el problema del select, puede ser por malformacion de la data. Siempre para saber como es el formato que debes enviar a la busqueda, puedes ir a la se16n buscas un registro, y le deas doble click, te pondre un ejemplo:

Fijate, di doble click en uno de los registros. y vamos a ver el billing document

Si en mi select quiero traer ese documento haria lo siguiente
####No Trae nada esta busqueda.
select single vbeln from vbrk into wa_area where vbeln EQ '90000000'.
Fijate que mi select va a fallar porque ese documento no existe en la base de datos.
####Para que funcione debo hacer esto.
select single vbeln from vbrk into wa_area where vbeln EQ '0090000000'.
Fijate que ahora si va a funcionar.

Como supe que le faltaban dos ceros?, en la SE16N siempre te pone el valor formateado mira la imagen, y el valor de salida.
Para las consultas ABAP debes usar el valor formateado.

Ahora puedes usar el unpack como te menciono @Haden_Yasser_
Solo recuerda que el unpack es una sentencia solo para valores numericos, osea que si le haces unpack a una campo alfanumerico bumm un doom en tu programa tendras.
Asi que antes de usar el unpack asegurate de que todo sea numero y para eso puedes usar la siguiente sentencia.


If myvar CO '1234567890 '.
unpack myvar to myvar.
endif.


bueno espero sepas ahora lo que esta incorrecto en tu select.

2 Me gusta

Amigo muchas gracias por su respuestas hoy lelgue temprano al trabajo para seguir y en el estres olvide abrir este foro jejejej, muchas gracias por sus respuesta, ahora debuggeando, viendo probando y orando vi que la primera vez no traia nada pero si llenaba todo y ejecutaba y me devolvia y luego llenaba todo y abria mi ayuda si me abria la ayuda era porque no estaba agarrando los valores de mis parametros me ayudaron y lo que vimos despues de algunas pruebas y errores fue que los parametros tienen obligatory, solo se los quito y ya pero en mi seleccion de pametros antes de abrir mi ayuda de busqueda debo llenar los campos excepto la busqueda y pulsar enter y ahora si abre la ayuda, es algo raro que todos nos quedamos wtf pero ahora solo debo verificar que mis campos no esten vacios estoy haciendo eso con un

AT SELECTION-SCREEN.
IF P_matnr = ’ '.
MESSAGE ‘Complete los campos’ TYPE ‘E’.
ENDIF.

pero me da error, alguna idea de que otra forma lçpodria hacer?

Cual es el error que te aparece?

Bueno, cambie el = ’ ’ por sy-subrc=0 y listo :blush: pero ahora el problema es que me aparece el mensaje pero le doy al boton de atras y en vez de irme a mi pantalla de seleccion se sale del programa he intentado poner CALL SCREEN ‘01000’. pero no me retorna. :frowning:

y que tal con set screen 0.?

is initial perdon jajaj no se que etsaba pensando sy-subrc xD

tampoco amigo smota, jejej jseguire intentando e informaré cualquier cosa. :slightly_smiling:

1 me gusta

Buenas buenas, lo resolvi cambiando el tipo mensaje a I y luego un exit.

un Ejemplo:

IF P_werks is INITIAL.
MESSAGE ‘Campo Centro está vacío’ TYPE ‘I’.
EXIT.

1 me gusta

hola @abapero, al final has conseguido hacer lo que querías?
Por una parte ¿te toma ahora los valores de los otros parámetros? y por otra, al dar un mensaje de tipo I, sale la pantalla pero ¿no salta la ejecución después de darle ok al mensaje informativo hasta el start-of-selection?

Buenas si lo resolvi, lo de devolverme a mi pantalla de seleccion lo resolvi con:

IF P_werks is INITIAL.
MESSAGE ‘Campo Centro está vacío’ TYPE ‘I’.
EXIT.

Y lo otro de los parametros era porque los puse OBLIGATORY y tuve qui quitarle eso y hacer la verificacion de que no estuvieran vacíos por codigo.

@abapero,si ya conseguiste la solución, te invito a que marques el mensaje que mas te ayudo a encontrar la solución.

Saludos

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