MwstBerechnungsTest.p 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. DEF VAR i1 AS INT NO-UNDO.
  2. DEF VAR WW AS DEC NO-UNDO.
  3. DEF VAR Proz AS DEC NO-UNDO INIT 100.00.
  4. DEF VAR FakBetr AS DEC NO-UNDO.
  5. DEF VAR nTotNebenkosten AS DEC NO-UNDO DECIMALS 2.
  6. DEF VAR nRestNebenkosten AS DEC NO-UNDO DECIMALS 2.
  7. DEF VAR iFaktNebenkosten AS INT NO-UNDO.
  8. DEF VAR htMwstCalc AS HANDLE NO-UNDO.
  9. DEF VAR lNebenkosten AS LOG NO-UNDO INIT TRUE.
  10. DEF TEMP-TABLE tMwstCalc
  11. FIELD Mwst_Cd AS INT
  12. FIELD Ansatz AS DEC
  13. FIELD Inkl AS LOG
  14. FIELD Fakbetr AS DEC DECIMALS 2
  15. FIELD Brutto AS DEC DECIMALS 2
  16. FIELD Netto AS DEC DECIMALS 2
  17. FIELD Mwst AS DEC DECIMALS 2
  18. FIELD Faktor AS INT
  19. FIELD ProzAnteil AS DEC DECIMALS 2
  20. FIELD VerpAnteil AS DEC DECIMALS 2
  21. FIELD AbsBrutto AS DEC DECIMALS 2
  22. FIELD AbsNetto AS DEC DECIMALS 2
  23. FIELD AbsMwst AS DEC DECIMALS 2
  24. .
  25. DEF BUFFER btMwstCalc FOR tMwstCalc.
  26. htMwstCalc = TEMP-TABLE tMwstCalc:DEFAULT-BUFFER-HANDLE.
  27. FIND Aufko NO-LOCK
  28. WHERE Aufko.Firma = '1010'
  29. AND Aufko.Aufnr = 2661110.
  30. DO i1 = 1 TO 12:
  31. IF Aufko.WPfl[i1] = 0 THEN NEXT.
  32. CREATE tMwstCalc.
  33. IF i1 < 12 THEN
  34. DO:
  35. FIND LAST MwstAns NO-LOCK
  36. WHERE MwstAns.Firma = '1010'
  37. AND MwstAns.Lkz = 'zzz'
  38. AND MwstAns.MwstCd = i1
  39. AND MwstAns.Ab_Datum <= TODAY.
  40. ASSIGN
  41. tMwstCalc.Mwst_Cd = i1
  42. tMwstCalc.Faktor = (IF Aufko.Wpfl[i1] >= 0 THEN 1 ELSE -1)
  43. tMwstCalc.Ansatz = MwstAns.Ansatz
  44. tMwstCalc.Inkl = MwstAns.Inkl
  45. tMwstCalc.Fakbetr = Aufko.Tot-Betr.
  46. IF NOT tMwstCalc.Inkl THEN
  47. DO:
  48. ASSIGN
  49. tMwstCalc.Brutto = Aufko.Wpfl[i1] + Aufko.Wust[i1]
  50. tMwstCalc.Netto = Aufko.Wpfl[i1]
  51. tMwstCalc.Mwst = Aufko.Wust[i1].
  52. END.
  53. ELSE DO:
  54. ASSIGN
  55. tMwstCalc.Brutto = Aufko.Wpfl[i1]
  56. tMwstCalc.Mwst = tMwstCalc.Brutto * tMwstCalc.Ansatz / (100 + tMwstCalc.Ansatz)
  57. tMwstCalc.Netto = tMwstCalc.Brutto - tMwstCalc.Mwst.
  58. END.
  59. ASSIGN
  60. tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto)
  61. tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto )
  62. tMwstCalc.AbsMwst = ABS(tMwstCalc.Mwst )
  63. tMwstCalc.ProzAnt = 0.0.
  64. ww = ww + tMwstCalc.AbsNetto.
  65. END.
  66. ELSE
  67. DO:
  68. ASSIGN
  69. tMwstCalc.Mwst_Cd = 999
  70. tMwstCalc.Faktor = (IF Aufko.Wpfl[i1] >= 0 THEN 1 ELSE -1)
  71. tMwstCalc.Ansatz = 0.0
  72. tMwstCalc.Inkl = FALSE
  73. tMwstCalc.Fakbetr = 0
  74. tMwstCalc.Brutto = Aufko.Verp
  75. tMwstCalc.Netto = Aufko.Verp
  76. tMwstCalc.Mwst = 0
  77. tMwstCalc.AbsBrutto = ABS(Aufko.Verp)
  78. tMwstCalc.AbsNetto = ABS(Aufko.Verp)
  79. tMwstCalc.AbsMwst = 0
  80. tMwstCalc.ProzAnt = 0.
  81. END.
  82. END.
  83. FIND FIRST btMwstCalc WHERE btMwstCalc.Mwst_Cd = 999 NO-ERROR.
  84. IF NOT AVAILABLE btMwstCalc THEN DO:
  85. FakBetr = FakBetr + tMwstCalc.Netto + tMwstCalc.Mwst.
  86. lNebenkosten = FALSE.
  87. END.
  88. DO WHILE lNebenkosten:
  89. nRestNebenkosten = btMwstCalc.Netto.
  90. nTotNebenkosten = btMwstCalc.AbsNetto.
  91. iFaktNebenkosten = btMwstCalc.Faktor.
  92. FOR EACH tMwstCalc
  93. WHERE tMwstCalc.Mwst_Cd < 999
  94. BREAK
  95. BY tMwstCalc.Mwst_Cd:
  96. IF LAST(tMwstCalc.Mwst_Cd) THEN
  97. DO:
  98. tMwstCalc.ProzAnt = Proz.
  99. tMwstCalc.VerpAnt = nRestNebenkosten.
  100. tMwstCalc.Netto = tMwstCalc.Netto + tMwstCalc.VerpAnt.
  101. tMwstCalc.Mwst = tMwstCalc.Netto * tMwstCalc.Ansatz / 100.
  102. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst.
  103. END.
  104. ELSE DO:
  105. tMwstCalc.ProzAnt = tMwstCalc.AbsNetto * 100 / ww.
  106. tMwstCalc.VerpAnt = nTotNebenkosten * tMwstCalc.ProzAnt / 100 * iFaktNebenkosten.
  107. tMwstCalc.Netto = tMwstCalc.Netto + tMwstCalc.VerpAnt.
  108. tMwstCalc.Mwst = tMwstCalc.Netto * tMwstCalc.Ansatz / 100.
  109. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst.
  110. Proz = Proz - tMwstCalc.ProzAnt.
  111. nRestNebenkosten = nRestNebenkosten - tMwstCalc.VerpAnt.
  112. END.
  113. FakBetr = FakBetr + tMwstCalc.Netto + tMwstCalc.Mwst.
  114. btMwstCalc.Fakbetr = Fakbetr.
  115. END.
  116. LEAVE.
  117. END.
  118. OUTPUT TO 'C:\TEMP\tMwstCalc.csv'.
  119. DO i1 = 1 TO htMwstCalc:NUM-FIELDS:
  120. PUT CONTROL htMwstCalc:BUFFER-FIELD(i1):LABEL ';'.
  121. END.
  122. PUT CONTROL CHR(10).
  123. FOR EACH tMwstCalc:
  124. EXPORT DELIMITER ';' tMwstCalc.
  125. END.
  126. OUTPUT CLOSE.