Skip to main content
Skip table of contents

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


CODE
| 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


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.