Cambio en valores de selección de pantalla

Compañero, quizas sea un error tonto pero no lo veo y la verdad, no lo entiendo mucho.

Tengo el siguiente codigo


AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_id-low.

  PERFORM fo_ayuda_busqueda.

y el form

FORM fo_ayuda_busqueda.

  TYPES: BEGIN OF ty_help,
    id TYPE ztrnhr0001-id,
    titulo TYPE ztrnhr0001-titulo,
    END OF ty_help.

  DATA: lt_ayuda  TYPE TABLE OF ty_help,
        lt_return TYPE TABLE OF ddshretval,
        ls_return TYPE ddshretval.

  FIELD-SYMBOLS: <return> TYPE ddshretval.

  SELECT id titulo
    INTO TABLE lt_ayuda
    FROM ztrnhr0001
    WHERE plans NE space.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ID'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      value_org       = 'S'
      multiple_choice = 'X'
    TABLES
      value_tab       = lt_ayuda
      return_tab      = lt_return
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc EQ 0.

    LOOP AT lt_return ASSIGNING <return>.

      s_id-sign = 'I'.
      s_id-option = 'EQ'.
      s_id-low = <return>-fieldval.
      
      APPEND s_id.
    ENDLOOP.
  ENDIF.
ENDFORM.

La cosa es que si el usuario selecciona varios registros, cuando llega al evento START-OF-SELECTION…ya mi select-option s_id, no tiene los valores que tomo el usuario sino que los repite.

Pienso que puede ser como lleno el select-option, pero no estoy del todo seguro porque anteriormente lo he llenado asi y no he tenido problemas

Que creen ustedes que puede ser ???

@abapers alguna idea

NOTA: acabo de percatarme del siguiente mensaje


Las delimitaciones indicadas no han sido tomadas.
Nº mensaje: DB781

Diagnóstico
El registro de delimitaciones en la pantalla "selección múltiple" se ha interrumpido. Por consiguiente, no se han tomado tales delimitaciones.

Hola Canuto, te recomendaria que declares las variables como global, Por otra prueba con este codigo dsps de tu funcion.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ICON'
      window_title    = 'STATUS'
      value_org       = 'S'
    TABLES
      value_tab       = it_status
      return_tab      = it_match
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc EQ 0.
    READ TABLE it_match INDEX 1.
    MOVE it_match-fieldval TO s_statu-low.
  ENDIF.

Y tienes que crear otro perform para el valor “high”, porque ahi solo obtienes ayuda de busqueda para el valor low.

“AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_id-high.”

Gracias @miguelsap, yo ya habia probado con DYNP_VALUES_UPDATE y no me funciono…voy a probar como tu me dices y te aviso !!

Si, eso si lo se solo que estoy probando con el low para ver como queda y no me funcionaba !!! sera por lo mismo que no tengo el high ???

igual pruebo y te aviso

UPGRADE: @miguelsap viejito, la funcion que tu me pasaste es la misma que yo tenia y la uso tal cual…la unica diferencia fue lo del high, lo coloque he igual sigue comportandose mal :s !!

Hola,

Justo volví del almuerzo y me puse a renegar un ratito con tu programa, para entretenerme.

Logré hacer que funcione, trae los valores correctamente, pero la solución es un poco rebuscada, quizás a partir de este código encuentres algo más prolijo, te lo paso (reemplaza mi tabla Z por la tuya).

REPORT  z_test_sebas2.

TABLES: znca_comercial.

SELECT-OPTIONS: s_id FOR znca_comercial-id_comercial.

RANGES: r_range FOR znca_comercial-id_comercial.

DATA: gv_ayuda TYPE c.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_id-low.

  gv_ayuda = 'X'.

  CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
    EXPORTING
      functioncode           = '=00'
    EXCEPTIONS
      function_not_supported = 1
      OTHERS                 = 2.

AT SELECTION-SCREEN.

  IF gv_ayuda EQ 'X'.

    PERFORM fo_ayuda_busqueda TABLES s_id.

    CLEAR gv_ayuda.

  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  fo_ayuda_busqueda
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ID       text
*----------------------------------------------------------------------*
FORM fo_ayuda_busqueda TABLES p_id STRUCTURE r_range.

* Types
  TYPES: BEGIN OF ty_ic,
          id_comercial TYPE znca_comercial-id_comercial,
          bezei TYPE znca_comercial-bezei,
        END OF ty_ic.

  DATA: lt_ic  TYPE TABLE OF ty_ic,
        lt_return TYPE TABLE OF ddshretval,
        ls_return TYPE ddshretval.

  FIELD-SYMBOLS: <return> TYPE ddshretval.

* Traemos los textos
  SELECT id_comercial bezei FROM znca_comercial
    INTO TABLE lt_ic.

  SORT lt_ic BY id_comercial.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ID_COMERCIAL'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      value_org       = 'S'
      multiple_choice = 'X'
    TABLES
      value_tab       = lt_ic
      return_tab      = lt_return
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc EQ 0.

    LOOP AT lt_return ASSIGNING <return>.

      p_id-sign = 'I'.
      p_id-option = 'EQ'.
      p_id-low = <return>-fieldval.

      APPEND p_id.
    ENDLOOP.
  ENDIF.
ENDFORM.                    "fo_ayuda_busqueda

Espero que te sirva!
Saludos

1 me gusta

Gracias @sconoredhot y @miguelsap, por tomarse un tiempo para eso !!

Pues no se porque, pero la solucion era una sola linea de codigo…de verdad, no se :S !! la respuesta la consegui en google al ver en algun lado mi mismo codigo pero con la diferencia de la linea que comento.

READ TABLE s_id INDEX 1.

esta simple linea me resolvio todo !!


FORM fo_ayuda_busqueda.

  TYPES: BEGIN OF ty_help,
    id TYPE ztrnhr0001-id,
    titulo TYPE ztrnhr0001-titulo,
    END OF ty_help.

  DATA: lt_ayuda  TYPE TABLE OF ty_help,
        lt_return TYPE TABLE OF ddshretval,
        ls_return TYPE ddshretval.

  FIELD-SYMBOLS: <return> TYPE ddshretval.

  REFRESH: s_id.

  SELECT id titulo
    INTO TABLE lt_ayuda
    FROM ztrnhr0001
    WHERE plans NE space.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ID'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      value_org       = 'S'
      multiple_choice = 'X'
    TABLES
      value_tab       = lt_ayuda
      return_tab      = lt_return
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc EQ 0.

    LOOP AT lt_return ASSIGNING <return>.

      s_id-sign = 'I'.
      s_id-option = 'EQ'.
      s_id-low = <return>-fieldval.

      APPEND s_id.
    ENDLOOP.
  ENDIF.

  READ TABLE s_id INDEX 1.
ENDFORM.

De nuevo gracias a todos !!

1 me gusta

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