MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Mandar variable de un report a otro (foro/showthread.php?t=25705)

Driau 30/10/08 09:23:26

Mandar variable de un report a otro
 
Hola a todos,

Tengo un report llamado Z28E que lista los movimientos mensuales de un producto (muestra un ALV por pantalla). Tengo otro programa llamado Z28E_MASIVA que mediante un CALL TRANSACTION ejecuta X veces el Z28E pero este hace que el listado se imprima directamente por la impresora.

Estoy intentando que cuando salgan los X listados...salgan numerados. Por ello en el programa Z28E_MASIVA en donde se realiza el CALL TRANSACTION para cada uno de los materiales he hecho lo siguiente:

FORM procesar_materiales .
LOOP AT seleccion.

d_contador_tmp = d_contador_tmp + 1.
EXPORT d_contador_tmp TO MEMORY ID 'CONTADOR_PAGINAS'.


PERFORM bdc_dynpro USING 'Z28E' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ONLI'.
PERFORM bdc_field USING 'P_MATNR'
seleccion-matnr.
PERFORM bdc_field USING 'P_ANYO'
p_anyo.
PERFORM bdc_field USING 'P_SUBCOM'
p_subcom.
PERFORM bdc_field USING 'P_MATPRI'
p_matpri.
PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=&RNT'.
PERFORM bdc_dynpro USING 'SAPLSPRI' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PRIN'.
PERFORM bdc_field USING 'PRI_PARAMS-PDEST'
'Defecte Windows'.
PERFORM bdc_field USING 'PRI_PARAMS-PRCOP'
'1'.
PERFORM bdc_field USING 'RADIO0500_1'
'X'.
PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=&F12'.
PERFORM bdc_dynpro USING 'Z28E' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/EECAN'.
PERFORM bdc_transaction USING 'Z28E'
'N'
'X'
'S'.
ENDLOOP.
ENDFORM. " procesar_materiales


He creado una variable que a cada iteracion icnrementa en uno el contador. Luego en el programa Z28E que es el que realmente acabar imprimiendo he puesto esto:

INITIALIZATION.

IMPORT d_contador FROM MEMORY ID 'CONTADOR_PAGINAS'.


Teoricamente esperaba que la variable d_contador obtuviera el valor que le pasa el report Z28E_MASIVA pero no es así...

Como puedo hacerlo? Como puedo pasar el valor de este contador de un programa a otro???

ibecerra 30/10/08 12:40:19

Hola Driau y porque no haces algo mas sencillo utiliza un submit
al programa Z28E le creas una variable de entrada parameters con valor entero.
luego cuando llamas al masivo generas tu contador y ese contador se lo envias como parametro al programa z283.

Saludos

Driau 30/10/08 12:55:50

El problema...
 
Es que el programa no lo he hecho yo y quisiera mantener el codigo tal cual esta en la medida de lo possible. Quizás no te he entendido bien..pero puedo combinar el SUBMIT con el CALL TRANSACTION??? Es decir, tal cual esta ahora no le puedo meter un SUBMIT no???

ibecerra 30/10/08 13:08:58


Hola, el que ha hecho ese programa no tiene idea para que casos se utiliza un batch input. :rolleyes:
el batch input , es para entrada netamente de datos , no para impresiones. :)
mira no borres lo q esta hecho . create otro procedimiento y hazlo con el submit.
todos esos parametros q vez q esta siendo el batch input, facil lo puedes hacer con el submit. y el con el minimo codigo
te pongo un ejmplo sencillo.

SUBMIT ZCOB0001
WITH P_BLDAT EQ P_BLDAT
WITH P_BUDAT EQ P_BUDAT .

Driau 30/10/08 13:23:24

Perdona mi incultura
 
Otro procedimiento es otro report???

ibecerra 30/10/08 13:27:57

hola
 
Hola
creo q mejor convesamos por el msg .
no crear otro reporte solo crear un nuevo form o comentar esa lineas y pones el nuevo cambio, en caso q deseas deshacer las modificaciones.. tomalo como si fuera un backup preventivo.
Saludos

Driau 31/10/08 10:40:38

Lo he probado con SUBMIT
 
Pero ahora solo llego a ver el listado en pantalla. Es decir yo necesito ejecutar el Z28E_MASIVA. Supongamos que este ejecuta 4 veces el Z28E con cuatro codigos dematerial: MAT1, MAT2, MAT3 y MAT4.

Lo que deberia pasar es: ejecutio Z28E_MASIVA poniendo los cuatro código de material en su pantalla de seleccion. Este hace un loop a los cuatro materiales y por o tanto hace el SUBMIT cuatro veces. Esto es como esta ahora:

FORM procesar_materiales.

LOOP AT seleccion.

*** INICIO CAMBIO Nº.1 CARLES ***
d_contador_tmp = d_contador_tmp + 1.
*** FINAL CAMBIO Nº.1 CARLES ***

SUBMIT z28e AND RETURN
WITH p_matnr EQ seleccion-matnr
WITH p_anyo EQ p_anyo
WITH p_subcom EQ p_subcom
WITH p_numpag EQ d_contador_tmp
WITH p_matpri EQ p_matpri.
ENDLOOP.

ENDFORM. "procesar_materiales


Lo que necesito es que cuando se vea en pantall el ALV que saca el Z28E, se imprima, luego vuelva al Z28E_MASIVA (con el siguiente código de material y haga lo mismo).

He visto que submit tiene instrucciones para imprimir...pero me da a mi que no podre hacerlo.

Te he agregado al MSN...pero no stas :-(

Un saludo y gracias!

ibecerra 31/10/08 12:15:44

de esta manera es para mandarlo x impresora


* Without archiving
DATA: PARAMS LIKE PRI_PARAMS,
DAYS(1) TYPE N VALUE 2,
COUNT(3) TYPE N VALUE 1,
VALID TYPE C.

CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING DESTINATION = 'LT50'
COPIES = COUNT
LIST_NAME = 'TEST'
LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'
IMMEDIATELY = 'X'
RELEASE = 'X'
NEW_LIST_ID = 'X'
EXPIRATION = DAYS
LINE_SIZE = 79
LINE_COUNT = 23
LAYOUT = 'X_PAPER'
SAP_COVER_PAGE = 'X'
COVER_PAGE = 'X'
RECEIVER = 'SAP*'
DEPARTMENT = 'System'
NO_DIALOG = ' '
IMPORTING OUT_PARAMETERS = PARAMS
VALID = VALID.

IF VALID <> SPACE.
SUBMIT RSTEST00 TO SAP-SPOOL
SPOOL PARAMETERS PARAMS
WITHOUT SPOOL DYNPRO.
ENDIF.


Husos Horarios son GMT. La hora en este momento es 10:35:30.

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