Kontrolle_SavkoTot_DebopTot.p 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. /*------------------------------------------------------------------------------
  2. Purpose:
  3. Parameters: <none>
  4. Notes:
  5. ------------------------------------------------------------------------------*/
  6. DEF VAR VTotal AS DEC DECIMALS 4 EXTENT 15 NO-UNDO.
  7. DEF VAR VWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  8. DEF VAR VWust AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  9. DEF VAR NWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  10. DEF VAR TWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  11. DEF VAR VFakt AS INT EXTENT 12 NO-UNDO.
  12. DEF VAR NFakt AS INT NO-UNDO.
  13. DEF VAR VTotWu AS DEC DECIMALS 4 NO-UNDO.
  14. DEF VAR VTotNK AS DEC DECIMALS 4 NO-UNDO.
  15. DEF VAR VResNK AS DEC DECIMALS 4 NO-UNDO.
  16. DEF VAR VMaxWC AS INT NO-UNDO.
  17. DEF VAR VRecid AS RECID NO-UNDO.
  18. DEF VAR VGewicht AS DEC DECIMALS 4 NO-UNDO.
  19. DEF VAR zz AS INT NO-UNDO.
  20. DEF VAR Wert AS DEC DECIMALS 4 NO-UNDO.
  21. DEF VAR VSkonto AS DEC INIT 0 NO-UNDO.
  22. DEF VAR Rundbetr AS DEC DECIMALS 4 NO-UNDO.
  23. DEF VAR Firma AS CHAR INIT '2000' NO-UNDO.
  24. DEF VAR cDiff AS CHAR NO-UNDO.
  25. DEF BUFFER bSteuer FOR Steuer.
  26. DEF TEMP-TABLE tSavko LIKE Savko.
  27. /* ------------------------------------------------------------------------- */
  28. /* VTotal[01] = Nettowarenwert */
  29. /* VTotal[02] = Skontoberechtigter Betrag */
  30. /* VTotal[03] = Nebenkosten */
  31. /* VTotal[04] = Transport */
  32. /* VTotal[05] = Porto */
  33. /* VTotal[06] = Verpackung */
  34. /* VTotal[07] = Total Mehrwertsteuerpflichtig */
  35. /* VTotal[08] = Total Mehrwertsteuerfrei */
  36. /* VTotal[09] = Total Mehrwertsteuer */
  37. /* VTotal[10] = Total Auftrag */
  38. /* VTotal[11] = Total Gebinde */
  39. /* VTotal[12] = Total Gebühren (Receycling) */
  40. /* ------------------------------------------------------------------------- */
  41. FIND bSteuer USE-INDEX Steuer-k1
  42. WHERE bSteuer.Firma = Firma NO-LOCK.
  43. EMPTY TEMP-TABLE tSavko.
  44. CREATE tSavko.
  45. FOR EACH Savko
  46. WHERE Savko.Firma = Firma
  47. AND Savko.Fak_Datum >= 01/01/2014
  48. AND Savko.Fak_Datum <= 12/31/2014
  49. BREAK BY Savko.Faknr:
  50. IF FIRST-OF ( Savko.Faknr ) THEN Rundbetr = 0.
  51. Rundbetr = Rundbetr + Savko.Auf_TOT.
  52. IF NOT LAST-OF ( Savko.Faknr ) THEN NEXT.
  53. FIND Debop NO-LOCK
  54. WHERE Debop.Firma = Firma
  55. AND Debop.Knr = Savko.Fak_Knr
  56. AND Debop.Faknr = Savko.Faknr.
  57. IF ABS(Debop.Fakbetr - Rundbetr) > 0.10 THEN DO:
  58. MESSAGE 'Totaldifferenz' SKIP
  59. Savko.Aufnr '-' Savko.Faknr SKIP
  60. Rundbetr '-' Debop.Fakbetr '-' (Rundbetr - Debop.Fakbetr)
  61. VIEW-AS ALERT-BOX.
  62. END.
  63. END.
  64. /*
  65. FOR EACH Savko WHERE Savko.Firma = Firma:
  66. VTotal = 0.
  67. VWpfl = 0.
  68. VWust = 0.
  69. VTotWu = 0.
  70. VTotNK = 0.
  71. NWpfl = 0. /* Anteil Nebenkosten */
  72. TWpfl = 0. /* Wpfl + Nebenkosten */
  73. VGewicht = 0.
  74. FIND FIRST tSavko.
  75. BUFFER-COPY Savko to tSavko.
  76. VRecid = RECID(Savko).
  77. ASSIGN Savko.Wpfl = 0
  78. Savko.Wust = 0
  79. Savko.WW = 0
  80. Savko.Sk_Ber = 0.
  81. VTotal[04] = Savko.Transp.
  82. VTotal[05] = Savko.Porto.
  83. VTotal[06] = Savko.Verpack.
  84. VTotal[03] = VTotal[04] + VTotal[05] + VTotal[06].
  85. FIND bSteuer USE-INDEX Steuer-k1
  86. WHERE bSteuer.Firma = Firma NO-LOCK.
  87. FIND Wust NO-LOCK USE-INDEX Wust-k1
  88. WHERE Wust.CodeK = Savko.MWST
  89. AND Wust.CodeA = bSteuer.Fwi03 NO-ERROR.
  90. IF NOT AVAILABLE Wust THEN MESSAGE Savko.MWST '-' bSteuer.Fwi03 view-as alert-box.
  91. zz = Wust.WuCd.
  92. VWpfl[zz] = VWpfl[zz] + Savko.Transp.
  93. FIND Wust USE-INDEX Wust-k1
  94. WHERE Wust.CodeK = Savko.MWST
  95. AND Wust.CodeA = bSteuer.Fwi04 NO-LOCK.
  96. zz = Wust.WuCd.
  97. VWpfl[zz] = VWpfl[zz] + Savko.Porto.
  98. FIND Wust USE-INDEX Wust-k1
  99. WHERE Wust.CodeK = Savko.MWST
  100. AND Wust.CodeA = bSteuer.Fwi05 NO-LOCK.
  101. zz = Wust.WuCd.
  102. VWpfl[zz] = VWpfl[zz] + Savko.Verpack.
  103. FOR EACH Savze USE-INDEX Savze-k1
  104. WHERE Savze.Firma = Savko.Firma
  105. AND Savze.Aufnr = Savko.Aufnr
  106. AND Savze.Artnr > 0 :
  107. zz = Savze.WuCd.
  108. DO WHILE TRUE:
  109. ASSIGN Savze.Auf_Rab = 0
  110. Savze.Abh_Rab = 0.
  111. IF Savze.Rab_Su_Grp = 0 THEN LEAVE.
  112. IF Savze.Rab_Su_Art = 0 THEN LEAVE.
  113. FIND SavRabSu NO-LOCK USE-INDEX SavRabSu-k1
  114. WHERE SavRabSu.Firma = Savze.Firma
  115. AND SavRabSu.Aufnr = Savze.Aufnr
  116. AND SavRabSu.Rab_Summ = Savze.Rab_Su_Grp
  117. AND SavRabSu.MWST_Cd = Savze.WuCd.
  118. Wert = SavRabSu.F_Wert.
  119. DO WHILE Wert <> 0:
  120. IF SavRabSu.F_Proz_Betr THEN DO:
  121. Savze.Auf_Rab = Savze.Net_Betr * SavRabSu.F_Wert / 100.
  122. LEAVE.
  123. END.
  124. IF SavRabSu.F_Art = 0 THEN DO:
  125. Savze.Auf_Rab = Savze.MGeli * SavRabSu.F_Wert.
  126. LEAVE.
  127. END.
  128. IF SavRabSu.F_Art = 2 THEN DO:
  129. Savze.Auf_Rab = Savze.Liter * SavRabSu.F_Wert / 100.
  130. LEAVE.
  131. END.
  132. LEAVE.
  133. END.
  134. IF Savko.Abhol = FALSE THEN Wert = 0.
  135. ELSE Wert = SavRabSu.A_Wert.
  136. DO WHILE Wert <> 0:
  137. IF SavRabSu.A_Proz_Betr THEN DO:
  138. Savze.Auf_Rab = Savze.Net_Betr * SavRabSu.A_Wert / 100.
  139. LEAVE.
  140. END.
  141. IF SavRabSu.A_Art = 0 THEN DO:
  142. Savze.Auf_Rab = Savze.MGeli * SavRabSu.A_Wert.
  143. LEAVE.
  144. END.
  145. IF SavRabSu.A_Art = 2 THEN DO:
  146. Savze.Auf_Rab = Savze.Liter * SavRabSu.A_Wert / 100.
  147. LEAVE.
  148. END.
  149. LEAVE.
  150. END.
  151. DO WHILE TRUE:
  152. IF Savze.Abh_Rab = 0 AND
  153. Savze.Auf_Rab = 0 THEN LEAVE.
  154. FIND FIRST Wust USE-INDEX Wust-k2
  155. WHERE Wust.WuCd = zz NO-LOCK.
  156. IF Wust.Incl = TRUE THEN DO:
  157. Rundbetr = Savze.Abh_Rab.
  158. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  159. Savze.Abh_Rab = Rundbetr.
  160. Rundbetr = Savze.Auf_Rab.
  161. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  162. Savze.Auf_Rab = Rundbetr.
  163. END.
  164. LEAVE.
  165. END.
  166. LEAVE.
  167. END.
  168. DO WHILE TRUE:
  169. ASSIGN Savze.Auf_Sp_Rab = 0.
  170. IF Savze.Auf_Sp_Grp = 0 THEN LEAVE.
  171. FIND SavSpRab USE-INDEX SavSpRab-k1
  172. WHERE SavSpRab.Firma = Savze.Firma
  173. AND SavSpRab.Aufnr = Savze.Aufnr
  174. AND SavSpRab.Rab_Grp = Savze.Auf_Sp_Grp
  175. NO-LOCK NO-ERROR.
  176. IF NOT AVAILABLE SavSpRab THEN LEAVE.
  177. ASSIGN Savze.Auf_Sp_Proz_Betr = SavSpRab.Auf_Proz_Betr
  178. Savze.Auf_Sp_Wert = SavSpRab.Auf_Wert.
  179. IF NOT Savze.Auf_Sp_Proz_Betr
  180. THEN Savze.Auf_Sp_Rab = Savze.MGeli * Savze.Auf_Sp_Wert.
  181. ELSE Savze.Auf_Sp_Rab = Savze.Net_Betr * Savze.Auf_Sp_Wert / 100.
  182. FIND FIRST Wust USE-INDEX Wust-k2
  183. WHERE Wust.WuCd = zz NO-LOCK.
  184. IF Wust.Incl = TRUE THEN DO:
  185. Rundbetr = Savze.Auf_Sp_Rab.
  186. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  187. Savze.Auf_Sp_Rab = Rundbetr.
  188. END.
  189. LEAVE.
  190. END.
  191. VWpfl [zz] = VWpfl [zz] + Savze.Net_Betr
  192. - Savze.Auf_Rab
  193. - Savze.Abh_Rab
  194. - Savze.Auf_Sp_Rab.
  195. Savko.WW[zz] = Savko.WW[zz] + Savze.Net_Betr
  196. - Savze.Auf_Rab
  197. - Savze.Abh_Rab
  198. - Savze.Auf_Sp_Rab.
  199. VTotal [01] = VTotal [01] + Savze.Net_Betr
  200. - Savze.Auf_Rab
  201. - Savze.Abh_Rab
  202. - Savze.Auf_Sp_Rab.
  203. IF Savze.Sk_Ber THEN DO:
  204. VTotal[02] = VTotal[02] + Savze.Net_Betr
  205. - Savze.Auf_Rab
  206. - Savze.Abh_Rab
  207. - Savze.Auf_Sp_Rab.
  208. END.
  209. VGewicht = VGewicht + Savze.Gewicht.
  210. END.
  211. FOR EACH SavGKon USE-INDEX SavGKon-k1
  212. WHERE SavGKon.Firma = Savko.Firma
  213. AND SavGKon.Aufnr = Savko.Aufnr NO-LOCK:
  214. zz = SavGKon.MWSt_Cd.
  215. VWpfl[zz] = VWpfl[zz] + SavGKon.Betrag.
  216. IF SavGKon.Gebuehr = 0 THEN VTotal[11] = VTotal[11] + SavGKon.Betrag.
  217. ELSE VTotal[12] = VTotal[12] + SavGKon.Betrag.
  218. END.
  219. VMaxWC = 0.
  220. VTotNK = VWpfl[12].
  221. VResNK = VWpfl[12].
  222. DO zz = 1 TO 11:
  223. IF VWpfl[zz] < 0 THEN VFakt[zz] = -1.
  224. ELSE VFakt[zz] = +1.
  225. VTotWu = VTotWu + (VWpfl[zz] * VFakt[zz]).
  226. IF VWpfl[zz] <> 0 THEN VMaxWC = zz.
  227. END.
  228. NFakt = +1.
  229. IF VTotNK < 0 THEN DO:
  230. VTotNK = - VTotNK.
  231. VResNK = - VResNK.
  232. NFakt = -1.
  233. END.
  234. DO zz = 1 TO 11:
  235. IF VWpfl[zz] = 0 THEN NEXT.
  236. IF zz = VMaxWC THEN DO:
  237. NWpfl[zz] = VResNK * NFakt.
  238. TWpfl[zz] = VWpfl[zz] + (VResNK * NFakt).
  239. LEAVE.
  240. END.
  241. Rundbetr = (((VWpfl[zz] * 100 * VFakt[zz]) / VTotWu) * VTotNK) / 100.
  242. NWpfl[zz] = Rundbetr * NFakt.
  243. TWpfl[zz] = VWpfl[zz] + (Rundbetr * NFakt).
  244. VResNK = VResNK - Rundbetr.
  245. END.
  246. DO zz = 1 TO 10:
  247. IF TWpfl[zz] = 0 THEN NEXT.
  248. VTotal[07] = VTotal[07] + TWpfl[zz].
  249. VTotal[10] = VTotal[10] + TWpfl[zz].
  250. FIND FIRST Wust USE-INDEX Wust-k2
  251. WHERE Wust.WuCd = zz NO-LOCK.
  252. IF Wust.Incl THEN NEXT.
  253. FIND LAST MWSTAns USE-INDEX MWSTAns-k1
  254. WHERE MWSTAns.MWST_Cd = Wust.WuCd
  255. AND MWSTAns.Datum <= Savko.Kond_Datum NO-LOCK.
  256. Rundbetr = TWpfl[zz] * MWSTAns.Ansatz / 100.
  257. VWust [zz] = Rundbetr.
  258. VTotal[09] = VTotal[09] + Rundbetr.
  259. VTotal[10] = VTotal[10] + Rundbetr.
  260. END.
  261. VTotal[08] = VTotal[08] + TWpfl[11].
  262. VTotal[10] = VTotal[10] + TWpfl[11].
  263. Rundbetr = VTotal[10].
  264. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  265. VTotal[10] = Rundbetr.
  266. DO zz = 1 TO 12:
  267. Savko.Wpfl[zz] = VWpfl[zz].
  268. Savko.Wust[zz] = VWust[zz].
  269. END.
  270. ASSIGN Savko.Auf_Tot = VTotal[10]
  271. Savko.Gewicht = VGewicht
  272. Savko.Sk_Ber = VTotal[02].
  273. BUFFER-COMPARE Savko TO tSavko SAVE RESULT IN cDiff.
  274. IF cDiff = '' THEN DO:
  275. RELEASE Savko.
  276. NEXT.
  277. END.
  278. MESSAGE Savko.Aufnr Savko.Faknr Savko.Fak_Datum cDiff view-as alert-box.
  279. BUFFER-COPY tSavko TO Savko.
  280. RELEASE Savko.
  281. RELEASE Savze.
  282. RELEASE SavGKon.
  283. RELEASE SavSpRab.
  284. RELEASE SavRabSu.
  285. RELEASE bSteuer.
  286. RELEASE Wust.
  287. END.
  288. PROCEDURE RUNDEN:
  289. DEF INPUT PARAMETER Rundcode AS INT NO-UNDO.
  290. DEF INPUT-OUTPUT PARAMETER Rundbetr AS DEC DECIMALS 4 NO-UNDO.
  291. DEF VAR VBetr AS DEC DECIMALS 4 NO-UNDO.
  292. DEF VAR VOp AS DEC INIT 0.2 NO-UNDO.
  293. DEF VAR XPChar AS CHAR NO-UNDO.
  294. DO TRANSACTION:
  295. VBetr = Rundbetr.
  296. IF Rundcode = 1 THEN DO:
  297. VBetr = ROUND((VBetr / 100 * VOp), 4) / VOp * 100.
  298. END.
  299. IF Rundcode = 2 THEN DO:
  300. VBetr = ROUND((VBetr / 100), 3) * 100.
  301. END.
  302. IF Rundcode = 3 THEN DO:
  303. VBetr = VBetr + 0.0499.
  304. VBetr = ROUND((VBetr / 100), 3) * 100.
  305. END.
  306. IF Rundcode = 4 THEN DO:
  307. VBetr = VBetr - 0.0500.
  308. VBetr = ROUND((VBetr / 100), 3) * 100.
  309. END.
  310. IF Rundcode = 5 THEN DO:
  311. VBetr = ROUND((VBetr / 100), 2) * 100.
  312. END.
  313. IF Rundcode = 6 THEN DO:
  314. VBetr = VBetr + 0.4999.
  315. VBetr = ROUND((VBetr / 100), 2) * 100.
  316. END.
  317. IF Rundcode = 7 THEN DO:
  318. VBetr = VBetr - 0.5000.
  319. VBetr = ROUND((VBetr / 100), 2) * 100.
  320. END.
  321. IF Rundcode = 8 THEN DO:
  322. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  323. END.
  324. IF Rundcode = 9 THEN DO:
  325. VBetr = VBetr + 4.9999.
  326. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  327. END.
  328. IF Rundcode = 10 THEN DO:
  329. VBetr = VBetr - 5.0000.
  330. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  331. END.
  332. IF Rundcode = 99 THEN DO:
  333. XPChar = STRING(VBetr,"-99999999.999").
  334. VBetr = DECIMAL(SUBSTRING(XPChar,01,12)).
  335. IF SUBSTRING(XPChar,13,01) > "4" THEN VBetr = VBetr + 0.01.
  336. END.
  337. Rundbetr = VBetr.
  338. END.
  339. END PROCEDURE.
  340. */