skonto.p 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* --------------------------------------------------------------------- */
  2. /* Skontoberechung */
  3. /* --------------------------------------------------------------------- */
  4. { v8/globvar.i " " " " "SHARED" }
  5. DEF INPUT PARAMETER VKnr LIKE Debop.Knr.
  6. DEF INPUT PARAMETER VFaknr LIKE Debop.Faknr.
  7. DEF INPUT PARAMETER VDatum LIKE Debop.ZahDat.
  8. DEF OUTPUT PARAMETER VSko_Max LIKE Debop.Skonto.
  9. DEF OUTPUT PARAMETER VSko_Fak LIKE Debop.Skonto.
  10. DEF VAR VToler AS DEC.
  11. FIND SteuNr WHERE SteuNr.Firma = GVFirma NO-LOCK NO-ERROR.
  12. VSko_Max = 0.
  13. VSko_Fak = 0.
  14. FIND Debop USE-INDEX Debop-k1
  15. WHERE Debop.Firma = GVFirma
  16. AND Debop.Knr = VKnr
  17. AND Debop.Faknr = VFaknr NO-LOCK NO-ERROR.
  18. IF NOT AVAILABLE Debop THEN RETURN.
  19. FIND Kondi WHERE Kondi.Sprcd = GVSprcd
  20. AND Kondi.Kond = Debop.Kond NO-LOCK NO-ERROR.
  21. IF NOT AVAILABLE Kondi THEN RETURN.
  22. VToler = Debop.SkBer * SteuNr.SK_Tol_% / 100.
  23. IF Debop.FakBetr < 0 THEN VToler = - VToler.
  24. IF VToler = 0 THEN DO:
  25. VToler = SteuNr.SK_Tol_Max.
  26. END.
  27. ELSE DO:
  28. IF VToler > SteuNr.SK_Tol_Max THEN VToler = SteuNr.SK_Tol_Max.
  29. END.
  30. IF Debop.FakBetr < 0 THEN VToler = - VToler.
  31. IF (Debop.Fakdat + Kondi.Tage[02]) >= VDatum THEN DO:
  32. Rundbetr = Debop.SkBer * Kondi.Skonto[02] / 100.
  33. Rundcode = 1.
  34. RUN "v8/runden.p".
  35. VSko_Max = Rundbetr.
  36. END.
  37. IF (Debop.Fakdat + Kondi.Tage[01]) >= VDatum THEN DO:
  38. Rundbetr = Debop.SkBer * Kondi.Skonto[01] / 100.
  39. Rundcode = 1.
  40. RUN "v8/runden.p".
  41. VSko_Max = Rundbetr.
  42. END.
  43. VSko_Max = VSko_Max + VToler.
  44. VSko_Fak = VSko_Max - Debop.Skonto.
  45. RETURN.