/*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ 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 Firma AS CHAR INIT '2000' NO-UNDO. DEF VAR cDiff AS CHAR NO-UNDO. DEF BUFFER bSteuer FOR Steuer. DEF TEMP-TABLE tSavko LIKE Savko. /* ------------------------------------------------------------------------- */ /* 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) */ /* ------------------------------------------------------------------------- */ FIND bSteuer USE-INDEX Steuer-k1 WHERE bSteuer.Firma = Firma NO-LOCK. EMPTY TEMP-TABLE tSavko. CREATE tSavko. FOR EACH Savko WHERE Savko.Firma = Firma AND Savko.Fak_Datum >= 01/01/2014 AND Savko.Fak_Datum <= 12/31/2014 BREAK BY Savko.Faknr: IF FIRST-OF ( Savko.Faknr ) THEN Rundbetr = 0. Rundbetr = Rundbetr + Savko.Auf_TOT. IF NOT LAST-OF ( Savko.Faknr ) THEN NEXT. FIND Debop NO-LOCK WHERE Debop.Firma = Firma AND Debop.Knr = Savko.Fak_Knr AND Debop.Faknr = Savko.Faknr. IF ABS(Debop.Fakbetr - Rundbetr) > 0.10 THEN DO: MESSAGE 'Totaldifferenz' SKIP Savko.Aufnr '-' Savko.Faknr SKIP Rundbetr '-' Debop.Fakbetr '-' (Rundbetr - Debop.Fakbetr) VIEW-AS ALERT-BOX. END. END. /* FOR EACH Savko WHERE Savko.Firma = Firma: VTotal = 0. VWpfl = 0. VWust = 0. VTotWu = 0. VTotNK = 0. NWpfl = 0. /* Anteil Nebenkosten */ TWpfl = 0. /* Wpfl + Nebenkosten */ VGewicht = 0. FIND FIRST tSavko. BUFFER-COPY Savko to tSavko. VRecid = RECID(Savko). ASSIGN Savko.Wpfl = 0 Savko.Wust = 0 Savko.WW = 0 Savko.Sk_Ber = 0. VTotal[04] = Savko.Transp. VTotal[05] = Savko.Porto. VTotal[06] = Savko.Verpack. VTotal[03] = VTotal[04] + VTotal[05] + VTotal[06]. FIND bSteuer USE-INDEX Steuer-k1 WHERE bSteuer.Firma = Firma NO-LOCK. FIND Wust NO-LOCK USE-INDEX Wust-k1 WHERE Wust.CodeK = Savko.MWST AND Wust.CodeA = bSteuer.Fwi03 NO-ERROR. IF NOT AVAILABLE Wust THEN MESSAGE Savko.MWST '-' bSteuer.Fwi03 view-as alert-box. zz = Wust.WuCd. VWpfl[zz] = VWpfl[zz] + Savko.Transp. FIND Wust USE-INDEX Wust-k1 WHERE Wust.CodeK = Savko.MWST AND Wust.CodeA = bSteuer.Fwi04 NO-LOCK. zz = Wust.WuCd. VWpfl[zz] = VWpfl[zz] + Savko.Porto. FIND Wust USE-INDEX Wust-k1 WHERE Wust.CodeK = Savko.MWST AND Wust.CodeA = bSteuer.Fwi05 NO-LOCK. zz = Wust.WuCd. VWpfl[zz] = VWpfl[zz] + Savko.Verpack. FOR EACH Savze USE-INDEX Savze-k1 WHERE Savze.Firma = Savko.Firma AND Savze.Aufnr = Savko.Aufnr AND Savze.Artnr > 0 : zz = Savze.WuCd. DO WHILE TRUE: ASSIGN Savze.Auf_Rab = 0 Savze.Abh_Rab = 0. IF Savze.Rab_Su_Grp = 0 THEN LEAVE. IF Savze.Rab_Su_Art = 0 THEN LEAVE. FIND SavRabSu NO-LOCK USE-INDEX SavRabSu-k1 WHERE SavRabSu.Firma = Savze.Firma AND SavRabSu.Aufnr = Savze.Aufnr AND SavRabSu.Rab_Summ = Savze.Rab_Su_Grp AND SavRabSu.MWST_Cd = Savze.WuCd. Wert = SavRabSu.F_Wert. DO WHILE Wert <> 0: IF SavRabSu.F_Proz_Betr THEN DO: Savze.Auf_Rab = Savze.Net_Betr * SavRabSu.F_Wert / 100. LEAVE. END. IF SavRabSu.F_Art = 0 THEN DO: Savze.Auf_Rab = Savze.MGeli * SavRabSu.F_Wert. LEAVE. END. IF SavRabSu.F_Art = 2 THEN DO: Savze.Auf_Rab = Savze.Liter * SavRabSu.F_Wert / 100. LEAVE. END. LEAVE. END. IF Savko.Abhol = FALSE THEN Wert = 0. ELSE Wert = SavRabSu.A_Wert. DO WHILE Wert <> 0: IF SavRabSu.A_Proz_Betr THEN DO: Savze.Auf_Rab = Savze.Net_Betr * SavRabSu.A_Wert / 100. LEAVE. END. IF SavRabSu.A_Art = 0 THEN DO: Savze.Auf_Rab = Savze.MGeli * SavRabSu.A_Wert. LEAVE. END. IF SavRabSu.A_Art = 2 THEN DO: Savze.Auf_Rab = Savze.Liter * SavRabSu.A_Wert / 100. LEAVE. END. LEAVE. END. DO WHILE TRUE: IF Savze.Abh_Rab = 0 AND Savze.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 = Savze.Abh_Rab. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). Savze.Abh_Rab = Rundbetr. Rundbetr = Savze.Auf_Rab. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). Savze.Auf_Rab = Rundbetr. END. LEAVE. END. LEAVE. END. DO WHILE TRUE: ASSIGN Savze.Auf_Sp_Rab = 0. IF Savze.Auf_Sp_Grp = 0 THEN LEAVE. FIND SavSpRab USE-INDEX SavSpRab-k1 WHERE SavSpRab.Firma = Savze.Firma AND SavSpRab.Aufnr = Savze.Aufnr AND SavSpRab.Rab_Grp = Savze.Auf_Sp_Grp NO-LOCK NO-ERROR. IF NOT AVAILABLE SavSpRab THEN LEAVE. ASSIGN Savze.Auf_Sp_Proz_Betr = SavSpRab.Auf_Proz_Betr Savze.Auf_Sp_Wert = SavSpRab.Auf_Wert. IF NOT Savze.Auf_Sp_Proz_Betr THEN Savze.Auf_Sp_Rab = Savze.MGeli * Savze.Auf_Sp_Wert. ELSE Savze.Auf_Sp_Rab = Savze.Net_Betr * Savze.Auf_Sp_Wert / 100. FIND FIRST Wust USE-INDEX Wust-k2 WHERE Wust.WuCd = zz NO-LOCK. IF Wust.Incl = TRUE THEN DO: Rundbetr = Savze.Auf_Sp_Rab. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). Savze.Auf_Sp_Rab = Rundbetr. END. LEAVE. END. VWpfl [zz] = VWpfl [zz] + Savze.Net_Betr - Savze.Auf_Rab - Savze.Abh_Rab - Savze.Auf_Sp_Rab. Savko.WW[zz] = Savko.WW[zz] + Savze.Net_Betr - Savze.Auf_Rab - Savze.Abh_Rab - Savze.Auf_Sp_Rab. VTotal [01] = VTotal [01] + Savze.Net_Betr - Savze.Auf_Rab - Savze.Abh_Rab - Savze.Auf_Sp_Rab. IF Savze.Sk_Ber THEN DO: VTotal[02] = VTotal[02] + Savze.Net_Betr - Savze.Auf_Rab - Savze.Abh_Rab - Savze.Auf_Sp_Rab. END. VGewicht = VGewicht + Savze.Gewicht. END. FOR EACH SavGKon USE-INDEX SavGKon-k1 WHERE SavGKon.Firma = Savko.Firma AND SavGKon.Aufnr = Savko.Aufnr NO-LOCK: 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 USE-INDEX MWSTAns-k1 WHERE MWSTAns.MWST_Cd = Wust.WuCd AND MWSTAns.Datum <= Savko.Kond_Datum NO-LOCK. 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: Savko.Wpfl[zz] = VWpfl[zz]. Savko.Wust[zz] = VWust[zz]. END. ASSIGN Savko.Auf_Tot = VTotal[10] Savko.Gewicht = VGewicht Savko.Sk_Ber = VTotal[02]. BUFFER-COMPARE Savko TO tSavko SAVE RESULT IN cDiff. IF cDiff = '' THEN DO: RELEASE Savko. NEXT. END. MESSAGE Savko.Aufnr Savko.Faknr Savko.Fak_Datum cDiff view-as alert-box. BUFFER-COPY tSavko TO Savko. RELEASE Savko. RELEASE Savze. RELEASE SavGKon. RELEASE SavSpRab. RELEASE SavRabSu. RELEASE bSteuer. RELEASE Wust. END. PROCEDURE RUNDEN: 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. */