Ausschliessen von Doppelerfassungen bei Auftragserfassung in SAP R/3 (Transaktion VA01)
Sie erfassen täglich einige hundert Kundenaufträge, dabei möchten Sie vermeiden, dass einzelne Materialpositionen doppelt erfasst werden.
Mit den unten aufgeführten Scripts können Sie beim Speichern des Belegs alle Positionen auf eine Doppelerfassung hin untersuchen.
Wird eine Doppelerfassung gefunden, so wird eine Messagebox ausgegeben, und der Beleg wird nicht gespeichert.
Im aufgeführten Beispiel werden Naturalrabattpositionen ignoriert, da man in diesem Fall immer 2 Mal dasselbe Material hat.
sapmv45a.d4001.txt
on "/11" "process=VA01_Doppelerfassung.txt"
va01_doppelerfassung.txt
// Script das beim Speichern des Beleges aufgerufen wird // Dabei wird insbesondere kontrolliert, ob ein Material mehrmals erfasst wurde // Falls Material mehrmals erfasst wird Meldung erzeugt // Wenn alles i.O. wird gespeichert // 07.03.03 / G. Koehn / Koehn Consulting / www.guixt.ch // Variables Set V[absrow] 1 // Absolute row number Set V[relrow] 1 // Relative row number Set V[abs_Pos] 1 // Absolute relevante Position Set V[rel_Pos] 1 // Relative relevante Position Set V[tabname] "Alle Positionen" Screen SAPMV45A.4001 GetTableAttribute T[&V[tabname]] FirstVisibleRow=FVisRow LastVisibleRow=LVisRow LastRow=LastRow // First row on screen? if V[FVisRow=1] goto new_row endif // scroll to first line Enter "/ScrollToLine=1" Table="T[&V[tabname]]" label new_screen Screen SAPMV45A.4001 GetTableAttribute T[&V[tabname]] FirstVisibleRow=FVisRow LastVisibleRow=LVisRow LastRow=LastRow Set V[relrow] 1 label new_row // end of table? if V[absrow>&V[LastRow]] goto end_of_table endif // end of screen? if V[absrow>&V[LVisRow]] Enter "/ScrollToLine=&V[absrow]" Table="T[&V[tabname]]" goto new_screen endif set V[UPos] "&cell[Alle Positionen,Üb.Pos,&[relrow]]" if not V[UPos] // Keine Unterposition, daher wird sie zwischengespeichert set V[Posnr_&V[abs_Pos]] "&cell[Alle Positionen,Pos,&[relrow]]" set V[Material_&V[abs_Pos]] "&cell[Alle Positionen,Material,&[relrow]]" // Loop über alle bisher gespeicherten Positionen, um festzustellen, ob das im Zugriff // stehende Material in einer früheren Position bereits erfasst wurde set V[rel_Pos] &V[abs_Pos] - 1 Label Neue_Pos if V[rel_Pos=0] // Jetzt wurden alle vorhergehenden Position untersucht, // daher darf es jetzt auf die nächste Position gehen goto Next_abs_Pos else // Die Vorgänger sind noch nicht alle untersucht if V[Material_&V[abs_Pos]=&V[Material_&V[rel_Pos]]] // dann wurde ein gleiches Material gefunden Message "In der Position &V[Posnr_&V[abs_Pos]] haben Sie das selbe Material erfasst,\nwie in der Position &V[Posnr_&V[rel_Pos]]" Enter Leave else set V[rel_Pos] &V[rel_Pos] - 1 goto Neue_Pos endif endif Label Next_abs_Pos Set V[abs_Pos] &V[abs_Pos] + 1 // Jetzt wird für die relevanten Positionen der Zähler um eins erhöht endif // Keine Unterposition Set V[absrow] &V[absrow] + 1 Set V[relrow] &V[relrow] + 1 goto new_row Screen SAPMV45A.4001 label end_of_table Enter "/11"
Als Basis zur Erstellung des Scripts wurde das Script Nr. 9 aus den Tipps & Tricks der Synactive GmbH verwendet.
Download: doppelerfassung.zip
(2 txt-Dateien, zip-komprimiert, 1.39 KB)