PDA

Ver la Versión Completa : Pasar un rango a una subrutina


jtristan
20/08/08, 07:02:47
Hola:

Quiero crearme una subrutina genérica que me llene los rangos. Para ello quiero pasarle por referencia un rango y por valor el signo, la opción, el valor máximo y el mínimo o una lista de valores. Bueno, el problema le tengo, al declarar el valor del rango. Me devuelve un error indicándome que mi rango no tiene la propiedad sign y no sé como decirle que se trata de un tipo rango.

Muchas gracias.

Saludos.

ibecerra
20/08/08, 13:17:53
para ello utiliza los define.
*----------------------------------------------------------------------*
* DEFINE load_sel *
*----------------------------------------------------------------------*
DEFINE load_sel.
* Clear header
clear: &1.
* Fields initialize
&1-sign = &2.
&1-option = &3.
&1-low = &4.
&1-high = &5.
* Append...
append &1.
END-OF-DEFINITION. "load_sel.


y como lo llamas desde tu programa facil
EJEMPLO 1
load_sel ZT_RAN33 'I' 'EQ' 'KD' ' '.
load_sel ZT_RAN33 'I' 'EQ' 'KE' ' '.
load_sel ZT_RAN33 'I' 'EQ' 'KG' ' '.
EJEMPLO 2
LOAD_SEL: R_BLART 'I' 'EQ' 'VR' ' ',
R_BLART 'I' 'EQ' 'KR' ' ',
R_BLART 'I' 'EQ' 'VG' ' ',
R_BLART 'I' 'EQ' 'KG' ' ',
R_BLART 'I' 'EQ' 'VD' ' '.

EJEMPLO 3

SELECT BLART INTO VBLARTA
FROM ZTSRICLA
WHERE GRUPO IN S_GRUPO
AND BLART IN S_BLART.
LOAD_SEL R_BLART 'I' 'EQ' VBLARTA ' '.
ENDSELECT.

DavidXD_XD
20/08/08, 17:21:30
Hola ... puedes crear un tipo local de esta manera:

TYPES: BEGIN OF ty_rango,
sign(1),
option(2),
low TYPE tabla-campo,
high TYPE tabla-campo,
END OF ty_rango.

la tabla y campo debera estar apuntando al tipo de dato que quieres, ahora crear una variable simple como tabla interna:

DATA: ti_rango TYPE TABLE OF ty_rango.

Y cuando quieras llamar a la subrutina la haces de esta manera:

PERFORM rutina_1 TABLES r_rango.

FORM rutina_1 TABLES pr_rango LIKE ti_rango[].
ENDFORM.

Ahi ya te admitirá los campos sign., option, low y high dentro de la subrutina, espero pueda servir :D

jtristan
21/08/08, 05:10:23
Muchas gracias a los dos. Voy a probar ambas opciones. No conocía los define y tienen buena pinta.
Un saludo.

osoro
16/01/14, 18:38:29
Hola, lo que yo hago por ejemplo:

START-OF-SELECTION.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-y01.
SELECT-OPTIONS:
......
seldatab FOR wa_seltrip-DATB1.
SELECTION-SCREEN END OF BLOCK 1.
.....
AT SELECTION-SCREEN.
.....
PERFORM SELDATAB_Ini TABLES seldatab[].
.....

FORM SELDATAB_INI TABLES P_SELDATAB.
DATA: ....
* tr_seldatab LIKE RANGE OF wa_seltrip-DATB1 "Esta es otra manera
* wr_seldatab LIKE LINE OF tr_seldatab.
RANGES: tr_seldatab FOR wa_seltrip-DATB1.
.....
* Creo el criterio de seleccion
tr_seldatab-sign = 'I'.
tr_seldatab-option = 'BT'.
tr_seldatab-low = vl_Ini_Data_Sel.
tr_seldatab-high = vl_Fin_Data_Sel.
APPEND tr_seldatab.
p_seldatab[] = tr_seldatab[].
ENDFORM. " SELDATAB_INI