| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723 |
- 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: <none>
- 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: <none>
- 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: <none>
- 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: <none>
- 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.
|