PDA

Ver la Versión Completa : Pasar tablas de programa de control a smartforms


rsilvau94
16/06/07, 18:00:29
Hola

Necesito pasar una tabla interna desde mi programa de control a un smartform. Lo que no se es como defino la tabla en el smartform, ya que esta no corresponde a ninguna estructura conocida, es decir es una tabla con datos que me sirven solo para el programa.

Gracias.

Gatini28
18/06/07, 15:50:12
Doc.
en este caso yo te recomendaria crear en el diccionario una estructura con la misma definicion de campos que la tabla interna en tu programa. Dicha estructura no solo te servira para definir la TI en tu smartform sino tambien para crear un work area con el cual podras leerla.

Saludos,
Suerte:cool:

bisonye
21/06/07, 06:43:19
No es necesario crear tablas en el diccionario de datos. Puedes definir una tabla en tu smartform por medio de types pero no puedes pasar esa tabla en la pestaña tables, solo en el import o en el export ( es decir será solo de entrada o solo de salida).
Para crearla entra en definiciones globales en la pestaña tipos y declarala como esto:

types: BEGIN OF wa_tutabla,
tu_campo1 type tipo,
tu_campo2 type tipo,
.

TYPES END OF wa_tutabla.

TYPES: it_tutabla TYPE STANDARD TABLE OF wa_tutabla

Luego pasas tu tabla en el import declarandola como tipo it_tutabla.

Espero haberte ayudado.

Saludos

sai
03/07/07, 15:50:40
HOLA COMO ESTAS.. SOY NUEVA EN ESTO DE PROGRAMAR EN ABAP Y MAS AUN EN SMARTFOMRS.. CIERTAMENTE LO QUE CITASTE EN TU RESPUESTA ME FUNCIONO PERO CUANDO INTENTO PASARLE LOS DATOS A LA TABLA QUE CREE EN EL EXPORT PORQUE MI TABLA ES DE SALIDA.. EN MI PARAMETRO DE SALID EN MI LINEA DE PROGRAMA ME DICE QUE LA TABLA INTERNA NO EST DECLARADA COMO TABLA EN EL SMARTFORMS.. ME PODRIAS AYUDAR YA NO SE QUE HACER. VOY A COLOCAR EL CODIGO A VER SI ME UEDES ORIENTAR UN POCO..
ESTO ES L DECLARACION EN PARAMETROS GLOBALES PESTAÑA TIPOS:

TYPES: BEGIN OF zrobando,
vbeln(10) type c,
matnr(18) type c,
ARKTX(40) type c,
atwrt(30) type c,
pres1(30) type c,
pres2(30) type c,
pres3(30) type c,
pres4(30) type c,
pres5(30) type c,
charg(10) type c,
END OF zrobando.

TYPES: t_doc TYPE STANDARD TABLE OF ZROBANDO.

Y LUEGO EN EL IMPORT
GS_MOSTRAR TYPE t_doc.

en la linea de programa la coloca como de salida y hago

move-corresponding t_salida to GS_MOSTRAR. y no me deja insertar y muestra lo que te comente inicialmente.

gracias por tu tiempo ..

bisonye
04/07/07, 06:15:02
Hola Sai.

Me parece que estás confundiendo cosas. Según entiendo has creado una tabla de entrada en tu smartform que se llama GS_MOSTRAR. Quieres que el contenido de esa tabla tenga los campos de la tabla t_salida que estará definida en el programa que llama al smartform ¿Correcto?.

Si la tabla t_salida tiene la misma estructura que la tabla de tu smartform lo único que tienes que hacer es cuando llames al smart en la parte IMPORTING poner GS_MOSTRAR = t_salida.

Con esto debería bastar a mi me ha funcionado. Ponme la llamada al smartform a ver si veo donde falla.

Saludos

karve255
13/09/07, 14:22:09
Hola, les comento q soy nueva en este tema y he creados varias tablas en el diccionario de datos y requiero pasar estas tablas a smartforms y no tengo ni idea de como se debe realizar esto, alguien me puede colaborar con esto se lo agradeceria muchisimo

bisonye
13/09/07, 16:46:09
Si has definido tus tablas en el diccionario de datos no tienes más que ponerle un nombre a la tabla que quieres pasar (en tables o import) y decirle que es del tipo de tu tabla Z del diccionario.

Saludos

tunante
14/09/07, 07:40:05
Hola he intentado hacer lo de la tabla interna sin crear estructura con el codigo que poniais arriba:
types: BEGIN OF wa_tutabla,
tu_campo1 type tipo,
tu_campo2 type tipo,
.

TYPES END OF wa_tutabla.

TYPES: it_tutabla TYPE STANDARD TABLE OF wa_tutabla

Luego pasas tu tabla en el import declarandola como tipo it_tutabla.

pero me da error el it_tutabla porque me dice ke no esta definido.
¿donde se define it_tutabla o que hay que acer con ese?
Gracias

virus
14/09/07, 08:50:52
Yo en el programa tengo una variable como esta.

DATA: BEGIN OF T_ETI OCCURS 0,
E01 LIKE ZETIQFRM,
E02 LIKE ZETIQFRM,
E03 LIKE ZETIQFRM,
E04 LIKE ZETIQFRM,
END OF T_ETI.

Como puedo declarar en el SMARTFORM para que me recoja T_ETI?.

Saludos y Gracias,

bisonye
14/09/07, 10:52:15
Hola he intentado hacer lo de la tabla interna sin crear estructura con el codigo que poniais arriba:
types: BEGIN OF wa_tutabla,
tu_campo1 type tipo,
tu_campo2 type tipo,
.

TYPES END OF wa_tutabla.

TYPES: it_tutabla TYPE STANDARD TABLE OF wa_tutabla

Luego pasas tu tabla en el import declarandola como tipo it_tutabla.

pero me da error el it_tutabla porque me dice ke no esta definido.
¿donde se define it_tutabla o que hay que acer con ese?
Gracias
Esta estructura tienes que crearl en el smartform en definiciones globales en la pestaña tipos.
Despues en el import del smart defines tu tabla del tipo que has declarado

bisonye
14/09/07, 10:53:04
Yo en el programa tengo una variable como esta.

DATA: BEGIN OF T_ETI OCCURS 0,
E01 LIKE ZETIQFRM,
E02 LIKE ZETIQFRM,
E03 LIKE ZETIQFRM,
E04 LIKE ZETIQFRM,
END OF T_ETI.

Como puedo declarar en el SMARTFORM para que me recoja T_ETI?.

Saludos y Gracias,
Virus, sigue las instrucciones del post y nos cuentas. Debería funcionar.

tunante
14/09/07, 12:17:36
Si en la pestaña tipos es donde he metido ese codigo,
pero ahora me dices que tengo que declararla en el import
pero entonces que tipo de referencia le paso ahi si no quiero crear una estructura, ya que antes es lo que hacia, hacerle referencia a una estructura que me creaba con los campos de la tabla interna del programa.
Pero sino me creo esa estructura que referencia le doy, o nose puede hacer.
gracias.

bisonye
14/09/07, 12:44:45
Si en la pestaña tipos es donde he metido ese codigo,
pero ahora me dices que tengo que declararla en el import
pero entonces que tipo de referencia le paso ahi si no quiero crear una estructura, ya que antes es lo que hacia, hacerle referencia a una estructura que me creaba con los campos de la tabla interna del programa.
Pero sino me creo esa estructura que referencia le doy, o nose puede hacer.
gracias.
SI se puede hacer.

Repito la mecánica,

Declaras los tipos en el smartform con los mismos campos que tienes en tu TI en el programa de control, tanto el work area como la tabla. Voy a llamar al tipo tabla creado t_tipo

En la pesaña IMPORT de INTERFASE DE FORMULARIO creas una línea con el nombre que le quieras dar a la tabla la llamamos it_tabla TYPE y en el tipo de referencia le pones el tipo que acabas de crear T_TIPO

Esto funciona, tengo varios smartforms creados así, revisad la mecánica es más sencilla de lo que parece al principio.

A mi tambien me costó un poco pero no es tan difícil.

Saludos

virus
14/09/07, 13:25:37
Cuando en el apartado INTERFASE FORMULARIO->IMPORT, pongo:
it_tabla TYPE it_tipo, me pone "Tipo it_tipo no existe".
Se debe declarar en algún sitio mas.

tunante
14/09/07, 21:21:57
Bueno gracias bisonye el lunes ya lo probare en algun rato libre en el curro haber si me sale.
Un saludo.

bisonye
16/09/07, 19:13:42
Cuando en el apartado INTERFASE FORMULARIO->IMPORT, pongo:
it_tabla TYPE it_tipo, me pone "Tipo it_tipo no existe".
Se debe declarar en algún sitio mas.
Activa el formulario cuando definas el tipo antes de poner tu tabla en el import.

Una vez activado crea tu tabla en el import del tipo que acabas de crearte.

Saludos

virus
17/09/07, 07:23:24
Una vez activado el formulario después de declarar en DEFINICIONES GLOBALES -> TIPOS, la activación ha ido bien, por que genera el formulario, cuando en el apartado INTERFASE FORMULARIO->IMPORT, pongo:
it_tabla TYPE it_tipo, ahora me pone: "it_tipo" is not a pre-defined or a type from a type group. Sabes si me falta algo mas

bisonye
17/09/07, 12:58:10
Una vez activado el formulario después de declarar en DEFINICIONES GLOBALES -> TIPOS, la activación ha ido bien, por que genera el formulario, cuando en el apartado INTERFASE FORMULARIO->IMPORT, pongo:
it_tabla TYPE it_tipo, ahora me pone: "it_tipo" is not a pre-defined or a type from a type group. Sabes si me falta algo mas
haces esto en tipos?
types: BEGIN OF wa_tutabla,
tu_campo1 type tipo,
tu_campo2 type tipo,
TYPES END OF wa_tutabla.

TYPES: it_tutabla TYPE STANDARD TABLE OF wa_tutabla

Y luego en el import declaras tu variable asi?

tabla type it_tutabla

No hay más. Esto funciona está comprobado. Si son temas de versiones o algún problema con el sistema no puedo ayudarte. Pero te puedo confirmar que funciona

tunante
17/09/07, 13:10:28
me pasa lo mismo que a virus, y hago esto.
defino la tabla en tipos:
types: BEGIN OF wa_cedidas_fin,
bukrs LIKE t001-bukrs, "sociedad
hbkid LIKE zfi_ar03_0001-hbkid, "bancos
hktid LIKE zfi_ar03_0001-hktid, "id cuenta
kunnr LIKE zfi_ar03_0001-kunnr, "deudor
bldat_r LIKE zfi_ar03_0001-bldat_r, "Fecha de venta remesa
wrbtr LIKE zfi_ar03_0001-wrbtr, "importe
zdeleg LIKE zfi_ar03_0001-zdeleg, "delegación
budat_r LIKE zfi_ar03_0001-budat_r, "Fecha contabilización
importe_devuelto LIKE zfi_ar03_0007-wrbtr, "Importe devuelto
importe_vivo LIKE zfi_ar03_0007-wrbtr, "Importe vivo
TYPES END OF wa_cedidas_fin.

TYPES: it_cedidas TYPE STANDARD TABLE OF wa_cedidas_fin.

y luego en el import:
CEDIDAS TYPE IT_CEDIDAS

y me da este error:
"IT_CEDIDAS" is not a pre-defined type or a type from a type group.

Igual es como as dicho de problema de version o algo.
gracias.

karve255
17/09/07, 14:30:26
Gracias por tu ayuda

virus
17/09/07, 14:38:31
Puede ser que me falte algo? Sé que para ver las dynpros bien o se que el botón "layout", el administrador del sistema me tuvo que instalar algo, es posible que me tenga que instalar algo? alguien sabe que es lo que me debo instalar?

Saludos al foro.

virus
17/09/07, 15:47:41
He pensado en dividir el problema, como cojo 4 tablas del programa, poner en una dentro del SMARTFORMS.
O sea tengo:
- DEFINICIONES GLOBALES -> Tipos tengo algo así:
"TYPES: BEGIN OF wa_tutabla,
tu_campo1 type tipo,
tu_campo2 type tipo,
TYPES END OF wa_tutabla.
TYPES: it_tutabla TYPE STANDARD TABLE OF wa_tutabla"

- DEFINICIONES GLOBALES -> Datos Glob. tengo algo así:
it_tabla typo it_tutabla.
wa_tabla typo wa_tutabla.

El lista de Campos On/OF, veo claramente que dentro de it_tabla tengo tu_campo1 , tu_campo2.

Pero cuando voy a hacer Crear->Logica Proceso->Línea de Programa,para rellenar mi tabla interna o sea it_tabla.

CLEAR: it_tabla, it_tabla[].
LOOP AT WS_ENTRADA1.
MOVE WS_ENTRADA1 TO it_tabla-tu_campo1.
APPEND it_tabla.
ENDLOOP.
LOOP AT WS_ENTRADA2.
MOVE WS_ENTRADA2 TO it_tabla-tu_campo2.
APPEND it_tabla.
ENDLOOP.

Cuando verifico me sale un mensaje como este: "it_tabla" is a table without a header line and therefore has no component called "tu_campo1".

Alguien me puede ayudar?

bisonye
18/09/07, 15:17:28
Bueno Virus cambiamos de tercio!!!

Ya veo que has podido crear tablas. Como bien dice el error no tienes línea de cabecera por lo que no puedes trabajar directamente con los campos de tu tabla. De todas formas WS_ENTRADA se supone que es una tabla interna por lo que no tiene sentido que hagas las asignaciones de una estructura a un campo. Utiliza una estructura para pasar los campos y luego la anexas a la tabla. De todas formas esto te dará problemas para poner los datos en la misma línea necesitarías un contador para averiguar la línea en la que tienes que introducir los datos....

Por ejemplo:

Data contador type i.
CLEAR: it_tabla, it_tabla[].
contador = 0.
LOOP AT WS_ENTRADA1.
contador = contador + 1.
wa_tabla-campo = WS_ENTRADA1-campo.
INSERT wa_tabla INTO it_tabla INDEX contador.
ENDLOOP.

En los otros sustituyes Insert por:
MODIFY TABLE it_tabla INDEX contador FROM wa_tabla.

Saludos

virus
18/09/07, 16:53:26
Cuando pongo MODIFY TABLE it_tabla INDEX contador FROM wa_tabla, la palabra INDEX sale en Rojo y me sale el mensaje: "INDEX CONTADOR" is not expected.

bisonye
19/09/07, 12:30:05
La sintaxis está bien.
¿Has probado a hacer f1 en el mensaje de error o en el modify?
Así verás la sintaxis

virus
19/09/07, 16:07:45
La sintaxis está bien.
¿Has probado a hacer f1 en el mensaje de error o en el modify?
Así verás la sintaxis
Al final lo he echo de otra forma
1º DESCRIBE TABLE WS_tabla_E01 LINES NLINE01. (así con las n tablas)
2º Miro cuala es la que tiene mayor número de líneas y la pongo en nlin.

DO NLIN TIMES.
CLEAR WA_ETI.
READ TABLE WS_tabla_E01 INDEX SY-INDEX INTO WA_tabla-campo_1.
READ TABLE WS_tabla_E02 INDEX SY-INDEX INTO WA_tabla-campo_2.
APPEND WA_tabla TO WS_tabla.
ENDDO.

Saludos y Gracias.:)

rfidalgo
03/10/07, 11:23:12
Estoy empezando con esto de SAP y tengo una duda: en el programa tenemos una screen donde introducimos un ID, lo que intentamos hacer es pasar este ID al smartform para que, haciendo un select en este, obtengamos un listado con todos los datos correspondientes a dicho ID. ¿Es posible hacerlo, guardando este ID en una workarea y pasandole al smartform la workarea en lugar de tener que pasar una tabla interna? Si es posible, nos puedes decir como?



Si hay que hacerlo con tablas internas, nos podrias indicar que pasos tenemos que seguir?


agradeceriamos un manual o una guia de como pasar tablas internas de un programa a un smart




Muchas gracias,

jjcarlos
16/03/09, 11:24:24
No entiendo porque ponen a la hora de declarar la estructura propia

types: begin of wa_tabla,
campo1 type loquesea,
campo2 type loquesea2,
TYPES end of wa_tabla.

Asi como esta escrito no complila, da un error porque deberia ser asi simplemente

types: begin of wa_tabla,
campo1 type loquesea,
campo2 type loquesea2,
end of wa_tabla.

Ademas , e seguido al pie de la letra lo que dicen aqui para poder declarar una tabla en la interface pero no me es posible, no se si se debera a la version, porque yo trabajo con la 4.6C y ni siquiera tiene para hacer el download del formulario ni los estilos

kelaya
07/04/14, 18:00:17
Una vez activado el formulario después de declarar en DEFINICIONES GLOBALES -> TIPOS, la activación ha ido bien, por que genera el formulario, cuando en el apartado INTERFASE FORMULARIO->IMPORT, pongo:
it_tabla TYPE it_tipo, ahora me pone: "it_tipo" is not a pre-defined or a type from a type group. Sabes si me falta algo mas


Hola virus, soy muy nueva en esto de sap y a mi me sucede lo mismo que a ti, he seguido los pasos de bisonye pero no puedo resolverlo, podrías indicarme como lo hiciste tú? Tengo la versión 4.6 de sap, no se si esto influye. Saludos! Gracias!