DEF VAR Firma AS CHAR INIT '1000' NO-UNDO. DEF VAR nBetrag AS DEC NO-UNDO. DEF VAR nBetrNeu AS DEC NO-UNDO. DEF VAR cString AS CHAR NO-UNDO. DEF VAR cDiff AS CHAR NO-UNDO. DEF VAR cFeld AS CHAR NO-UNDO. DEF VAR iRecid AS RECID NO-UNDO. DEF VAR ii AS INT NO-UNDO. DEF VAR jj AS INT NO-UNDO. DEF VAR htSavko AS HANDLE NO-UNDO. DEF VAR hbSavko AS HANDLE NO-UNDO. DEF VAR htFeld AS HANDLE NO-UNDO. DEF VAR hbFeld AS HANDLE NO-UNDO. DEF TEMP-TABLE tArtst LIKE Artst. DEF TEMP-TABLE tSavko LIKE Savko. DEF TEMP-TABLE tSavze LIKE Savze. DEF TEMP-TABLE tArtbw LIKE Artbw. DEF TEMP-TABLE tSavGKon LIKE SavGKon. DEF TEMP-TABLE tSavzeDiff NO-UNDO FIELD Aufnr AS INT FIELD Pos AS INT FIELD Artnr AS INT FIELD Inhalt AS INT FIELD Jahr AS INT FIELD MBest AS DEC FIELD MGeli AS DEC FIELD MRuek AS DEC FIELD old_Net_Betr AS DEC FIELD New_Net_Betr AS DEC. DEF BUFFER bSavko FOR Savko. htSavko = TEMP-TABLE tSavko:DEFAULT-BUFFER-HANDLE. hbSavko = BUFFER bSavko:HANDLE. EMPTY TEMP-TABLE tSavzeDiff. OUTPUT TO 'D:\Temp\Savko_Diff.csv' NO-MAP NO-CONVERT. FOR EACH bSavko NO-LOCK WHERE bSavko.Firma = Firma AND bSavko.Fak_Datum >= 01/01/2016 AND bSavko.Fak_Datum <= 01/31/2016: EMPTY TEMP-TABLE tSavko. CREATE tSavko. BUFFER-COPY bSavko TO tSavko. iRecid = RECID(tSavko). RUN AUFTRAGSTOTAL ( tSavko.Aufnr, OUTPUT cString ). FIND FIRST tSavko. BUFFER-COMPARE bSavko TO tSavko SAVE RESULT IN cDiff. IF cDiff = '' THEN NEXT. PUT CONTROL tSavko.Aufnr ';' tSavko.Knr ';' tSavko.Faknr ';' STRING(tSavko.Lief_Datum,'99.99.9999') ';' STRING(tSavko.Fak_Datum ,'99.99.9999') ';'. DO ii = 1 TO NUM-ENTRIES(cDiff, ','): cFeld = ENTRY(ii, cDiff, ','). htFeld = htSavko:BUFFER-FIELD(cFeld). hbFeld = hbSavko:BUFFER-FIELD(cFeld). IF htFeld:EXTENT = 0 THEN DO: PUT CONTROL cFeld ';' htFeld:BUFFER-VALUE ';' hbFeld:BUFFER-VALUE ';'. NEXT. END. DO jj = 1 TO htFeld:EXTENT: PUT CONTROL cFeld '[' jj '];' htFeld:BUFFER-VALUE(jj) ';' hbFeld:BUFFER-VALUE(jj) ';'. NEXT. END. END. PUT CONTROL CHR(10). END. OUTPUT CLOSE. OUTPUT TO 'D:\Temp\Savze_Diff.csv' NO-MAP NO-CONVERT. FOR EACH tSavzeDiff: EXPORT DELIMITER ';' tSavzeDiff. END. OUTPUT CLOSE. PROCEDURE AUFTRAGSTOTAL: /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO. DEF OUTPUT PARAMETER ipTotal AS CHAR NO-UNDO. DEF VAR VTotal AS DEC DECIMALS 4 EXTENT 15 NO-UNDO. DEF VAR VWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO. DEF VAR VWust AS DEC DECIMALS 4 EXTENT 12 NO-UNDO. DEF VAR NWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO. DEF VAR TWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO. DEF VAR VFakt AS INT EXTENT 12 NO-UNDO. DEF VAR NFakt AS INT NO-UNDO. DEF VAR VTotWu AS DEC DECIMALS 4 NO-UNDO. DEF VAR VTotNK AS DEC DECIMALS 4 NO-UNDO. DEF VAR VResNK AS DEC DECIMALS 4 NO-UNDO. DEF VAR VMaxWC AS INT NO-UNDO. DEF VAR VRecid AS RECID NO-UNDO. DEF VAR VGewicht AS DEC DECIMALS 4 NO-UNDO. DEF VAR zz AS INT NO-UNDO. DEF VAR Wert AS DEC DECIMALS 4 NO-UNDO. DEF VAR VSkonto AS DEC INIT 0 NO-UNDO. DEF VAR Rundbetr AS DEC DECIMALS 4 NO-UNDO. DEF VAR nMenge AS DEC NO-UNDO. /* ------------------------------------------------------------------------- */ /* VTotal[01] = Nettowarenwert */ /* VTotal[02] = Skontoberechtigter Betrag */ /* VTotal[03] = Nebenkosten */ /* VTotal[04] = Transport */ /* VTotal[05] = Porto */ /* VTotal[06] = Verpackung */ /* VTotal[07] = Total Mehrwertsteuerpflichtig */ /* VTotal[08] = Total Mehrwertsteuerfrei */ /* VTotal[09] = Total Mehrwertsteuer */ /* VTotal[10] = Total Auftrag */ /* VTotal[11] = Total Gebinde */ /* VTotal[12] = Total Gebühren (Receycling) */ /* ------------------------------------------------------------------------- */ REPEAT TRANSACTION: VTotal = 0. VWpfl = 0. VWust = 0. VTotWu = 0. VTotNK = 0. NWpfl = 0. /* Anteil Nebenkosten */ TWpfl = 0. /* Wpfl + Nebenkosten */ VGewicht = 0. FIND Steuer USE-INDEX Steuer-k1 WHERE Steuer.Firma = Firma NO-LOCK. FIND tSavko USE-INDEX Savko-k1 NO-LOCK WHERE tSavko.Firma = Firma AND tSavko.Aufnr = ipAufnr NO-ERROR. IF NOT AVAILABLE tSavko THEN RETURN. VRecid = RECID(tSavko). FIND Debst NO-LOCK WHERE Debst.Firma = tSavko.Firma AND Debst.KNr = tSavko.Knr. RUN GEBINDE_AUSGANG_RECHNEN ( Firma, ipAufnr, Debst.Geb_Rg ). RELEASE SavGKon. ASSIGN tSavko.Wpfl = 0 tSavko.Wust = 0 tSavko.WW = 0 tSavko.Sk_Ber = 0. VTotal[04] = tSavko.Transp. VTotal[05] = tSavko.Porto. VTotal[06] = tSavko.Verpack. VTotal[03] = VTotal[04] + VTotal[05] + VTotal[06]. FIND Wust NO-LOCK USE-INDEX Wust-k1 WHERE Wust.CodeK = tSavko.MWST AND Wust.CodeA = Steuer.Fwi03. zz = Wust.WuCd. VWpfl[zz] = VWpfl[zz] + tSavko.Transp. FIND Wust NO-LOCK USE-INDEX Wust-k1 WHERE Wust.CodeK = tSavko.MWST AND Wust.CodeA = Steuer.Fwi04. zz = Wust.WuCd. VWpfl[zz] = VWpfl[zz] + tSavko.Porto. FIND Wust NO-LOCK USE-INDEX Wust-k1 WHERE Wust.CodeK = tSavko.MWST AND Wust.CodeA = Steuer.Fwi05. zz = Wust.WuCd. VWpfl[zz] = VWpfl[zz] + tSavko.Verpack. EMPTY TEMP-TABLE tSavze. CREATE tSavze. FOR EACH Savze NO-LOCK USE-INDEX Savze-k1 WHERE Savze.Firma = tSavko.Firma AND Savze.Aufnr = tSavko.Aufnr AND Savze.Artnr > 0 : FIND FIRST tSavze. BUFFER-COPY Savze TO tSavze. RUN ZEILEN_BETRAEGE. FIND FIRST tSavze. /* ASSIGN Savze.Bru_Betr = tSavze.Bru_Betr Savze.Rab_Betr = tSavze.Rab_Betr Savze.Zus_Betr = tSavze.Zus_Betr Savze.Net_Betr = tSavze.Net_Betr. */ zz = tSavze.WuCd. IF tSavko.Auf_Sta < 2 THEN nMenge = tSavze.MBest. ELSE nMenge = tSavze.MGeli. nMenge = tSavze.MGeli. DO WHILE TRUE: ASSIGN tSavze.Auf_Rab = 0 tSavze.Abh_Rab = 0. IF tSavze.Rab_Su_Grp = 0 THEN LEAVE. IF tSavze.Rab_Su_Art = 0 THEN LEAVE. FIND SavRabSu NO-LOCK USE-INDEX SavRabSu-k1 WHERE SavRabSu.Firma = tSavze.Firma AND SavRabSu.Aufnr = tSavze.Aufnr AND SavRabSu.Rab_Summ = tSavze.Rab_Su_Grp AND SavRabSu.MWST_Cd = tSavze.WuCd. Wert = SavRabSu.F_Wert. DO WHILE Wert <> 0: IF SavRabSu.F_Proz_Betr THEN DO: tSavze.Auf_Rab = tSavze.Net_Betr * SavRabSu.F_Wert / 100. LEAVE. END. IF SavRabSu.F_Art = 0 THEN DO: tSavze.Auf_Rab = nMenge * SavRabSu.F_Wert. LEAVE. END. IF SavRabSu.F_Art = 2 THEN DO: tSavze.Auf_Rab = tSavze.Liter * SavRabSu.F_Wert / 100. LEAVE. END. LEAVE. END. IF tSavko.Abhol = FALSE THEN Wert = 0. ELSE Wert = SavRabSu.A_Wert. DO WHILE Wert <> 0: IF SavRabSu.A_Proz_Betr THEN DO: tSavze.Auf_Rab = tSavze.Net_Betr * SavRabSu.A_Wert / 100. LEAVE. END. IF SavRabSu.A_Art = 0 THEN DO: tSavze.Auf_Rab = nMenge * SavRabSu.A_Wert. LEAVE. END. IF SavRabSu.A_Art = 2 THEN DO: tSavze.Auf_Rab = tSavze.Liter * SavRabSu.A_Wert / 100. LEAVE. END. LEAVE. END. DO WHILE TRUE: IF tSavze.Abh_Rab = 0 AND tSavze.Auf_Rab = 0 THEN LEAVE. FIND FIRST Wust USE-INDEX Wust-k2 WHERE Wust.WuCd = zz NO-LOCK. IF Wust.Incl = TRUE THEN DO: Rundbetr = tSavze.Abh_Rab. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). tSavze.Abh_Rab = Rundbetr. Rundbetr = tSavze.Auf_Rab. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). tSavze.Auf_Rab = Rundbetr. END. LEAVE. END. RELEASE SavRabSu. LEAVE. END. DO WHILE TRUE: ASSIGN tSavze.Auf_Sp_Rab = 0. IF tSavze.Auf_Sp_Grp = 0 THEN LEAVE. FIND SavSpRab USE-INDEX SavSpRab-k1 WHERE SavSpRab.Firma = tSavze.Firma AND SavSpRab.Aufnr = tSavze.Aufnr AND SavSpRab.Rab_Grp = tSavze.Auf_Sp_Grp NO-LOCK NO-ERROR. IF NOT AVAILABLE SavSpRab THEN LEAVE. ASSIGN tSavze.Auf_Sp_Proz_Betr = SavSpRab.Auf_Proz_Betr tSavze.Auf_Sp_Wert = SavSpRab.Auf_Wert. IF NOT tSavze.Auf_Sp_Proz_Betr THEN tSavze.Auf_Sp_Rab = nMenge * tSavze.Auf_Sp_Wert. ELSE tSavze.Auf_Sp_Rab = tSavze.Net_Betr * tSavze.Auf_Sp_Wert / 100. FIND FIRST Wust USE-INDEX Wust-k2 WHERE Wust.WuCd = zz NO-LOCK. IF Wust.Incl = TRUE THEN DO: Rundbetr = tSavze.Auf_Sp_Rab. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). tSavze.Auf_Sp_Rab = Rundbetr. END. RELEASE SavSpRab. LEAVE. END. VWpfl [zz] = VWpfl [zz] + tSavze.Net_Betr - tSavze.Auf_Rab - tSavze.Abh_Rab - tSavze.Auf_Sp_Rab. tSavko.WW[zz] = tSavko.WW[zz] + tSavze.Net_Betr - tSavze.Auf_Rab - tSavze.Abh_Rab - tSavze.Auf_Sp_Rab. VTotal [01] = VTotal [01] + tSavze.Net_Betr - tSavze.Auf_Rab - tSavze.Abh_Rab - tSavze.Auf_Sp_Rab. IF tSavze.Sk_Ber THEN DO: VTotal[02] = VTotal[02] + tSavze.Net_Betr - tSavze.Auf_Rab - tSavze.Abh_Rab - tSavze.Auf_Sp_Rab. END. VGewicht = VGewicht + tSavze.Gewicht. IF tSavze.Net_Betr = Savze.Net_Betr THEN DO: RELEASE tSavze. NEXT. END. CREATE tSavzeDiff. BUFFER-COPY Savze TO tSavzeDiff ASSIGN tSavzeDiff.old_Net_Betr = Savze.Net_Betr tSavzeDiff.new_Net_Betr = tSavze.Net_Betr. END. FOR EACH SavGKon NO-LOCK USE-INDEX SavGKon-k1 WHERE SavGKon.Firma = tSavko.Firma AND SavGKon.Aufnr = tSavko.Aufnr: zz = SavGKon.MWSt_Cd. VWpfl[zz] = VWpfl[zz] + SavGKon.Betrag. IF SavGKon.Gebuehr = 0 THEN VTotal[11] = VTotal[11] + SavGKon.Betrag. ELSE VTotal[12] = VTotal[12] + SavGKon.Betrag. END. VMaxWC = 0. VTotNK = VWpfl[12]. VResNK = VWpfl[12]. DO zz = 1 TO 11: IF VWpfl[zz] < 0 THEN VFakt[zz] = -1. ELSE VFakt[zz] = +1. VTotWu = VTotWu + (VWpfl[zz] * VFakt[zz]). IF VWpfl[zz] <> 0 THEN VMaxWC = zz. END. NFakt = +1. IF VTotNK < 0 THEN DO: VTotNK = - VTotNK. VResNK = - VResNK. NFakt = -1. END. DO zz = 1 TO 11: IF VWpfl[zz] = 0 THEN NEXT. IF zz = VMaxWC THEN DO: NWpfl[zz] = VResNK * NFakt. TWpfl[zz] = VWpfl[zz] + (VResNK * NFakt). LEAVE. END. Rundbetr = (((VWpfl[zz] * 100 * VFakt[zz]) / VTotWu) * VTotNK) / 100. NWpfl[zz] = Rundbetr * NFakt. TWpfl[zz] = VWpfl[zz] + (Rundbetr * NFakt). VResNK = VResNK - Rundbetr. END. DO zz = 1 TO 10: IF TWpfl[zz] = 0 THEN NEXT. VTotal[07] = VTotal[07] + TWpfl[zz]. VTotal[10] = VTotal[10] + TWpfl[zz]. FIND FIRST Wust USE-INDEX Wust-k2 WHERE Wust.WuCd = zz NO-LOCK. IF Wust.Incl THEN NEXT. FIND LAST MWSTAns NO-LOCK USE-INDEX MWSTAns-k1 WHERE MWSTAns.MWST_Cd = Wust.WuCd AND MWSTAns.Datum <= tSavko.Kond_Datum. Rundbetr = TWpfl[zz] * MWSTAns.Ansatz / 100. VWust [zz] = Rundbetr. VTotal[09] = VTotal[09] + Rundbetr. VTotal[10] = VTotal[10] + Rundbetr. END. VTotal[08] = VTotal[08] + TWpfl[11]. VTotal[10] = VTotal[10] + TWpfl[11]. Rundbetr = VTotal[10]. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). VTotal[10] = Rundbetr. DO zz = 1 TO 12: tSavko.Wpfl[zz] = VWpfl[zz]. tSavko.Wust[zz] = VWust[zz]. END. ASSIGN tSavko.Auf_Tot = VTotal[10] tSavko.Gewicht = VGewicht tSavko.Sk_Ber = VTotal[02]. RELEASE tSavko. RELEASE tSavze. LEAVE. END. ipTotal = ''. DO zz = 1 TO 15: ipTotal = ipTotal + STRING(VTotal[zz]). IF zz < 15 THEN ipTotal = ipTotal + CHR(01). END. RELEASE tSavko. RELEASE tSavze. RELEASE SavGKon. RELEASE SavSpRab. RELEASE SavRabSu. RELEASE Steuer. RELEASE Wust. END PROCEDURE. PROCEDURE GEBINDE_AUSGANG_RECHNEN: /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipFirma AS CHAR NO-UNDO. DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO. DEF INPUT PARAMETER ipGebRg AS LOG NO-UNDO. EMPTY TEMP-TABLE tSavGKon. DEF VAR MW AS INT. FIND tSavko WHERE tSavko.Firma = ipFirma AND tSavko.Aufnr = ipAufnr NO-ERROR. FOR EACH SavGKon NO-LOCK WHERE SavGKon.Firma = tSavko.Firma AND SavGKon.Aufnr = tSavko.Aufnr: CREATE tSavGKon. BUFFER-COPY SavGKon To tSavGKon ASSIGN tSavGKon.Ausgang = 0 tSavGKon.Betrag = 0. RELEASE SavGKon. END. FOR EACH Savze NO-LOCK WHERE Savze.Firma = ipFirma AND Savze.Aufnr = ipAufnr: DO WHILE Savze.KGebKto <> '': IF Savze.KGeb_Me = 0 THEN LEAVE. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = Savze.Firma AND GebKonto.Geb_Cd = Savze.KGebKto. IF GebKonto.MWST_Art = 0 THEN MW = 11. IF GebKonto.MWST_Art = 1 THEN MW = Savze.WuCd. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd. FIND tSavGKon USE-INDEX SavGKon-k1 WHERE tSavGKon.Firma = Savze.Firma AND tSavGKon.Aufnr = Savze.Aufnr AND tSavGKon.Geb_Cd = GebKonto.Geb_Cd AND tSavGKon.MWSt_Cd = MW NO-ERROR. IF NOT AVAILABLE tSavGKon THEN DO: CREATE tSavGKon. ASSIGN tSavGKon.Firma = Savze.Firma tSavGKon.Aufnr = Savze.Aufnr tSavGKon.Geb_Cd = GebKonto.Geb_Cd tSavGKon.MWSt_Cd = MW tSavGKon.Gebuehr = GebKonto.Gebuehr tSavGKon.Depot = GebKonto.Depot tSavGKon.Sort_Cd = GebKonto.Sort_Cd. END. DO WHILE TRUE: IF NOT ipGebRg THEN LEAVE. IF Savze.Preis = 0 AND tSavGKon.Gebuehr <> 0 THEN LEAVE. IF tSavko.Abhol AND tSavGKon.Gebuehr <> 0 THEN LEAVE. tSavGKon.Ausgang = tSavGKon.Ausgang + Savze.KGeb_Me. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang) * (tSavGKon.Depot + tSavGKon.Gebuehr). LEAVE. END. LEAVE. END. DO WHILE Savze.VGebKto <> '': IF Savze.VGeb_Me = 0 THEN LEAVE. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = Savze.Firma AND GebKonto.Geb_Cd = Savze.VGebKto. IF GebKonto.MWST_Art = 0 THEN MW = 11. IF GebKonto.MWST_Art = 1 THEN MW = Savze.WuCd. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd. FIND tSavGKon USE-INDEX SavGKon-k1 WHERE tSavGKon.Firma = Savze.Firma AND tSavGKon.Aufnr = Savze.Aufnr AND tSavGKon.Geb_Cd = GebKonto.Geb_Cd AND tSavGKon.MWSt_Cd = MW NO-ERROR. IF NOT AVAILABLE tSavGKon THEN DO: CREATE tSavGKon. ASSIGN tSavGKon.Firma = Savze.Firma tSavGKon.Aufnr = Savze.Aufnr tSavGKon.Geb_Cd = GebKonto.Geb_Cd tSavGKon.MWSt_Cd = MW tSavGKon.Gebuehr = GebKonto.Gebuehr tSavGKon.Depot = GebKonto.Depot tSavGKon.Sort_Cd = GebKonto.Sort_Cd. END. DO WHILE TRUE: IF NOT ipGebRg THEN LEAVE. IF Savze.Preis = 0 AND tSavGKon.Gebuehr <> 0 THEN LEAVE. tSavGKon.Ausgang = tSavGKon.Ausgang + Savze.VGeb_Me. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang) * (tSavGKon.Depot + tSavGKon.Gebuehr). LEAVE. END. LEAVE. END. DO WHILE Savze.GGebKto <> '': IF Savze.GGeb_Me = 0 THEN LEAVE. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = Savze.Firma AND GebKonto.Geb_Cd = Savze.GGebKto. IF GebKonto.MWST_Art = 0 THEN MW = 11. IF GebKonto.MWST_Art = 1 THEN MW = Savze.WuCd. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd. FIND tSavGKon USE-INDEX SavGKon-k1 WHERE tSavGKon.Firma = Savze.Firma AND tSavGKon.Aufnr = Savze.Aufnr AND tSavGKon.Geb_Cd = GebKonto.Geb_Cd AND tSavGKon.MWSt_Cd = MW NO-ERROR. IF NOT AVAILABLE tSavGKon THEN DO: CREATE tSavGKon. ASSIGN tSavGKon.Firma = Savze.Firma tSavGKon.Aufnr = Savze.Aufnr tSavGKon.Geb_Cd = GebKonto.Geb_Cd tSavGKon.MWSt_Cd = MW tSavGKon.Gebuehr = GebKonto.Gebuehr tSavGKon.Depot = GebKonto.Depot tSavGKon.Sort_Cd = GebKonto.Sort_Cd. END. DO WHILE TRUE: IF NOT ipGebRg THEN LEAVE. IF Savze.Preis = 0 AND tSavGKon.Gebuehr <> 0 THEN LEAVE. tSavGKon.Ausgang = tSavGKon.Ausgang + Savze.GGeb_Me. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang) * (tSavGKon.Depot + tSavGKon.Gebuehr). LEAVE. END. LEAVE. END. END. FOR EACH tSavGKon WHERE tSavGKon.Firma = tSavko.Firma AND tSavGKon.Aufnr = tSavko.Aufnr: tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang) * (tSavGKon.Depot + tSavGKon.Gebuehr). RELEASE tSavGKon. END. RETURN. END PROCEDURE. PROCEDURE RUNDEN. /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER Rundcode AS INT NO-UNDO. DEF INPUT-OUTPUT PARAMETER Rundbetr AS DEC DECIMALS 4 NO-UNDO. DEF VAR VBetr AS DEC DECIMALS 4 NO-UNDO. DEF VAR VOp AS DEC INIT 0.2 NO-UNDO. DEF VAR XPChar AS CHAR NO-UNDO. DO TRANSACTION: VBetr = Rundbetr. IF Rundcode = 1 THEN DO: VBetr = ROUND((VBetr / 100 * VOp), 4) / VOp * 100. END. IF Rundcode = 2 THEN DO: VBetr = ROUND((VBetr / 100), 3) * 100. END. IF Rundcode = 3 THEN DO: VBetr = VBetr + 0.0499. VBetr = ROUND((VBetr / 100), 3) * 100. END. IF Rundcode = 4 THEN DO: VBetr = VBetr - 0.0500. VBetr = ROUND((VBetr / 100), 3) * 100. END. IF Rundcode = 5 THEN DO: VBetr = ROUND((VBetr / 100), 2) * 100. END. IF Rundcode = 6 THEN DO: VBetr = VBetr + 0.4999. VBetr = ROUND((VBetr / 100), 2) * 100. END. IF Rundcode = 7 THEN DO: VBetr = VBetr - 0.5000. VBetr = ROUND((VBetr / 100), 2) * 100. END. IF Rundcode = 8 THEN DO: VBetr = ROUND((VBetr / 1000), 2) * 1000. END. IF Rundcode = 9 THEN DO: VBetr = VBetr + 4.9999. VBetr = ROUND((VBetr / 1000), 2) * 1000. END. IF Rundcode = 10 THEN DO: VBetr = VBetr - 5.0000. VBetr = ROUND((VBetr / 1000), 2) * 1000. END. IF Rundcode = 99 THEN DO: XPChar = STRING(VBetr,"-99999999.999"). VBetr = DECIMAL(SUBSTRING(XPChar,01,12)). IF SUBSTRING(XPChar,13,01) > "4" THEN VBetr = VBetr + 0.01. END. Rundbetr = VBetr. END. END PROCEDURE. PROCEDURE ZEILEN_BETRAEGE: /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR Rundbetr AS DEC DECIMALS 4 NO-UNDO. FIND FIRST tSavze. FIND FIRST Wust NO-LOCK USE-INDEX Wust-k2 WHERE Wust.Wucd = tSavze.Wucd AND Wust.CodeA = tSavze.WC AND Wust.CodeK < 12 . DO WHILE TRUE: IF tSavze.Rab_Art = 1 THEN DO: tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli. tSavze.Rab_Betr = tSavze.Rab_Wert * tSavze.Bru_Betr / 100. LEAVE. END. IF tSavze.Rab_Art = 2 THEN DO: tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli. tSavze.Rab_Betr = tSavze.Rab_Wert * tSavze.MGeli. LEAVE. END. IF tSavze.Rab_Art = 3 THEN DO: tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli. tSavze.Rab_Betr = tSavze.Rab_Wert * tSavze.MGeli * -1. LEAVE. END. tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli. tSavze.Rab_Betr = 0. tSavze.Rab_Art = 0. LEAVE. END. IF Wust.Incl THEN DO: Rundbetr = tSavze.Rab_Betr. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). tSavze.Rab_Betr = Rundbetr. END. DO WHILE TRUE: IF tSavze.Zus_Art = 1 THEN DO: tSavze.Zus_Betr = tSavze.Zus_Wert * tSavze.Bru_Betr / 100. LEAVE. END. IF tSavze.Zus_Art = 2 THEN DO: tSavze.Zus_Betr = tSavze.Zus_Wert * tSavze.MGeli. LEAVE. END. tSavze.Zus_Betr = 0. tSavze.Zus_Wert = 0. tSavze.Zus_Art = 0. LEAVE. END. IF Wust.Incl THEN DO: Rundbetr = tSavze.Zus_Betr. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). tSavze.Zus_Betr = Rundbetr. END. tSavze.Net_Betr = tSavze.Bru_Betr - tSavze.Rab_Betr + tSavze.Zus_Betr. IF Wust.Incl THEN DO: Rundbetr = tSavze.Net_Betr. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). tSavze.Net_Betr = Rundbetr. END. RELEASE Wust. END PROCEDURE.