zeilenbuchen.p 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. DEF TEMP-TABLE tAufko LIKE Aufko.
  2. DEF TEMP-TABLE tAufze LIKE Aufze.
  3. PROCEDURE ZEILENBUCHEN:
  4. /*------------------------------------------------------------------------------
  5. Purpose:
  6. Parameters: <none>
  7. Notes:
  8. ------------------------------------------------------------------------------*/
  9. DEF INPUT PARAMETER ipArt AS INT NO-UNDO.
  10. DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO.
  11. DEF INPUT PARAMETER ipPos AS INT NO-UNDO.
  12. /* ipArt : 0 = Neue Zeile */
  13. /* 1 = Storno (bestehende Zeile) */
  14. /* 2 = Löschung (Storno) */
  15. DEF VAR Faktor AS INT INIT 1 NO-UNDO.
  16. DEF VAR MW AS INT NO-UNDO.
  17. DEF VAR Menge AS DEC DECIMALS 4 NO-UNDO.
  18. DEF VAR GGeb_Me AS DEC DECIMALS 4 NO-UNDO.
  19. DEF VAR VGeb_Me AS DEC DECIMALS 4 NO-UNDO.
  20. DEF VAR KGeb_Me AS DEC DECIMALS 4 NO-UNDO.
  21. DEF VAR Liter AS DEC DECIMALS 4 NO-UNDO.
  22. DEF VAR Net_Betr AS DEC DECIMALS 4 NO-UNDO.
  23. DEF BUFFER BArtbw FOR Artbw.
  24. IF ipArt = 0 THEN Faktor = +1.
  25. IF ipArt = 1 THEN Faktor = -1.
  26. IF ipArt = 2 THEN Faktor = -1.
  27. FIND Aufko USE-INDEX Aufko-k1
  28. WHERE Aufko.Firma = '1000'
  29. AND Aufko.Aufnr = ipAufnr NO-LOCK NO-ERROR.
  30. IF NOT AVAILABLE Aufko THEN RETURN 'ERROR AUFKO'.
  31. FIND Aufze USE-INDEX Aufze-k1
  32. WHERE Aufze.Firma = '1000'
  33. AND Aufze.Aufnr = ipAufnr
  34. AND Aufze.Pos = ipPos NO-ERROR.
  35. IF NOT AVAILABLE Aufze THEN RETURN 'ERROR AUFZE'.
  36. IF Aufze.Artnr = 0 THEN RETURN ''.
  37. FIND Artst USE-INDEX Artst-k1
  38. WHERE Artst.Firma = Aufze.Firma
  39. AND Artst.Artnr = Aufze.Artnr
  40. AND Artst.Inhalt = Aufze.Inhalt
  41. AND Artst.Jahr = Aufze.Jahr NO-ERROR.
  42. IF NOT AVAILABLE Artst THEN RETURN 'ERROR ARTST'.
  43. Menge = Aufze.MGeli * Faktor.
  44. GGeb_Me = Aufze.GGeb_Me * Faktor.
  45. VGeb_Me = Aufze.VGeb_Me * Faktor.
  46. KGeb_Me = Aufze.KGeb_Me * Faktor.
  47. Liter = Aufze.Liter * Faktor.
  48. Net_Betr = Aufze.Net_Betr * Faktor.
  49. FIND Artbw USE-INDEX Artbw-k1
  50. WHERE Artbw.Firma = Aufze.Firma
  51. AND Artbw.Trnr = Aufze.Trnr NO-ERROR.
  52. IF NOT AVAILABLE Artbw THEN DO:
  53. IF Aufze.Trnr = 0 THEN DO:
  54. FIND LAST BArtbw NO-LOCK USE-INDEX Artbw-k1
  55. WHERE BArtbw.Firma = '1000' NO-ERROR.
  56. IF AVAILABLE BArtbw THEN Aufze.Trnr = BArtbw.Trnr + 1.
  57. ELSE Aufze.Trnr = 1.
  58. END.
  59. CREATE Artbw.
  60. ASSIGN Artbw.Firma = Aufze.Firma
  61. Artbw.Trnr = Aufze.Trnr
  62. Artbw.Tr_Art = 01
  63. Artbw.Artnr = Aufze.Artnr
  64. Artbw.Inhalt = Aufze.Inhalt
  65. Artbw.Jahr = Aufze.Jahr
  66. Artbw.Knr = Aufko.Knr.
  67. END.
  68. /* ------------------------------------------ */
  69. /* Gebinde-Konto-Kontrolle */
  70. /* ------------------------------------------ */
  71. DO WHILE Aufze.KGebKto <> '':
  72. IF Aufze.KGeb_Me = 0 THEN LEAVE.
  73. FIND GebKonto USE-INDEX GebKonto-k1
  74. WHERE GebKonto.Firma = Aufze.Firma
  75. AND GebKonto.Geb_Cd = Aufze.KGebKto NO-LOCK.
  76. IF GebKonto.MWST_Art = 0 THEN MW = 11.
  77. IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd.
  78. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
  79. FIND AufGKon USE-INDEX AufGKon-k1
  80. WHERE AufGKon.Firma = Aufze.Firma
  81. AND AufGKon.Aufnr = Aufze.Aufnr
  82. AND AufGKon.Geb_Cd = GebKonto.Geb_Cd
  83. AND AufGKon.MWSt_Cd = MW NO-ERROR.
  84. IF NOT AVAILABLE AufGKon THEN DO:
  85. CREATE AufGKon.
  86. ASSIGN AufGKon.Firma = Aufze.Firma
  87. AufGKon.Aufnr = Aufze.Aufnr
  88. AufGKon.Geb_Cd = GebKonto.Geb_Cd
  89. AufGKon.MWSt_Cd = MW
  90. AufGKon.Gebuehr = GebKonto.Gebuehr
  91. AufGKon.Depot = GebKonto.Depot
  92. AufGKon.Sort_Cd = GebKonto.Sort_Cd.
  93. END.
  94. DO WHILE TRUE:
  95. IF NOT Aufko.GG_Berech THEN LEAVE.
  96. IF Aufze.Preis = 0 AND
  97. AufGKon.Gebuehr <> 0 THEN LEAVE.
  98. AufGKon.Ausgang = AufGKon.Ausgang + KGeb_Me.
  99. AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang)
  100. * (AufGKon.Depot + AufGKon.Gebuehr).
  101. LEAVE.
  102. END.
  103. LEAVE.
  104. END.
  105. DO WHILE Aufze.VGebKto <> '':
  106. IF Aufze.VGeb_Me = 0 THEN LEAVE.
  107. FIND GebKonto USE-INDEX GebKonto-k1
  108. WHERE GebKonto.Firma = Aufze.Firma
  109. AND GebKonto.Geb_Cd = Aufze.VGebKto NO-LOCK.
  110. IF GebKonto.MWST_Art = 0 THEN MW = 11.
  111. IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd.
  112. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
  113. FIND AufGKon USE-INDEX AufGKon-k1
  114. WHERE AufGKon.Firma = Aufze.Firma
  115. AND AufGKon.Aufnr = Aufze.Aufnr
  116. AND AufGKon.Geb_Cd = GebKonto.Geb_Cd
  117. AND AufGKon.MWSt_Cd = MW NO-ERROR.
  118. IF NOT AVAILABLE AufGKon THEN DO:
  119. CREATE AufGKon.
  120. ASSIGN AufGKon.Firma = Aufze.Firma
  121. AufGKon.Aufnr = Aufze.Aufnr
  122. AufGKon.Geb_Cd = GebKonto.Geb_Cd
  123. AufGKon.MWSt_Cd = MW
  124. AufGKon.Gebuehr = GebKonto.Gebuehr
  125. AufGKon.Depot = GebKonto.Depot
  126. AufGKon.Sort_Cd = GebKonto.Sort_Cd.
  127. END.
  128. DO WHILE TRUE:
  129. IF NOT Aufko.GG_Berech THEN LEAVE.
  130. IF Aufze.Preis = 0 AND
  131. AufGKon.Gebuehr <> 0 THEN LEAVE.
  132. AufGKon.Ausgang = AufGKon.Ausgang + VGeb_Me.
  133. AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang)
  134. * (AufGKon.Depot + AufGKon.Gebuehr).
  135. LEAVE.
  136. END.
  137. LEAVE.
  138. END.
  139. DO WHILE Aufze.GGebKto <> '':
  140. IF Aufze.GGeb_Me = 0 THEN LEAVE.
  141. FIND GebKonto USE-INDEX GebKonto-k1
  142. WHERE GebKonto.Firma = Aufze.Firma
  143. AND GebKonto.Geb_Cd = Aufze.GGebKto NO-LOCK.
  144. IF GebKonto.MWST_Art = 0 THEN MW = 11.
  145. IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd.
  146. IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
  147. FIND AufGKon USE-INDEX AufGKon-k1
  148. WHERE AufGKon.Firma = Aufze.Firma
  149. AND AufGKon.Aufnr = Aufze.Aufnr
  150. AND AufGKon.Geb_Cd = GebKonto.Geb_Cd
  151. AND AufGKon.MWSt_Cd = MW NO-ERROR.
  152. IF NOT AVAILABLE AufGKon THEN DO:
  153. CREATE AufGKon.
  154. ASSIGN AufGKon.Firma = Aufze.Firma
  155. AufGKon.Aufnr = Aufze.Aufnr
  156. AufGKon.Geb_Cd = GebKonto.Geb_Cd
  157. AufGKon.MWSt_Cd = MW
  158. AufGKon.Gebuehr = GebKonto.Gebuehr
  159. AufGKon.Depot = GebKonto.Depot
  160. AufGKon.Sort_Cd = GebKonto.Sort_Cd.
  161. END.
  162. DO WHILE TRUE:
  163. IF NOT Aufko.GG_Berech THEN LEAVE.
  164. IF Aufze.Preis = 0 AND
  165. AufGKon.Gebuehr <> 0 THEN LEAVE.
  166. AufGKon.Ausgang = AufGKon.Ausgang + GGeb_Me.
  167. AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang)
  168. * (AufGKon.Depot + AufGKon.Gebuehr).
  169. LEAVE.
  170. END.
  171. LEAVE.
  172. END.
  173. /* ------------------------------------------ */
  174. /* Summengruppen (Rabatte / Spezialrabatte) */
  175. /* ------------------------------------------ */
  176. DEF VAR VMenge AS DEC DECIMALS 4 NO-UNDO.
  177. DEF VAR FWert AS DEC DECIMALS 4 NO-UNDO.
  178. DEF VAR AWert AS DEC DECIMALS 4 NO-UNDO.
  179. DEF VAR RRecid AS RECID NO-UNDO.
  180. DO WHILE TRUE:
  181. DO WHILE Aufze.Auf_Sp_Grp > 0:
  182. FIND AufSpRab USE-INDEX AufSpRab-k1
  183. WHERE AufSpRab.Firma = Aufze.Firma
  184. AND AufSpRab.Aufnr = Aufze.Aufnr
  185. AND AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp NO-ERROR.
  186. IF NOT AVAILABLE AufSpRab THEN DO:
  187. CREATE AufSpRab.
  188. ASSIGN AufSpRab.Firma = Aufze.Firma
  189. AufSpRab.Aufnr = Aufze.Aufnr
  190. AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp.
  191. END.
  192. AufSpRab.Menge = AufSpRab.Menge + Menge.
  193. FIND LAST SpPrRab USE-INDEX SpPrRab-k1
  194. WHERE SpPrRab.Firma = Aufko.Firma
  195. AND SpPrRab.Knr = Aufko.Knr
  196. AND SpPrRab.Rab_Grp = AufSpRab.Rab_Grp
  197. AND SpPrRab.Menge <= AufSpRab.Menge
  198. AND SpPrRab.Ab_Datum <= Aufko.Kond_Datum
  199. AND SpPrRab.Bis_Datum >= Aufko.Kond_Datum
  200. NO-LOCK NO-ERROR.
  201. IF AVAILABLE SpPrRab THEN DO:
  202. ASSIGN AufSpRab.Auf_Proz_Betr = SpPrRab.Auf_Proz_Betr
  203. AufSpRab.Auf_Wert = SpPrRab.Auf_Wert.
  204. END.
  205. ELSE DO:
  206. Aufze.Auf_Sp_Grp = 0.
  207. END.
  208. LEAVE.
  209. END.
  210. IF Aufze.Rab_Su_Grp = 0 THEN DO:
  211. ASSIGN Aufze.Auf_Rab = 0
  212. Aufze.Abh_Rab = 0
  213. Aufze.Rab_Su_Art = 0.
  214. LEAVE.
  215. END.
  216. FIND AufRabSu USE-INDEX AufRabSu-k1
  217. WHERE AufRabSu.Firma = Aufze.Firma
  218. AND AufRabSu.Aufnr = Aufze.Aufnr
  219. AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp
  220. AND AufRabSu.MWST_Cd = Aufze.WuCd NO-ERROR.
  221. IF NOT AVAILABLE AufRabSu THEN DO:
  222. FIND FIRST RabSumm NO-LOCK USE-INDEX RabSumm-k1
  223. WHERE RabSumm.Firma = Aufze.Firma
  224. AND RabSumm.Rab_Summ = Aufze.Rab_Su_Grp.
  225. CREATE AufRabSu.
  226. ASSIGN AufRabSu.Firma = Aufze.Firma
  227. AufRabSu.Aufnr = Aufze.Aufnr
  228. AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp
  229. AufRabSu.MWST_Cd = Aufze.WuCd
  230. AufRabSu.F_Art = RabSumm.F_Rab_Art
  231. AufRabSu.F_Proz_Betr = RabSumm.F_Proz_Betr
  232. AufRabSu.A_Art = RabSumm.A_Rab_Art
  233. AufRabSu.A_Proz_Betr = RabSumm.A_Proz_Betr.
  234. END.
  235. RRecid = RECID(AufRabSu).
  236. DO WHILE TRUE:
  237. ASSIGN AufRabSu.M_Menge = AufRabSu.M_Menge + Menge
  238. AufRabSu.M_Betrag = AufRabSu.M_Betrag + Net_Betr
  239. AufRabSu.M_Inhalt = AufRabSu.M_Inhalt + Liter.
  240. IF Aufze.Rab_Su_Art = 0 THEN LEAVE.
  241. ASSIGN AufRabSu.R_Menge = AufRabSu.R_Menge + Menge
  242. AufRabSu.R_Betrag = AufRabSu.R_Betrag + Net_Betr
  243. AufRabSu.R_Inhalt = AufRabSu.R_Inhalt + Liter.
  244. LEAVE.
  245. END.
  246. VMenge = 0.
  247. FOR EACH AufRabSu USE-INDEX AufRabSu-k1
  248. WHERE AufRabSu.Firma = Aufze.Firma
  249. AND AufRabSu.Aufnr = Aufze.Aufnr
  250. AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp NO-LOCK:
  251. CASE AufRabSu.F_Art:
  252. WHEN 0 THEN VMenge = VMenge + AufRabSu.M_Menge.
  253. WHEN 1 THEN VMenge = VMenge + AufRabSu.M_Betrag.
  254. WHEN 2 THEN VMenge = VMenge + AufRabSu.M_Inhalt.
  255. END.
  256. END.
  257. FIND AufRabSu WHERE RECID(AufRabSu) = RRecid.
  258. IF VMenge < 0 THEN VMenge = - VMenge.
  259. DO WHILE TRUE:
  260. IF AufRabSu.F_Art = 0 THEN DO: /* Mengen */
  261. FIND LAST RabSumm USE-INDEX RabSumm-k1
  262. WHERE RabSumm.Firma = Aufze.Firma
  263. AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
  264. AND RabSumm.Menge <= VMenge
  265. NO-LOCK NO-ERROR.
  266. END.
  267. IF AufRabSu.F_Art = 1 THEN DO: /* Betrag */
  268. FIND LAST RabSumm USE-INDEX RabSumm-k1
  269. WHERE RabSumm.Firma = Aufze.Firma
  270. AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
  271. AND RabSumm.Menge = 0
  272. AND RabSumm.Betrag <= VMenge
  273. NO-LOCK NO-ERROR.
  274. END.
  275. IF AufRabSu.F_Art = 2 THEN DO: /* Hektoliter */
  276. FIND LAST RabSumm USE-INDEX RabSumm-k1
  277. WHERE RabSumm.Firma = Aufze.Firma
  278. AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
  279. AND RabSumm.Menge = 0
  280. AND RabSumm.Betrag = 0
  281. AND RabSumm.Inhalt <= (VMenge / 100)
  282. NO-LOCK NO-ERROR.
  283. END.
  284. IF NOT AVAILABLE RabSumm THEN FWert = 0.
  285. ELSE FWert = RabSumm.F_Wert.
  286. IF AufRabSu.A_Art = 0 THEN DO:
  287. FIND LAST RabSumm USE-INDEX RabSumm-k1
  288. WHERE RabSumm.Firma = Aufze.Firma
  289. AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
  290. AND RabSumm.Menge <= VMenge NO-LOCK NO-ERROR.
  291. END.
  292. IF AufRabSu.A_Art = 1 THEN DO:
  293. FIND LAST RabSumm USE-INDEX RabSumm-k1
  294. WHERE RabSumm.Firma = Aufze.Firma
  295. AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
  296. AND RabSumm.Menge = 0
  297. AND RabSumm.Betrag <= VMenge NO-LOCK NO-ERROR.
  298. END.
  299. IF AufRabSu.A_Art = 2 THEN DO:
  300. FIND LAST RabSumm USE-INDEX RabSumm-k1
  301. WHERE RabSumm.Firma = Aufze.Firma
  302. AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
  303. AND RabSumm.Menge = 0
  304. AND RabSumm.Betrag = 0
  305. AND RabSumm.Inhalt <= (VMenge / 100) NO-LOCK NO-ERROR.
  306. END.
  307. IF NOT AVAILABLE RabSumm THEN AWert = 0.
  308. ELSE AWert = RabSumm.A_Wert.
  309. LEAVE.
  310. END.
  311. FOR EACH AufRabSu USE-INDEX AufRabSu-k1
  312. WHERE AufRabSu.Firma = Aufze.Firma
  313. AND AufRabSu.Aufnr = Aufze.Aufnr
  314. AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp:
  315. AufRabSu.F_Wert = FWert.
  316. AufRabSu.A_Wert = AWert.
  317. END.
  318. LEAVE.
  319. END.
  320. DO WHILE Aufze.EP = 0:
  321. IF Artst.Listen_EP <> 0 THEN Aufze.EP = Artst.Listen_EP.
  322. IF Artst.LEP <> 0 THEN Aufze.EP = Artst.LEP.
  323. IF Artst.DEP <> 0 THEN Aufze.EP = Artst.DEP.
  324. LEAVE.
  325. END.
  326. /* ------------------------------------------ */
  327. /* Artikelbewegung mutieren */
  328. /* ------------------------------------------ */
  329. DO WHILE TRUE:
  330. IF ipArt = 1 THEN LEAVE.
  331. IF ipArt = 2 THEN DO:
  332. DELETE Artbw.
  333. LEAVE.
  334. END.
  335. FIND FIRST TAufko.
  336. BUFFER-COPY Aufko TO TAufko.
  337. FIND FIRST TAufze.
  338. BUFFER-COPY Aufze TO TAufze.
  339. RUN ARTBWMUT ( INPUT RECID(Artbw) ).
  340. LEAVE.
  341. END.
  342. RELEASE ArtLager.
  343. RELEASE Artst.
  344. RELEASE AufSpRab.
  345. RELEASE AufRabSu.
  346. RELEASE AufGKon.
  347. RELEASE Aufze.
  348. RELEASE Artbw.
  349. RELEASE GebKonto.
  350. /* ------------------------------------------ */
  351. /* Auftragskopf (-köpfe) mutieren */
  352. /* ------------------------------------------ */
  353. DO WHILE TRUE:
  354. DEF VAR KoRecid AS RECID NO-UNDO.
  355. DEF VAR FwSprcd AS INT NO-UNDO.
  356. DEF VAR AufSta AS INT NO-UNDO.
  357. DEF BUFFER BAufko FOR Aufko.
  358. IF Aufko.Samm_Nr = 0 THEN LEAVE.
  359. FIND Tabel USE-INDEX Tabel-k1
  360. WHERE Tabel.Firma = Aufze.Firma
  361. AND Tabel.RecArt = 'FAKART'
  362. AND Tabel.CodeC = ''
  363. AND Tabel.CodeI = Aufko.Fak_Art
  364. AND Tabel.Sprcd = FwSprcd NO-LOCK NO-ERROR.
  365. IF Tabel.Int_3 <> 4 THEN LEAVE. /* nicht Sammelrechnung */
  366. KoRecid = RECID(Aufko).
  367. FwSprcd = DYNAMIC-FUNCTION('GETFWSPRCD':U) NO-ERROR.
  368. AufSta = DYNAMIC-FUNCTION('GETFWSRNICHT':U) NO-ERROR.
  369. RELEASE Aufko.
  370. FIND Aufko WHERE RECID(Aufko) = KoRecid.
  371. Aufko.Gedruckt = FALSE.
  372. Aufko.Auf_Sta = AufSta.
  373. FOR EACH BAufko USE-INDEX Aufko-k4
  374. WHERE BAufko.Firma = Aufko.Firma
  375. AND BAufko.Knr = Aufko.Knr
  376. AND BAufko.Fak_Art = Aufko.Fak_Art
  377. AND BAufko.Samm_Nr = Aufko.Samm_Nr
  378. AND BAufko.Aufnr <> Aufko.Aufnr :
  379. BAufko.Gedruckt = FALSE.
  380. BAufko.Auf_Sta = AufSta.
  381. END.
  382. LEAVE.
  383. END.
  384. RELEASE Aufko.
  385. RELEASE BAufko.
  386. RELEASE Aufze.
  387. RELEASE Tabel.
  388. END PROCEDURE.