Technika warunków (ang. condition technique) jest używana szeroko w SAP do m.i. ustalania warunków cenowych czy wyszukiwania informacji wyjściowych. Umożliwia on określanie np. rabatów czy rodzajów wydruków na podstawie wartości w określonych polach księgowanego dokumentu. Często zachodzi potrzeba dodania własnego pola do katalogu pól. Poniżej przedstawiam jak to zrobić.
Proces dodawania własnego pola przedstawię na przykładzie modułu Gospodarki Materiałowej i ustalania informacji wyjściowej (najczęściej wydruku). Ten sam sposób działa w innych modułach – różnić się będą nazwy struktur komunikacyjnych i rozszerzeń user-exit, jednak zasada jest niezmienna.
Pola dostępne podczas ustalania informacji wyjściowej są określone w strukturach komunikacyjnych: KOMKBME (nagłówek dokumentu materiałowego) i KOMPBME (pozycja dokumentu materiałowego). Nazwy tych struktur można sprawdzić dla innych aplikacji sprawdzając przypisania pól w definicji sekwencji dostępu.
Nowe pole należy przede wszystkim dodać do jednej z tych struktur w zależności czy wartość tego pola wynika z nagłówka czy z pozycji dokumentu materiałowego. Ponadto, żeby pole było widoczne w procedurze ustalania informacji wyjściowej musisz je dodać do struktury KOMB. Pole do struktury najlepiej dodać przez APPEND STRUCTURE.
Następnie nowe pole należy dołączyć do katalogu pól dostępnych podczas ustalania informacji wyjściowej. Najprościej zrobić to przy pomocy transakcji NACE. Tutaj należy zaznaczyć aplikację ME Gospodarka Materiałowa i z menu wybrać Edit->Field Catalog.
Teraz można już skonfigurować tablicę warunków i dalej sekwencję dostępów z nowym polem.
Pozostaje jeszcze kwestia napełniania nowego pola danymi podczas ustalania informacji wyjściowej. Zwykle dane do struktur komunikacyjnych są przekazywane przy pomocy funkcji <nazwa struktury>_FILL. W przypadku MM-IM dla pozycji dokumentu jest to KOMPBME_FILL. Gdy wyświetlisz kod źródłowy tej funkcji zaraz na początku zobaczysz linię:
MOVE-CORRESPONDING com_mseg TO com_pbme.
Powiedzmy, że nowym polem jest UMWRK “Zakład wydający/dostarczający”. Jeśli dodałeś to pole do struktur komunikacyjnych z zachowaniem oryginalnej nazwy, co nie jest do końca zgodne z konwencjami SAP, czyli UMWRK, nie musisz nic więcej robić. Powyższa linia kodu przeniesie wartość tego pola z dokumentu materiałowego do struktury komunikacyjnej.
Puryści SAP powiedzą, że to nie jest dobry sposób, gdyż pola dodawane do struktur data dictionary powinny mieć przedrostek ZZ, aby uniknąć konfliktu nazw pól w przyszłości. Jeśli dodałeś pole z przedrostkiem ZZ lub jest to zupełnie nowe pole, które nie występuje w dokumencie materiałowym musisz napisać procedurę, która napełni to pole. Robisz to przy pomocy rozszerzenia, które jest wywoływane na końcu funkcji KOMPBME_FILL poprzez wywołanie:
PERFORM userexit_kompbme_fill.
Zatem należy zaimplementować procedurę:
FORM USEREXIT_KOMPBME_FILL. * COM_KBME-ZZFIELD1 = ENDFORM.
i w niej oprogramować wyliczanie wartości nowego pola.
Zapewne zwróciłeś uwagę na możliwość dodania pola niezgodnie z konwencjami SAP i oszczędzenia sobie dodatkowego programowania. Artykuł Korzyści z łamania uznanych reguł w SAP traktuje o tym kiedy, gdzie i dlaczego warto nie przestrzegać konwencji SAP i jakie korzyści można w ten sposób osiągnąć.