Zum Hauptinhalt springen

FUBA: Generelle Material-Verfügbarkeitsprüfungen PP

Für die Verfügbarkeitsprüfung wird folgender Funktionsbaustein genutzt. In diesem Beispiel sollen keine Popups erzeugt werden und Meldungen werden in Logs weggeschrieben, da der Aufruf im Hintergrund durchgeführt wird.

Des Weiteren werden hierbei sämtliche Komponenten aller Vorgänge gperüft. Es ist auch möglich nur eine Teilmenge zu prüfen.

Review

Dieser Artikel wird noch kontrolliert. Dies ist eine Vorab-Version!

DATA 
: lt_resbve_tab TYPE TABLE OF RESBSV
, LT_AUFNR_TAB TYPE TABLE OF AUFNR_VPR
.

"Verfügbarkeitsprüfung
CALL FUNCTION 'CO_ZA_AVAILABILITY_CHECK'
EXPORTING
FLG_MESS = 'X' "X = Messages werden in das Protokoll geschrieben
FLG_MESS_OBJ_DEP = 'X' "X = Message im Protokoll unter abhängigem Objekt
OPEN_CALL = ' ' "Aufruf bei Transaktion "Auftrag eröffnen"
REL_CALL = ' ' "Aufruf bei Transaktion "Auftrag freigeben"
I_ANWDG = '1' "1 = Fertigunsauftrag
"2 = Planauftrag
I_AZERG = '1' "1 = keine Anzeige
"2 = Anzeige der Fehlteilkomponenten
"3 = Anzeige aller geprüften Komponenten
I_MEMO_TP = 'X'
I_FILL_MDVAX = ' '
I_TRTYP = 'V'
SAVE_CALL = ' ' "X = Aufruf beim Sichern des Auftrags
TABLES
RESBVE_TAB = lt_resbve_tab
AUFNR_VPR_TAB = lt_aufnr_tab
EXCEPTIONS
ERROR = 1
OTHERS = 2
Übergabe-Tabellen

Der Knackpunkt des Funktionsbausteines müssen die Tabellen lt_resbve_tab und lt_aufnr_tab gefüllt werden. Hierzu müssen allerdings mehrere Funktionsbausteine ausgeführt werden.

Fubas vor der Verfügbarkeitsprüfung

Lese Daten zum Netzplan anhand der Netzplannummer (AUFNR).

DATA
: ls_caufvd TYPE CAUFVD
.

CALL FUNCTION 'CO_SF_CAUFVD_GET'
EXPORTING
AUFNR_IMP = iv_aufnr
IMPORTING
CAUFVD_EXP = ls_caufvd
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.

Anhand der RSNUM der Reservierung (Komponeten zum Netzplan) werden intern Tabellen aufgebaut.

CALL FUNCTION 'CO_BT_RESBBT_CREATE'
EXPORTING
AUFNR_ACT = ls_caufvd-AUFNR
RESB_NUMMER = ls_caufvd-rsnum
EXCEPTIONS
OTHERS = 99
.

Hole alle Komponeten eines Netzplans. Die Verfügbarkeit selber wird immer über alle Komponenten durchgeführt. Verarbeitet werden letztlich nur die Komponenten deren Vorgänge mitgegeben wurden. Der Rest wird verworfen.

CALL FUNCTION 'CO_BC_GET_RESBV'
EXPORTING
AUFNR_IMP = ls_caufvd-aufnr
IMPORTING
ENTRIES_EXP = lv_entries
TABLES
RESBV_TAB = lt_resbve_tab
.

LOOP AT lt_resbve_tab ASSIGNING FIELD-SYMBOL(<lfs_resbve>).
IF NOT <lfs_resbve>-KZAUS IS INITIAL.
CLEAR <lfs_resbve>-FLMNG.
ENDIF.
<lfs_resbve>-ESMNG = 1.
ENDLOOP.

Baue interne Tabelle LT_AUFNR_TAB auf, die an den FuBa zur Materialverfügbarkeit übergeben wird. Ist 1:1 aus der CN22 kopiert worden.

DATA
: ls_afpod TYPE AFPOD
, aufnr_tmp TYPE AUFNR_VPR
.

"Auftragsposition mit Schlüssel in Belegtabelle nachlesen
CALL FUNCTION 'CO_BI_AFPO_READ_WITH_KEY'
EXPORTING
AUFNR_ACT = ls_caufvd-aufnr
IMPORTING
AFPOD_EXP = ls_afpod
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF sy-subrc = 0.
aufnr_tmp-vfmng = ls_afpod-vfmng.
ENDIF.

aufnr_tmp-aufnr = ls_caufvd-aufnr.
aufnr_tmp-prodnet = ls_caufvd-prodnet.
aufnr_tmp-auart = ls_caufvd-auart.
aufnr_tmp-autyp = ls_caufvd-autyp.
aufnr_tmp-werks = ls_caufvd-werks.
aufnr_tmp-rsnum = ls_caufvd-rsnum.
aufnr_tmp-gmein = ls_caufvd-gmein.
aufnr_tmp-gltrp = ls_caufvd-gltrp.

IF aufnr_tmp-gltrp IS INITIAL.
IF ls_caufvd-gltrs GT ls_caufvd-gstrp.
aufnr_tmp-gltrp = ls_caufvd-gltrs.
ELSE.
aufnr_tmp-gltrp = ls_caufvd-gstrp.
ENDIF.
ENDIF.

aufnr_tmp-objnr = ls_caufvd-objnr.
aufnr_tmp-sfcpf = ls_caufvd-sfcpf.
aufnr_tmp-dispo = ls_caufvd-dispo.
aufnr_tmp-fevor = ls_caufvd-fevor.
aufnr_tmp-kzavc = ls_caufvd-kzavc.
aufnr_tmp-stufe = ls_caufvd-stufe.
aufnr_tmp-arsnr = ls_caufvd-arsnr.
aufnr_tmp-arsps = ls_caufvd-arsps.
aufnr_tmp-gasmg = ls_caufvd-gasmg.

* offene Auftragsmenge
IF ls_caufvd-igmng IS INITIAL
AND ls_caufvd-gwemg IS INITIAL.
aufnr_tmp-gamng = ls_caufvd-gamng.
ELSE.
IF ls_caufvd-igmng > ls_caufvd-gwemg.
aufnr_tmp-gamng = ls_caufvd-gamng - ls_caufvd-igmng.
ELSE.
aufnr_tmp-gamng = ls_caufvd-gamng - ls_caufvd-gwemg.
ENDIF.
ENDIF.

IF aufnr_tmp-gamng < 0.
CLEAR aufnr_tmp-gamng.
ENDIF.

APPEND aufnr_tmp TO LT_AUFNR_TAB.

Wenn der Netzplan geändert werden soll, muss dieser gesperrt werden

"Sperren und Lesen von Aufträgen
CALL FUNCTION 'CO_ZF_ORDER_READ'
TABLES
AUFNR_TAB_IMP = LT_AUFNR_TAB
EXCEPTIONS
ORDER_NOT_FOUND = 1
RELEASE_NO_CHANGE = 2
OTHERS = 3
.

Jetzt kann die Materialverfügbarkeit durchgeführt werden.

Prüfregel übergeben

Beim Aufruf des Funktionsbausteins CO_ZA_AVAILABILITY_CHECK soll auch die Prüfregel mit "übergeben" werden. Dies sieht der Funktionsbaustein aber nicht vor. Daher wird die Prüfregel ins Memory geschrieben und im Userexit wieder ausgelesen und somit bei der Materialverfügbarkeit genutzt.

Schreiben ins Memory:

DATA
: lv_pr TYPE c LENGTH 10
.

"Übergabe Prüfregel für V-Prüfung
lv_pr = IV_PRREG.
EXPORT lv_pruefregel = lv_pr TO MEMORY ID 'EWM_NETZPLAN_PR'.

Genutzter Userexit EXIT_SAPLATPC_001:

DATA
: lv_pr TYPE c length 10
.

FIELD-SYMBOLS
: <lfs_atp> LIKE LINE OF t_atpcsx
.

IMPORT lv_pruefregel = lv_pr FROM MEMORY ID 'EWM_NETZPLAN_PR'.

IF lv_pr = 'ZE'.
LOOP AT t_atpcsx ASSIGNING <lfs_atp>.
<lfs_atp>-PRREG = 'ZE'.
ENDLOOP.
CLEAR <lfs_atp>.
FREE <lfs_atp>.
ENDIF.

FREE MEMORY ID 'EWM_NETZPLAN_PR'.