Completar BDCDATA para SELECT-OPTIONS

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • xirir
    Junior Member
    • feb
    • 25

    #1

    Completar BDCDATA para SELECT-OPTIONS

    Hola,

    Estoy invocando una transacción a la cual le paso con el BDCDATA valores para que se completen los campos de la pantalla inicial.

    Logre poder ingresar en un SELECT-OPTIONS un periodo con los campos LOW y HIGH del dynpro correspondiente, pero yo necesito pasarle muchos valores individuales y no un rango.

    Alguien sabe como hacer esto? Muchas gracias a todos!
    Saludos,
  • Floren
    Senior Member
    • abr
    • 209

    #2
    Hola,

    ¿Te es posible añadir un rango en el código del programa en lugar de hacer el batch input al select-options? Sería bastante más limpio y seguro.

    Un saludo
    Florentín Navarrete Moya
    SAP HCM Consultant
    Mail: administracion@blogdefloren.com
    Blog: www.blogdefloren.com

    Comentario

    • Jonathan Barrio Rodriguez
      Senior Member
      • oct
      • 199

      #3
      NO ME ACUERDO MUY BIEN COMO VA PERO AL DEFINIR el select options:

      select-options: Sociedad for t001.

      Lo que creas es una tabla de rangos llamada Sociedad, y tiene una extructura
      de 4 campos q2ue no me acuerdo muy bien como eran tal que así...

      LOW (correspondería a los datos del primer recuadro)
      HIGH (para los datos del segungo campo)
      SING ( puede ser EQ -igual a- IN -dentro de-)
      y el último campo no me acuerdo.

      Pues bien... si tienes muchos valores de sociedades, se me ocurre que cuando creas el bdc_data, las sociedades las tengas en una tabla_interna...

      Loop at TI_sociedades where dato1 = "dato que le toca en esta vuelta".

      BDC_data-fnam = 'sociedad-low'.
      bdc_data-value = ti_sociedades-sociedad.
      bdc_data-fnam = 'sociedad-sing'.
      bdc_data-value = 'EQ'
      append bdc_data.

      ENDLOOP.

      ....???????

      Aunque igual no es tan facil.

      Por favor... si alguien ve errores que me saque de mi ignoracia.

      Saludos
      Barrio Rodriguez, Jonathan.
      _____________________________________
      "No sigas a quien haya encontrado la verdad sino a quien la busque"

      Comentario

      • sirpolako
        Junior Member
        • ene
        • 7

        #4
        Un select-option funciona igual que un rango. Es una tabla interna con los siguientes campos:

        SIGN es un char de 1 caracter. Suele llevar la I o le E ( incluir o excluir los valores seleccionados. Normalmente I ).
        OPTION char de dos caracteras. Lleva el comparador ( EQ, BT ( between ), etc.. )
        LOW
        HIGH.

        Cuando quiero seleccionar varios valores suelo hacer:
        so_filtro-sign = 'I'.
        so_filtro-option = 'EQ'.
        so_filtro-low = 'Valor 1'.
        APPEND so_filtro.
        so_filtro-sign = 'I'.
        so_filtro-option = 'EQ'.
        so_filtro-low = 'Valor 2'.
        APPEND so_filtro.
        ....

        El problema es que necesitas un append, y eso no sé cómo indicárselo desde el BDC_data

        Comentario

        • i_arnaiz
          Junior Member
          • sep
          • 13

          #5
          Mi consejo es que os prepareis una grabación metiendo en el select options un elemento a un elemento mediante el botón de añadir linea...

          haciendolo sobre la transacción VF04 sería algo así:

          ************************************************** ********
          * Primero se pulsa el botón de añadir elementos al select-option
          bi_data 'X' 'SDBILLDL' '1000'.
          bi_data ' ' 'BDC_OKCODE' '=%009'.

          data ld_index like sy-index.
          * Se cuenta el numero de pedidos que vamos a añadir
          loop at gt_data where marca = 'X'.
          ld_index = ld_index + 1.
          endloop.

          bi_data 'X' 'SAPLALDB' '3000'.
          bi_data ' ' 'BDC_CURSOR' 'RSCSEL-SLOW_I(01)'.
          loop at gt_data where marca = 'X'.
          check not gt_data-pedido_sap is initial.
          ld_index = ld_index - 1.
          bi_data ' ' 'RSCSEL-SLOW_I(01)' gt_data-pedido_sap.
          if not ld_index is initial.
          * Si no es el último codigo se inserta el codigo de añadir nueva linea.
          bi_data ' ' 'BDC_OKCODE' '=LINS'.
          bi_data 'X' 'SAPLALDB' '3000'.
          bi_data ' ' 'BDC_CURSOR' 'RSCSEL-SLOW_I(01)'.
          endif.
          endloop.
          * Si es el último elemento del rango se añade el código de aceptar
          bi_data ' ' 'BDC_OKCODE' '=ACPT'.
          ************************************************** ********

          Espero que podais entenderlo.

          Un saludo.

          Nacho

          Comentario

          • Jonathan Barrio Rodriguez
            Senior Member
            • oct
            • 199

            #6
            Sí, creo que es la solución.

            sólo se me ocurre el inconveniente que a veces, en vez de ser
            unos cuantos concretos... si fuera una selección de rango...
            pero imagino que en el fichero que pasen o en los datos que
            nos de el usuario... nos lo espcificaria... y con una condición simple
            lo controlariamos:

            If Rango.

            grabación de campos de pantalla
            Else.

            grabación que comenta i_arnaiz.

            endif.
            Barrio Rodriguez, Jonathan.
            _____________________________________
            "No sigas a quien haya encontrado la verdad sino a quien la busque"

            Comentario

            • i_arnaiz
              Junior Member
              • sep
              • 13

              #7
              Desde la entrada extendida de select-options tienes tambien una pestaña que te permite la entrada de rangos... no lo olvides, pero aun así tambien puedes convertir el rango en entradas individuales... por ejemplo.

              si tienes el rango de centros desde C001 a C006 primero buscas en la tabla t001w los centros que entran en el rango y te los metes en una tabla interna, es decir (C001,C002,C003,C004,C005,C006) y luego cada uno de estos rangos los metes como entrada individual en el select-option.



              Un saludo.

              Nacho.

              Comentario

              • xirir
                Junior Member
                • feb
                • 25

                #8
                Gracias a todos!
                La solucion que utilice fue la que dio i_arnaiz ya que encontre un post muy parecido en la sdn también!

                Por si les interesa! Aqui va:
                https://www.sdn.sap.com/irj/sdn/thre...hreadID=914344

                Saludos y gracias a todos nuevamente!

                Comentario

                Trabajando...