MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   at line selection con call transaction (foro/showthread.php?t=11992)

juanmgdelomana 26/03/08 14:08:07

at line selection con call transaction
 
Hola, buenas a todos:

Tengo una duda, estoy sacando un listado simple con varios registros y quiero que una vez sea pinchado uno determinado se haga un call transaction cogiendo un campo de ese registro seleccionado. El problema es que no me llega a lanzar el call transaction y no veo cual es el problema.

Os dejo el código, a ver si algún alma caritativa me puede ayudar.

Gracias.

tables: caufv, qals.

data: va_aufnr like caufv-aufnr.

data: begin of it_aufnr occurs 0,
aufnr like caufv-aufnr.
data: end of it_aufnr.

data: begin of it_trazbi_sem occurs 0,
charg like qals-charg,
prueflos like qals-prueflos.
data: end of it_trazbi_sem.

SELECTION-SCREEN BEGIN OF BLOCK B0 WITH FRAME.
PARAMETERS: Ciclo like caufv-cy_seqnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B0.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ciclo.

START-OF-SELECTION.

perform selection.

end-of-SELECTION.

set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

perform write.

at LINE-SELECTION.

if not it_trazbi_sem-prueflos is initial.

SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

else.

MESSAGE s001(z1).

endif.


form selection.

select aufnr
from caufv
into CORRESPONDING FIELDS OF TABLE it_aufnr
WHERE cy_seqnr = ciclo.


SELECT charg prueflos
from qals
into CORRESPONDING FIELDS OF table it_trazbi_sem
FOR ALL ENTRIES IN it_aufnr
where aufnr = it_aufnr-aufnr.

endform.


form write.

loop at it_trazbi_sem.
write: /, at 10 it_trazbi_sem-charg,
at 30 it_trazbi_sem-prueflos HOTSPOT.
hide it_trazbi_sem-prueflos.
endloop.
clear it_trazbi_sem.

endform.

robert_milan 26/03/08 14:41:06

Puede ser que la linea que estas leyendo no es correcta:

Mira te pongo un ejemplo de un informe en donde los datos empiezan apartir de la linea 3. Verifica esto.

REFRESH BDC_TAB.
CHECK SY-CUROW >= 3.
IF SY-CUCOL <= 10.
PERFORM DYNPRO USING:
'X' 'SAPMF05L' '0100', "Pantalla
' ' 'RF05L-BELNR' ITAB-CONTRATO, "campo contrato
' ' 'RF05L-BUKRS' ITAB-BUKRS, "campo sociedad
' ' 'RF05L-GJAHR' ITAB-GJAHR. "campo ejercicio
* ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
CALL TRANSACTION 'FBD3' USING BDC_TAB.
ELSEIF SY-CUCOL >= 80.
PERFORM DYNPRO USING:
'X' 'SAPMF05L' '0100', "Pantalla
' ' 'RF05L-BELNR' ITAB-DOC, "campo contrato
' ' 'RF05L-BUKRS' ITAB-BUKRS, "campo sociedad
' ' 'RF05L-GJAHR' ITAB-GJAHR. "campo ejercicio
* ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
CALL TRANSACTION 'FB03' USING BDC_TAB.
ENDIF.


Saludos!!!

juanmgdelomana 26/03/08 14:47:52

Es una buena idea, pero creo que no se trata de eso... He estado debueando el programa y ni siquiera llega al evento at line selection. Muchas gracias por tu colaboración. Seguire peleando con ello.

mysmb2 26/03/08 14:50:55

probe tu codigo, no tuve problemas en ejecutar el call transaction, hace un /h cuando pichas un registro (pick).
lo unico que cambie fue el status, fijate capaz es eso.
Saludos.

robert_milan 26/03/08 14:51:00

Mira te dejo el ejemplo completo,

REPORT zfiinf_contratos NO STANDARD PAGE HEADING.

TABLES: bkpf, "Cabecera de documento para Contabilidad
bseg, "Segmento de documento de Contabilidad
kna1. "Maestro de clientes (parte general)

**********************
*TABLAS INTERNAS
**********************
DATA: BEGIN OF itab OCCURS 0,
contrato LIKE bkpf-dbblg,
cod_cli LIKE kna1-kunnr,
nom_cli LIKE kna1-name1,
doc LIKE bkpf-belnr, "documento contable
gjahr LIKE bkpf-gjahr, "ejercicio
bukrs LIKE bkpf-bukrs, "sociedad
END OF itab.
DATA flag.

*Para cuando se llama a las transac. FB03 y FBD3
DATA: BEGIN OF bdc_tab OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdc_tab.

**********************
*PANTALLA DE SELECCION
**********************
SELECT-OPTIONS contrato FOR bkpf-dbblg OBLIGATORY.


**********************
*CABECERA
**********************
TOP-OF-PAGE.
PERFORM cabecera.


**********************
*START OF SELECTION
**********************
START-OF-SELECTION.

SELECT * FROM bkpf WHERE dbblg IN contrato.
*el cliente no va a cambiar, así que entramos una sola vez en la BSEG
*para encontrarlo
SELECT * FROM bseg UP TO 1 ROWS WHERE bukrs = bkpf-bukrs
AND belnr = bkpf-belnr
AND gjahr = bkpf-gjahr.
SELECT SINGLE * FROM kna1 WHERE kunnr = bseg-kunnr.
ENDSELECT.
MOVE kna1-kunnr TO itab-cod_cli.
MOVE kna1-name1 TO itab-nom_cli.
MOVE bkpf-dbblg TO itab-contrato.
MOVE bkpf-belnr TO itab-doc.
MOVE bkpf-gjahr TO itab-gjahr.
MOVE bkpf-bukrs TO itab-bukrs.
APPEND itab.
CLEAR itab.

ENDSELECT.


*ESCRIBIMOS.

LOOP AT itab.
AT NEW contrato.
flag = 'X'.
ENDAT.

IF flag = 'X'.
CLEAR flag.
WRITE:/(10) itab-contrato HOTSPOT,
15(10) itab-cod_cli,
30(35) itab-nom_cli,
80(10) itab-doc.
HIDE: itab-contrato, itab-doc, itab-gjahr, itab-bukrs.
ELSE.
WRITE:/80(10) itab-doc.
HIDE: itab-doc, itab-gjahr, itab-bukrs.
ENDIF.

ENDLOOP.

*************************************
*CUANDO EL USUARIO HAGA DOBLE-CLICK SOBRE UN CONTRATO
*O UN DOCUMENTO
*************************************
AT LINE-SELECTION.
PERFORM call_transaction.





*-----------------------------------------
**RUTINAS
*-----------------------------------------


*&---------------------------------------------------------------------*
*& Form CABECERA
*&---------------------------------------------------------------------*
FORM cabecera.
WRITE:/(10) 'CONTRATO',
15(12) 'COD. CLIENTE',
30(35) 'CLIENTE',
80(15) 'DOC. CONTABLE'.
ULINE.

ENDFORM. " CABECERA

*&---------------------------------------------------------------------*
*& Form CALL_TRANSACTION
*&---------------------------------------------------------------------*
*Cuando el usuario haga doble click sobre un contrato irá a la
*transacción FBD3 (Visualizar documento contable).
*Si es sobre un documento contable irá a la FB03 (Visualizar documento)
*----------------------------------------------------------------------*
FORM call_transaction.

REFRESH bdc_tab.
CHECK sy-curow >= 3.
IF sy-cucol <= 10.
PERFORM dynpro USING:
'X' 'SAPMF05L' '0100', "Pantalla
' ' 'RF05L-BELNR' itab-contrato, "campo contrato
' ' 'RF05L-BUKRS' itab-bukrs, "campo sociedad
' ' 'RF05L-GJAHR' itab-gjahr. "campo ejercicio
* ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
CALL TRANSACTION 'FBD3' USING bdc_tab.
ELSEIF sy-cucol >= 80.
PERFORM dynpro USING:
'X' 'SAPMF05L' '0100', "Pantalla
' ' 'RF05L-BELNR' itab-doc, "campo contrato
' ' 'RF05L-BUKRS' itab-bukrs, "campo sociedad
' ' 'RF05L-GJAHR' itab-gjahr. "campo ejercicio
* ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
CALL TRANSACTION 'FB03' USING bdc_tab.
ENDIF.


ENDFORM. " CALL_TRANSACTION

*---------------------------------------------------------------------*
* FORM DYNPRO *
*---------------------------------------------------------------------*
* --> VALUE(DYNBEGIN) *
* --> VALUE(NAME) *
* --> VALUE(VALUE) *
*---------------------------------------------------------------------*
FORM dynpro USING value(dynbegin) value(name) value(value).

CLEAR bdc_tab.
IF dynbegin = 'X'.
bdc_tab-program = name.
bdc_tab-dynpro = value.
bdc_tab-dynbegin = 'X'.
ELSE.
bdc_tab-fnam = name.
bdc_tab-fval = value.
ENDIF.
APPEND bdc_tab.

ENDFORM. " DYNPRO

Saludos!!!!

mysmb2 26/03/08 14:58:37


comenta esta parte y probalo.
set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

juanmgdelomana 26/03/08 15:01:24

Muchisísisisisismas gracias mysmb2!!!

Tenías razón, he comentado mi status y ya pasa por esa parte del código y funciona!!! No entiendo muy bien cual es la razón pero... que más da no???
Jejejeje. No, en serio, me gustaría saber porque pasa esto porque el status lo necesito para hacer otras cosas...

Muchísimas gracias a los dos por vuestra atención y colaboración!!!

DavidXD_XD 26/03/08 15:04:53

Hola, el problema de tu codigo es el PF STATUS, comentale esa sentencia y vas a ver que entrara la AT line-selection ... espero te sirva

DavidXD_XD 26/03/08 15:07:16

hola de nuevo, mysmb2 tiene la razon :D , no vi los post q respondieron mientras probaba el codigo .... un saludo :p

juanmgdelomana 26/03/08 15:14:33

Gracias a ti tb DAVID_XD_XD, alguno me podríais explicar cual es la razón por la que no funciona con mi status???

No lo logro entender... Y es que necesito tener un status propio ya que necesito crear un botón que me haga otras cosas.

Saludos!!!

robert_milan 26/03/08 15:26:21

Lo que necesitas ahora es el evento AT USER-COMMAND.

el codigo del hotspot es el &IC1

y solo despues debes teenr una variable aux = sy-curow - 2.

read table it_trazbi_sem index aux.

debido a que por defaul la primera linea se imprime en la linea 3

despues mandar este codigo:

SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

y listo

espero te sirva

saludos!!!

juanmgdelomana 27/03/08 08:38:03

Un código al hotspot???

robert_milan 27/03/08 08:42:38

cuando introduces un Status Z, el hot spot se le asigna automaticamente el codigo &IC1.

Saludos!!!

juanmgdelomana 27/03/08 09:28:17

No entiendo lo que quieres decir cuando dices que le he de asociar ese código al hotspot... Estoy un poco perdido con eso... He de tocar algo en mi status Z o tocar el código del programa?

Muchas gracias

robert_milan 27/03/08 09:44:29

en tu funcion

form write.

loop at it_trazbi_sem.
write: /, at 10 it_trazbi_sem-charg,
at 30 it_trazbi_sem-prueflos HOTSPOT.
hide it_trazbi_sem-prueflos.
endloop.
clear it_trazbi_sem.

endform.

Lo que puse en rojo, es el texto en Hotspot. por lo tanto cuando tu le pones el status Z ese campo se le asigna automaticamente el codigo &IC1.

entonces en el AT user-command.

debes poner algo asi:

case sy-ucomm.
when '&IC1'.
"Codigo X"
encase.

con esto ya tienes la funcionalidad del clic.

espero te quede mas claro.

juanmgdelomana 27/03/08 10:28:50

Ya había probado algo así, pero ahora no funciona nada, no hay que poner at line selectio o si? donde?

No entiendo que pasa!!!

Estoy un poco desesperado.

Te pongo el código que estoy probando a ver si me puedes ayudar. Gracias.

******************************************

REPORT ZQM_TRAZABILIDAD_SEM no STANDARD PAGE HEADING.

tables: caufv, qals.

data: va_aufnr like caufv-aufnr.

data: begin of it_aufnr occurs 0,
aufnr like caufv-aufnr.
data: end of it_aufnr.

data: begin of it_trazbi_sem occurs 0,
charg like qals-charg,
prueflos like qals-prueflos.
data: end of it_trazbi_sem.

SELECTION-SCREEN BEGIN OF BLOCK B0 WITH FRAME.
PARAMETERS: Ciclo like caufv-cy_seqnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B0.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ciclo.

START-OF-SELECTION.

perform selection.

end-of-SELECTION.

set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

perform write.

CASE sy-ucomm.
WHEN 'MEDIA'.
PERFORM cal_media.
WHEN '&IC1'.
if not it_trazbi_sem-prueflos is initial.

SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

else.

MESSAGE s001(z1).

endif.
endcase.


form selection.

select aufnr
from caufv
into CORRESPONDING FIELDS OF TABLE it_aufnr
WHERE cy_seqnr = ciclo.


SELECT charg prueflos
from qals
into CORRESPONDING FIELDS OF table it_trazbi_sem
FOR ALL ENTRIES IN it_aufnr
where aufnr = it_aufnr-aufnr.

endform.

form write.

write: /, at 10 'LOTE', at 30 'TOLVA', at 50 'LOTE INSP.'.
write: /.
uline at 10(50).
loop at it_trazbi_sem.

write: /, at 30 it_trazbi_sem-charg,
at 50 it_trazbi_sem-prueflos HOTSPOT.
hide it_trazbi_sem-prueflos.

endloop.

clear it_trazbi_sem.

endform.

form cal_media.
write: /, 'Hola'.
endform.

robert_milan 27/03/08 10:31:10

antes del CASE sy-ucomm.

necesitas el AT USER-COMMAND.

Pruebalo.

REPORT ZQM_TRAZABILIDAD_SEM no STANDARD PAGE HEADING.

tables: caufv, qals.

data: va_aufnr like caufv-aufnr.

data: begin of it_aufnr occurs 0,
aufnr like caufv-aufnr.
data: end of it_aufnr.

data: begin of it_trazbi_sem occurs 0,
charg like qals-charg,
prueflos like qals-prueflos.
data: end of it_trazbi_sem.

SELECTION-SCREEN BEGIN OF BLOCK B0 WITH FRAME.
PARAMETERS: Ciclo like caufv-cy_seqnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B0.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ciclo.

START-OF-SELECTION.

perform selection.

end-of-SELECTION.

set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

perform write.

AT user-command.

CASE sy-ucomm.
WHEN 'MEDIA'.
PERFORM cal_media.
WHEN '&IC1'.
if not it_trazbi_sem-prueflos is initial.

SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

else.

MESSAGE s001(z1).

endif.
endcase.


form selection.

select aufnr
from caufv
into CORRESPONDING FIELDS OF TABLE it_aufnr
WHERE cy_seqnr = ciclo.


SELECT charg prueflos
from qals
into CORRESPONDING FIELDS OF table it_trazbi_sem
FOR ALL ENTRIES IN it_aufnr
where aufnr = it_aufnr-aufnr.

endform.

form write.

write: /, at 10 'LOTE', at 30 'TOLVA', at 50 'LOTE INSP.'.
write: /.
uline at 10(50).
loop at it_trazbi_sem.

write: /, at 30 it_trazbi_sem-charg,
at 50 it_trazbi_sem-prueflos HOTSPOT.
hide it_trazbi_sem-prueflos.

endloop.

clear it_trazbi_sem.

endform.

form cal_media.
write: /, 'Hola'.
endform.

juanmgdelomana 27/03/08 10:46:42

Añadiendo el at-user command sigue sin funcionar...:(

robert_milan 27/03/08 10:57:54

Haber prueba el codigo que te voy a pasar.
 
Vuelve a probar esto!!!!!

REPORT zqm_trazabilidad_sem NO STANDARD PAGE HEADING.

TABLES: caufv, qals.

DATA: va_aufnr LIKE caufv-aufnr.

DATA: aux LIKE sy-tabix.

DATA: BEGIN OF it_aufnr OCCURS 0,
aufnr LIKE caufv-aufnr.
DATA: END OF it_aufnr.

DATA: BEGIN OF it_trazbi_sem OCCURS 0,
charg LIKE qals-charg,
prueflos LIKE qals-prueflos.
DATA: END OF it_trazbi_sem.

SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME.
PARAMETERS: ciclo LIKE caufv-cy_seqnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b0.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ciclo.

START-OF-SELECTION.

PERFORM selection.

set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

END-OF-SELECTION.
PERFORM write.

AT USER-COMMAND.

CASE sy-ucomm.
WHEN 'MEDIA'.
PERFORM cal_media.
WHEN '&IC1'.
aux = sy-curow - 4.
READ TABLE it_trazbi_sem INDEX aux.
IF sy-subrc = 0.
SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
CALL TRANSACTION 'QA13' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.






*---------------------------------------------------------------------*
* FORM selection *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM selection.

SELECT aufnr
FROM caufv
INTO CORRESPONDING FIELDS OF TABLE it_aufnr
WHERE cy_seqnr = ciclo.


SELECT charg prueflos
FROM qals
INTO CORRESPONDING FIELDS OF TABLE it_trazbi_sem
FOR ALL ENTRIES IN it_aufnr
WHERE aufnr = it_aufnr-aufnr.

ENDFORM.

*---------------------------------------------------------------------*
* FORM write *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM write.

WRITE: /, AT 10 'LOTE', AT 30 'TOLVA', AT 50 'LOTE INSP.'.
WRITE: /.
ULINE AT 10(50).
LOOP AT it_trazbi_sem.

WRITE: /30 it_trazbi_sem-charg,
50 it_trazbi_sem-prueflos HOTSPOT.
HIDE it_trazbi_sem-prueflos.

ENDLOOP.
CLEAR it_trazbi_sem.
ENDFORM.

*---------------------------------------------------------------------*
* FORM cal_media *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM cal_media.
WRITE: /, 'Hola'.
ENDFORM.
con esto solo le debes dar clic al lote que quieres visualizar.

juanmgdelomana 27/03/08 11:04:47

He probado tu código y no funciona la llamada al call transactión...

Con este código funcionaba, pero claro el status estaba comentado...:

confused:

REPORT ZQM_TRAZABILIDAD_SEM no STANDARD PAGE HEADING.

tables: caufv, qals.

data: va_aufnr like caufv-aufnr.

data: begin of it_aufnr occurs 0,
aufnr like caufv-aufnr.
data: end of it_aufnr.

data: begin of it_trazbi_sem occurs 0,
charg like qals-charg,
prueflos like qals-prueflos.
data: end of it_trazbi_sem.

SELECTION-SCREEN BEGIN OF BLOCK B0 WITH FRAME.
PARAMETERS: Ciclo like caufv-cy_seqnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B0.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ciclo.

START-OF-SELECTION.

perform selection.

end-of-SELECTION.

*set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

perform write.

at LINE-SELECTION.





if not it_trazbi_sem-prueflos is initial.

SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

else.

MESSAGE s001(z1).

endif.


form selection.

select aufnr
from caufv
into CORRESPONDING FIELDS OF TABLE it_aufnr
WHERE cy_seqnr = ciclo.


SELECT charg prueflos
from qals
into CORRESPONDING FIELDS OF table it_trazbi_sem
FOR ALL ENTRIES IN it_aufnr
where aufnr = it_aufnr-aufnr.

endform.

form write.

write: /, at 10 'LOTE', at 30 'TOLVA', at 50 'LOTE INSP.'.
write: /.
uline at 10(50).
loop at it_trazbi_sem.

write: /, at 30 it_trazbi_sem-charg,
at 50 it_trazbi_sem-prueflos HOTSPOT.
hide it_trazbi_sem-prueflos.

endloop.

clear it_trazbi_sem.

endform.

form cal_media.
write: /, 'Hola'.
endform.

AT USER-COMMAND.

CASE sy-ucomm.
WHEN 'MEDIA'.
PERFORM cal_media.
WHEN '&IC1'.

endcase.

robert_milan 27/03/08 11:13:07

Vuelve lo a probar ya lo corregi

juanmgdelomana 27/03/08 11:20:36

Lo he vuelto a probar, pero sigue sin funcionar!!! Me voy a pegar un tiro!

Gracias por tu ayuda

robert_milan 27/03/08 11:40:45

es que ya lo probe y si me funciona :S charros, weros y morenos...

no ps quien sabe

juanmgdelomana 27/03/08 11:43:53

Claro, pero es que tu que status estas utilizando? el ZSATUSTRAZABILIDAD? Que características le has dado tu? Este debe de ser el problema yo creo!

robert_milan 27/03/08 11:54:55

yo puse un estatus de alv list ABAP ajustado a ese modelo.

pero en si, no deberia ser eso. verifica si esta activo.

juanmgdelomana 27/03/08 13:13:15

Si, esta activo...
Bufff ya no se que hacer, ahora mismo estoy en el mismo punto que ayer...

Se supone que uno vez que saco el listado se pueden hacer dos cosas: si pinchas en un registro se hace el call transaction y si pinchas en un boton que creas en el status haces otra historía.

El problema es que si comento el status se puede hacer el call transaction pero logicamente no aparece mi boton al que le he dado una determinada funcionalidad. Si lo descomento ocurre a la inversa puedo usar mi boton pero no se puede hacer el call transaction.

Por favor puede alguien ayudarme???

Gracias de verdad Rober_milan por el tiempo que me has dedicado!!!

juanmgdelomana 27/03/08 13:46:06

Ya esta solucionado!!!! :)

La historia era que necesitaba darle funcionalidad en mi status al botón F2 (&IC1).

Muchas gracias robert_milan!!!

robert_milan 27/03/08 13:47:14

Eso excelente....


Husos Horarios son GMT. La hora en este momento es 19:52:09.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web