DEF TEMP-TABLE tAufko LIKE Aufko. DEF TEMP-TABLE tAufze LIKE Aufze. PROCEDURE ZEILENBUCHEN: /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipArt AS INT NO-UNDO. DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO. DEF INPUT PARAMETER ipPos AS INT NO-UNDO. /* ipArt : 0 = Neue Zeile */ /* 1 = Storno (bestehende Zeile) */ /* 2 = Löschung (Storno) */ DEF VAR Faktor AS INT INIT 1 NO-UNDO. DEF VAR MW AS INT NO-UNDO. DEF VAR Menge AS DEC DECIMALS 4 NO-UNDO. DEF VAR GGeb_Me AS DEC DECIMALS 4 NO-UNDO. DEF VAR VGeb_Me AS DEC DECIMALS 4 NO-UNDO. DEF VAR KGeb_Me AS DEC DECIMALS 4 NO-UNDO. DEF VAR Liter AS DEC DECIMALS 4 NO-UNDO. DEF VAR Net_Betr AS DEC DECIMALS 4 NO-UNDO. DEF BUFFER BArtbw FOR Artbw. IF ipArt = 0 THEN Faktor = +1. IF ipArt = 1 THEN Faktor = -1. IF ipArt = 2 THEN Faktor = -1. FIND Aufko USE-INDEX Aufko-k1 WHERE Aufko.Firma = '1000' AND Aufko.Aufnr = ipAufnr NO-LOCK NO-ERROR. IF NOT AVAILABLE Aufko THEN RETURN 'ERROR AUFKO'. FIND Aufze USE-INDEX Aufze-k1 WHERE Aufze.Firma = '1000' AND Aufze.Aufnr = ipAufnr AND Aufze.Pos = ipPos NO-ERROR. IF NOT AVAILABLE Aufze THEN RETURN 'ERROR AUFZE'. IF Aufze.Artnr = 0 THEN RETURN ''. FIND Artst USE-INDEX Artst-k1 WHERE Artst.Firma = Aufze.Firma AND Artst.Artnr = Aufze.Artnr AND Artst.Inhalt = Aufze.Inhalt AND Artst.Jahr = Aufze.Jahr NO-ERROR. IF NOT AVAILABLE Artst THEN RETURN 'ERROR ARTST'. Menge = Aufze.MGeli * Faktor. GGeb_Me = Aufze.GGeb_Me * Faktor. VGeb_Me = Aufze.VGeb_Me * Faktor. KGeb_Me = Aufze.KGeb_Me * Faktor. Liter = Aufze.Liter * Faktor. Net_Betr = Aufze.Net_Betr * Faktor. FIND Artbw USE-INDEX Artbw-k1 WHERE Artbw.Firma = Aufze.Firma AND Artbw.Trnr = Aufze.Trnr NO-ERROR. IF NOT AVAILABLE Artbw THEN DO: IF Aufze.Trnr = 0 THEN DO: FIND LAST BArtbw NO-LOCK USE-INDEX Artbw-k1 WHERE BArtbw.Firma = '1000' NO-ERROR. IF AVAILABLE BArtbw THEN Aufze.Trnr = BArtbw.Trnr + 1. ELSE Aufze.Trnr = 1. END. CREATE Artbw. ASSIGN Artbw.Firma = Aufze.Firma Artbw.Trnr = Aufze.Trnr Artbw.Tr_Art = 01 Artbw.Artnr = Aufze.Artnr Artbw.Inhalt = Aufze.Inhalt Artbw.Jahr = Aufze.Jahr Artbw.Knr = Aufko.Knr. END. /* ------------------------------------------ */ /* Gebinde-Konto-Kontrolle */ /* ------------------------------------------ */ DO WHILE Aufze.KGebKto <> '': IF Aufze.KGeb_Me = 0 THEN LEAVE. FIND GebKonto USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = Aufze.Firma AND GebKonto.Geb_Cd = Aufze.KGebKto NO-LOCK. IF GebKonto.MWST_Art = 0 THEN MW = 11. IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd. FIND AufGKon USE-INDEX AufGKon-k1 WHERE AufGKon.Firma = Aufze.Firma AND AufGKon.Aufnr = Aufze.Aufnr AND AufGKon.Geb_Cd = GebKonto.Geb_Cd AND AufGKon.MWSt_Cd = MW NO-ERROR. IF NOT AVAILABLE AufGKon THEN DO: CREATE AufGKon. ASSIGN AufGKon.Firma = Aufze.Firma AufGKon.Aufnr = Aufze.Aufnr AufGKon.Geb_Cd = GebKonto.Geb_Cd AufGKon.MWSt_Cd = MW AufGKon.Gebuehr = GebKonto.Gebuehr AufGKon.Depot = GebKonto.Depot AufGKon.Sort_Cd = GebKonto.Sort_Cd. END. DO WHILE TRUE: IF NOT Aufko.GG_Berech THEN LEAVE. IF Aufze.Preis = 0 AND AufGKon.Gebuehr <> 0 THEN LEAVE. AufGKon.Ausgang = AufGKon.Ausgang + KGeb_Me. AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang) * (AufGKon.Depot + AufGKon.Gebuehr). LEAVE. END. LEAVE. END. DO WHILE Aufze.VGebKto <> '': IF Aufze.VGeb_Me = 0 THEN LEAVE. FIND GebKonto USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = Aufze.Firma AND GebKonto.Geb_Cd = Aufze.VGebKto NO-LOCK. IF GebKonto.MWST_Art = 0 THEN MW = 11. IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd. FIND AufGKon USE-INDEX AufGKon-k1 WHERE AufGKon.Firma = Aufze.Firma AND AufGKon.Aufnr = Aufze.Aufnr AND AufGKon.Geb_Cd = GebKonto.Geb_Cd AND AufGKon.MWSt_Cd = MW NO-ERROR. IF NOT AVAILABLE AufGKon THEN DO: CREATE AufGKon. ASSIGN AufGKon.Firma = Aufze.Firma AufGKon.Aufnr = Aufze.Aufnr AufGKon.Geb_Cd = GebKonto.Geb_Cd AufGKon.MWSt_Cd = MW AufGKon.Gebuehr = GebKonto.Gebuehr AufGKon.Depot = GebKonto.Depot AufGKon.Sort_Cd = GebKonto.Sort_Cd. END. DO WHILE TRUE: IF NOT Aufko.GG_Berech THEN LEAVE. IF Aufze.Preis = 0 AND AufGKon.Gebuehr <> 0 THEN LEAVE. AufGKon.Ausgang = AufGKon.Ausgang + VGeb_Me. AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang) * (AufGKon.Depot + AufGKon.Gebuehr). LEAVE. END. LEAVE. END. DO WHILE Aufze.GGebKto <> '': IF Aufze.GGeb_Me = 0 THEN LEAVE. FIND GebKonto USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = Aufze.Firma AND GebKonto.Geb_Cd = Aufze.GGebKto NO-LOCK. IF GebKonto.MWST_Art = 0 THEN MW = 11. IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd. FIND AufGKon USE-INDEX AufGKon-k1 WHERE AufGKon.Firma = Aufze.Firma AND AufGKon.Aufnr = Aufze.Aufnr AND AufGKon.Geb_Cd = GebKonto.Geb_Cd AND AufGKon.MWSt_Cd = MW NO-ERROR. IF NOT AVAILABLE AufGKon THEN DO: CREATE AufGKon. ASSIGN AufGKon.Firma = Aufze.Firma AufGKon.Aufnr = Aufze.Aufnr AufGKon.Geb_Cd = GebKonto.Geb_Cd AufGKon.MWSt_Cd = MW AufGKon.Gebuehr = GebKonto.Gebuehr AufGKon.Depot = GebKonto.Depot AufGKon.Sort_Cd = GebKonto.Sort_Cd. END. DO WHILE TRUE: IF NOT Aufko.GG_Berech THEN LEAVE. IF Aufze.Preis = 0 AND AufGKon.Gebuehr <> 0 THEN LEAVE. AufGKon.Ausgang = AufGKon.Ausgang + GGeb_Me. AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang) * (AufGKon.Depot + AufGKon.Gebuehr). LEAVE. END. LEAVE. END. /* ------------------------------------------ */ /* Summengruppen (Rabatte / Spezialrabatte) */ /* ------------------------------------------ */ DEF VAR VMenge AS DEC DECIMALS 4 NO-UNDO. DEF VAR FWert AS DEC DECIMALS 4 NO-UNDO. DEF VAR AWert AS DEC DECIMALS 4 NO-UNDO. DEF VAR RRecid AS RECID NO-UNDO. DO WHILE TRUE: DO WHILE Aufze.Auf_Sp_Grp > 0: FIND AufSpRab USE-INDEX AufSpRab-k1 WHERE AufSpRab.Firma = Aufze.Firma AND AufSpRab.Aufnr = Aufze.Aufnr AND AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp NO-ERROR. IF NOT AVAILABLE AufSpRab THEN DO: CREATE AufSpRab. ASSIGN AufSpRab.Firma = Aufze.Firma AufSpRab.Aufnr = Aufze.Aufnr AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp. END. AufSpRab.Menge = AufSpRab.Menge + Menge. FIND LAST SpPrRab USE-INDEX SpPrRab-k1 WHERE SpPrRab.Firma = Aufko.Firma AND SpPrRab.Knr = Aufko.Knr AND SpPrRab.Rab_Grp = AufSpRab.Rab_Grp AND SpPrRab.Menge <= AufSpRab.Menge AND SpPrRab.Ab_Datum <= Aufko.Kond_Datum AND SpPrRab.Bis_Datum >= Aufko.Kond_Datum NO-LOCK NO-ERROR. IF AVAILABLE SpPrRab THEN DO: ASSIGN AufSpRab.Auf_Proz_Betr = SpPrRab.Auf_Proz_Betr AufSpRab.Auf_Wert = SpPrRab.Auf_Wert. END. ELSE DO: Aufze.Auf_Sp_Grp = 0. END. LEAVE. END. IF Aufze.Rab_Su_Grp = 0 THEN DO: ASSIGN Aufze.Auf_Rab = 0 Aufze.Abh_Rab = 0 Aufze.Rab_Su_Art = 0. LEAVE. END. FIND AufRabSu USE-INDEX AufRabSu-k1 WHERE AufRabSu.Firma = Aufze.Firma AND AufRabSu.Aufnr = Aufze.Aufnr AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp AND AufRabSu.MWST_Cd = Aufze.WuCd NO-ERROR. IF NOT AVAILABLE AufRabSu THEN DO: FIND FIRST RabSumm NO-LOCK USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = Aufze.Rab_Su_Grp. CREATE AufRabSu. ASSIGN AufRabSu.Firma = Aufze.Firma AufRabSu.Aufnr = Aufze.Aufnr AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp AufRabSu.MWST_Cd = Aufze.WuCd AufRabSu.F_Art = RabSumm.F_Rab_Art AufRabSu.F_Proz_Betr = RabSumm.F_Proz_Betr AufRabSu.A_Art = RabSumm.A_Rab_Art AufRabSu.A_Proz_Betr = RabSumm.A_Proz_Betr. END. RRecid = RECID(AufRabSu). DO WHILE TRUE: ASSIGN AufRabSu.M_Menge = AufRabSu.M_Menge + Menge AufRabSu.M_Betrag = AufRabSu.M_Betrag + Net_Betr AufRabSu.M_Inhalt = AufRabSu.M_Inhalt + Liter. IF Aufze.Rab_Su_Art = 0 THEN LEAVE. ASSIGN AufRabSu.R_Menge = AufRabSu.R_Menge + Menge AufRabSu.R_Betrag = AufRabSu.R_Betrag + Net_Betr AufRabSu.R_Inhalt = AufRabSu.R_Inhalt + Liter. LEAVE. END. VMenge = 0. FOR EACH AufRabSu USE-INDEX AufRabSu-k1 WHERE AufRabSu.Firma = Aufze.Firma AND AufRabSu.Aufnr = Aufze.Aufnr AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp NO-LOCK: CASE AufRabSu.F_Art: WHEN 0 THEN VMenge = VMenge + AufRabSu.M_Menge. WHEN 1 THEN VMenge = VMenge + AufRabSu.M_Betrag. WHEN 2 THEN VMenge = VMenge + AufRabSu.M_Inhalt. END. END. FIND AufRabSu WHERE RECID(AufRabSu) = RRecid. IF VMenge < 0 THEN VMenge = - VMenge. DO WHILE TRUE: IF AufRabSu.F_Art = 0 THEN DO: /* Mengen */ FIND LAST RabSumm USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ AND RabSumm.Menge <= VMenge NO-LOCK NO-ERROR. END. IF AufRabSu.F_Art = 1 THEN DO: /* Betrag */ FIND LAST RabSumm USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ AND RabSumm.Menge = 0 AND RabSumm.Betrag <= VMenge NO-LOCK NO-ERROR. END. IF AufRabSu.F_Art = 2 THEN DO: /* Hektoliter */ FIND LAST RabSumm USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ AND RabSumm.Menge = 0 AND RabSumm.Betrag = 0 AND RabSumm.Inhalt <= (VMenge / 100) NO-LOCK NO-ERROR. END. IF NOT AVAILABLE RabSumm THEN FWert = 0. ELSE FWert = RabSumm.F_Wert. IF AufRabSu.A_Art = 0 THEN DO: FIND LAST RabSumm USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ AND RabSumm.Menge <= VMenge NO-LOCK NO-ERROR. END. IF AufRabSu.A_Art = 1 THEN DO: FIND LAST RabSumm USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ AND RabSumm.Menge = 0 AND RabSumm.Betrag <= VMenge NO-LOCK NO-ERROR. END. IF AufRabSu.A_Art = 2 THEN DO: FIND LAST RabSumm USE-INDEX RabSumm-k1 WHERE RabSumm.Firma = Aufze.Firma AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ AND RabSumm.Menge = 0 AND RabSumm.Betrag = 0 AND RabSumm.Inhalt <= (VMenge / 100) NO-LOCK NO-ERROR. END. IF NOT AVAILABLE RabSumm THEN AWert = 0. ELSE AWert = RabSumm.A_Wert. LEAVE. END. FOR EACH AufRabSu USE-INDEX AufRabSu-k1 WHERE AufRabSu.Firma = Aufze.Firma AND AufRabSu.Aufnr = Aufze.Aufnr AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp: AufRabSu.F_Wert = FWert. AufRabSu.A_Wert = AWert. END. LEAVE. END. DO WHILE Aufze.EP = 0: IF Artst.Listen_EP <> 0 THEN Aufze.EP = Artst.Listen_EP. IF Artst.LEP <> 0 THEN Aufze.EP = Artst.LEP. IF Artst.DEP <> 0 THEN Aufze.EP = Artst.DEP. LEAVE. END. /* ------------------------------------------ */ /* Artikelbewegung mutieren */ /* ------------------------------------------ */ DO WHILE TRUE: IF ipArt = 1 THEN LEAVE. IF ipArt = 2 THEN DO: DELETE Artbw. LEAVE. END. FIND FIRST TAufko. BUFFER-COPY Aufko TO TAufko. FIND FIRST TAufze. BUFFER-COPY Aufze TO TAufze. RUN ARTBWMUT ( INPUT RECID(Artbw) ). LEAVE. END. RELEASE ArtLager. RELEASE Artst. RELEASE AufSpRab. RELEASE AufRabSu. RELEASE AufGKon. RELEASE Aufze. RELEASE Artbw. RELEASE GebKonto. /* ------------------------------------------ */ /* Auftragskopf (-köpfe) mutieren */ /* ------------------------------------------ */ DO WHILE TRUE: DEF VAR KoRecid AS RECID NO-UNDO. DEF VAR FwSprcd AS INT NO-UNDO. DEF VAR AufSta AS INT NO-UNDO. DEF BUFFER BAufko FOR Aufko. IF Aufko.Samm_Nr = 0 THEN LEAVE. FIND Tabel USE-INDEX Tabel-k1 WHERE Tabel.Firma = Aufze.Firma AND Tabel.RecArt = 'FAKART' AND Tabel.CodeC = '' AND Tabel.CodeI = Aufko.Fak_Art AND Tabel.Sprcd = FwSprcd NO-LOCK NO-ERROR. IF Tabel.Int_3 <> 4 THEN LEAVE. /* nicht Sammelrechnung */ KoRecid = RECID(Aufko). FwSprcd = DYNAMIC-FUNCTION('GETFWSPRCD':U) NO-ERROR. AufSta = DYNAMIC-FUNCTION('GETFWSRNICHT':U) NO-ERROR. RELEASE Aufko. FIND Aufko WHERE RECID(Aufko) = KoRecid. Aufko.Gedruckt = FALSE. Aufko.Auf_Sta = AufSta. FOR EACH BAufko USE-INDEX Aufko-k4 WHERE BAufko.Firma = Aufko.Firma AND BAufko.Knr = Aufko.Knr AND BAufko.Fak_Art = Aufko.Fak_Art AND BAufko.Samm_Nr = Aufko.Samm_Nr AND BAufko.Aufnr <> Aufko.Aufnr : BAufko.Gedruckt = FALSE. BAufko.Auf_Sta = AufSta. END. LEAVE. END. RELEASE Aufko. RELEASE BAufko. RELEASE Aufze. RELEASE Tabel. END PROCEDURE.