PDA

Ver la Versión Completa : Pasar mas de 1parámetro a funcion


Driau
24/09/07, 08:44:15
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
24/09/07, 11:14:00
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.

Driau
24/09/07, 12:34:28
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???? :confused:

sap2006
24/09/07, 13:13:58
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!!

Driau
24/09/07, 14:14:58
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??

Driau
24/09/07, 14:36:02
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...

sap2006
24/09/07, 14:56:55
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?¿

Driau
24/09/07, 15:41:29
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!