Hola danieldl,
Te explico las diferencias entre DATA / TYPES / TYPE-POOLS.
1. Primero tenemos DATA, que sirve para declarar una variable.
Ej:
DATA cont TYPE I. --> declaramos la veriable "cont" del tipo Integer
2. Podemos definirnos un tipo de variable con TYPES del estilo:
Ej:
TYPES city type spfli-cityfrom. --> Definimos un tipo de variable como del tipo spfli-cityfrom
DATA wa_city TYPE city. --> Declaramos la variable wa_city del tipo city.
Es decir con TYPES definimos tipos de variables, para luego declarar variables de este tipo.
3. TYPE-POOL <pool>.
Después de esta instrucción viene un grupo de definiciones de tipos de variables de este estilo:
TYPE-POOL hktst.
TYPES: BEGIN OF hktst_typ1,
col1(10) TYPE c,
col2 TYPE i,
END OF hktst_typ1.
TYPES hktst_typ2 TYPE p DECIMALS 2.
CONSTANTS hktst_eleven TYPE i VALUE 11.
Todas las definiciones de tipos de variables empiezan por el nombre del pool de tipos "hktst" seguidos de un guión bajo "_". Estas sentencias te permiten usar esos tipos de variables y constantes definidas dentro de un grupo en todo tu programa, de forma que insertando estas lines en un include, luego en tu programa principal puedes usar estas definiciones.
TYPE-POOLS hktst.
DATA: dat1 TYPE hktst_typ1,
dat2 TYPE hktst_typ2 VALUE '1.23'.
WRITE: dat2, / hktst_eleven.
La salida sería:
1,23
11
Por otra parte contestándote a tu consulta, lo primero de todo es no definirte estos parámetros como obligatorios dentro del programa ya que sino no se ejecutará al no informar estos campos.
PARAMETERS P_GJAHR LIKE BKPF-GJAHR OBLIGATORY --> Sin el OBLIGATORY
Luego por código, puedes controlar si la llamada se realizó en fondo o no con la variable de sistema
SY-BATCH que tomará el valor 'X' si se ejecuta el programa en fondo.
IF SY-BATCH = 'X '.
....
ENDIF.
Espero que te sea de utilidad, si necesitas alguna aclaración coméntanos.
Un saludo
.