Friday, March 20, 2009

Verfügbarkeit von Artikel/Material

Es kann der aktuelle Bestand geprüft werden. Dafür sind der FuBa
BESTAND_AKTUELL bzw. der BAPI BAPI_MATERIAL_AVAILABILITY geeignet.

Die derzeit lieferbare Menge (ATP) kann davon aber abweichen, da hier der
Bestand um aktuelle Aufträge/Lieferungen bereinigt ist. Ein FuBa, der die
Übersicht aus der Transaktion MD04 liefert, ist
MD_STOCK_REQUIREMENTS_LIST_API.
Dieser liefert alle Informationen im Detail. Ist nur die reine ATP-Menge
von Interesse kann auf den unterliegenden FuBa AVAILABILITY_CHECK
zurückgegriffen werden. Die Parameter sind allerdings nicht einfach zu
setzen. Am besten setzt man hier einen Breakpoint und ruft dann die
Transaktion MD04 auf.

Ein minimaler Aufruf ist so möglich:
DATA: lt_atpcs TYPE TABLE OF atpcs,
ls_atp TYPE atpcs.

ls_atp-matnr = '000000000000000208'.
ls_atp-werks = '1000'.
ls_atp-prreg = 'BO'.
ls_atp-bdter = '20090320'.
ls_atp-trtyp = 'H'.
ls_atp-idxatp = '1'.
ls_atp-resmd = 'X'.
ls_atp-chkflg = 'X'.

APPEND ls_atp TO lt_atpcs.

CALL FUNCTION 'AVAILABILITY_CHECK'
TABLES
p_atpcsx = lt_atpcs.

Thursday, March 19, 2009

Beschreibung von Typen und Strukturen

Der describe Befehl liefert leider viele wichtige Informationen zu
Feldern/Typen nicht. Dafür sind die Klassen CL_ABAP_TYPEDESCR bzw.
CL_ABAP_STRUCTDESCR sehr hilfreich. Mit Letzterer kann man u.a. eine
Struktur beschreiben lassen und erhält eine Liste mit allen Feldnamen und
ihren Längen.

data: o_structdescr type ref to cl_abap_structdescr,
t_component type abap_compdescr_tab.

o_structdescr ?= cl_abap_typedescr=>describe_by_data( pe_data ).
t_component = o_structdescr->components.


Es kann auch versucht werden, den FuBa REUSE_ALV_FIELDCATALOG_MERGE zu
verwenden.

Datenkonvertierung internes/externes Format

Für die Konvertierung von Daten vom internen in das externe Format
(Stichwort führende Nullen) bzw. andersherum können die Funktionsbausteine
CONVERSION_EXIT_ALPHA_INPUT bzw. CONVERSION_EXIT_ALPHA_OUTPUT verwendet
werden.

Für Datumswerte sind die FuBas CONVERSION_EXIT_PDATE_OUTPUT bzw.
CONVERSION_EXIT_PDATE_INPUT zu verwenden.

Für viele Datenformate/Domänen sind Konvertierungsroutinen hinterlegt
(siehe SE11). Über Dopppelklick auf diese können die
Konvertierungsroutinen ermittelt werden, sprich welche FuBa's verwendet
werden.

Wednesday, March 11, 2009

Programmierung für SD-Preisfindung

Die Preisfindung wird beim Anlegen/Ändern eines Auftrags durchlaufen. Der
Endpreis wird beeinflusst durch Umsatzsteuer, Rabatte, u.a. Über
Customizing und Programmierung können hierbei kundeneigene Spezialitäten
umgesetzt werden. Mit der Transaktion VOFM können diese Einstellungen
vorgenommen werden (Bedingungen, Formeln, etc.)

Belegen von IDoc-Feldern

Wenn ein IDoc an das ERP geschickt werden soll, müssen die Segmente und
Felder korrekt gefüllt sein. Die Struktur eines IDocs kann über die
Transaktion WE60 besorgt werden. Hier muss der Basic Type des IDocs (z.B.
ORDERS05) angegeben werden.
Die Doku kann auch als XML-Schema erstellt werden.

Der Funktionsbaustein IDOC_CREATE_OILORD wandelt einen Kundenauftrag in
die IDoc-Struktur um. Mit Hilfe von Debugging kann die Belegung der Felder
gut nachvollzogen werden.

Folgende Transaktionen sind weiterhin hilfreich:
WE09 - IDoc Suche
BD87 - IDoc Queue
WE19 - Testwerkzeug für IDoc Verarbeitung, es können die Werte eines
bestehenden IDocs für Testzwecke verändert werden
WE64 - Vorgangscodes von Partnervereinbarungen
WE20 - Partnervereinbarungen
WE21 - Ports in der IDoc Verarbeitung

Monday, February 11, 2008

Translate system message into another language

With the function BAPI_MESSAGE_GETDETAIL it is possible to translate any
system message into another language. This is extremly usefull for the web
when a user needs to get language-dependent messages before he logs on
(the system doesn't know the correct language yet).

Sort mechanism respecting field type

It is often not enough to sort an internal table by text or binary value
but respecting the field type, e.g. a date field. In this case you have to
create a sort table with the sort fields as seperate rows. This small
example illustrates this:

date otab TYPE abap_sortorder_tab.
date oline TYPE abap_sortorder.

oline-descending = 'X'.
oline-name = 'CREATE_DATE'. APPEND oline to otab.
oline-name = 'CREATE_TIME'. APPEND oline to otab.
oline-name = 'CUSTOMER'. APPEND oline to otab.

SORT table_to_sort BY (otab).