Mi pana, yo ahorita no tengo como ponerte o corregir algunas cosas directamente de workbench sino con mucho gusto y aqui tambien seguramente entre todos sacaremos buenas cosas, yo te voy a dar algunos consejos que alcanzo a ver:
line TYPE STANDARD TABLE OF tline WITH HEADER LINE – Esto es una practica vieja, funcional pero vieja
Actualmente se trabaja con tablas sin cabecera y se declara una estructura (work area) que no es mas que una estructura del mismo tipo de la tabla.
it_line TYPE TABLE OF tline, it = interna table
wa_line type tline.
data: begin of gt_sak occurs 0,
referencia type BSAK-ZUONR,
factura type BSAK-BELNR,
importe type BSAK-WRBTR,
"subt type BSIK-SKFBT,
end of gt_sak.
Esto yo lo haría con un types y luego declaro una tabla del tipo de types que creaste al igual que la estructura
types: begin of ty_gt_sak ,
referencia type BSAK-ZUONR,
factura type BSAK-BELNR,
importe type BSAK-WRBTR,
"subt type BSIK-SKFBT,
end of ty_gt_sak.
data: it_tabla type table of ty_gt_sak,
wa_tabla type ty_gt_sak.
Normalmente cada programa Z tiene en su programa principal, 3 o mas includes
REPORT ZFLETES3.
include REPORT ZFLETES3_top = Declaras todas tus variables.
include REPORT ZFLETES3_e01 = Eventos.
Include REPORT ZFLETES3_ f01 = Subrutinas.
Yo lo uso asi pero la gran mayoria declara primero el include de las subrutinas y luego el de los eventos, ya queda depende de cada programador, yo he revisado y funciona igual…igual si alguien tiene aca alguna observacion o consejo, bienvenido sea !!
LOOP at gt_ca. — Esto es cuando trabajar tablas con cabeceras, es un poco mas lento
loop at gt_ca into wa_ca. = en el wa, se guarda cada registro, tambien te comento que con tablas con cabeceras tienes que estar pendiente porque siempre se va a quedar en la cabecera el ultimo registro del loop y tambien al hacer el update, modificas directo en la tabla.
Es lo que veo yo a simple vista, es mas dificil reconocer las cosas sin el editor del workbench pero espero te sirva de algo !!
Editado; recordar leer cómo formatear código