aufkotot.p 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. /* ------------------------------------------------------------------------- */
  2. /* Auftragstotal errechnen (aufkotot.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 Aufko USE-INDEX Aufko-k1
  37. WHERE Aufko.Firma = GVFirma
  38. AND Aufko.Aufnr = XVAufnr NO-ERROR.
  39. IF NOT AVAILABLE Aufko THEN RETURN.
  40. VRecid = RECID(Aufko).
  41. ASSIGN Aufko.Wpfl = 0
  42. Aufko.Wust = 0
  43. Aufko.WW = 0
  44. Aufko.Sk_Ber = 0.
  45. VTotal[04] = Aufko.Transp.
  46. VTotal[05] = Aufko.Porto.
  47. VTotal[06] = Aufko.Verpack.
  48. VTotal[03] = VTotal[04] + VTotal[05] + VTotal[06].
  49. FIND Wust USE-INDEX Wust-k1
  50. WHERE Wust.CodeK = Aufko.MWST
  51. AND Wust.CodeA = Steuer.Fwi03 NO-LOCK.
  52. zz = Wust.WuCd.
  53. VWpfl[zz] = VWpfl[zz] + Aufko.Transp.
  54. FIND Wust USE-INDEX Wust-k1
  55. WHERE Wust.CodeK = Aufko.MWST
  56. AND Wust.CodeA = Steuer.Fwi04 NO-LOCK.
  57. zz = Wust.WuCd.
  58. VWpfl[zz] = VWpfl[zz] + Aufko.Porto.
  59. FIND Wust USE-INDEX Wust-k1
  60. WHERE Wust.CodeK = Aufko.MWST
  61. AND Wust.CodeA = Steuer.Fwi05 NO-LOCK.
  62. zz = Wust.WuCd.
  63. VWpfl[zz] = VWpfl[zz] + Aufko.Verpack.
  64. FOR EACH Aufze USE-INDEX Aufze-k1
  65. WHERE Aufze.Firma = Aufko.Firma
  66. AND Aufze.Aufnr = Aufko.Aufnr
  67. AND Aufze.Artnr > 0 :
  68. FIND Wust NO-LOCK USE-INDEX Wust-k1
  69. WHERE Wust.CodeK = Aufko.MWSt
  70. AND Wust.CodeA = Aufze.Wc NO-ERROR.
  71. IF AVAILABLE Wust THEN Aufze.WuCd = Wust.WuCd.
  72. zz = Aufze.WuCd.
  73. DO WHILE TRUE:
  74. ASSIGN Aufze.Auf_Rab = 0
  75. Aufze.Abh_Rab = 0.
  76. IF Aufze.Rab_Su_Grp = 0 THEN LEAVE.
  77. IF Aufze.Rab_Su_Art = 0 THEN LEAVE.
  78. IF Aufze.Preis = 0 THEN LEAVE.
  79. FIND AufRabSu NO-LOCK USE-INDEX AufRabSu-k1
  80. WHERE AufRabSu.Firma = Aufze.Firma
  81. AND AufRabSu.Aufnr = Aufze.Aufnr
  82. AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp
  83. AND AufRabSu.MWST_Cd = Aufze.WuCd.
  84. Wert = AufRabSu.F_Wert.
  85. DO WHILE Wert <> 0:
  86. IF AufRabSu.F_Proz_Betr THEN DO:
  87. Aufze.Auf_Rab = Aufze.Net_Betr * AufRabSu.F_Wert / 100.
  88. LEAVE.
  89. END.
  90. IF AufRabSu.F_Art = 0 THEN DO:
  91. Aufze.Auf_Rab = Aufze.MGeli * AufRabSu.F_Wert.
  92. LEAVE.
  93. END.
  94. IF AufRabSu.F_Art = 2 THEN DO:
  95. Aufze.Auf_Rab = Aufze.Liter * AufRabSu.F_Wert / 100.
  96. LEAVE.
  97. END.
  98. LEAVE.
  99. END.
  100. IF Aufko.Abhol = FALSE THEN Wert = 0.
  101. ELSE Wert = AufRabSu.A_Wert.
  102. DO WHILE Wert <> 0:
  103. IF AufRabSu.A_Proz_Betr THEN DO:
  104. Aufze.Auf_Rab = Aufze.Net_Betr * AufRabSu.A_Wert / 100.
  105. LEAVE.
  106. END.
  107. IF AufRabSu.A_Art = 0 THEN DO:
  108. Aufze.Auf_Rab = Aufze.MGeli * AufRabSu.A_Wert.
  109. LEAVE.
  110. END.
  111. IF AufRabSu.A_Art = 2 THEN DO:
  112. Aufze.Auf_Rab = Aufze.Liter * AufRabSu.A_Wert / 100.
  113. LEAVE.
  114. END.
  115. LEAVE.
  116. END.
  117. DO WHILE TRUE:
  118. IF Aufze.Abh_Rab = 0 AND
  119. Aufze.Auf_Rab = 0 THEN LEAVE.
  120. FIND FIRST Wust USE-INDEX Wust-k2
  121. WHERE Wust.WuCd = zz NO-LOCK.
  122. IF Wust.Incl = TRUE THEN DO:
  123. Rundbetr = Aufze.Abh_Rab.
  124. Rundcode = 1.
  125. RUN "v8/runden.p".
  126. Aufze.Abh_Rab = Rundbetr.
  127. Rundbetr = Aufze.Auf_Rab.
  128. Rundcode = 1.
  129. RUN "v8/runden.p".
  130. Aufze.Auf_Rab = Rundbetr.
  131. END.
  132. LEAVE.
  133. END.
  134. LEAVE.
  135. END.
  136. DO WHILE TRUE:
  137. ASSIGN Aufze.Auf_Sp_Rab = 0.
  138. IF Aufze.Auf_Sp_Grp = 0 THEN LEAVE.
  139. FIND AufSpRab USE-INDEX AufSpRab-k1
  140. WHERE AufSpRab.Firma = Aufze.Firma
  141. AND AufSpRab.Aufnr = Aufze.Aufnr
  142. AND AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp NO-LOCK.
  143. ASSIGN Aufze.Auf_Sp_Proz_Betr = AufSpRab.Auf_Proz_Betr
  144. Aufze.Auf_Sp_Wert = AufSpRab.Auf_Wert.
  145. IF NOT Aufze.Auf_Sp_Proz_Betr THEN DO:
  146. Aufze.Auf_Sp_Rab = Aufze.MGeli * Aufze.Auf_Sp_Wert.
  147. END.
  148. IF Aufze.Auf_Sp_Proz_Betr THEN DO:
  149. Aufze.Auf_Sp_Rab = Aufze.Net_Betr * Aufze.Auf_Sp_Wert / 100.
  150. END.
  151. FIND FIRST Wust USE-INDEX Wust-k2
  152. WHERE Wust.WuCd = zz NO-LOCK.
  153. IF Wust.Incl = TRUE THEN DO:
  154. Rundbetr = Aufze.Auf_Sp_Rab.
  155. Rundcode = 1.
  156. RUN "v8/runden.p".
  157. Aufze.Auf_Sp_Rab = Rundbetr.
  158. END.
  159. LEAVE.
  160. END.
  161. VWpfl [zz] = VWpfl [zz] + Aufze.Net_Betr
  162. - Aufze.Auf_Rab
  163. - Aufze.Abh_Rab
  164. - Aufze.Auf_Sp_Rab.
  165. Aufko.WW[zz] = Aufko.WW[zz] + Aufze.Net_Betr
  166. - Aufze.Auf_Rab
  167. - Aufze.Abh_Rab
  168. - Aufze.Auf_Sp_Rab.
  169. VTotal [01] = VTotal [01] + Aufze.Net_Betr
  170. - Aufze.Auf_Rab
  171. - Aufze.Abh_Rab
  172. - Aufze.Auf_Sp_Rab.
  173. IF Aufze.Sk_Ber THEN DO:
  174. VTotal[02] = VTotal[02] + Aufze.Net_Betr
  175. - Aufze.Auf_Rab
  176. - Aufze.Abh_Rab
  177. - Aufze.Auf_Sp_Rab.
  178. END.
  179. VGewicht = VGewicht + Aufze.Gewicht.
  180. END.
  181. FOR EACH AufGKon USE-INDEX AufGKon-k1
  182. WHERE AufGKon.Firma = Aufko.Firma
  183. AND AufGKon.Aufnr = Aufko.Aufnr NO-LOCK:
  184. zz = AufGKon.MWSt_Cd.
  185. VWpfl[zz] = VWpfl[zz] + AufGKon.Betrag.
  186. IF AufGKon.Gebuehr = 0 THEN VTotal[11] = VTotal[11] + AufGKon.Betrag.
  187. ELSE VTotal[12] = VTotal[12] + AufGKon.Betrag.
  188. END.
  189. VMaxWC = 0.
  190. VTotNK = VWpfl[12].
  191. VResNK = VWpfl[12].
  192. DO zz = 1 TO 11:
  193. IF VWpfl[zz] < 0 THEN VFakt[zz] = -1.
  194. ELSE VFakt[zz] = +1.
  195. VTotWu = VTotWu + (VWpfl[zz] * VFakt[zz]).
  196. IF VWpfl[zz] <> 0 THEN VMaxWC = zz.
  197. END.
  198. NFakt = +1.
  199. IF VTotNK < 0 THEN DO:
  200. VTotNK = - VTotNK.
  201. VResNK = - VResNK.
  202. NFakt = -1.
  203. END.
  204. DO zz = 1 TO 11:
  205. IF VWpfl[zz] = 0 THEN NEXT.
  206. IF zz = VMaxWC THEN DO:
  207. NWpfl[zz] = VResNK * NFakt.
  208. TWpfl[zz] = VWpfl[zz] + (VResNK * NFakt).
  209. LEAVE.
  210. END.
  211. Rundbetr = (((VWpfl[zz] * 100 * VFakt[zz]) / VTotWu) * VTotNK) / 100.
  212. NWpfl[zz] = Rundbetr * NFakt.
  213. TWpfl[zz] = VWpfl[zz] + (Rundbetr * NFakt).
  214. VResNK = VResNK - Rundbetr.
  215. END.
  216. DO zz = 1 TO 10:
  217. IF TWpfl[zz] = 0 THEN NEXT.
  218. VTotal[07] = VTotal[07] + TWpfl[zz].
  219. VTotal[10] = VTotal[10] + TWpfl[zz].
  220. FIND FIRST Wust USE-INDEX Wust-k2
  221. WHERE Wust.WuCd = zz NO-LOCK.
  222. IF Wust.Incl THEN NEXT.
  223. FIND LAST MWSTAns USE-INDEX MWSTAns-k1
  224. WHERE MWSTAns.MWST_Cd = Wust.WuCd
  225. AND MWSTAns.Datum <= Aufko.Kond_Datum NO-LOCK.
  226. Rundbetr = TWpfl[zz] * MWSTAns.Ansatz / 100.
  227. VWust [zz] = Rundbetr.
  228. VTotal[09] = VTotal[09] + Rundbetr.
  229. VTotal[10] = VTotal[10] + Rundbetr.
  230. END.
  231. VTotal[08] = VTotal[08] + TWpfl[11].
  232. VTotal[10] = VTotal[10] + TWpfl[11].
  233. Rundbetr = VTotal[10].
  234. Rundcode = 1.
  235. RUN "v8/runden.p".
  236. VTotal[10] = Rundbetr.
  237. DO ix = 1 TO 12:
  238. Aufko.Wpfl[ix] = VWpfl[ix].
  239. Aufko.Wust[ix] = VWust[ix].
  240. END.
  241. ASSIGN Aufko.Auf_Tot = VTotal[10]
  242. Aufko.Gewicht = VGewicht
  243. Aufko.Sk_Ber = VTotal[02].
  244. RELEASE Aufko.
  245. LEAVE.
  246. END.