| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697 |
- DEFINE VARIABLE Firma AS CHARACTER NO-UNDO INIT '1000' .
- DEFINE VARIABLE nBestand AS DECIMAL NO-UNDO.
- DEFINE VARIABLE iGGebMe AS INTEGER NO-UNDO.
- DEFINE VARIABLE iVGebMe AS INTEGER NO-UNDO.
- DEFINE VARIABLE iKGebMe AS INTEGER NO-UNDO.
- DEFINE VARIABLE iHoReId AS INTEGER NO-UNDO.
- DEFINE BUFFER bArtst FOR Artst .
- DEFINE BUFFER bArtLager FOR ArtLager .
- DEFINE BUFFER bHoReLager FOR HoReLager.
- DEFINE BUFFER bLotLager FOR LotLager .
- DEFINE TEMP-TABLE tArtLager
- FIELD Firma AS CHARACTER
- FIELD Artnr AS INTEGER
- FIELD Inhalt AS INTEGER
- FIELD Jahr AS INTEGER
- FIELD Ort AS CHARACTER
- FIELD Bestand AS INTEGER
- FIELD HoRe1Best AS DECIMAL
- FIELD HoRe2Best AS DECIMAL
- FIELD HoReBest AS DECIMAL
- FIELD lVerfall AS LOGICAL
- FIELD Lot1Best AS DECIMAL
- FIELD Lot2Best AS DECIMAL
- FIELD LotBest AS DECIMAL
- FIELD iAnzGGeb AS INTEGER
- FIELD iKGebMe AS INTEGER
-
- INDEX tArtLager-k1 IS PRIMARY
- Firma
- Artnr
- Inhalt
- Jahr.
-
- DEFINE TEMP-TABLE tBesEing LIKE BesEing
- FIELD lFound AS LOGICAL
-
- INDEX tBesEing-k1 IS PRIMARY
- Artnr
- Inhalt
- Jahr
- Verfall
- Lotnr
- INDEX tBesEing-k2
- Artnr
- Inhalt
- Jahr
- Verfall DESCENDING
- Lotnr.
-
- DEFINE TEMP-TABLE tHoReLager LIKE HoReLager.
- DEFINE TEMP-TABLE tLotLager LIKE LotLager .
- DISABLE TRIGGERS FOR LOAD OF Artst .
- DISABLE TRIGGERS FOR LOAD OF ArtLager .
- DISABLE TRIGGERS FOR LOAD OF HoReLager .
- DISABLE TRIGGERS FOR LOAD OF LotLager .
-
- MESSAGE 'Lagerplatzupdate'
- VIEW-AS ALERT-BOX.
- RUN LAGERPLATZ_UPDATE.
- MESSAGE 'Tagesbestand rechnen'
- VIEW-AS ALERT-BOX.
- RUN TAGESBESTAND_RECHNEN.
- MESSAGE 'Lageranpassung ruestlager'
- VIEW-AS ALERT-BOX.
- RUN LAGERANPASSUNG_RUESTLAGER.
- MESSAGE 'saameln verfall eingang'
- VIEW-AS ALERT-BOX.
- RUN SAMMELN_VERFALL_EINGANG.
- MESSAGE 'lotlager bereinigen'
- VIEW-AS ALERT-BOX.
- RUN LOTLAGER_BEREINIGUNG.
- MESSAGE 'Bestände Reserve-Lager vs Rüstlager'
- VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
- RUN BESTANDESKONTROLLE_RFESERVE_RUESTLAGER.
- /* ********************** Internal Procedures *********************** */
- PROCEDURE LAGERANPASSUNG_RUESTLAGER:
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
-
- DEFINE VARIABLE nMenge AS DECIMAL NO-UNDO.
-
- DEFINE BUFFER bLotLager FOR LotLager.
-
- DISABLE TRIGGERS FOR LOAD OF LotLager .
- DISABLE TRIGGERS FOR LOAD OF HoReLager.
-
- FOR EACH HoReLager
- WHERE HoReLager.Firma = Firma
- AND HoReLager.Lager = 0:
-
- IF HoReLager.Artnr = 0 THEN
- DO:
- ASSIGN
- HoReLager.Bestand = 0
- HoReLager.iStatus = 0
- HoReLager.Verfall = ?
- HoReLager.Eingang = ?
- HoReLager.Lotnummer = ''.
- NEXT.
- END.
- ASSIGN
- HoReLager.Bestand = 0
- HoReLager.iStatus = 1
- HoReLager.Verfall = ?
- HoReLager.Eingang = ?
- HoReLager.Lotnummer = ''.
- END.
-
- FOR EACH tArtLager:
- IF tArtLager.Bestand <= 0 THEN
- DO:
- FOR EACH LotLager
- WHERE LotLager.Firma = tArtLager.Firma
- AND LotLager.Artnr = tArtLager.Artnr
- AND LotLager.Inhalt = tArtLager.Inhalt
- AND LotLager.Jahr = tArtLager.Jahr:
-
- DELETE LotLager.
- END.
- NEXT.
- END.
- DO WHILE tArtLager.iAnzGGeb > 0:
- nMenge = (IF tArtLager.Ort = '' THEN tArtLager.Bestand ELSE tArtLager.iAnzGGeb * tArtLager.iKGebMe).
-
- FIND FIRST HoReLager
- WHERE HoReLager.Firma = tArtLager.Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 2
- AND HoReLager.Artnr = tArtLager.Artnr
- AND HoReLager.Inhalt = tArtLager.Inhalt
- AND HoReLager.Jahr = tArtLager.Jahr NO-ERROR.
- IF AVAILABLE HoReLager THEN
- DO:
- ASSIGN
- HoReLager.Bestand = HoReLager.Bestand + nMenge
- HoReLager.iStatus = 2.
- LEAVE.
- END.
-
- FIND FIRST HoReLager
- WHERE HoReLager.Firma = tArtLager.Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 2
- AND HoReLager.Artnr = tArtLager.Artnr
- AND HoReLager.Inhalt = tArtLager.Inhalt NO-ERROR.
- IF AVAILABLE HoReLager THEN
- DO:
- ASSIGN
- HoReLager.Bestand = HoReLager.Bestand + nMenge
- HoReLager.iStatus = 2.
- LEAVE.
- END.
- tArtLager.iAnzGGeb = 0.
- LEAVE.
- END.
- IF tArtLager.Ort = '' THEN NEXT.
-
- FIND FIRST HoReLager
- WHERE HoReLager.Firma = tArtLager.Firma
- AND HoReLager.Lager = 0
- AND HoReLager.cSort = tArtLager.Ort NO-ERROR.
- ASSIGN
- HoReLager.Bestand = HoReLager.Bestand
- + (tArtLager.Bestand - (tArtLager.iAnzGGeb * tArtLager.iKGebMe))
- HoReLager.iStatus = 2.
- END.
- END PROCEDURE.
- PROCEDURE LAGERPLATZ_UPDATE:
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
-
- DISABLE TRIGGERS FOR LOAD OF ArtLager .
- DISABLE TRIGGERS FOR LOAD OF HoReLager.
-
- FOR EACH ArtLager
- WHERE ArtLager.Firma = Firma
- AND ArtLager.Lager = 0:
-
- ArtLager.Ort = ''.
- END.
-
- FOR EACH HoReLager NO-LOCK
- WHERE HoReLager.Firma = Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 1
- AND HoReLager.Artnr > 0
- AND HoReLager.Jahr = 0:
- FIND ArtLager
- WHERE ArtLager.Firma = HoReLager.Firma
- AND ArtLager.Lager = HoReLager.Lager
- AND ArtLager.Artnr = HoReLager.Artnr
- AND ArtLager.Inhalt = HoReLager.Inhalt
- AND ArtLager.Jahr = HoReLager.Jahr NO-ERROR.
- IF AVAILABLE ArtLager THEN
- DO:
- ArtLager.Ort = HoReLager.cSort.
- NEXT.
- END.
- FOR EACH ArtLager
- WHERE ArtLager.Firma = HoReLager.Firma
- AND ArtLager.Lager = HoReLager.Lager
- AND ArtLager.Artnr = HoReLager.Artnr
- AND ArtLager.Inhalt = HoReLager.Inhalt :
- ArtLager.Ort = HoReLager.cSort.
- END.
- END.
-
- FOR EACH HoReLager NO-LOCK
- WHERE HoReLager.Firma = Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 1
- AND HoReLager.Artnr > 0
- AND HoReLager.Jahr > 0:
- FIND ArtLager
- WHERE ArtLager.Firma = HoReLager.Firma
- AND ArtLager.Lager = HoReLager.Lager
- AND ArtLager.Artnr = HoReLager.Artnr
- AND ArtLager.Inhalt = HoReLager.Inhalt
- AND ArtLager.Jahr = HoReLager.Jahr NO-ERROR.
- IF NOT AVAILABLE ArtLager THEN NEXT.
- ArtLager.Ort = HoReLager.cSort.
- END.
- END PROCEDURE.
- PROCEDURE LOTLAGER_BEREINIGUNG:
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
- FOR EACH LotLager
- WHERE LotLager.Firma = Firma:
-
- DELETE LotLager.
- END.
-
- FOR EACH tArtLager NO-LOCK,
-
- FIRST Artst NO-LOCK OF tArtLager:
-
- IF NOT Artst.lVerfall THEN NEXT.
- IF tArtLager.Ort <> '' THEN
- DO:
- FOR EACH HoReLager NO-LOCK
- WHERE HoReLager.Firma = Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 1
- AND HoReLager.cSort = tArtLager.Ort
-
- BY HoReLager.Artnr
- BY HoReLager.Inhalt
- BY HoReLager.Jahr :
-
- nBestand = HoReLager.Bestand.
-
- FOR EACH tBesEing USE-INDEX tBesEing-k2
- WHERE tBesEing.Artnr = HoReLager.Artnr
- AND tBesEing.Inhalt = HoReLager.Inhalt
- AND tBesEing.Jahr = HoReLager.Jahr
- AND tBesEing.Eingang > 0 :
-
- CREATE LotLager.
- ASSIGN
- LotLager.Firma = Firma
- LotLager.Lager = 0
- LotLager.Artnr = tBesEing.Artnr
- LotLager.Inhalt = tBesEing.Inhalt
- LotLager.Jahr = tBesEing.Jahr
- LotLager.Verfall = tBesEing.Verfall
- LotLager.Lotnummer = tBesEing.Lotnr
- LotLager.HoReLager_Id = HoReLager.HoReLager_Id
- LotLager.Eingang = tBesEing.Eing_Dat.
- IF tBesEing.Eingang >= nBestand THEN LotLager.Bestand = nBestand.
- ELSE LotLager.Bestand = tBesEing.Eingang.
- nBestand = nBestand - LotLager.Bestand.
- tBesEing.Eingang = tBesEing.Eingang - LotLager.Bestand.
- IF nBestand = 0 THEN LEAVE.
- END.
- END.
- END.
-
- FOR EACH HoReLager NO-LOCK
- WHERE HoReLager.Firma = Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 2
- AND HoReLager.Artnr = tArtLager.Artnr
- AND HoReLager.Inhalt = tArtLager.Inhalt
- AND HoReLager.Jahr = tArtLager.Jahr:
-
- nBestand = HoReLager.Bestand.
-
- FOR EACH tBesEing USE-INDEX tBesEing-k2
- WHERE tBesEing.Artnr = HoReLager.Artnr
- AND tBesEing.Inhalt = HoReLager.Inhalt
- AND tBesEing.Jahr = HoReLager.Jahr
- AND tBesEing.Eingang > 0 :
-
- CREATE LotLager.
- ASSIGN
- LotLager.Firma = Firma
- LotLager.Lager = 0
- LotLager.Artnr = tBesEing.Artnr
- LotLager.Inhalt = tBesEing.Inhalt
- LotLager.Jahr = tBesEing.Jahr
- LotLager.Verfall = tBesEing.Verfall
- LotLager.Lotnummer = tBesEing.Lotnr
- LotLager.HoReLager_Id = HoReLager.HoReLager_Id
- LotLager.Eingang = tBesEing.Eing_Dat.
- IF tBesEing.Eingang >= nBestand THEN LotLager.Bestand = nBestand.
- ELSE LotLager.Bestand = tBesEing.Eingang.
- nBestand = nBestand - LotLager.Bestand.
- tBesEing.Eingang = tBesEing.Eingang - LotLager.Bestand.
- IF nBestand = 0 THEN LEAVE.
- END.
- END.
- END.
- END PROCEDURE.
- PROCEDURE SAMMELN_VERFALL_EINGANG:
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
-
- DEFINE VARIABLE nDiff AS DECIMAL NO-UNDO.
-
- DEFINE BUFFER btBesEing FOR tBesEing.
-
- FOR EACH Artst NO-LOCK
- WHERE Artst.Firma = Firma
- AND Artst.lVerfall
- AND Artst.Aktiv
- AND Artst.Lager:
-
- FOR EACH BesEing NO-LOCK
- WHERE BesEing.Firma = Artst.Firma
- AND BesEing.Artnr = Artst.Artnr
- AND BesEing.Inhalt = Artst.Inhalt
- AND BesEing.Jahr = Artst.Jahr
- AND BesEing.Verfall <> ?.
-
- FIND FIRST tBesEing
- WHERE tBesEing.Artnr = BesEing.Artnr
- AND tBesEing.Inhalt = BesEing.Inhalt
- AND tBesEing.Jahr = BesEing.Jahr
- AND tBesEing.Verfall = BesEing.Verfall
- AND tBesEing.Lotnr = BesEing.Lotnr NO-ERROR.
- IF NOT AVAILABLE tBesEing THEN
- DO:
- CREATE tBesEing.
- BUFFER-COPY BesEing
- TO tBesEing
- ASSIGN
- tBesEing.lFound = TRUE.
- NEXT.
- END.
- tBesEing.Eingang = tBesEing.Eingang + BesEing.Eingang.
- END.
- END.
-
- FOR EACH LotLager
- WHERE LotLager.Firma = Firma
- AND LotLager.Lager = 0:
-
- FIND FIRST tBesEing
- WHERE tBesEing.Artnr = LotLager.Artnr
- AND tBesEing.Inhalt = LotLager.Inhalt
- AND tBesEing.Jahr = LotLager.Jahr
- AND tBesEing.Verfall = LotLager.Verfall
- AND tBesEing.Lotnr = LotLager.Lotnummer NO-ERROR.
- IF NOT AVAILABLE tBesEing THEN
- DO:
- CREATE tBesEing.
- BUFFER-COPY LotLager
- USING Firma Artnr Inhalt Jahr Verfall Barcode
- TO tBesEing
- ASSIGN
- tBesEing.Eingang = LotLager.Bestand
- tBeseing.lFound = FALSE
- tBeseing.Lotnr = LotLager.Lotnummer
- tBeseing.Eing_Dat = LotLager.Eingang.
- NEXT.
- END.
- END.
-
- FOR EACH tBesEing
- BREAK BY tBesEing.Artnr
- BY tBesEing.Inhalt
- BY tBesEing.Jahr:
-
- IF FIRST-OF (tBesEing.Jahr) THEN nBestand = 0.
- nBestand = nBestand + tBesEing.Eingang.
- IF NOT LAST-OF (tBesEing.Jahr) THEN NEXT.
-
- FIND FIRST tArtLager
- WHERE tArtLager.Firma = Firma
- AND tArtLager.Artnr = tBesEing.Artnr
- AND tArtLager.Inhalt = tBesEing.Inhalt
- AND tArtLager.Jahr = tBesEing.Jahr NO-ERROR.
- IF NOT AVAILABLE tArtLager THEN NEXT.
-
- nDiff = tArtLager.Bestand - nBestand.
-
- IF nDiff > 0 THEN
- DO:
- FIND LAST btBesEing USE-INDEX tBesEing-k1
- WHERE btBesEing.Artnr = tArtLager.Artnr
- AND btBesEing.Inhalt = tArtLager.Inhalt
- AND btBesEing.Jahr = tArtLager.Jahr
- AND btBesEing.lFound = FALSE NO-ERROR.
- IF NOT AVAILABLE btBesEing THEN
- DO:
- FIND FIRST btBesEing USE-INDEX tBesEing-k1
- WHERE btBesEing.Artnr = tArtLager.Artnr
- AND btBesEing.Inhalt = tArtLager.Inhalt
- AND btBesEing.Jahr = tArtLager.Jahr NO-ERROR.
- END.
- btBesEing.Eingang = btBesEing.Eingang + nDiff.
- NEXT.
- END.
-
- FOR EACH btBesEing USE-INDEX tBesEing-k1
- WHERE btBesEing.Artnr = tArtLager.Artnr
- AND btBesEing.Inhalt = tArtLager.Inhalt
- AND btBesEing.Jahr = tArtLager.Jahr:
-
- IF btBesEing.Eingang <= nDiff THEN
- DO:
- nDiff = nDiff - btBesEing.Eingang.
- btBesEing.Eingang = 0.
- END.
- ELSE
- DO:
- btBesEing.Eingang = btBesEing.Eingang - nDiff.
- nDiff = 0.
- END.
- IF nDiff = 0 THEN LEAVE.
- END.
- END.
- END PROCEDURE.
- PROCEDURE TAGESBESTAND_RECHNEN:
- /*------------------------------------------------------------------------------*/
- /* Purpose: */
- /* Notes: */
- /*------------------------------------------------------------------------------*/
-
- EMPTY TEMP-TABLE tArtLager.
-
- FOR EACH Artst NO-LOCK
- WHERE Artst.Firma = Firma
- AND Artst.Aktiv
- AND Artst.Lager,
-
- FIRST ArtLager NO-LOCK
- WHERE ArtLager.Firma = Artst.Firma
- AND ArtLager.Lager = 0
- AND ArtLager.Artnr = Artst.Artnr
- AND ArtLager.Inhalt = Artst.Inhalt
- AND ArtLager.Jahr = Artst.Jahr:
-
- CREATE tArtLager.
- BUFFER-COPY ArtLager
- USING Firma Artnr Inhalt Jahr Bestand Ort
- TO tArtLager.
-
- FOR EACH Aufze NO-LOCK
- WHERE Aufze.Firma = Artst.Firma
- AND Aufze.Artnr = Artst.Artnr
- AND Aufze.Inhalt = Artst.Inhalt
- AND Aufze.Jahr = Artst.Jahr
- AND Aufze.Lag_Buch = TRUE ,
-
- FIRST Aufko NO-LOCK OF Aufze:
-
- IF Aufko.Lief_Datum <= (TODAY + 1) THEN NEXT.
- tArtLager.Bestand = tArtLager.Bestand + Aufze.MGeli.
- END.
- END.
-
- FOR EACH tArtLager:
- FIND Artst NO-LOCK OF tArtLager.
-
- FIND GGebinde NO-LOCK
- WHERE GGebinde.Firma = bArtst.Firma
- AND GGebinde.Geb_Cd = bArtst.GGeb_Cd NO-ERROR.
- iGGebMe = (IF AVAILABLE GGebinde THEN GGebinde.Inhalt ELSE 1).
-
- FIND VGebinde NO-LOCK
- WHERE VGebinde.Firma = bArtst.Firma
- AND VGebinde.Geb_Cd = bArtst.VGeb_Cd NO-ERROR.
- iVGebMe = (IF AVAILABLE VGebinde THEN VGebinde.Inhalt ELSE 1).
-
- iKGebMe = iGGebMe * iVGebMe.
- tArtLager.iKGebMe = iKGebMe.
-
- IF tArtLager.Bestand < iKGebMe THEN NEXT.
-
- nBestand = tArtLager.Bestand.
- tArtLager.iAnzGGeb = (nBestand - (nBestand MOD iKGebMe)) / iKGebMe.
- END.
- END PROCEDURE.
- PROCEDURE BESTANDESKONTROLLE_RFESERVE_RUESTLAGER.
- DEFINE VARIABLE iKGebMe AS INTEGER NO-UNDO.
- DEFINE VARIABLE iMenge AS INTEGER NO-UNDO.
- DEFINE VARIABLE iRest AS INTEGER NO-UNDO.
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
- FOR EACH HoReLager NO-LOCK
- WHERE HoReLager.Firma = Firma
- AND HoReLager.Lager = 0
- AND HoReLager.Art = 2
- AND HoReLager.Artnr > 0 TRANSACTION:
-
- IF HoReLager.Bestand <= 0 THEN
- DO:
- FIND bHoReLager WHERE RECID(bHoReLager) = RECID(HoReLager).
- ASSIGN
- bHoReLager.Bestand = 0
- bHoReLager.iStatus = 1.
- RELEASE bHoReLager.
- NEXT.
- END.
-
- FIND FIRST bHoReLager
- WHERE bHoReLager.Firma = HoReLager.Firma
- AND bHoReLager.Lager = HoReLager.Lager
- AND bHoReLager.Art = 1
- AND bHoReLager.Artnr = HoReLager.Artnr
- AND bHoReLager.Inhalt = HoReLager.Inhalt
- AND bHoReLager.Jahr = HoReLager.Jahr NO-ERROR.
- IF NOT AVAILABLE (bHoReLager) THEN
- DO:
- FIND FIRST bHoReLager
- WHERE bHoReLager.Firma = HoReLager.Firma
- AND bHoReLager.Lager = HoReLager.Lager
- AND bHoReLager.Art = 1
- AND bHoReLager.Artnr = HoReLager.Artnr
- AND bHoReLager.Inhalt = HoReLager.Inhalt NO-ERROR.
- END.
- IF NOT AVAILABLE (bHoReLager) THEN NEXT.
-
- FIND Artst NO-LOCK
- WHERE Artst.Firma = Firma
- AND Artst.Artnr = HoReLager.Artnr
- AND Artst.Inhalt = HoReLager.Inhalt
- AND Artst.Jahr = HoReLager.Jahr NO-ERROR.
- IF NOT AVAILABLE Artst THEN
- DO:
- FIND FIRST Artst NO-LOCK
- WHERE Artst.Firma = Firma
- AND Artst.Artnr = HoReLager.Artnr
- AND Artst.Inhalt = HoReLager.Inhalt NO-ERROR.
- END.
- IF NOT AVAILABLE Artst THEN
- DO:
- FIND bHoReLager WHERE RECID(bHoReLager) = RECID(HoReLager).
- ASSIGN
- bHoReLager.Bestand = 0
- bHoReLager.iStatus = 0
- bHoReLager.Artnr = 0
- bHoReLager.Inhalt = 0
- bHoReLager.Jahr = 0
- bHoReLager.Eingang = ?
- bHoReLager.Verfall = ?
- bHoReLager.Lotnummer = ''
- .
- NEXT.
- END.
-
- FIND GGebinde NO-LOCK
- WHERE GGebinde.Firma = Artst.Firma
- AND GGebinde.Geb_Cd = Artst.GGeb_Cd NO-ERROR.
- IF NOT AVAILABLE GGebinde THEN NEXT.
- IF GGebinde.Inhalt < 2 THEN NEXT.
-
- FIND VGebinde NO-LOCK
- WHERE VGebinde.Firma = Artst.Firma
- AND VGebinde.Geb_Cd = Artst.VGeb_Cd NO-ERROR.
-
- iKGebMe = GGebinde.Inhalt * VGebinde.Inhalt.
- lok = TRUE.
- DO WHILE TRUE:
- IF Artst.Bestand <= iKGebMe THEN
- DO:
- iMenge = HoReLager.Bestand.
- LEAVE.
- END.
- IF HoReLager.Bestand < iKGebMe THEN
- DO:
- iMenge = HoReLager.Bestand.
- LEAVE.
- END.
-
- iMenge = HoReLager.Bestand MOD iKGebMe.
- IF iMenge > 0 THEN LEAVE.
-
- lOK = FALSE.
- LEAVE.
- END.
- IF NOT lOK THEN NEXT.
-
- EMPTY TEMP-TABLE tHoReLager.
- EMPTY TEMP-TABLE tLotLager .
-
- iRest = iMenge.
- FOR EACH LotLager NO-LOCK
- WHERE LotLager.HoReLager_Id = HoReLager.HoReLager_Id
- AND LotLager.Artnr = HoReLager.Artnr:
-
- IF LotLager.Bestand <= iRest THEN
- DO:
- CREATE tLotLager.
- BUFFER-COPY LotLager
- EXCEPT HoReLager_Id
- TO tLotLager
- ASSIGN
- tLotLager.HoReLager_Id = bHoReLager.HoReLager_Id.
- iRest = iRest - LotLager.Bestand.
-
- RELEASE bLotLager.
-
- IF iRest = 0 THEN LEAVE.
- END.
-
- CREATE tLotLager.
- BUFFER-COPY LotLager
- EXCEPT HoReLager_Id Bestand
- TO tLotLager
- ASSIGN
- tLotLager.HoReLager_Id = bHoReLager.HoReLager_Id
- tLotLager.Bestand = iRest.
-
- FIND bLotLager WHERE RECID(bLotLager) = RECID(LotLager).
- bLotLager.Bestand = bLotLager.Bestand - iRest.
-
- iRest = 0.
- LEAVE.
- END.
- FOR EACH tLotLager:
- FIND LotLager OF tLotLager NO-ERROR.
- IF NOT AVAILABLE LotLager THEN
- DO:
- CREATE LotLager.
- BUFFER-COPY tLotLager TO LotLager.
- NEXT.
- END.
- LotLager.Bestand = LotLager.Bestand + tLotLager.Bestand.
- END.
-
- FOR EACH LotLager
- WHERE LotLager.HoReLager_Id = HoReLager.HoReLager_Id
- AND LotLager.Artnr = HoReLager.Artnr
- AND LotLager.Bestand = 0:
-
- DELETE LotLager.
- END.
-
- ASSIGN
- bHoReLager.Bestand = bHoReLager.Bestand + HoReLager.Bestand
- bHoReLager.iStatus = 2.
-
- FIND bHoReLager WHERE RECID(bHoReLager) = RECID(HoReLager).
- ASSIGN
- bHoReLager.Bestand = 0
- bHoReLager.iStatus = 1.
- END.
-
- END PROCEDURE.
|