Skip to main content
Skip table of contents

Event "Kd.Auftr.Pos Versand-Mengen-Kalkulation"

Event "Kd.Auftr.Pos Versand-Mengen-Kalkulation" (ab V4.4)


Dieser Event stellt folgende Möglichkeiten zur Verfügung:

  1. Kalkulation einer Vorgabe-Versandmenge bei Pos.Erfassung in der Auftragsbearbeitung (nModus = 0)

  2. Kalkulation einer verfügbaren Versandmenge, welche zur Validierung bzw. Freigabe einer Menge an folgenden Programmstellen verwendet wird (nModus = 1):

    1. Bei manueller Eingabe einer Versandmenge, bzw. bei Aufruf von AufPosPost()

    2. Bei der manuellen Lieferfreigabe aus der Auftragsverwaltung

    3. Bei der automatischen Lieferfreigabe

    4. Bei der Lieferfreigabe nach Wareneingang

Beispiel

CODE
// =============================================================================
// Event zur Berechnung einer eigenen Versand-Menge (DAB055:VMENGE)
// je nach Aufruf entweder als Vorbelegung in der Eingabemaske oder als
// maximal verfügbare Menge
// =============================================================================

// =============================================================================
// Variablen Deklarationen
// =============================================================================
| nEvtNo:P1, oDab000:P2, oDab050:P3, oDab055:P4, oDab010:P5,
  oOld055:P6, nModus:P7, nVMenge:P8, x,
  cTest:C:="", oCalc055:DB:='waDAB055, DAB057', nPrioDays:N:=0, nPMenge:N:=0 |
// oOld050, oOld055 enthalten alte Versionen der Datensätze (vor dem Editieren)
// nVMenge    : Errechnete VMenge (Vorgabe bzw. verfügbar)
// nModus = 0 : Rückgabe = Vorgabe VMenge
// nModus = 1 : Rückgabe = Verfügbare VMenge
// Rückgabe   : leer = keine Änderung, sonst Vorgabe- bzw. verfügbare VMenge

// =============================================================================

// Vorgaben zum Testen in Programmierung ...

//oDab000 := DBOpen(waDAB000),
//oDab010 := DBOpen(waDAB010),
//oDab050 := DBOpen(waDAB050),
//oDab055 := DBOpen(waDAB055),
//oOld055 := DBOpen(waDAB055),
//
//nModus := 0,
//nVMenge:= 99,
//
//DbSeek( {100287},        oDab000 ),
//DbSeek( {"100211"},      oDab050 ),
//DbSeek( {"100211  1"},   oDab055 ),
//DbSeek( {"100211  1"},   oOld055 ),
//DbSeek( {oDab055:ARTNR}, oDab010 ),

// =============================================================================
// Beginn Hauptprogramm
// =============================================================================

startseq
  if (mAbteilung = oDab055:LAGER) and // Abt = LAGER (sollte immer der Fall sein)
     (oDab055:AUF_LAG = "J") and      // Auftr.Pos. lagerwirksam
     (oDab055:LAGER   >  0) and       // Lager 1-9
     (oDab055:LAGER   <= 9) and
     (oDab055:BMENGE  >  0) and       // Bestell-Menge > 0
     (oDab010:ARTTYP  = "T") then     // Kaufteil

     // Prioritäts-Vorschau-Tage ermitteln (Allg.Param)
     nPrioDays := 0,
     DbRefresh(dabpar),
     if not Empty(DabPar:PRIOR_TAGE) then
        nPrioDays := Eval( "| Dab010 | " + DabPar:PRIOR_TAGE, oDab010 ),
     endif,

     // Filter auf Dab055 setzten auf Auftr.Pos. nur mit
     // - jeweils bis oder ohne Prioritäts-Vorschau-Tage
     // - Priotitäts-Menge grö&szlig;er 0
     // - Priorität grö&szlig;er Prio. der aktuellen Pos.
     // - nur aktuelles Lager berücksichtigen
     //   (===> Abweichung von BE-Standard-Logik <===)
     if nPrioDays > 0 then
        oCalc055.Filter := 'artnr<>"' + oDab055:ARTNR + '" .or. ('
           + 'TERM_INDEX <= "' +
             FormatDateTime( 'yyyymmdd', mBDatum + nPrioDays ) + '" '
           + ' .and. PMENGE >0 '
           + ' .and. PRIORI > "' + oDab055:PRIORI + '") '
           + ' .and. LAGER = ' + Str(oDab055:LAGER),
     else
        oCalc055.Filter := 'artnr<>"' + oDab055:ARTNR + '" .or. ('
           + 'PMENGE >0 '
           + ' .and. PRIORI > "' + oDab055:PRIORI + '") '
           + ' .and. LAGER = ' + Str(oDab055:LAGER),
     endif,
     // Filter aktivieren
     oCalc055.Filtered := True,
     // oCalc055 auf aktuellen Artikel filtern
     DBScope( oDab055:ARTNR, oDab055:ARTNR, oCalc055 ),
     DBGotop( oCalc055 ),
     // offene Mengen mit höherer Priorität kumulieren
     nPMenge := 0,
     while not Eof(oCalc055) do
        nPMenge := nPMenge + max(min(oCalc055:PMENGE, oCalc055:BMENGE</p>
<ul class="alternate">
	<li>oCalc055:VMENGE - oCalc055:LMENGE ), 0),
        DbSkip( 1, oCalc055 ),
     end,
     // Kum.Prio.Mengen von Lagerbestand subtrahieren
     nVMenge := Lager( Str(oDab055:LAGER), oDab010 ),
     nVMenge := nVMenge - nPMenge,
     // Bereits freigegebene Menge wieder addieren
     nVMenge := Min( oDab055:BMENGE, nVMenge + oOld055:VMENGE ),

     oCalc055.Filtered := False,
     DBScope( , , oCalc055 ),

  endif,
onerror
  MessageDlg( 'Event : '+ 'Events\Kd.Auftr.Pos. VMengen-Kalk.' + crlf +
              'Fehler: '+ GetErrorText() + crlf +
              'Zeile : '+ Str(GetErrorLine()) + crlf +
              'Info  : '+ Classname(GetErrorObj()), mtError, mbOK, 0 ),
stopseq,

// =============================================================================
// Ende Hauptprogramm
// =============================================================================

// Rückgabe der (ggf. neuen) Vorgabe/Verfügbarkeit
nVMenge

// =============================================================================
// Ende
// =============================================================================


JavaScript errors detected

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

If this problem persists, please contact our support.