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!!!


Husos Horarios son GMT. La hora en este momento es 22:07:09.

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