/* -------------------------------------------------- */ /* 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.