PDA

Ver la Versión Completa : Llenar una tabla Z pediendo lo datos al usuario


andresf02
15/01/10, 15:55:48
Buenos Dias

Estoy dando mis primeros pasos en ABAP. He tenido experiencia con queries (creandolos o consultandolos) y ya puedo programar mis queries desde abap.

Pero ahora quiero crear mis propias tablas y poder hacer queries y joins sobre ellas. Ya se como crear mis tablas y activarlas pero quisiera saber como poder llenarlas con datos

Es decir, por ejemplo:

Tabla: Zusuarios
Campos: Numero, Nombre, Apellido

Lo que quiero hacer es poder ingresar un registro en dicha tabla como por ejemplo:

14709678 --- Andres --- Velasco

para hacer esto quisiera poder hacerlo de 3 formas (o almenos cualquiera de ellas)

1) Desde una transaccion en SAP (aclaro que uso minisap y no tengo se16n)

2) Desde codigo ABAP (supongo que con el comando INSERT)

3) creando una interfaz donde el usuario vaya ingresando los datos y al final
con un boton que diga GUARDAR, se almacenen directamente los datos en la tabla.



Me interesan mucho las 2 ultimas opciones.


Por favor cualquier idea o solucion se los agradeceria muchisimo para continuar aprendiendo y poder generar solucion en mi trabajo.

Muchas Gracias!

kreuzigen
15/01/10, 18:43:49
Hola, que bueno que hayas entrado al mundo de SAP, es bastante interesante y la programación lo es mas.

1 Si quieres darle mantenimiento a tu tabla, puedes crear una vista de mantenimiento, esto lo haces desde la transaccion SE11. Cuando la hayas creado, puedes ejecutar tu vista con la Tx. SM30.

2 DATA scarr_wa TYPE scarr.

scarr_wa-carrid = 'FF'.
scarr_wa-carrname = 'Funny Flyers'.
scarr_wa-currcode = 'EUR'.
scarr_wa-url = 'http://www.funnyfly.com'.

INSERT INTO scarr VALUES scarr_wa.

3 Es mas complejo, tienes que diseñar una transaccion y dynpro

andresf02
15/01/10, 21:46:00
kreuzigen,
mil gracias por su colaboracion, fue de enorme ayuda para mi ya que me aclaró muchas dudas.

Le comento que para el punto 3) de crear una pantalla para pedirle datos al usuario para llenar la tabla lo solucione gracias a su concejo de crear la vista de mantenimineto. Lo que hice fue crear una transaccion por la se93 y le puse que llamara a la transaccion sm30 en modo de UPDATE omitiendo la pantalla inicial y logre lo que necesisitaba.

Respecto a la programacion en abap, quisiera preguntarle es si existe alguna forma de crear una especie de ciclo que le vaya pidiendo al usuario en campos los datos necesarios. como por ejemplo cuando uno define un parametro y al ejecutar el programa de una pide al usuario dicho parametro. Quisiera saber si se podria hacer de igual manera un campo que cuando el usuario digite un valor, el programa lo almacene en alguna variable para luego hacer la asignacion al campo de la tabla tal cual como usted lo explico.

obviamente esto lo hago porque quiero conocer ya que con la creacion de la transaccion Z que llama a la SM30 solucione el problema.

Muchas gracias!!

MetalGod
27/06/12, 15:17:47
Hola, muy buena tu pregunta, yo tambien recien me inicio y quiero saber como llenar una tabla con tadotos que el usuario ingresa, es buena tu solucion, pero me gustaria practicar haciendo yo una transaccion y una pantalla, alguien tendria un tutorial o me explica cuaales son los pasos a seguir para realizar esto? dese ya muchas gracias

AlexFrias
29/06/12, 19:44:51
Una forma muy sencilla es desde la transacción SE38, para crear tu programa ABAP. Ahí:

parameters:
p_numero type zusuarios-numero,
p_nombre type zusuarios-nombre,
p_apellido type zusuarios-apellido.

wa_zusuarios type zusuarios.

wa_zusuarios-numero = p_numero.
wa_zusuarios-nombre = p_nombre.
wa_zusuarios-apellido = p_apellido.

* ACTUALIZACIÓN DE LA TABLA DE FORMA DIRECTA
INSERT INTO zusuarios VALUES wa_zusuarios.

MetalGod
29/06/12, 19:55:38
muchas gracias, habia hecho algo parecido, con lo que me dijiste me lo pude terminar, muchas gracias.

lucia7272
08/08/12, 15:41:25
Hola, muy buena tu pregunta, yo tambien recien me inicio y quiero saber como llenar una tabla con tadotos que el usuario ingresa, es buena tu solucion, pero me gustaria practicar haciendo yo una transaccion y una pantalla, alguien tendria un tutorial o me explica cuaales son los pasos a seguir para realizar esto? dese ya muchas gracias

Hola a todos, recien me inicio en esto de sap, tengo que llenar una tabla por medio de un loop con un append a gt_alv que es donde tengo mi estructura del alv, realmente estoy bastante perdida con esto, enviare parte de mi código quiza alguien que me pueda ayudar, esto tiene fecha de entrega y estoy muy presionada :confused:

Method search_data.

Data: lt_lfa1 type table of lfa1,
lt_bkpf type table of bkpf,
lt_rbkp type table of rbkp,
lt_t001 type table of t001,
lt_vbsegk type table of vbsegk,
lt_rseg type table of rseg,
lt_gjahr type bkpf-gjahr,
lt_zt1_pagos type table of zt1_pagos.



Field-symbols: <wa_bkpf> like lt_bkpf,
<lf> like line of lt_lfa1,
<vb> like line of lt_vbsegk,
<zp> like line of lt_zt1_pagos,
<bk> like line of lt_bkpf,
<rb> like line of lt_rbkp.


Data:lt_budat type table of bkpf.

Field-symbols: <wa_budat> like line of gs_param-budat.

*Tabla del ALV.

Data: lt_data type table of zstr_alv_pagos.
Field-symbols: <wa_data> type zstr_alv_pagos.

*Para el id de contraseña

Data: NI(10) type N,
NE(10) TYPE C.


READ TABLE gs_param-budat ASSIGNING <wa_budat> INDEX 1.
*ASSIGN gs_param-budat to <wa_budat>.

if sy-subrc = 0.

if <wa_budat>-low is not initial.
lt_gjahr = <wa_budat>-low(4).
ELSEIF
<wa_budat>-high is not initial.
lt_gjahr = <wa_budat>-high(4).
endif.

endif.

CLEAR: lt_lfa1, lt_bkpf, lt_t001, lt_vbsegk.


*Para bkpf:

select *
into table lt_bkpf
from bkpf
where bukrs EQ gs_param-bukrs and
budat in gs_param-budat and
gjahr EQ lt_gjahr and
belnr in gs_param-belnr and "factura
( bstat = 'V' or bstat = 'W' or bstat = 'Z').


*Para rbkp:
select *
into table lt_rbkp
from rbkp
where budat in gs_param-budat and
gjahr EQ lt_gjahr and
belnr in gs_param-belnr and "factura
( rbstat = 'A' or rbstat = 'B' or rbstat = 'C' or
rbstat = 'D' or rbstat = 'E').


*Para vbsegk:
SELECT *
INTO TABLE lt_vbsegk
FROM vbsegk
FOR ALL ENTRIES IN lt_rbkp
WHERE vbsegk~belnr EQ lt_rbkp-belnr AND
vbsegk~gjahr EQ lt_rbkp-gjahr AND
bukrs EQ gs_param-bukrs AND
belnr IN gs_param-belnr AND
Lifnr IN gs_param-lifnr.


*Para rseg:

SELECT *
INTO TABLE lt_rseg
FROM rseg
FOR ALL ENTRIES IN lt_rbkp
WHERE rseg~belnr EQ lt_rbkp-belnr AND
rseg~Gjahr EQ lt_rbkp-gjahr AND
Lifnr IN gs_param-lifnr.


*Acreedor
LOOP AT lt_lfa1 ASSIGNING <lf>.

write: / <lf>-lifnr.

ENDLOOP.


* Nombre del acreedor

SELECT lifnr name1 INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
FROM lfa1
FOR ALL ENTRIES IN lt_VBSEGK
WHERE lifnr = lt_VBSEGK-lifnr.

*Numero del Documento

SELECT lifnr belnr INTO CORRESPONDING FIELDS OF TABLE lt_rbkp
FROM rbkp
FOR ALL ENTRIES IN lt_vbsegk
WHERE lifnr = lt_VBSEGK-lifnr.

*Referencia

SELECT bukrs xblnr INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
FROM bkpf
FOR ALL ENTRIES IN lt_rbkp
WHERE bukrs = lt_rbkp-bukrs.

"posicion

LOOP AT lt_vbsegk ASSIGNING <vb>.

write: / <vb>-sgtxt.

ENDLOOP.

*Numero Interno

SELECT MAX( NUM_I ) into NI from zt2_pagos
where zt2_pagos~sociedad = gs_param-BUKRS.

ni = ni + 1.

en este parte de aca iniciaría mi loop con un append a la gt_alv porfavor si me dan una idea de como continuar

AlexFrias
08/08/12, 16:11:24
Pero... qué es exactamente lo que tienes que mostrar en tu ALV?, cuál es la estructura de zstr_alv_pagos?