Event "vor Bestands-Berichtigung"
Event "vor Bestands-Berichtigung"
Der Event wird in folgenden Prozessen (nMode) aufgerufen:
1+ 2: Rechnungskontrolle, jeweils nachdem DAB020 (WE-Zugangs-Satz) / DAB235 (Rechnungs-Kontroll-Satz) korrigiert wurden, aber bevor die Wertberichtigung auf den Bestand (Dab010:DURSCHEK) umgelegt wird (also innerhalb der Transaktion):
Bei der Berichtigung einer Position (Menge / Preis / Preiseinheit / Umrechungsfaktor / Zusatzkosten etc.)
Beim Rechnungsabschluss (Korrektur aller Positionen, falls Nebenkosten vorhanden)
3: Anonyme Produktions-Verbrauchs-Buchung (aus der Lager-Verwaltung heraus, gleiches Fenster wie Inventur-Einzelbuchung)
4+ 5: Inventur-Buchung (Einzel- und Stapel), vor Ende der Transaktion 6+ 7: Fertigmeldung (Teil und End), vor Ende der Transaktion
Beispiel
| nEvtNo:P1, nMode:P2, oDataMod:P3, cArtNo:P4, cDispoNo:P5, nQuantity:P6, uValue:P7, nCorrValue:P8,
aInfo, aD010, aD020, aD235, aD055, aD240, aForm, aBtn, aLabel, aEdit, aMemo, aRes |
// nMode : Modus zeigt an, aus welchem Programm der Aufruf erfolgt
// 1 = Re.Kontrolle Pos.Berichtigung
// 2 = Re.Kontrolle Freigabe
// 3 = Produktions-Verbrauch anonym
// 4 = Inventur-Korrektur manuell
// 5 = Inventur-Korrektur Stapel
// 6 = Produktion Teil-Fertigmeldung
// 7 = Produktion End-Fertigmeldung
// oDataMod : Datenmodul oder AdsConnecton
// cArtNo : Artikel-Nummer
// cDispoNo : Dispo-Nummer (Dab020)
// nQuantity : Buchungs-Menge +/- (in Modus 1 und 2 = Differenzmenge)
// uValue : Modus 1-2: gesamter Umlagebetrag der Korrektur (+/-)
// Modus 3-5: gesamter Buchungswert (+/-)
// Modus 6-7: Array mit detaillierten Informationen über die Zusammensetzung des
// Gesamt-Zugangswertes der Fertigmeldung. Struktur des Arrays:
// { {B_POS_LFD, ARTNR_E, Gesamtwert (ohne Zuschlag), Zuschlagswert}, {...}, ... }
// nCorrValue: umlagefähiger Betrag (nur verfügbar in Modus 1 und 2)
// Rückgabe : nCorrValue (Vorzeichen darf nicht umgekehrt werden, absoluter Wert darf nicht erhöht werden)
// HINWEIS : Transaktion aktiv!
//******************************************************************
// Dieses Beispiel dient dazu, die Funktionsweise des Events und die
// zur Verfügung stehenden Informationen zu demonstrieren
//******************************************************************
function GetLockInfo(aTable)
|aLock|
Result := 'Trans: ',
if DbInTrans(aTable.AdsConnection) then
Result := Result + 'aktiv'
else
Result := Result + 'inaktiv'
endif,
Result := Result + crlf + ' Lockname: ' + DbGetLockClientName(aTable),
aLock := AdsGetUserLocks(aTable),
if empty(aLock) then
Result := Result + crlf + ' Locks: ',
else
Result := Result + crlf + ' Locks: ' + ArrToStr( aLock ),
endif
end,
function ModusAsString()
case nMode
of 1 :: Result := '1 = Re.Kontrolle Pos.Berichtigung',
of 2 :: Result := '2 = Re.Kontrolle Freigabe',
of 3 :: Result := '3 = Produktions-Verbrauch anonym',
of 4 :: Result := '4 = Inventur-Korrektur manuell',
of 5 :: Result := '5 = Inventur-Korrektur Stapel',
of 6 :: Result := '6 = Produktion Teil-Fertigmeldung',
of 7 :: Result := '7 = Produktion End-Fertigmeldung',
otherwise
Result := 'unbekannter Modus',
endcase,
end,
function FormatArrayOutput(aArray)
| i, aItem |
Result := '',
startseq,
for i := 1 to ALen(aArray) do
Result += if(empty(Result), '', crlf),
aItem := aArray[i],
Result += replicate(' ', 2) + padl(aItem[1],13) + '|' + padl(aItem[2],20) + '|' + padl(aItem[3],10) + '|' + padl(aItem[4],10),
next,
onerror,
Result := 'Fehler',
stopseq,
end,
startseq,
aInfo := 'Modus: ' + ModusAsString() + crlf +
'Typ Datenmodul: ' + ClassName(oDataMod) + crlf +
'Artikel: ' + cArtNo + crlf +
'DispoNummer: ' + cDispoNo + crlf +
'Buchungs-Menge +/-: ' + Str(nQuantity) + crlf +
if( nMode < 6,
' Zu-/Abgangs-Wert: ' + Str(uValue),
if(valtype(uValue) = 'A' ,
' Werte-Array: ' + crlf + FormatArrayOutput(uValue),
'kein Array'))
+ crlf +
if(nMode <= 2, ' Umlagefäh. Betrag: ' + Str(nCorrValue), ''),
onerror,
aInfo := 'Fehler bei der Ermittlung',
stopseq,
if not empty(oDataMod) and ((nMode = 2) or (nMode = 1)) then
aD010 := DBGetTable(oDataMod, waDAB010),
aD020 := DBGetTable(oDataMod, waDAB020),
aD235 := DBGetTable(oDataMod, waDAB235),
aD055 := DBGetTable(oDataMod, waDAB055),
aD240 := DBGetTable(oDataMod, waDAB240),
aInfo := aInfo + crlf + crlf + crlf +
'Dab010: ' + GetLockInfo(aD010) + crlf +
'Dab020: ' + GetLockInfo(aD020) + crlf +
'Dab055: ' + GetLockInfo(aD055) + crlf +
'Dab240: ' + GetLockInfo(aD240),
endif,
aForm := CreateObject('TFormEx'),
startseq
aForm.Width := 500,
aForm.Height := 300 + 100,
aForm.OrigCapt := 'Event "vor Bestand-Berichtigung"',
aForm.Top := 400,
aForm.Left := 300,
aBtn := CreateObject('TBeBitBtn', '', aForm, aForm),
aBtn.Caption := 'Ändern',
aBtn.Images := FindObject(FindObject(Application, 'DM_ImageList'), 'ImageListMain'),
aBtn.ImageIndex.IndexNormal := 7,
aBtn.Width := 100,
aBtn.Left := 140,
aBtn.Top := 240 + 95,
aBtn.ModalResult := mrOK,
aBtn := CreateObject('TBeBitBtn', '', aForm, aForm),
aBtn.Caption := 'Abbrechen',
aBtn.Images := FindObject(FindObject(Application, 'DM_ImageList'), 'ImageListMain'),
aBtn.ImageIndex.IndexNormal := 8,
aBtn.Width := 100,
aBtn.Left := 240,
aBtn.Top := 240 + 95,
aBtn.ModalResult := mrCancel,
aLabel := CreateObject('TLabel', '', aForm, aForm),
aLabel.Width := 150,
aLabel.Left := 20,
aLabel.Top := 205 + 100 + 3,
aLabel.Caption := 'umlagefähiger Betrag: ',
aEdit := CreateObject('TBeEdit', '', aForm, aForm),
aEdit.Width := 250,
aEdit.Left := 150,
aEdit.Top := 205 + 100,
aEdit.Text := FloatToStr(nCorrValue),
aEdit.ReadOnly := not ( nMode = 2 or nMode = 1),
aMemo := CreateObject('TMemo', '', aForm, aForm),
aMemo.Align := altop,
aMemo.Width := 380,
aMemo.Height := 200 + 100,
aMemo.Left := 0,
aMemo.Top := 0,
aMemo.Font.Name := 'Courier New',
aMemo.Font.Size := 10,
CollAdd(aMemo.Lines, aInfo),
aRes := ShowModal(aForm),
if aRes = 1 then
nCorrValue := StrToFloat(aEdit.Text),
endif,
always
DestroyObject(aForm),
stopseq,
nCorrValue