savkotot.p 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /* ------------------------------------------------------------------------- */
  2. /* Auftragstotal errechnen (Savkotot.p) */
  3. /* ------------------------------------------------------------------------- */
  4. { v8/globvar.i " " " " "SHARED" }
  5. { v8/artivar.i " " " " "SHARED" }
  6. /* ------------------------------------------------------------------------- */
  7. { v8/aufkototv.i " " "SHARED" }
  8. /* ------------------------------------------------------------------------- */
  9. DEF VAR zz AS INT.
  10. DEF VAR Wert AS DEC DECIMALS 4.
  11. DEF VAR VSkonto AS DEC INIT 0.
  12. /* ------------------------------------------------------------------------- */
  13. /* VTotal[01] = Nettowarenwert */
  14. /* VTotal[02] = Skontoberechtigter Betrag */
  15. /* VTotal[03] = Nebenkosten */
  16. /* VTotal[04] = Transport */
  17. /* VTotal[05] = Porto */
  18. /* VTotal[06] = Verpackung */
  19. /* VTotal[07] = Total Mehrwertsteuerpflichtig */
  20. /* VTotal[08] = Total Mehrwertsteuerfrei */
  21. /* VTotal[09] = Total Mehrwertsteuer */
  22. /* VTotal[10] = Total Auftrag */
  23. /* VTotal[11] = Total Gebinde */
  24. /* VTotal[12] = Total Gebühren (Receycling) */
  25. /* ------------------------------------------------------------------------- */
  26. REPEAT TRANSACTION:
  27. VTotal = 0.
  28. VWpfl = 0.
  29. VWust = 0.
  30. VTotWu = 0.
  31. VTotNK = 0.
  32. NWpfl = 0. /* Anteil Nebenkosten */
  33. TWpfl = 0. /* Wpfl + Nebenkosten */
  34. VGewicht = 0.
  35. FIND Steuer WHERE Steuer.Firma = GVFirma NO-LOCK.
  36. FIND Savko USE-INDEX Savko-k1
  37. WHERE Savko.Firma = GVFirma
  38. AND Savko.Aufnr = XVAufnr NO-ERROR.
  39. IF NOT AVAILABLE Savko THEN RETURN.
  40. VRecid = RECID(Savko).
  41. ASSIGN Savko.Wpfl = 0
  42. Savko.Wust = 0
  43. Savko.WW = 0
  44. Savko.Sk_Ber = 0.
  45. VTotal[04] = Savko.Transp.
  46. VTotal[05] = Savko.Porto.
  47. VTotal[06] = Savko.Verpack.
  48. VTotal[03] = VTotal[04] + VTotal[05] + VTotal[06].
  49. FIND Wust USE-INDEX Wust-k1
  50. WHERE Wust.CodeK = Savko.MWST
  51. AND Wust.CodeA = Steuer.Fwi03 NO-LOCK.
  52. zz = Wust.WuCd.
  53. VWpfl[zz] = VWpfl[zz] + Savko.Transp.
  54. FIND Wust USE-INDEX Wust-k1
  55. WHERE Wust.CodeK = Savko.MWST
  56. AND Wust.CodeA = Steuer.Fwi04 NO-LOCK.
  57. zz = Wust.WuCd.
  58. VWpfl[zz] = VWpfl[zz] + Savko.Porto.
  59. FIND Wust USE-INDEX Wust-k1
  60. WHERE Wust.CodeK = Savko.MWST
  61. AND Wust.CodeA = Steuer.Fwi05 NO-LOCK.
  62. zz = Wust.WuCd.
  63. VWpfl[zz] = VWpfl[zz] + Savko.Verpack.
  64. FOR EACH Savze USE-INDEX Savze-k1
  65. WHERE Savze.Firma = Savko.Firma
  66. AND Savze.Aufnr = Savko.Aufnr
  67. AND Savze.Artnr > 0 :
  68. zz = Savze.WuCd.
  69. DO WHILE TRUE:
  70. ASSIGN Savze.Auf_Rab = 0
  71. Savze.Abh_Rab = 0.
  72. IF Savze.Rab_Su_Grp = 0 THEN LEAVE.
  73. IF Savze.Rab_Su_Art = 0 THEN LEAVE.
  74. FIND SavRabSu USE-INDEX SavRabSu-k1
  75. WHERE SavRabSu.Firma = Savze.Firma
  76. AND SavRabSu.Aufnr = Savze.Aufnr
  77. AND SavRabSu.Rab_Summ = Savze.Rab_Su_Grp
  78. AND SavRabSu.MWST_Cd = Savze.WuCd NO-LOCK.
  79. Wert = SavRabSu.F_Wert.
  80. DO WHILE Wert <> 0:
  81. IF SavRabSu.F_Art = 0 THEN DO:
  82. Savze.Auf_Rab = Savze.MGeli * SavRabSu.F_Wert.
  83. LEAVE.
  84. END.
  85. IF SavRabSu.F_Art = 1 THEN DO:
  86. Savze.Auf_Rab = Savze.Net_Betr * SavRabSu.F_Wert / 100.
  87. LEAVE.
  88. END.
  89. IF SavRabSu.F_Art = 2 THEN DO:
  90. Savze.Auf_Rab = Savze.Liter * SavRabSu.F_Wert / 100.
  91. LEAVE.
  92. END.
  93. LEAVE.
  94. END.
  95. IF Savko.Abhol = FALSE THEN Wert = 0.
  96. ELSE Wert = SavRabSu.A_Wert.
  97. DO WHILE Wert <> 0:
  98. IF SavRabSu.A_Art = 0 THEN DO:
  99. Savze.Abh_Rab = Savze.MGeli * SavRabSu.A_Wert.
  100. LEAVE.
  101. END.
  102. IF SavRabSu.A_Art = 1 THEN DO:
  103. Savze.Abh_Rab = Savze.Net_Betr * SavRabSu.A_Wert / 100.
  104. LEAVE.
  105. END.
  106. IF SavRabSu.A_Art = 2 THEN DO:
  107. Savze.Abh_Rab = Savze.Liter * SavRabSu.A_Wert / 100.
  108. LEAVE.
  109. END.
  110. LEAVE.
  111. END.
  112. DO WHILE TRUE:
  113. IF Savze.Abh_Rab = 0 AND
  114. Savze.Auf_Rab = 0 THEN LEAVE.
  115. FIND FIRST Wust USE-INDEX Wust-k2
  116. WHERE Wust.WuCd = zz NO-LOCK.
  117. IF Wust.Incl = TRUE THEN DO:
  118. Rundbetr = Savze.Abh_Rab.
  119. Rundcode = 1.
  120. RUN "v8/runden.p".
  121. Savze.Abh_Rab = Rundbetr.
  122. Rundbetr = Savze.Auf_Rab.
  123. Rundcode = 1.
  124. RUN "v8/runden.p".
  125. Savze.Auf_Rab = Rundbetr.
  126. END.
  127. LEAVE.
  128. END.
  129. LEAVE.
  130. END.
  131. DO WHILE TRUE:
  132. ASSIGN Savze.Auf_Sp_Rab = 0.
  133. IF Savze.Auf_Sp_Grp = 0 THEN LEAVE.
  134. FIND SavSpRab USE-INDEX SavSpRab-k1
  135. WHERE SavSpRab.Firma = Savze.Firma
  136. AND SavSpRab.Aufnr = Savze.Aufnr
  137. AND SavSpRab.Rab_Grp = Savze.Auf_Sp_Grp NO-LOCK.
  138. ASSIGN Savze.Auf_Sp_Proz_Betr = SavSpRab.Auf_Proz_Betr
  139. Savze.Auf_Sp_Wert = SavSpRab.Auf_Wert.
  140. IF NOT Savze.Auf_Sp_Proz_Betr THEN DO:
  141. Savze.Auf_Sp_Rab = Savze.MGeli * Savze.Auf_Sp_Wert.
  142. END.
  143. IF Savze.Auf_Sp_Proz_Betr THEN DO:
  144. Savze.Auf_Sp_Rab = Savze.Net_Betr * Savze.Auf_Sp_Wert / 100.
  145. END.
  146. FIND FIRST Wust USE-INDEX Wust-k2
  147. WHERE Wust.WuCd = zz NO-LOCK.
  148. IF Wust.Incl = TRUE THEN DO:
  149. Rundbetr = Savze.Auf_Sp_Rab.
  150. Rundcode = 1.
  151. RUN "v8/runden.p".
  152. Savze.Auf_Sp_Rab = Rundbetr.
  153. END.
  154. LEAVE.
  155. END.
  156. VWpfl [zz] = VWpfl [zz] + Savze.Net_Betr
  157. - Savze.Auf_Rab
  158. - Savze.Abh_Rab
  159. - Savze.Auf_Sp_Rab.
  160. Savko.WW[zz] = Savko.WW[zz] + Savze.Net_Betr
  161. - Savze.Auf_Rab
  162. - Savze.Abh_Rab
  163. - Savze.Auf_Sp_Rab.
  164. VTotal [01] = VTotal [01] + Savze.Net_Betr
  165. - Savze.Auf_Rab
  166. - Savze.Abh_Rab
  167. - Savze.Auf_Sp_Rab.
  168. IF Savze.Sk_Ber THEN DO:
  169. VTotal[02] = VTotal[02] + Savze.Net_Betr
  170. - Savze.Auf_Rab
  171. - Savze.Abh_Rab
  172. - Savze.Auf_Sp_Rab.
  173. END.
  174. VGewicht = VGewicht + Savze.Gewicht.
  175. END.
  176. FOR EACH SavGKon USE-INDEX SavGKon-k1
  177. WHERE SavGKon.Firma = Savko.Firma
  178. AND SavGKon.Aufnr = Savko.Aufnr NO-LOCK:
  179. zz = SavGKon.MWSt_Cd.
  180. VWpfl[zz] = VWpfl[zz] + SavGKon.Betrag.
  181. IF SavGKon.Gebuehr = 0 THEN VTotal[11] = VTotal[11] + SavGKon.Betrag.
  182. ELSE VTotal[12] = VTotal[12] + SavGKon.Betrag.
  183. END.
  184. VMaxWC = 0.
  185. VTotNK = VWpfl[12].
  186. VResNK = VWpfl[12].
  187. DO zz = 1 TO 11:
  188. IF VWpfl[zz] < 0 THEN VFakt[zz] = -1.
  189. ELSE VFakt[zz] = +1.
  190. VTotWu = VTotWu + (VWpfl[zz] * VFakt[zz]).
  191. IF VWpfl[zz] <> 0 THEN VMaxWC = zz.
  192. END.
  193. NFakt = +1.
  194. IF VTotNK < 0 THEN DO:
  195. VTotNK = - VTotNK.
  196. VResNK = - VResNK.
  197. NFakt = -1.
  198. END.
  199. DO zz = 1 TO 11:
  200. IF VWpfl[zz] = 0 THEN NEXT.
  201. IF zz = VMaxWC THEN DO:
  202. NWpfl[zz] = VResNK * NFakt.
  203. TWpfl[zz] = VWpfl[zz] + (VResNK * NFakt).
  204. LEAVE.
  205. END.
  206. Rundbetr = (((VWpfl[zz] * 100 * VFakt[zz]) / VTotWu) * VTotNK) / 100.
  207. NWpfl[zz] = Rundbetr * NFakt.
  208. TWpfl[zz] = VWpfl[zz] + (Rundbetr * NFakt).
  209. VResNK = VResNK - Rundbetr.
  210. END.
  211. DO zz = 1 TO 10:
  212. IF TWpfl[zz] = 0 THEN NEXT.
  213. VTotal[07] = VTotal[07] + TWpfl[zz].
  214. VTotal[10] = VTotal[10] + TWpfl[zz].
  215. FIND FIRST Wust USE-INDEX Wust-k2
  216. WHERE Wust.WuCd = zz NO-LOCK.
  217. IF Wust.Incl THEN NEXT.
  218. FIND LAST MWSTAns USE-INDEX MWSTAns-k1
  219. WHERE MWSTAns.MWST_Cd = Wust.WuCd
  220. AND MWSTAns.Datum <= Savko.Kond_Datum NO-LOCK.
  221. Rundbetr = TWpfl[zz] * MWSTAns.Ansatz / 100.
  222. VWust [zz] = Rundbetr.
  223. VTotal[09] = VTotal[09] + Rundbetr.
  224. VTotal[10] = VTotal[10] + Rundbetr.
  225. END.
  226. VTotal[08] = VTotal[08] + TWpfl[11].
  227. VTotal[10] = VTotal[10] + TWpfl[11].
  228. Rundbetr = VTotal[10].
  229. Rundcode = 1.
  230. RUN "v8/runden.p".
  231. VTotal[10] = Rundbetr.
  232. DO ix = 1 TO 12:
  233. Savko.Wpfl[ix] = VWpfl[ix].
  234. Savko.Wust[ix] = VWust[ix].
  235. END.
  236. ASSIGN Savko.Auf_Tot = VTotal[10]
  237. Savko.Gewicht = VGewicht
  238. Savko.Sk_Ber = VTotal[02].
  239. RELEASE Savko.
  240. LEAVE.
  241. END.