| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442 |
- /* -------------------------------------------------- */
- /* Preisfindung */
- /* -------------------------------------------------- */
- DEF INPUT PARAMETER ipKnr AS INT NO-UNDO.
- DEF INPUT PARAMETER ipDatum AS DATE NO-UNDO.
- DEF INPUT PARAMETER ipAufze AS HANDLE NO-UNDO.
-
- DEF VAR hBuffer AS HANDLE NO-UNDO.
- DEF VAR Firma AS CHAR NO-UNDO.
- DEF VAR VPreis AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR VRab_Betr AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR VRab_Proz AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR VZus_Betr AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR VZus_Proz AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR Rundbetr AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR VAktion AS LOG NO-UNDO.
- DEF VAR VAktion_Text AS CHAR NO-UNDO.
- DEF VAR VP_Grp AS INT NO-UNDO.
- DEF VAR VGrp AS INT NO-UNDO.
- DEF VAR NettoRab AS INT NO-UNDO.
- DEF VAR Aktionen AS INT NO-UNDO.
- DEF VAR PosMenge AS INT NO-UNDO.
- DEF VAR FAbweich AS LOG NO-UNDO.
- DEF VAR KeineAkt AS LOG NO-UNDO.
- DEF VAR FSpezPreis AS INT NO-UNDO.
- /* 0 = Kein Spezialpreis */
- /* 1 = Spezialpreis auf Artikel */
- /* 2 = Spezialpreis auf Rabattgruppe */
- DEF VAR FwPreisGrp AS INT NO-UNDO.
-
- DEF TEMP-TABLE tAufze NO-UNDO LIKE Aufze.
- CREATE tAufze.
- hBuffer = TEMP-TABLE tAufze:DEFAULT-BUFFER-HANDLE.
- hBuffer:BUFFER-COPY(ipAufze).
- Firma = tAufze.Firma.
- FIND Steuer NO-LOCK
- WHERE Steuer.Firma = Firma NO-ERROR.
- ASSIGN FwPreisGrp = Steuer.Fwi14
- Aktionen = Steuer.Fwi20
- NettoRab = Steuer.Fwi15
- PosMenge = ABS(tAufze.MBest)
- .
-
- FIND Debst NO-LOCK
- WHERE Debst.Firma = Firma
- AND Debst.Knr = ipKnr NO-ERROR.
- IF NOT AVAILABLE Debst THEN RETURN.
- ASSIGN tAufze.Rab_Art = Debst.Zei_Rab_Art
- tAufze.Rab_Wert = Debst.Zei_Rab_Wert
- tAufze.Rab_Betr = 0
- tAufze.Zus_Art = Debst.Zuschl_Art
- tAufze.Zus_Wert = Debst.Zuschl_Wert
- tAufze.Zus_Betr = 0
- tAufze.Bru_Betr = 0
- tAufze.Net_Betr = 0.
-
- FIND Artst NO-LOCK
- WHERE Artst.Firma = Firma
- AND Artst.Artnr = tAufze.Artnr
- AND Artst.Inhalt = tAufze.Inhalt
- AND Artst.Jahr = tAufze.Jahr NO-ERROR.
- IF NOT AVAILABLE Artst THEN RETURN.
-
- FIND Wust NO-LOCK USE-INDEX Wust-k1
- WHERE Wust.CodeK = Debst.MWST
- AND Wust.CodeA = Artst.MWST NO-ERROR.
- tAufze.WuCd = Wust.WuCd.
- FIND FIRST Wust NO-LOCK USE-INDEX Wust-k2
- WHERE Wust.WuCd = tAufze.WuCd NO-ERROR.
- FIND LAST MWSTAns NO-LOCK USE-INDEX MWSTAns-k1
- WHERE MWSTAns.MWST_Cd = tAufze.WuCd
- AND MWSTAns.Datum <= ipDatum NO-ERROR.
- tAufze.MWST% = MWSTAns.Ansatz.
- tAufze.MWST_Inkl = Wust.Incl.
- VPreis = 0.
- VRab_Betr = 0.
- VRab_Proz = 0.
- VAktion = FALSE.
- VAktion_Text = ''.
- VP_Grp = 0.
- FAbweich = FALSE.
- PosMenge = ABS(tAufze.MBest).
-
- FIND AbwPrGrp USE-INDEX AbwPrGrp-k1
- WHERE AbwPrGrp.Firma = Firma
- AND AbwPrGrp.Knr = ipKnr
- AND AbwPrGrp.Wg_Grp = Artst.Wg_Grp NO-LOCK NO-ERROR.
- IF AVAILABLE AbwPrGrp THEN DO:
- VP_Grp = AbwPrGrp.Preis_Grp.
- FAbweich = TRUE.
- END.
- ELSE VP_Grp = Debst.Preis_Grp.
-
- IF Steuer.AktionsPreise = 0 THEN VGrp = VP_Grp.
- IF Steuer.AktionsPreise = 1 THEN VGrp = Debst.Ku_Grp.
-
- /* -------------------------------------------------------------- */
- /* Aktionspreise auf dieser Warengruppe möglich ? */
- /* -------------------------------------------------------------- */
- FIND AktKeine NO-LOCK USE-INDEX AktKeine-k1
- WHERE AktKeine.Firma = Firma
- AND AktKeine.Knr = ipKnr
- AND AktKeine.Wgr = Artst.Wg_Grp NO-ERROR.
- IF AVAILABLE AktKeine THEN KeineAkt = TRUE.
- ELSE KeineAkt = FALSE.
- DO WHILE TRUE:
- ASSIGN tAufze.Rab_Su_Grp = 0
- tAufze.Rab_Su_Art = 0.
-
- FIND RabTab NO-LOCK USE-INDEX RabTab-k1
- WHERE RabTab.Firma = Firma
- AND RabTab.Ku_Rab = Debst.Rab_Grp
- AND RabTab.Art_Rab = Artst.Rab_Grp NO-ERROR.
- IF NOT AVAILABLE RabTab THEN LEAVE.
- ASSIGN tAufze.Rab_Su_Grp = RabTab.Rab_Summ
- tAufze.Rab_Su_Art = RabTab.Add_Art.
-
- IF tAufze.Netto THEN LEAVE.
- IF RabTab.Wert = 0 THEN LEAVE.
-
- LEAVE.
- END.
- DO WHILE TRUE:
- IF tAufze.Rab_Art = 3 THEN DO:
- IF Artst.DEP <> 0 THEN VPreis = Artst.DEP.
- IF Artst.LEP <> 0 THEN VPreis = Artst.LEP.
- IF Artst.Listen_EP <> 0 THEN VPreis = Artst.Listen_EP.
- LEAVE.
- END.
-
- FIND LAST ArtPreis NO-LOCK USE-INDEX ArtPreis-k1
- WHERE ArtPreis.Firma = Firma
- AND ArtPreis.Artnr = tAufze.Artnr
- AND ArtPreis.Inhalt = tAufze.Inhalt
- AND ArtPreis.Jahr = tAufze.Jahr
- AND ArtPreis.Preis_Grp = VP_Grp
- AND ArtPreis.Aktion = FALSE
- AND ArtPreis.Ab_Datum <= ipDatum NO-ERROR.
- DO WHILE TRUE:
- IF AVAILABLE ArtPreis THEN LEAVE.
- IF FAbweich THEN DO:
- FIND LAST ArtPreis NO-LOCK USE-INDEX ArtPreis-k1
- WHERE ArtPreis.Firma = Firma
- AND ArtPreis.Artnr = tAufze.Artnr
- AND ArtPreis.Inhalt = tAufze.Inhalt
- AND ArtPreis.Jahr = tAufze.Jahr
- AND ArtPreis.Preis_Grp = Debst.Preis_Grp
- AND ArtPreis.Aktion = FALSE
- AND ArtPreis.Ab_Datum <= ipDatum NO-ERROR.
- IF AVAILABLE ArtPreis THEN LEAVE.
- END.
- FIND LAST ArtPreis NO-LOCK USE-INDEX ArtPreis-k1
- WHERE ArtPreis.Firma = Firma
- AND ArtPreis.Artnr = tAufze.Artnr
- AND ArtPreis.Inhalt = tAufze.Inhalt
- AND ArtPreis.Jahr = tAufze.Jahr
- AND ArtPreis.Preis_Grp = FwPreisGrp
- AND ArtPreis.Aktion = FALSE
- AND ArtPreis.Ab_Datum <= ipDatum NO-ERROR.
- IF AVAILABLE ArtPreis THEN LEAVE.
- FIND FIRST ArtPreis NO-LOCK USE-INDEX ArtPreis-k1
- WHERE ArtPreis.Firma = Firma
- AND ArtPreis.Artnr = tAufze.Artnr
- AND ArtPreis.Inhalt = tAufze.Inhalt
- AND ArtPreis.Jahr = tAufze.Jahr
- AND ArtPreis.Preis_Grp = VP_Grp
- AND ArtPreis.Aktion = FALSE
- AND ArtPreis.Ab_Datum >= ipDatum NO-ERROR.
- LEAVE.
- END.
- IF AVAILABLE ArtPreis THEN DO:
- FIND LAST ArtStaff NO-LOCK USE-INDEX ArtStaff-k1
- WHERE ArtStaff.Firma = ArtPreis.Firma
- AND ArtStaff.Artnr = ArtPreis.Artnr
- AND ArtStaff.Inhalt = ArtPreis.Inhalt
- AND ArtStaff.Jahr = ArtPreis.Jahr
- AND ArtStaff.Preis_Grp = ArtPreis.Preis_Grp
- AND ArtStaff.Ab_Datum = ArtPreis.Ab_Datum
- AND ArtStaff.Menge <= PosMenge NO-ERROR.
- IF AVAILABLE ArtStaff THEN DO:
- IF Wust.Incl THEN VPreis = ArtStaff.VK_Brutto.
- ELSE VPreis = ArtStaff.VK_Netto.
- END.
- ELSE DO.
- IF Wust.Incl THEN VPreis = ArtPreis.VK_Brutto.
- ELSE VPreis = ArtPreis.VK_Netto.
- END.
- END.
- FIND LAST SpezPrei NO-LOCK USE-INDEX SpezPrei-k1
- WHERE SpezPrei.Firma = Firma
- AND SpezPrei.Knr = ipKnr
- AND SpezPrei.Artnr = tAufze.Artnr
- AND SpezPrei.Inhalt = tAufze.Inhalt
- AND SpezPrei.Jahr = tAufze.Jahr
- AND SpezPrei.Menge <= PosMenge
- AND SpezPrei.Ab_Datum <= ipDatum
- AND SpezPrei.Bis_Datum >= ipDatum NO-ERROR.
- IF AVAILABLE SpezPrei THEN DO:
- IF SpezPrei.Proz_Betr THEN DO.
- VRab_Proz = SpezPrei.Wert.
- VRab_Betr = 0.
- END.
- ELSE DO:
- VPreis = SpezPrei.Wert.
- VRab_Betr = 0.
- VRab_Proz = 0.
- END.
-
- tAufze.Rab_Su_Grp = 0.
- tAufze.Rab_Su_Art = 0.
- FSpezPreis = 1.
- END.
- DO WHILE TRUE:
- tAufze.Auf_Sp_Proz_Betr = TRUE.
- tAufze.Auf_Sp_Wert = 0.
- tAufze.Auf_Sp_Rab = 0.
- tAufze.Auf_Sp_Grp = 0.
- IF FSpezPreis > 0 THEN LEAVE.
- FIND FIRST SpPrRab NO-LOCK USE-INDEX SpPrRab-k1
- WHERE SpPrRab.Firma = Firma
- AND SpPrRab.Knr = ipKnr
- AND SpPrRab.Rab_Grp = Artst.Rab_Grp
- AND SpPrRab.Ab_Datum <= ipDatum
- AND SpPrRab.Bis_Datum >= ipDatum NO-ERROR.
- IF AVAILABLE SpPrRab THEN DO:
- tAufze.Auf_Sp_Grp = SpPrRab.Rab_Grp.
- END.
- FIND LAST SpPrRab NO-LOCK USE-INDEX SpPrRab-k1
- WHERE SpPrRab.Firma = Firma
- AND SpPrRab.Knr = ipKnr
- AND SpPrRab.Rab_Grp = Artst.Rab_Grp
- AND SpPrRab.Menge <= PosMenge
- AND SpPrRab.Ab_Datum <= ipDatum
- AND SpPrRab.Bis_Datum >= ipDatum NO-ERROR.
- IF AVAILABLE SpPrRab THEN DO:
- IF SpPrRab.Wert <> 0 THEN DO:
- IF SpPrRab.Proz_Betr THEN DO.
- VRab_Proz = SpPrRab.Wert.
- VRab_Betr = 0.
- END.
- ELSE DO:
- VRab_Betr = SpPrRab.Wert.
- VRab_Proz = 0.
- END.
- IF tAufze.Netto = TRUE THEN DO:
- IF NettoRab = 1 THEN DO:
- VRab_Proz = 0.
- VRab_Betr = 0.
- END.
- END.
- tAufze.Rab_Su_Grp = 0.
- tAufze.Rab_Su_Art = 0.
- FSpezPreis = 2.
- END.
- END.
- LEAVE.
- END.
- DO WHILE TRUE:
- IF KeineAkt THEN LEAVE.
- IF FSpezpreis > 0 AND
- Aktionen = 0 THEN LEAVE.
- IF FSpezpreis = 1 THEN DO:
- IF Aktionen = 2 THEN LEAVE.
- END.
- IF FSpezpreis = 2 THEN DO:
- IF Aktionen = 1 THEN LEAVE.
- END.
- FIND LAST AktPreis NO-LOCK USE-INDEX AktPreis-k2
- WHERE AktPreis.Firma = Firma
- AND AktPreis.Artnr = tAufze.Artnr
- AND AktPreis.Inhalt = tAufze.Inhalt
- AND AktPreis.Jahr = tAufze.Jahr
- AND AktPreis.Grp = VGrp
- AND AktPreis.Ab_Datum <= ipDatum
- AND AktPreis.Bis_Datum >= ipDatum NO-ERROR.
- IF AVAILABLE AktPreis THEN DO:
- IF AktPreis.Art = 0 THEN VPreis = VPreis - AktPreis.Wert.
- IF AktPreis.Art = 1 THEN VPreis = VPreis * (100 - AktPreis.Wert) / 100.
- VAktion = TRUE.
- VAktion_Text = AktPreis.Bemerkung.
- LEAVE.
- END.
- IF NOT FAbweich THEN LEAVE.
- IF Steuer.AktionsPreise > 0 THEN LEAVE.
- FIND LAST AktPreis NO-LOCK USE-INDEX AktPreis-k2
- WHERE AktPreis.Firma = Firma
- AND AktPreis.Artnr = tAufze.Artnr
- AND AktPreis.Inhalt = tAufze.Inhalt
- AND AktPreis.Jahr = tAufze.Jahr
- AND AktPreis.Grp = Debst.Preis_Grp
- AND AktPreis.Ab_Datum <= ipDatum
- AND AktPreis.Bis_Datum >= ipDatum NO-ERROR.
- IF AVAILABLE AktPreis THEN DO:
- IF AktPreis.Art = 0 THEN VPreis = VPreis - AktPreis.Wert.
- IF AktPreis.Art = 1 THEN VPreis = VPreis * (100 - AktPreis.Wert) / 100.
- VAktion = TRUE.
- VAktion_Text = AktPreis.Bemerkung.
- LEAVE.
- END.
- LEAVE.
- END.
- IF tAufze.Netto THEN LEAVE.
- IF FSpezPreis > 0 THEN LEAVE.
- IF AVAILABLE RabTab THEN DO:
- IF RabTab.Wert = 0 THEN LEAVE.
- END.
-
- IF tAufze.Rab_Art > 0 THEN DO:
- IF tAufze.Rab_Art = 1 THEN DO:
- VRab_Proz = tAufze.Rab_Wert.
- VRab_Betr = 0.
- LEAVE.
- END.
- IF tAufze.Rab_Art = 2 THEN DO:
- VRab_Betr = tAufze.Rab_Wert.
- VRab_Proz = 0.
- LEAVE.
- END.
- END.
- IF AVAILABLE RabTab THEN DO:
- IF RabTab.Rab_Art = 0 THEN VRab_Betr = RabTab.Wert.
- IF RabTab.Rab_Art = 1 THEN VRab_Proz = RabTab.Wert.
- END.
- LEAVE.
- END.
- ASSIGN tAufze.Preis = VPreis
- tAufze.Aktion = VAktion
- tAufze.Aktion_Text = VAktion_Text.
- IF tAufze.Rab_Art <> 3 THEN DO:
- ASSIGN tAufze.Rab_Art = 0
- tAufze.Rab_Wert = 0.
- END.
- IF VRab_Proz <> 0 THEN DO:
- ASSIGN tAufze.Rab_Art = 1
- tAufze.Rab_Wert = VRab_Proz.
- END.
- IF VRab_Betr <> 0 THEN DO:
- ASSIGN tAufze.Rab_Art = 2
- tAufze.Rab_Wert = VRab_Betr.
- END.
- DO WHILE TRUE:
- IF tAufze.Rab_Art = 1 THEN DO:
- tAufze.Bru_Betr = tAufze.Preis * tAufze.MGeli.
- tAufze.Rab_Betr = tAufze.Rab_Wert * tAufze.Bru_Betr / 100.
- LEAVE.
- END.
- IF tAufze.Rab_Art = 2 THEN DO:
- tAufze.Bru_Betr = tAufze.Preis * tAufze.MGeli.
- tAufze.Rab_Betr = tAufze.Rab_Wert * tAufze.MGeli.
- LEAVE.
- END.
- IF tAufze.Rab_Art = 3 THEN DO:
- tAufze.Bru_Betr = tAufze.Preis * tAufze.MGeli.
- tAufze.Rab_Betr = tAufze.Rab_Wert * tAufze.MGeli * -1.
- LEAVE.
- END.
- tAufze.Bru_Betr = tAufze.Preis * tAufze.MGeli.
- tAufze.Rab_Betr = 0.
- tAufze.Rab_Art = 0.
- LEAVE.
- END.
-
- IF Wust.Incl THEN DO:
- Rundbetr = tAufze.Rab_Betr.
- RUN RUNDEN ( INPUT-OUTPUT Rundbetr ).
- tAufze.Rab_Betr = Rundbetr.
- END.
- tAufze.Zus_Betr = 0.
- IF tAufze.Zus_Art > 0 THEN DO:
- IF tAufze.Zus_Art = 1
- THEN tAufze.Zus_Betr = tAufze.Bru_Betr * tAufze.Zus_Wert / 100.
- IF tAufze.Zus_Art = 2
- THEN tAufze.Zus_Betr = tAufze.MGeli * tAufze.Zus_Wert.
- END.
-
- IF Wust.Incl THEN DO:
- Rundbetr = tAufze.Zus_Betr.
- RUN RUNDEN ( INPUT-OUTPUT Rundbetr ).
- tAufze.Zus_Betr = Rundbetr.
- END.
-
- tAufze.Net_Betr = tAufze.Bru_Betr - tAufze.Rab_Betr + tAufze.Zus_Betr.
- IF Wust.Incl THEN DO:
- Rundbetr = tAufze.Net_Betr.
- RUN RUNDEN ( INPUT-OUTPUT Rundbetr ).
- tAufze.Net_Betr = Rundbetr.
- END.
- DO WHILE tAufze.EP = 0:
- IF Artst.DEP <> 0 THEN DO:
- tAufze.EP = Artst.DEP.
- LEAVE.
- END.
- IF Artst.LEP <> 0 THEN DO:
- tAufze.EP = Artst.LEP.
- LEAVE.
- END.
- IF Artst.Listen_EP <> 0 THEN DO:
- tAufze.EP = Artst.Listen_EP.
- LEAVE.
- END.
- LEAVE.
- END.
- ipAufze:BUFFER-COPY(hBuffer).
- RETURN ''.
-
- PROCEDURE RUNDEN:
- DEF INPUT-OUTPUT PARAMETER ioBetrag AS DEC DECIMALS 4 NO-UNDO.
-
- DEF VAR VBetr AS DECIMAL FORMAT "99999999.9999-".
- DEF VAR VOp AS DECIMAL INIT 0.2.
-
- VBetr = ioBetrag.
- VBetr = ROUND((VBetr / 100 * VOp), 4) / VOp * 100.
- ioBetrag = VBetr.
- END PROCEDURE.
|