| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- /*------------------------------------------------------------------------------
- Purpose:
- Parameters: <none>
- 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.
- */
|