Bestimmte CO-Objekte (wie z.B. Innenaufträge) lassen sich im SD Auftrag im SAP Standard nur auf Positionsebene kontieren, was natürlich nervt, wenn bei allen Positionen das gleiche CO-Objekt eingetragen werden soll.
Kann man aber mithilfe der einschlägigen Userexits im Include MV45AFZB was machen:
1. Schritt:
Gewünschtes CO-Objekt "aufmachen" (Im Standard ist nur PSP-Element im Auftragskopf kontierbar).
z.B. Innenauftrag:
FORM USEREXIT_COBL_SEND_HEADER. * This example shows how to select fields that are shown in the * account assignment block * INT_COBLF-FDNAM = zzfield1. "hier: 'AUFNR' * INT_COBLF-OUTPUT = '1'. * IF T180-TRTYP NE CHARA AND * VBAP-KZVBR NE KZVBR_P. * INT_COBLF-INPUT = '1'. * INT_COBLF-REQUIRED = '1'. "nur wenn Mussfeld!!!! * ENDIF. * INT_COBLF-ACTIVE = '1'. * APPEND INT_COBLF. ENDFORM.
2. Schritt:
Auftragsnummer in Auftragskopf (VBAK) speichern:
FORM USEREXIT_COBL_RECEIVE_VBAK. * VBAK-zzfield = COBL-zzfield2. "hier: vbak-aufnr = cobl-aufnr. ENDFORM.
3. Schritt
Objekt in die Auftragspositionen "vererben":
FORM USEREXIT_MOVE_FIELD_TO_COBL USING US_VBAK STRUCTURE VBAK US_VBAP STRUCTURE VBAP CHANGING CH_COBL STRUCTURE COBL. * Examples * CH_COBL-zzfield = US_VBAK-zzfield2. * CH_COBL-zzfield = US_VBAP-zzfield2. "hier: ch_cobl-aufnr = us_vbak-aufnr. ENDFORM.
Sofern die Anforderung besteht, zusätzliche CO-Objekte in den Auftragspositionen aufzumachen, ist das Vorgehen ähnlich.
Im Include MV45AFZB, Routine USEREXIT_COBL_SEND_ITEM wird das gewünschte Objekt in den Kontierungsblock aufgenommen.
FORM USEREXIT_COBL_SEND_ITEM.
* This example shows how to select fields that are shown in the
* account assignment block
* INT_COBLF-FDNAM = zzfield1. "z.B. Kostenstelle 'KOSTL'
* INT_COBLF-OUTPUT = '1'.
* IF T180-TRTYP NE CHARA AND
* VBAP-KZVBR NE KZVBR_P.
* INT_COBLF-INPUT = '1'.
* INT_COBLF-REQUIRED = '1'. "nur bei Mussfeld
* ENDIF.
* INT_COBLF-ACTIVE = '1'.
* APPEND INT_COBLF.
ENDFORM.
In der Routine USEREXIT_COBL_RECEIVE_VBAP wird die CO-Kontierung in das entsprechende Feld in der Auftragsposition übernommen.
FORM USEREXIT_COBL_RECEIVE_VBAP.
* VBAP-zzfield = COBL-zzfield2.
"z.B. VBAP-KOSTL = COBL-KOSTL.
ENDFORM.
Ein etwaig bereits in der Auftragsposition vorhandenes CO-Objekt soll natürlich in den Kontierungsblock übernommen werden (Routine USEREXIT_MOVE_FIELD_TO_COBL)
FORM USEREXIT_MOVE_FIELD_TO_COBL USING US_VBAK STRUCTURE VBAK
US_VBAP STRUCTURE VBAP
CHANGING CH_COBL STRUCTURE COBL.
* Examples
* z.B. CH_COBL-KOSTL = US_VBAP-KOSTL. "Bsp. Kostenstelle
* CH_COBL-zzfield = US_VBAK-zzfield2.
* CH_COBL-zzfield = US_VBAP-zzfield2.
ENDFORM.