Pasar mas de 1parámetro a funcion

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Driau
    Senior Member
    • ago
    • 235

    #1

    Pasar mas de 1parámetro a funcion

    Hola a todos!

    Alguien sabe si en éste cachito de código:

    FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
    P_SELFIELD TYPE SLIS_SELFIELD.
    CASE P_UCOMM.
    WHEN '&IC1'. " SAP standard code for double-clicking
    CHECK NOT P_SELFIELD-VALUE IS INITIAL.
    READ TABLE IT_OUT INDEX P_SELFIELD-TABINDEX.
    SET PARAMETER ID 'BES' FIELD P_SELFIELD-VALUE.
    CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN..
    ENDCASE.
    ENDFORM. "USER_COMMAND


    Se llama a la funcion ME23N y se le pasa el numero de documento de compras, ya que para acceder a dicha transacción sólo se pide el numero de documento de compras. Pero...si entro a una transacción que me pide mas de uno..se puede hacer?? Puedo pasarle a la funcion mas de un valor???

    No se si me explico demasiado bién...
  • nenuke
    Member
    • sep
    • 87

    #2
    Hola,

    tienes que hacer algo parecido a esto:

    *---------------------------------------------------------------------*
    * FORM USER_COMMAND *
    *---------------------------------------------------------------------*
    * ........ *
    *---------------------------------------------------------------------*
    * --> R_UCOMM *
    * --> RS_SELFIELD *
    *---------------------------------------------------------------------*
    FORM user_command USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.

    IF r_ucomm = '&IC1' AND rs_selfield-sel_tab_field = '1-ANLN1'.

    *Lees la tabla que contiene los datos del listado
    *usando como clave el campo donde ha pinchado el usuario.

    read table li_itab with key anln1 = rs_selfield-value.

    SET PARAMETER ID 'AN1' FIELD rs_selfield-value.
    SET PARAMETER ID 'AN2' FIELD li_itab-anln2.
    SET PARAMETER ID 'BUK' FIELD li_itab-bukrs.

    CALL TRANSACTION 'AS03' AND SKIP FIRST SCREEN.

    ENDIF.


    ENDFORM. "user_command


    Donde li_itab es la tabla que le pasas al ALV o donde contengas los datos para generar tu listado.

    Un saludo.

    Comentario

    • Driau
      Senior Member
      • ago
      • 235

      #3
      oK...pero...

      Oki..por lo que veo si se pueden pasar mas valores pero es que a veces en un campo de una transacción le doy a F1 encima de el y no me sale su "ID parámetro". Significa que entonces no lo puedo usar. Mi caso concreto es en la transacción CS15. Le paso al campo MAT un número de material..pero mas a bajo quiero qe me marque la opcion "directa" en "clase de utilización"...es possible eso? Como ya he dicho..este campo no ofrece un campo "ID parámetro" si me pongo encima y le doy a F1..que puedo hacer????

      Comentario

      • sap2006
        Senior Member
        • mar
        • 134

        #4
        Primero decirte que estas llamando a una transacción no una función.
        Tienes varias opciones de hacerlo:

        1.- Si lo haces con un call transaction puedes añadir la coletilla "using itab".
        Esto lo que te permite es hacer un B.I. Para ello tendras que hacer una
        grabación de la transaccion CS15 ( Sistema->Servicios->Batch Input-> Grabacion).
        Donde:
        DATA: itab TYPE TABLE OF BDCDATA occurs 0 with header line.

        te paso tambien un form que te vendra bien que sera donde meteras la grabacion que has hecho antes que sera del tipo:

        PERFORM dynpro USING: 'X' 'ZPCEDTE0' '1000',
        ' ' 'BDC_OKCODE' '=%154',

        *&---------------------------------------------------------------------*
        *& Form dynpro
        *&---------------------------------------------------------------------*
        FORM dynpro USING p_dynbegin
        p_campo
        p_valor.

        CLEAR bdcdata.

        IF p_dynbegin EQ 'X'.
        MOVE: p_campo TO bdcdata-program,
        p_valor TO bdcdata-dynpro,
        p_dynbegin TO bdcdata-dynbegin.
        ELSE.
        MOVE: p_campo TO bdcdata-fnam,
        p_valor TO bdcdata-fval.
        ENDIF.
        APPEND bdcdata.
        ENDFORM. " dynpro

        Una vez tengas itab rellena solo te queda llamar al call transacion:

        CALL TRANSACTION 'CS15' USING ITAB
        MODE 'N' "N->Oculto, A->Ves las pantallas, E->si
        UPDATE 'S' "hay error.


        2. Puedes hacer un submit al programa que este asociado dicha transaccion, lo veras en sistema->status nombre del programa.

        la llamada seria del tipo:

        SUBMIT zpcedte0 WITH SELECTION-TABLE parametros
        * TO SAP-SPOOL SPOOL PARAMETERS params
        * WITHOUT SPOOL DYNPRO
        AND RETURN.

        donde parametros seria del tipo:
        DATA: parametros LIKE rsparams OCCURS 0 WITH HEADER LINE.

        Espero que con esta ayudita te sirva!! Si te atascas no dudes en preguntar.

        Saludos!!
        Editado por última vez por sap2006; 24/09/2007, 13:17:06.

        Comentario

        • Driau
          Senior Member
          • ago
          • 235

          #5
          Ok..a ver....

          De momento he hecho ésto:

          FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
          P_SELFIELD TYPE SLIS_SELFIELD.
          CASE P_UCOMM.
          WHEN '&IC1'. " SAP standard code for double-clicking
          PERFORM DYNPRO USING:
          'X' 'SAPMC29L' '0200',
          ' ' 'BDC_CURSOR''RC29L-DIRKT',
          ' ' 'BDC_OKCODE' '=CSN2',
          ' ' 'RC29L-MATNR' '4000',
          ' ' 'RC29L-DIRKT' 'X',
          ' ' 'RC29L-MATTP' 'X',
          ' ' 'RC29L-DATUV' 'SY-DATUM'
          'X' 'SAPMC29L' '0205',
          ' ' 'BDC_CURSOR''RC29L-EMENG'
          ' ' 'BDC_OKCODE' '=CSGO',
          ' ' 'RC29L-WERKS' 'CENT'.
          ENDCASE.
          CALL TRANSACTION 'CS15' USING IT_BDCDATA MODE 'N'.
          ENDFORM. "USER_COMMAND

          Manteniendo mi código del ALV..le digo que en vez de hacer lo de antes...ahora realice el batch-input y luego llame a la transacción.
          Por otro lado he declarado el form del dynpro como tu me has dicho (lo unico que he llamado a mi tabla it_bdcdata.:

          FORM DYNPRO USING P_DYNBEGIN
          P_CAMPO
          P_VALOR.

          CLEAR IT_BDCDATA.

          IF P_DYNBEGIN EQ 'X'.
          MOVE: P_CAMPO TO IT_BDCDATA-PROGRAM,
          P_VALOR TO IT_BDCDATA-DYNPRO,
          P_DYNBEGIN TO IT_BDCDATA-DYNBEGIN.
          ELSE.
          MOVE: P_CAMPO TO IT_BDCDATA-FNAM,
          P_VALOR TO IT_BDCDATA-FVAL.
          ENDIF.
          APPEND IT_BDCDATA.
          ENDFORM. "DYNPRO

          Una vez echo todo esto te puedo decir que me da un error entre el numero de parametros que recibe el FORM DYNPRO y los que se le pasan en realidad...pero no se ver porque. También he estado mirando en internet y primero abren el juego de datos..luego lo cierran y otras cosas mas. Eso no s necesario??

          Comentario

          • Driau
            Senior Member
            • ago
            • 235

            #6
            Ok...medio resuelto

            Ok..he arreglado los errores en compilacion. Lo que pasa es que ejecuto el programa y cuando le doy al número de material no hace nada.

            He comprobado que la tabla it_bdcdata se rellena con los campos tal y como en el batch-input.

            Asi que nose que es lo que debe pasar...

            Comentario

            • sap2006
              Senior Member
              • mar
              • 134

              #7
              Pon el modo 'A' en el call transaction para que puedas visualizar pantalla por pantalla lo que hace, asi será mas facil saber porque no mete el valor...
              El valor se lo metes literal o lo metes con una variable?¿

              Comentario

              • Driau
                Senior Member
                • ago
                • 235

                #8
                Solucionado!

                Ya me funciona...al final he utilizado ésta sentencia:

                CALL TRANSACTION 'CS15' USING IT_BDCDATA MODE 'E'.

                Primero la he pusto en Modo 'A'...y he visto pantalla por poantalla como iba haciendo lo que queria. Luego lo he puesto en MODE E y ya me ha funcionado.

                Eres un hacha!!!! ;-)

                Muchissimas gracias!

                Comentario

                Trabajando...