Archive for Abap příkazy

Submit

Submit je příkaz, kterým lze spustit z vlastního programu jiný program včetně standardních “sapovských”. Příkaz submit je dobrou alternativou k příkazu call transaction. Výsledek je v podstatě stejný, ale příkazem submit lze lépe předávat parametry. V některých případech call transaction jsem narazil na problém s korektním předáváním vstupních parametrů, zejména select-options. » Read more..

Export to database

Pokud vytváříte program, který má značné požadavky na čas pro zpracování výsledků, narazíte brzy na problém, jak data zobrazit uživateli. Program většinou skončí na “Time Out” . Jedno z řešení je spustit program na pozadí a výsledky si přečíst ze spoolu. Tam ale narazíte na další omezení, kterým je možný počet sloupců reportu. Řešením je data uložit do dočasného souboru v tabulce a následně je načíst. Načítáme pak již jen výsledek a čas na zpracování je počítán na několik málo vteřin, případně minut. Jak se to provede?

Nejprve naplníme tabulku daty standardní cestou. Jakmile je tabulka naplněna daty, použijeme příkaz:

Export itab to datbase indx(xx) id sdata

kde itab, je tabulka s daty, kterou ukládáme

indx je tabulka kam data ukládáme (lze prohlížet v se16)

(xx) je oddělovač, kterým si můžeme rozlišit jednotlivé uložené sety.
Doporučuje se využít zkratek modulu, pro který je set dat uložen. (MM, PP, CO….)

sdata je proměnná, typ řetězec s max délkou 22 znaků. Můžeme jej vytvářet dynamicky…
například spojit název reportu se jménem uživatele
Concatenate sy-repid(10) sy-uname into sdata
pozor jen na délku řetězce data. Proto bereme jen deset znaků názvu programu, uživatel má délku 12.

načtení souboru je pak velmi jednoduché příkazem

Import itab from database indx(mm) id sdata.

Takto lze nejen data ukládat, ale i předávat mezi programy. Je potřeba dodržet jen strukturu tabulek v obou programech (předávacím a přijímacím) .

Doporučení: při ukládání udejte ještě parametry souboru, které zajistí, že budete vědět,
jakým programem byl set vytvořen, kdy , jak dlouho jej chcete ponechat atd.
Vhodné je pak záznamy kontrolovat a ty staré a nepotřebné smáznout,
aby data zbytečně nezabírala prostor v databázi.

syntaxe příkazu je pak:


indx-aedat = sy-datum. "datum vzniku záznamu
indx-usera = sy-uname. "uživatel
indx-pgmid = sy-repid. "název programu
indx-begdt = sy-datum. "datum platnosti od
indx-enddt = sy-datum + 30. "datum platnosti do
idnx-sperr = 'X' " dataset, který nemá být nikdy vymazán
EXPORT itab TO DATABASE indx(xx) ID sdata.

pro načtení souboru rozšířené parametry nejsou potřeba.

Append versus collect

Append a collect jsou dva příkazy, kterými přidáváme jednotlivé řádky do interní tabulky. Rozdíl je v tom, že append přidává řádky, collect též přidá řádek, ale pokud již v tabulce existuje záznam se stejnými parametry, slučuje numerické hodnoty.vyzkoušejte nejprve append s výpisem tabulky

DATA: BEGIN OF COMPANIES OCCURS 10,
NAME(20),
SALES TYPE I,
END OF COMPANIES.
COMPANIES-NAME = 'Duck'. COMPANIES-SALES = 10.
APPEND COMPANIES.
COMPANIES-NAME = 'Tiger'. COMPANIES-SALES = 20.
APPEND COMPANIES.
COMPANIES-NAME = 'Duck'. COMPANIES-SALES = 30.
APPEND COMPANIES.

LOOP at companies.

write : / companies-name, companies-sales.

ENDLOOP.

Nyní zaměňte APPEND za COLLECT

DATA: BEGIN OF COMPANIES OCCURS 10,
NAME(20),
SALES TYPE I,
END OF COMPANIES.
COMPANIES-NAME = 'Duck'. COMPANIES-SALES = 10.
COLLECT COMPANIES.
COMPANIES-NAME = 'Tiger'. COMPANIES-SALES = 20.
COLLECT COMPANIES.
COMPANIES-NAME = 'Duck'. COMPANIES-SALES = 30.
COLLECT COMPANIES.

LOOP at companies.

write : / companies-name, companies-sales.

ENDLOOP.

Ve druhém případě jsou výsledkem 2 řádky, program sečetl hodnoty pole companies-sales.

„Žití, to je největší umění na světě, neboť většina lidí pouze existuje.“ Oscar Wilde