SavkoTotaleKontrollieren.p 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  1. DEF VAR Firma AS CHAR INIT '1000' NO-UNDO.
  2. DEF VAR nBetrag AS DEC NO-UNDO.
  3. DEF VAR nBetrNeu AS DEC NO-UNDO.
  4. DEF VAR cString AS CHAR NO-UNDO.
  5. DEF VAR cDiff AS CHAR NO-UNDO.
  6. DEF VAR cFeld AS CHAR NO-UNDO.
  7. DEF VAR iRecid AS RECID NO-UNDO.
  8. DEF VAR ii AS INT NO-UNDO.
  9. DEF VAR jj AS INT NO-UNDO.
  10. DEF VAR htSavko AS HANDLE NO-UNDO.
  11. DEF VAR hbSavko AS HANDLE NO-UNDO.
  12. DEF VAR htFeld AS HANDLE NO-UNDO.
  13. DEF VAR hbFeld AS HANDLE NO-UNDO.
  14. DEF TEMP-TABLE tArtst LIKE Artst.
  15. DEF TEMP-TABLE tSavko LIKE Savko.
  16. DEF TEMP-TABLE tSavze LIKE Savze.
  17. DEF TEMP-TABLE tArtbw LIKE Artbw.
  18. DEF TEMP-TABLE tSavGKon LIKE SavGKon.
  19. DEF TEMP-TABLE tSavzeDiff NO-UNDO
  20. FIELD Aufnr AS INT
  21. FIELD Pos AS INT
  22. FIELD Artnr AS INT
  23. FIELD Inhalt AS INT
  24. FIELD Jahr AS INT
  25. FIELD MBest AS DEC
  26. FIELD MGeli AS DEC
  27. FIELD MRuek AS DEC
  28. FIELD old_Net_Betr AS DEC
  29. FIELD New_Net_Betr AS DEC.
  30. DEF BUFFER bSavko FOR Savko.
  31. htSavko = TEMP-TABLE tSavko:DEFAULT-BUFFER-HANDLE.
  32. hbSavko = BUFFER bSavko:HANDLE.
  33. EMPTY TEMP-TABLE tSavzeDiff.
  34. OUTPUT TO 'D:\Temp\Savko_Diff.csv' NO-MAP NO-CONVERT.
  35. FOR EACH bSavko NO-LOCK
  36. WHERE bSavko.Firma = Firma
  37. AND bSavko.Fak_Datum >= 01/01/2016
  38. AND bSavko.Fak_Datum <= 01/31/2016:
  39. EMPTY TEMP-TABLE tSavko.
  40. CREATE tSavko.
  41. BUFFER-COPY bSavko TO tSavko.
  42. iRecid = RECID(tSavko).
  43. RUN AUFTRAGSTOTAL ( tSavko.Aufnr, OUTPUT cString ).
  44. FIND FIRST tSavko.
  45. BUFFER-COMPARE bSavko
  46. TO tSavko
  47. SAVE RESULT IN cDiff.
  48. IF cDiff = '' THEN NEXT.
  49. PUT CONTROL tSavko.Aufnr ';'
  50. tSavko.Knr ';'
  51. tSavko.Faknr ';'
  52. STRING(tSavko.Lief_Datum,'99.99.9999') ';'
  53. STRING(tSavko.Fak_Datum ,'99.99.9999') ';'.
  54. DO ii = 1 TO NUM-ENTRIES(cDiff, ','):
  55. cFeld = ENTRY(ii, cDiff, ',').
  56. htFeld = htSavko:BUFFER-FIELD(cFeld).
  57. hbFeld = hbSavko:BUFFER-FIELD(cFeld).
  58. IF htFeld:EXTENT = 0 THEN DO:
  59. PUT CONTROL cFeld ';' htFeld:BUFFER-VALUE ';'
  60. hbFeld:BUFFER-VALUE ';'.
  61. NEXT.
  62. END.
  63. DO jj = 1 TO htFeld:EXTENT:
  64. PUT CONTROL cFeld '[' jj '];' htFeld:BUFFER-VALUE(jj) ';'
  65. hbFeld:BUFFER-VALUE(jj) ';'.
  66. NEXT.
  67. END.
  68. END.
  69. PUT CONTROL CHR(10).
  70. END.
  71. OUTPUT CLOSE.
  72. OUTPUT TO 'D:\Temp\Savze_Diff.csv' NO-MAP NO-CONVERT.
  73. FOR EACH tSavzeDiff:
  74. EXPORT DELIMITER ';' tSavzeDiff.
  75. END.
  76. OUTPUT CLOSE.
  77. PROCEDURE AUFTRAGSTOTAL:
  78. /*------------------------------------------------------------------------------
  79. Purpose:
  80. Parameters: <none>
  81. Notes:
  82. ------------------------------------------------------------------------------*/
  83. DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO.
  84. DEF OUTPUT PARAMETER ipTotal AS CHAR NO-UNDO.
  85. DEF VAR VTotal AS DEC DECIMALS 4 EXTENT 15 NO-UNDO.
  86. DEF VAR VWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  87. DEF VAR VWust AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  88. DEF VAR NWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  89. DEF VAR TWpfl AS DEC DECIMALS 4 EXTENT 12 NO-UNDO.
  90. DEF VAR VFakt AS INT EXTENT 12 NO-UNDO.
  91. DEF VAR NFakt AS INT NO-UNDO.
  92. DEF VAR VTotWu AS DEC DECIMALS 4 NO-UNDO.
  93. DEF VAR VTotNK AS DEC DECIMALS 4 NO-UNDO.
  94. DEF VAR VResNK AS DEC DECIMALS 4 NO-UNDO.
  95. DEF VAR VMaxWC AS INT NO-UNDO.
  96. DEF VAR VRecid AS RECID NO-UNDO.
  97. DEF VAR VGewicht AS DEC DECIMALS 4 NO-UNDO.
  98. DEF VAR zz AS INT NO-UNDO.
  99. DEF VAR Wert AS DEC DECIMALS 4 NO-UNDO.
  100. DEF VAR VSkonto AS DEC INIT 0 NO-UNDO.
  101. DEF VAR Rundbetr AS DEC DECIMALS 4 NO-UNDO.
  102. DEF VAR nMenge AS DEC NO-UNDO.
  103. /* ------------------------------------------------------------------------- */
  104. /* VTotal[01] = Nettowarenwert */
  105. /* VTotal[02] = Skontoberechtigter Betrag */
  106. /* VTotal[03] = Nebenkosten */
  107. /* VTotal[04] = Transport */
  108. /* VTotal[05] = Porto */
  109. /* VTotal[06] = Verpackung */
  110. /* VTotal[07] = Total Mehrwertsteuerpflichtig */
  111. /* VTotal[08] = Total Mehrwertsteuerfrei */
  112. /* VTotal[09] = Total Mehrwertsteuer */
  113. /* VTotal[10] = Total Auftrag */
  114. /* VTotal[11] = Total Gebinde */
  115. /* VTotal[12] = Total Gebühren (Receycling) */
  116. /* ------------------------------------------------------------------------- */
  117. REPEAT TRANSACTION:
  118. VTotal = 0.
  119. VWpfl = 0.
  120. VWust = 0.
  121. VTotWu = 0.
  122. VTotNK = 0.
  123. NWpfl = 0. /* Anteil Nebenkosten */
  124. TWpfl = 0. /* Wpfl + Nebenkosten */
  125. VGewicht = 0.
  126. FIND Steuer USE-INDEX Steuer-k1
  127. WHERE Steuer.Firma = Firma NO-LOCK.
  128. FIND tSavko USE-INDEX Savko-k1 NO-LOCK
  129. WHERE tSavko.Firma = Firma
  130. AND tSavko.Aufnr = ipAufnr NO-ERROR.
  131. IF NOT AVAILABLE tSavko THEN RETURN.
  132. VRecid = RECID(tSavko).
  133. FIND Debst NO-LOCK
  134. WHERE Debst.Firma = tSavko.Firma
  135. AND Debst.KNr = tSavko.Knr.
  136. RUN GEBINDE_AUSGANG_RECHNEN ( Firma, ipAufnr, Debst.Geb_Rg ).
  137. RELEASE SavGKon.
  138. ASSIGN tSavko.Wpfl = 0
  139. tSavko.Wust = 0
  140. tSavko.WW = 0
  141. tSavko.Sk_Ber = 0.
  142. VTotal[04] = tSavko.Transp.
  143. VTotal[05] = tSavko.Porto.
  144. VTotal[06] = tSavko.Verpack.
  145. VTotal[03] = VTotal[04] + VTotal[05] + VTotal[06].
  146. FIND Wust NO-LOCK USE-INDEX Wust-k1
  147. WHERE Wust.CodeK = tSavko.MWST
  148. AND Wust.CodeA = Steuer.Fwi03.
  149. zz = Wust.WuCd.
  150. VWpfl[zz] = VWpfl[zz] + tSavko.Transp.
  151. FIND Wust NO-LOCK USE-INDEX Wust-k1
  152. WHERE Wust.CodeK = tSavko.MWST
  153. AND Wust.CodeA = Steuer.Fwi04.
  154. zz = Wust.WuCd.
  155. VWpfl[zz] = VWpfl[zz] + tSavko.Porto.
  156. FIND Wust NO-LOCK USE-INDEX Wust-k1
  157. WHERE Wust.CodeK = tSavko.MWST
  158. AND Wust.CodeA = Steuer.Fwi05.
  159. zz = Wust.WuCd.
  160. VWpfl[zz] = VWpfl[zz] + tSavko.Verpack.
  161. EMPTY TEMP-TABLE tSavze.
  162. CREATE tSavze.
  163. FOR EACH Savze NO-LOCK USE-INDEX Savze-k1
  164. WHERE Savze.Firma = tSavko.Firma
  165. AND Savze.Aufnr = tSavko.Aufnr
  166. AND Savze.Artnr > 0 :
  167. FIND FIRST tSavze.
  168. BUFFER-COPY Savze TO tSavze.
  169. RUN ZEILEN_BETRAEGE.
  170. FIND FIRST tSavze.
  171. /*
  172. ASSIGN Savze.Bru_Betr = tSavze.Bru_Betr
  173. Savze.Rab_Betr = tSavze.Rab_Betr
  174. Savze.Zus_Betr = tSavze.Zus_Betr
  175. Savze.Net_Betr = tSavze.Net_Betr.
  176. */
  177. zz = tSavze.WuCd.
  178. IF tSavko.Auf_Sta < 2 THEN nMenge = tSavze.MBest.
  179. ELSE nMenge = tSavze.MGeli.
  180. nMenge = tSavze.MGeli.
  181. DO WHILE TRUE:
  182. ASSIGN tSavze.Auf_Rab = 0
  183. tSavze.Abh_Rab = 0.
  184. IF tSavze.Rab_Su_Grp = 0 THEN LEAVE.
  185. IF tSavze.Rab_Su_Art = 0 THEN LEAVE.
  186. FIND SavRabSu NO-LOCK USE-INDEX SavRabSu-k1
  187. WHERE SavRabSu.Firma = tSavze.Firma
  188. AND SavRabSu.Aufnr = tSavze.Aufnr
  189. AND SavRabSu.Rab_Summ = tSavze.Rab_Su_Grp
  190. AND SavRabSu.MWST_Cd = tSavze.WuCd.
  191. Wert = SavRabSu.F_Wert.
  192. DO WHILE Wert <> 0:
  193. IF SavRabSu.F_Proz_Betr THEN DO:
  194. tSavze.Auf_Rab = tSavze.Net_Betr * SavRabSu.F_Wert / 100.
  195. LEAVE.
  196. END.
  197. IF SavRabSu.F_Art = 0 THEN DO:
  198. tSavze.Auf_Rab = nMenge * SavRabSu.F_Wert.
  199. LEAVE.
  200. END.
  201. IF SavRabSu.F_Art = 2 THEN DO:
  202. tSavze.Auf_Rab = tSavze.Liter * SavRabSu.F_Wert / 100.
  203. LEAVE.
  204. END.
  205. LEAVE.
  206. END.
  207. IF tSavko.Abhol = FALSE THEN Wert = 0.
  208. ELSE Wert = SavRabSu.A_Wert.
  209. DO WHILE Wert <> 0:
  210. IF SavRabSu.A_Proz_Betr THEN DO:
  211. tSavze.Auf_Rab = tSavze.Net_Betr * SavRabSu.A_Wert / 100.
  212. LEAVE.
  213. END.
  214. IF SavRabSu.A_Art = 0 THEN DO:
  215. tSavze.Auf_Rab = nMenge * SavRabSu.A_Wert.
  216. LEAVE.
  217. END.
  218. IF SavRabSu.A_Art = 2 THEN DO:
  219. tSavze.Auf_Rab = tSavze.Liter * SavRabSu.A_Wert / 100.
  220. LEAVE.
  221. END.
  222. LEAVE.
  223. END.
  224. DO WHILE TRUE:
  225. IF tSavze.Abh_Rab = 0 AND
  226. tSavze.Auf_Rab = 0 THEN LEAVE.
  227. FIND FIRST Wust USE-INDEX Wust-k2
  228. WHERE Wust.WuCd = zz NO-LOCK.
  229. IF Wust.Incl = TRUE THEN DO:
  230. Rundbetr = tSavze.Abh_Rab.
  231. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  232. tSavze.Abh_Rab = Rundbetr.
  233. Rundbetr = tSavze.Auf_Rab.
  234. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  235. tSavze.Auf_Rab = Rundbetr.
  236. END.
  237. LEAVE.
  238. END.
  239. RELEASE SavRabSu.
  240. LEAVE.
  241. END.
  242. DO WHILE TRUE:
  243. ASSIGN tSavze.Auf_Sp_Rab = 0.
  244. IF tSavze.Auf_Sp_Grp = 0 THEN LEAVE.
  245. FIND SavSpRab USE-INDEX SavSpRab-k1
  246. WHERE SavSpRab.Firma = tSavze.Firma
  247. AND SavSpRab.Aufnr = tSavze.Aufnr
  248. AND SavSpRab.Rab_Grp = tSavze.Auf_Sp_Grp
  249. NO-LOCK NO-ERROR.
  250. IF NOT AVAILABLE SavSpRab THEN LEAVE.
  251. ASSIGN tSavze.Auf_Sp_Proz_Betr = SavSpRab.Auf_Proz_Betr
  252. tSavze.Auf_Sp_Wert = SavSpRab.Auf_Wert.
  253. IF NOT tSavze.Auf_Sp_Proz_Betr
  254. THEN tSavze.Auf_Sp_Rab = nMenge * tSavze.Auf_Sp_Wert.
  255. ELSE tSavze.Auf_Sp_Rab = tSavze.Net_Betr * tSavze.Auf_Sp_Wert / 100.
  256. FIND FIRST Wust USE-INDEX Wust-k2
  257. WHERE Wust.WuCd = zz NO-LOCK.
  258. IF Wust.Incl = TRUE THEN DO:
  259. Rundbetr = tSavze.Auf_Sp_Rab.
  260. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  261. tSavze.Auf_Sp_Rab = Rundbetr.
  262. END.
  263. RELEASE SavSpRab.
  264. LEAVE.
  265. END.
  266. VWpfl [zz] = VWpfl [zz] + tSavze.Net_Betr
  267. - tSavze.Auf_Rab
  268. - tSavze.Abh_Rab
  269. - tSavze.Auf_Sp_Rab.
  270. tSavko.WW[zz] = tSavko.WW[zz] + tSavze.Net_Betr
  271. - tSavze.Auf_Rab
  272. - tSavze.Abh_Rab
  273. - tSavze.Auf_Sp_Rab.
  274. VTotal [01] = VTotal [01] + tSavze.Net_Betr
  275. - tSavze.Auf_Rab
  276. - tSavze.Abh_Rab
  277. - tSavze.Auf_Sp_Rab.
  278. IF tSavze.Sk_Ber THEN DO:
  279. VTotal[02] = VTotal[02] + tSavze.Net_Betr
  280. - tSavze.Auf_Rab
  281. - tSavze.Abh_Rab
  282. - tSavze.Auf_Sp_Rab.
  283. END.
  284. VGewicht = VGewicht + tSavze.Gewicht.
  285. IF tSavze.Net_Betr = Savze.Net_Betr THEN DO:
  286. RELEASE tSavze.
  287. NEXT.
  288. END.
  289. CREATE tSavzeDiff.
  290. BUFFER-COPY Savze
  291. TO tSavzeDiff
  292. ASSIGN tSavzeDiff.old_Net_Betr = Savze.Net_Betr
  293. tSavzeDiff.new_Net_Betr = tSavze.Net_Betr.
  294. END.
  295. FOR EACH SavGKon NO-LOCK USE-INDEX SavGKon-k1
  296. WHERE SavGKon.Firma = tSavko.Firma
  297. AND SavGKon.Aufnr = tSavko.Aufnr:
  298. zz = SavGKon.MWSt_Cd.
  299. VWpfl[zz] = VWpfl[zz] + SavGKon.Betrag.
  300. IF SavGKon.Gebuehr = 0 THEN VTotal[11] = VTotal[11] + SavGKon.Betrag.
  301. ELSE VTotal[12] = VTotal[12] + SavGKon.Betrag.
  302. END.
  303. VMaxWC = 0.
  304. VTotNK = VWpfl[12].
  305. VResNK = VWpfl[12].
  306. DO zz = 1 TO 11:
  307. IF VWpfl[zz] < 0 THEN VFakt[zz] = -1.
  308. ELSE VFakt[zz] = +1.
  309. VTotWu = VTotWu + (VWpfl[zz] * VFakt[zz]).
  310. IF VWpfl[zz] <> 0 THEN VMaxWC = zz.
  311. END.
  312. NFakt = +1.
  313. IF VTotNK < 0 THEN DO:
  314. VTotNK = - VTotNK.
  315. VResNK = - VResNK.
  316. NFakt = -1.
  317. END.
  318. DO zz = 1 TO 11:
  319. IF VWpfl[zz] = 0 THEN NEXT.
  320. IF zz = VMaxWC THEN DO:
  321. NWpfl[zz] = VResNK * NFakt.
  322. TWpfl[zz] = VWpfl[zz] + (VResNK * NFakt).
  323. LEAVE.
  324. END.
  325. Rundbetr = (((VWpfl[zz] * 100 * VFakt[zz]) / VTotWu) * VTotNK) / 100.
  326. NWpfl[zz] = Rundbetr * NFakt.
  327. TWpfl[zz] = VWpfl[zz] + (Rundbetr * NFakt).
  328. VResNK = VResNK - Rundbetr.
  329. END.
  330. DO zz = 1 TO 10:
  331. IF TWpfl[zz] = 0 THEN NEXT.
  332. VTotal[07] = VTotal[07] + TWpfl[zz].
  333. VTotal[10] = VTotal[10] + TWpfl[zz].
  334. FIND FIRST Wust USE-INDEX Wust-k2
  335. WHERE Wust.WuCd = zz NO-LOCK.
  336. IF Wust.Incl THEN NEXT.
  337. FIND LAST MWSTAns NO-LOCK USE-INDEX MWSTAns-k1
  338. WHERE MWSTAns.MWST_Cd = Wust.WuCd
  339. AND MWSTAns.Datum <= tSavko.Kond_Datum.
  340. Rundbetr = TWpfl[zz] * MWSTAns.Ansatz / 100.
  341. VWust [zz] = Rundbetr.
  342. VTotal[09] = VTotal[09] + Rundbetr.
  343. VTotal[10] = VTotal[10] + Rundbetr.
  344. END.
  345. VTotal[08] = VTotal[08] + TWpfl[11].
  346. VTotal[10] = VTotal[10] + TWpfl[11].
  347. Rundbetr = VTotal[10].
  348. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  349. VTotal[10] = Rundbetr.
  350. DO zz = 1 TO 12:
  351. tSavko.Wpfl[zz] = VWpfl[zz].
  352. tSavko.Wust[zz] = VWust[zz].
  353. END.
  354. ASSIGN tSavko.Auf_Tot = VTotal[10]
  355. tSavko.Gewicht = VGewicht
  356. tSavko.Sk_Ber = VTotal[02].
  357. RELEASE tSavko.
  358. RELEASE tSavze.
  359. LEAVE.
  360. END.
  361. ipTotal = ''.
  362. DO zz = 1 TO 15:
  363. ipTotal = ipTotal + STRING(VTotal[zz]).
  364. IF zz < 15 THEN ipTotal = ipTotal + CHR(01).
  365. END.
  366. RELEASE tSavko.
  367. RELEASE tSavze.
  368. RELEASE SavGKon.
  369. RELEASE SavSpRab.
  370. RELEASE SavRabSu.
  371. RELEASE Steuer.
  372. RELEASE Wust.
  373. END PROCEDURE.
  374. PROCEDURE GEBINDE_AUSGANG_RECHNEN:
  375. /*------------------------------------------------------------------------------
  376. Purpose:
  377. Parameters: <none>
  378. Notes:
  379. ------------------------------------------------------------------------------*/
  380. DEF INPUT PARAMETER ipFirma AS CHAR NO-UNDO.
  381. DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO.
  382. DEF INPUT PARAMETER ipGebRg AS LOG NO-UNDO.
  383. EMPTY TEMP-TABLE tSavGKon.
  384. DEF VAR MW AS INT.
  385. FIND tSavko
  386. WHERE tSavko.Firma = ipFirma
  387. AND tSavko.Aufnr = ipAufnr NO-ERROR.
  388. FOR EACH SavGKon NO-LOCK
  389. WHERE SavGKon.Firma = tSavko.Firma
  390. AND SavGKon.Aufnr = tSavko.Aufnr:
  391. CREATE tSavGKon.
  392. BUFFER-COPY SavGKon To tSavGKon
  393. ASSIGN tSavGKon.Ausgang = 0
  394. tSavGKon.Betrag = 0.
  395. RELEASE SavGKon.
  396. END.
  397. FOR EACH Savze NO-LOCK
  398. WHERE Savze.Firma = ipFirma
  399. AND Savze.Aufnr = ipAufnr:
  400. DO WHILE Savze.KGebKto <> '':
  401. IF Savze.KGeb_Me = 0 THEN LEAVE.
  402. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  403. WHERE GebKonto.Firma = Savze.Firma
  404. AND GebKonto.Geb_Cd = Savze.KGebKto.
  405. IF GebKonto.MWST_Art = 0 THEN MW = 11.
  406. IF GebKonto.MWST_Art = 1 THEN MW = Savze.WuCd.
  407. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
  408. FIND tSavGKon USE-INDEX SavGKon-k1
  409. WHERE tSavGKon.Firma = Savze.Firma
  410. AND tSavGKon.Aufnr = Savze.Aufnr
  411. AND tSavGKon.Geb_Cd = GebKonto.Geb_Cd
  412. AND tSavGKon.MWSt_Cd = MW NO-ERROR.
  413. IF NOT AVAILABLE tSavGKon THEN DO:
  414. CREATE tSavGKon.
  415. ASSIGN tSavGKon.Firma = Savze.Firma
  416. tSavGKon.Aufnr = Savze.Aufnr
  417. tSavGKon.Geb_Cd = GebKonto.Geb_Cd
  418. tSavGKon.MWSt_Cd = MW
  419. tSavGKon.Gebuehr = GebKonto.Gebuehr
  420. tSavGKon.Depot = GebKonto.Depot
  421. tSavGKon.Sort_Cd = GebKonto.Sort_Cd.
  422. END.
  423. DO WHILE TRUE:
  424. IF NOT ipGebRg THEN LEAVE.
  425. IF Savze.Preis = 0 AND
  426. tSavGKon.Gebuehr <> 0 THEN LEAVE.
  427. IF tSavko.Abhol AND
  428. tSavGKon.Gebuehr <> 0 THEN LEAVE.
  429. tSavGKon.Ausgang = tSavGKon.Ausgang + Savze.KGeb_Me.
  430. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang)
  431. * (tSavGKon.Depot + tSavGKon.Gebuehr).
  432. LEAVE.
  433. END.
  434. LEAVE.
  435. END.
  436. DO WHILE Savze.VGebKto <> '':
  437. IF Savze.VGeb_Me = 0 THEN LEAVE.
  438. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  439. WHERE GebKonto.Firma = Savze.Firma
  440. AND GebKonto.Geb_Cd = Savze.VGebKto.
  441. IF GebKonto.MWST_Art = 0 THEN MW = 11.
  442. IF GebKonto.MWST_Art = 1 THEN MW = Savze.WuCd.
  443. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
  444. FIND tSavGKon USE-INDEX SavGKon-k1
  445. WHERE tSavGKon.Firma = Savze.Firma
  446. AND tSavGKon.Aufnr = Savze.Aufnr
  447. AND tSavGKon.Geb_Cd = GebKonto.Geb_Cd
  448. AND tSavGKon.MWSt_Cd = MW NO-ERROR.
  449. IF NOT AVAILABLE tSavGKon THEN DO:
  450. CREATE tSavGKon.
  451. ASSIGN tSavGKon.Firma = Savze.Firma
  452. tSavGKon.Aufnr = Savze.Aufnr
  453. tSavGKon.Geb_Cd = GebKonto.Geb_Cd
  454. tSavGKon.MWSt_Cd = MW
  455. tSavGKon.Gebuehr = GebKonto.Gebuehr
  456. tSavGKon.Depot = GebKonto.Depot
  457. tSavGKon.Sort_Cd = GebKonto.Sort_Cd.
  458. END.
  459. DO WHILE TRUE:
  460. IF NOT ipGebRg THEN LEAVE.
  461. IF Savze.Preis = 0 AND
  462. tSavGKon.Gebuehr <> 0 THEN LEAVE.
  463. tSavGKon.Ausgang = tSavGKon.Ausgang + Savze.VGeb_Me.
  464. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang)
  465. * (tSavGKon.Depot + tSavGKon.Gebuehr).
  466. LEAVE.
  467. END.
  468. LEAVE.
  469. END.
  470. DO WHILE Savze.GGebKto <> '':
  471. IF Savze.GGeb_Me = 0 THEN LEAVE.
  472. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  473. WHERE GebKonto.Firma = Savze.Firma
  474. AND GebKonto.Geb_Cd = Savze.GGebKto.
  475. IF GebKonto.MWST_Art = 0 THEN MW = 11.
  476. IF GebKonto.MWST_Art = 1 THEN MW = Savze.WuCd.
  477. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
  478. FIND tSavGKon USE-INDEX SavGKon-k1
  479. WHERE tSavGKon.Firma = Savze.Firma
  480. AND tSavGKon.Aufnr = Savze.Aufnr
  481. AND tSavGKon.Geb_Cd = GebKonto.Geb_Cd
  482. AND tSavGKon.MWSt_Cd = MW NO-ERROR.
  483. IF NOT AVAILABLE tSavGKon THEN DO:
  484. CREATE tSavGKon.
  485. ASSIGN tSavGKon.Firma = Savze.Firma
  486. tSavGKon.Aufnr = Savze.Aufnr
  487. tSavGKon.Geb_Cd = GebKonto.Geb_Cd
  488. tSavGKon.MWSt_Cd = MW
  489. tSavGKon.Gebuehr = GebKonto.Gebuehr
  490. tSavGKon.Depot = GebKonto.Depot
  491. tSavGKon.Sort_Cd = GebKonto.Sort_Cd.
  492. END.
  493. DO WHILE TRUE:
  494. IF NOT ipGebRg THEN LEAVE.
  495. IF Savze.Preis = 0 AND
  496. tSavGKon.Gebuehr <> 0 THEN LEAVE.
  497. tSavGKon.Ausgang = tSavGKon.Ausgang + Savze.GGeb_Me.
  498. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang)
  499. * (tSavGKon.Depot + tSavGKon.Gebuehr).
  500. LEAVE.
  501. END.
  502. LEAVE.
  503. END.
  504. END.
  505. FOR EACH tSavGKon
  506. WHERE tSavGKon.Firma = tSavko.Firma
  507. AND tSavGKon.Aufnr = tSavko.Aufnr:
  508. tSavGKon.Betrag = (tSavGKon.Ausgang - tSavGKon.Eingang)
  509. * (tSavGKon.Depot + tSavGKon.Gebuehr).
  510. RELEASE tSavGKon.
  511. END.
  512. RETURN.
  513. END PROCEDURE.
  514. PROCEDURE RUNDEN.
  515. /*------------------------------------------------------------------------------
  516. Purpose:
  517. Parameters: <none>
  518. Notes:
  519. ------------------------------------------------------------------------------*/
  520. DEF INPUT PARAMETER Rundcode AS INT NO-UNDO.
  521. DEF INPUT-OUTPUT PARAMETER Rundbetr AS DEC DECIMALS 4 NO-UNDO.
  522. DEF VAR VBetr AS DEC DECIMALS 4 NO-UNDO.
  523. DEF VAR VOp AS DEC INIT 0.2 NO-UNDO.
  524. DEF VAR XPChar AS CHAR NO-UNDO.
  525. DO TRANSACTION:
  526. VBetr = Rundbetr.
  527. IF Rundcode = 1 THEN DO:
  528. VBetr = ROUND((VBetr / 100 * VOp), 4) / VOp * 100.
  529. END.
  530. IF Rundcode = 2 THEN DO:
  531. VBetr = ROUND((VBetr / 100), 3) * 100.
  532. END.
  533. IF Rundcode = 3 THEN DO:
  534. VBetr = VBetr + 0.0499.
  535. VBetr = ROUND((VBetr / 100), 3) * 100.
  536. END.
  537. IF Rundcode = 4 THEN DO:
  538. VBetr = VBetr - 0.0500.
  539. VBetr = ROUND((VBetr / 100), 3) * 100.
  540. END.
  541. IF Rundcode = 5 THEN DO:
  542. VBetr = ROUND((VBetr / 100), 2) * 100.
  543. END.
  544. IF Rundcode = 6 THEN DO:
  545. VBetr = VBetr + 0.4999.
  546. VBetr = ROUND((VBetr / 100), 2) * 100.
  547. END.
  548. IF Rundcode = 7 THEN DO:
  549. VBetr = VBetr - 0.5000.
  550. VBetr = ROUND((VBetr / 100), 2) * 100.
  551. END.
  552. IF Rundcode = 8 THEN DO:
  553. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  554. END.
  555. IF Rundcode = 9 THEN DO:
  556. VBetr = VBetr + 4.9999.
  557. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  558. END.
  559. IF Rundcode = 10 THEN DO:
  560. VBetr = VBetr - 5.0000.
  561. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  562. END.
  563. IF Rundcode = 99 THEN DO:
  564. XPChar = STRING(VBetr,"-99999999.999").
  565. VBetr = DECIMAL(SUBSTRING(XPChar,01,12)).
  566. IF SUBSTRING(XPChar,13,01) > "4" THEN VBetr = VBetr + 0.01.
  567. END.
  568. Rundbetr = VBetr.
  569. END.
  570. END PROCEDURE.
  571. PROCEDURE ZEILEN_BETRAEGE:
  572. /*------------------------------------------------------------------------------
  573. Purpose:
  574. Parameters: <none>
  575. Notes:
  576. ------------------------------------------------------------------------------*/
  577. DEF VAR Rundbetr AS DEC DECIMALS 4 NO-UNDO.
  578. FIND FIRST tSavze.
  579. FIND FIRST Wust NO-LOCK USE-INDEX Wust-k2
  580. WHERE Wust.Wucd = tSavze.Wucd
  581. AND Wust.CodeA = tSavze.WC
  582. AND Wust.CodeK < 12 .
  583. DO WHILE TRUE:
  584. IF tSavze.Rab_Art = 1 THEN DO:
  585. tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli.
  586. tSavze.Rab_Betr = tSavze.Rab_Wert * tSavze.Bru_Betr / 100.
  587. LEAVE.
  588. END.
  589. IF tSavze.Rab_Art = 2 THEN DO:
  590. tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli.
  591. tSavze.Rab_Betr = tSavze.Rab_Wert * tSavze.MGeli.
  592. LEAVE.
  593. END.
  594. IF tSavze.Rab_Art = 3 THEN DO:
  595. tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli.
  596. tSavze.Rab_Betr = tSavze.Rab_Wert * tSavze.MGeli * -1.
  597. LEAVE.
  598. END.
  599. tSavze.Bru_Betr = tSavze.Preis * tSavze.MGeli.
  600. tSavze.Rab_Betr = 0.
  601. tSavze.Rab_Art = 0.
  602. LEAVE.
  603. END.
  604. IF Wust.Incl THEN DO:
  605. Rundbetr = tSavze.Rab_Betr.
  606. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  607. tSavze.Rab_Betr = Rundbetr.
  608. END.
  609. DO WHILE TRUE:
  610. IF tSavze.Zus_Art = 1 THEN DO:
  611. tSavze.Zus_Betr = tSavze.Zus_Wert * tSavze.Bru_Betr / 100.
  612. LEAVE.
  613. END.
  614. IF tSavze.Zus_Art = 2 THEN DO:
  615. tSavze.Zus_Betr = tSavze.Zus_Wert * tSavze.MGeli.
  616. LEAVE.
  617. END.
  618. tSavze.Zus_Betr = 0.
  619. tSavze.Zus_Wert = 0.
  620. tSavze.Zus_Art = 0.
  621. LEAVE.
  622. END.
  623. IF Wust.Incl THEN DO:
  624. Rundbetr = tSavze.Zus_Betr.
  625. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  626. tSavze.Zus_Betr = Rundbetr.
  627. END.
  628. tSavze.Net_Betr = tSavze.Bru_Betr - tSavze.Rab_Betr + tSavze.Zus_Betr.
  629. IF Wust.Incl THEN DO:
  630. Rundbetr = tSavze.Net_Betr.
  631. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ).
  632. tSavze.Net_Betr = Rundbetr.
  633. END.
  634. RELEASE Wust.
  635. END PROCEDURE.