bestellfunktion.p 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360
  1. /*------------------------------------------------------------------------
  2. File : bestellfunktion.p
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Tue Aug 18 17:18:44 CEST 2020
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. /* *************************** Definitions ************************** */
  11. BLOCK-LEVEL ON ERROR UNDO, THROW.
  12. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO.
  13. DEFINE VARIABLE rBesze AS RECID NO-UNDO.
  14. DEFINE VARIABLE rGebKontr AS RECID NO-UNDO.
  15. DEFINE VARIABLE lBatch AS LOGICAL NO-UNDO.
  16. DEFINE TEMP-TABLE tBesko LIKE Besko
  17. FIELD Lieferant AS CHARACTER
  18. FIELD Lieferungen AS CHARACTER
  19. FIELD BestelltBis AS CHARACTER
  20. FIELD iStatus AS INTEGER
  21. .
  22. DEFINE VARIABLE htBesko AS HANDLE NO-UNDO.
  23. htBesko = TEMP-TABLE tBesko:DEFAULT-BUFFER-HANDLE.
  24. DEFINE TEMP-TABLE tBesze LIKE Besze
  25. FIELD GGebinde AS CHARACTER INIT ?
  26. FIELD VGebinde AS CHARACTER INIT ?
  27. FIELD kGebinde AS CHARACTER INIT ?
  28. FIELD iStatus AS INTEGER INIT ?
  29. .
  30. DEFINE VARIABLE htBesze AS HANDLE NO-UNDO.
  31. htBesze = TEMP-TABLE tBesze:DEFAULT-BUFFER-HANDLE.
  32. /* ******************** Preprocessor Definitions ******************** */
  33. /* ************************ Function Prototypes ********************** */
  34. FUNCTION calculateBeskoTotal RETURNS DECIMAL
  35. (ipcFirma AS CHARACTER,
  36. ipiBesnr AS INTEGER,
  37. OUTPUT opnTotale AS DECIMAL EXTENT 10) FORWARD.
  38. FUNCTION calculateBeszeNetto RETURNS LOGICAL
  39. (ipcFirma AS CHARACTER,
  40. ipiBesnr AS INTEGER,
  41. ipiPos AS INTEGER,
  42. ipiRecid AS RECID) FORWARD.
  43. FUNCTION calculatetBeszeNetto RETURNS LOGICAL
  44. (INPUT-OUTPUT iphtBesze AS HANDLE) FORWARD.
  45. FUNCTION changeBestellStatus RETURNS LOGICAL
  46. (INPUT-OUTPUT iohBesko AS HANDLE) FORWARD.
  47. FUNCTION createBesGebKO RETURNS LOGICAL
  48. (ipcFirma AS CHARACTER,
  49. ipiBesnr AS INTEGER) FORWARD.
  50. FUNCTION createBestellnummer RETURNS INTEGER
  51. (ipFirma AS CHARACTER) FORWARD.
  52. FUNCTION fillBesze RETURNS INTEGER
  53. (INPUT-OUTPUT iohtBesze AS HANDLE) FORWARD.
  54. FUNCTION filltBesko RETURNS LOGICAL
  55. (INPUT-OUTPUT iohtBesko AS HANDLE) FORWARD.
  56. FUNCTION getBestand RETURNS DECIMAL
  57. (ipcFirma AS CHARACTER,
  58. ipiArtnr AS INTEGER,
  59. ipiInhalt AS INTEGER,
  60. ipiJahr AS INTEGER,
  61. ipiLager AS INTEGER) FORWARD.
  62. /* *************************** Main Block *************************** */
  63. /* ********************** Internal Procedures *********************** */
  64. PROCEDURE CREATE_GEBKONTR:
  65. /*------------------------------------------------------------------------------*/
  66. /* Purpose: */
  67. /* Notes: */
  68. /*------------------------------------------------------------------------------*/
  69. DEFINE INPUT PARAMETER ipcGebKto AS CHARACTER NO-UNDO.
  70. DEFINE INPUT PARAMETER ipiMwstCd AS INTEGER NO-UNDO.
  71. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  72. FIND FIRST tBesko.
  73. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  74. WHERE GebKonto.Firma = tBesko.Firma
  75. AND GebKonto.Geb_Cd = ipcGebKto NO-ERROR.
  76. FIND LAST GebKontr NO-LOCK USE-INDEX GebKontr-k1
  77. WHERE GebKontr.Firma = tBesko.Firma
  78. AND GebKontr.Knr = tBesko.Knr NO-ERROR.
  79. IF NOT AVAILABLE GebKontr THEN ix = 1.
  80. ELSE ix = GebKontr.Trnr + 1.
  81. DO WHILE TRUE:
  82. CREATE GebKontr.
  83. ASSIGN
  84. GebKontr.Firma = tBesko.Firma
  85. GebKontr.Knr = tBesko.Knr
  86. GebKontr.Trnr = ix
  87. GebKontr.Geb_Cd = ipcGebKto
  88. GebKontr.Doknr = tBesko.Besnr
  89. GebKontr.Datum = tBesko.Buch_Datum
  90. GebKontr.Preis = GebKonto.Depot.
  91. rGebKontr = RECID(GebKontr).
  92. IF GebKonto.MWST_Art = 0 THEN
  93. DO:
  94. ASSIGN
  95. GebKontr.MWST_Cd = 11
  96. GebKontr.MWST_% = 0
  97. GebKontr.MWST_Inkl = TRUE.
  98. LEAVE.
  99. END.
  100. IF GebKonto.MWST_Art = 1 THEN
  101. DO:
  102. FIND Wust NO-LOCK USE-INDEX Wust-k1
  103. WHERE Wust.CodeK = 99
  104. AND Wust.CodeA = ipiMwstCd NO-ERROR.
  105. FIND LAST MwstAns NO-LOCK
  106. WHERE MWSTAns.MWST_Cd = Wust.Wucd
  107. AND MWSTAns.Datum < tBesko.Buch_Datum NO-ERROR.
  108. END.
  109. IF GebKonto.MWST_Art = 2 THEN
  110. DO:
  111. FIND FIRST Wust NO-LOCK USE-INDEX Wust-k2
  112. WHERE Wust.WuCd = GebKonto.MWST_Cd NO-ERROR.
  113. FIND LAST MwstAns NO-LOCK
  114. WHERE MWSTAns.MWST_Cd = GebKonto.MWST_Cd
  115. AND MWSTAns.Datum < tBesko.Buch_Datum NO-ERROR.
  116. END.
  117. IF NOT AVAILABLE MWSTAns THEN
  118. DO:
  119. ASSIGN
  120. GebKontr.MWST_Cd = 11
  121. GebKontr.MWST_% = 0
  122. GebKontr.MWST_Inkl = TRUE.
  123. LEAVE.
  124. END.
  125. ASSIGN
  126. GebKontr.MWST_Cd = MWSTAns.MWST_Cd
  127. GebKontr.MWST_% = MWSTAns.Ansatz
  128. GebKontr.MWST_Inkl = (IF AVAILABLE Wust THEN Wust.Incl ELSE FALSE).
  129. LEAVE.
  130. END.
  131. RELEASE Wust .
  132. RELEASE MWSTAns .
  133. RELEASE GebKontr.
  134. RELEASE GebKonto.
  135. END PROCEDURE.
  136. PROCEDURE EINBUCHEN_MENGEN:
  137. /*------------------------------------------------------------------------------*/
  138. /* Purpose: */
  139. /* Notes: */
  140. /*------------------------------------------------------------------------------*/
  141. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  142. DEFINE VARIABLE MwstCd AS INTEGER NO-UNDO.
  143. DEFINE VARIABLE dBuchdatum AS DATE NO-UNDO.
  144. DEFINE VARIABLE cGebKto AS CHARACTER NO-UNDO.
  145. DEFINE VARIABLE iEingang AS INTEGER NO-UNDO.
  146. DEFINE VARIABLE iGGeb_EG AS INTEGER NO-UNDO.
  147. DEFINE VARIABLE iVGeb_EG AS INTEGER NO-UNDO.
  148. DEFINE VARIABLE iKGeb_EG AS INTEGER NO-UNDO.
  149. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  150. DEFINE VARIABLE lGebucht AS LOGICAL NO-UNDO INIT FALSE.
  151. EINBUCHUNG:
  152. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  153. FIND FIRST tBesko.
  154. dBuchdatum = tBesko.Lief_Datum.
  155. FOR EACH Besze
  156. WHERE Besze.Firma = tBesko.Firma
  157. AND Besze.Besnr = tBesko.Besnr
  158. AND Besze.Artnr > 0
  159. AND NOT Besze.Verbucht :
  160. rBesze = RECID(Besze).
  161. ASSIGN
  162. iEingang = 0
  163. iGGeb_EG = 0
  164. iVGeb_EG = 0
  165. iKGeb_EG = 0.
  166. FOR EACH BesEing OF Besze:
  167. IF BesEing.Eingang = 0 THEN
  168. DO:
  169. DELETE BesEing.
  170. NEXT.
  171. END.
  172. IF NOT BesEing.lEingelagert THEN
  173. DO:
  174. RUN EINLAGERN_BESEINGANG ( RECID(BesEing), OUTPUT lOk ).
  175. IF NOT lOk THEN UNDO EINBUCHUNG, LEAVE EINBUCHUNG.
  176. END.
  177. ASSIGN
  178. BesEing.lEingelagert = TRUE
  179. BesEing.lVerbucht = TRUE
  180. iEingang = iEingang + BesEing.Eingang
  181. iGGeb_EG = iGGeb_EG + BesEing.GGeb_EG
  182. iVGeb_EG = iVGeb_EG + BesEing.VGeb_EG
  183. iKGeb_EG = iKGeb_EG + BesEing.KGeb_EG.
  184. RELEASE BesEing.
  185. END.
  186. FIND Artst USE-INDEX Artst-k1
  187. WHERE Artst.Firma = Besze.Firma
  188. AND Artst.Artnr = Besze.Artnr
  189. AND Artst.Inhalt = Besze.Inhalt
  190. AND Artst.Jahr = Besze.Jahr.
  191. MwstCd = Artst.Mwst.
  192. FIND Steuer
  193. WHERE Steuer.Firma = tBesko.Firma NO-LOCK.
  194. ASSIGN
  195. Besze.GGeb_EG = iGGeb_EG
  196. Besze.VGeb_EG = iVGeb_EG
  197. Besze.KGeb_EG = iKGeb_EG
  198. Besze.GGeb_Me = iGGeb_EG
  199. Besze.VGeb_Me = iVGeb_EG
  200. Besze.KGeb_Me = iKGeb_EG
  201. Besze.MGeli = iEingang
  202. Besze.MBest = iEingang
  203. Besze.Eingang = 0.
  204. Artst.Letzt_Eing = tBesko.Lief_Datum.
  205. DO WHILE Besze.GGeb_EG <> 0:
  206. FIND GGebinde NO-LOCK USE-INDEX GGebinde-k1
  207. WHERE GGebinde.Firma = Besze.Firma
  208. AND GGebinde.Geb_Cd = Besze.GGeb_Cd NO-ERROR.
  209. IF NOT AVAILABLE GGebinde THEN LEAVE.
  210. IF GGebinde.Geb_Kto = '' THEN LEAVE.
  211. IF Besze.GGebKto = '' THEN Besze.GGebKto = GGebinde.Geb_Kto.
  212. cGebKto = Besze.GGebKto.
  213. FIND GebKonto USE-INDEX GebKonto-k1
  214. WHERE GebKonto.Firma = Besze.Firma
  215. AND GebKonto.Geb_Cd = cGebKto NO-ERROR.
  216. IF NOT AVAILABLE GebKonto THEN LEAVE.
  217. IF GebKonto.Depot = 0 THEN GebKonto.Depot = GGebinde.Depot.
  218. IF GebKonto.Depot = 0 THEN LEAVE.
  219. FIND FIRST GebKontr USE-INDEX GebKontr-k2
  220. WHERE GebKontr.Firma = tBesko.Firma
  221. AND GebKontr.Knr = tBesko.Knr
  222. AND GebKontr.Geb_Cd = cGebKto
  223. AND GebKontr.Doknr = tBesko.Besnr
  224. AND GebKontr.Datum = dBuchdatum NO-ERROR.
  225. IF NOT AVAILABLE GebKontr THEN
  226. DO:
  227. RUN CREATE_GEBKONTR ( cGebKto, MwstCd ).
  228. FIND GebKontr WHERE RECID(GebKontr) = rGebKontr.
  229. END.
  230. GebKontr.Eingang = GebKontr.Eingang + Besze.GGeb_EG.
  231. LEAVE.
  232. END.
  233. DO WHILE Besze.VGeb_EG <> 0:
  234. FIND VGebinde NO-LOCK USE-INDEX VGebinde-k1
  235. WHERE VGebinde.Firma = Besze.Firma
  236. AND VGebinde.Geb_Cd = Besze.VGeb_Cd NO-ERROR.
  237. IF NOT AVAILABLE VGebinde THEN LEAVE.
  238. IF VGebinde.Geb_Kto = '' THEN LEAVE.
  239. IF Besze.VGebKto = '' THEN Besze.VGebKto = VGebinde.Geb_Kto.
  240. cGebKto = Besze.VGebKto.
  241. FIND GebKonto USE-INDEX GebKonto-k1
  242. WHERE GebKonto.Firma = Besze.Firma
  243. AND GebKonto.Geb_Cd = Besze.VGebKto NO-ERROR.
  244. IF NOT AVAILABLE GebKonto THEN LEAVE.
  245. IF GebKonto.Depot = 0 THEN GebKonto.Depot = VGebinde.Depot.
  246. IF GebKonto.Depot = 0 THEN LEAVE.
  247. FIND FIRST GebKontr USE-INDEX GebKontr-k2
  248. WHERE GebKontr.Firma = tBesko.Firma
  249. AND GebKontr.Knr = tBesko.Knr
  250. AND GebKontr.Geb_Cd = cGebKto
  251. AND GebKontr.Doknr = tBesko.Besnr
  252. AND GebKontr.Datum = dBuchdatum NO-ERROR.
  253. IF NOT AVAILABLE GebKontr THEN
  254. DO:
  255. RUN CREATE_GEBKONTR ( cGebKto, MwstCd ).
  256. FIND GebKontr WHERE RECID(GebKontr) = rGebKontr.
  257. END.
  258. GebKontr.Eingang = GebKontr.Eingang + Besze.VGeb_EG.
  259. LEAVE.
  260. END.
  261. DO WHILE Besze.KGeb_EG <> 0:
  262. FIND KGebinde NO-LOCK USE-INDEX KGebinde-k1
  263. WHERE KGebinde.Firma = Besze.Firma
  264. AND KGebinde.Geb_Cd = Besze.KGeb_Cd NO-ERROR.
  265. IF NOT AVAILABLE KGebinde THEN LEAVE.
  266. IF KGebinde.Geb_Kto = '' THEN LEAVE.
  267. IF Besze.KGebKto = '' THEN Besze.KGebKto = KGebinde.Geb_Kto.
  268. cGebKto = Besze.KGebKto.
  269. FIND GebKonto USE-INDEX GebKonto-k1
  270. WHERE GebKonto.Firma = Besze.Firma
  271. AND GebKonto.Geb_Cd = Besze.KGebKto NO-ERROR.
  272. IF NOT AVAILABLE GebKonto THEN LEAVE.
  273. IF GebKonto.Depot = 0 THEN GebKonto.Depot = KGebinde.Depot.
  274. IF GebKonto.Depot = 0 THEN LEAVE.
  275. FIND FIRST GebKontr USE-INDEX GebKontr-k2
  276. WHERE GebKontr.Firma = tBesko.Firma
  277. AND GebKontr.Knr = tBesko.Knr
  278. AND GebKontr.Geb_Cd = cGebKto
  279. AND GebKontr.Doknr = tBesko.Besnr
  280. AND GebKontr.Datum = dBuchdatum NO-ERROR.
  281. IF NOT AVAILABLE GebKontr THEN
  282. DO:
  283. RUN CREATE_GEBKONTR ( cGebKto, MwstCd ).
  284. FIND GebKontr WHERE RECID(GebKontr) = rGebKontr.
  285. END.
  286. GebKontr.Eingang = GebKontr.Eingang + Besze.KGeb_EG.
  287. LEAVE.
  288. END.
  289. RELEASE KGebinde.
  290. RELEASE VGebinde.
  291. RELEASE GGebinde.
  292. RELEASE GebKonto.
  293. RELEASE GebKontr.
  294. FIND KGebinde NO-LOCK USE-INDEX KGebinde-k1
  295. WHERE KGebinde.Firma = Besze.Firma
  296. AND KGebinde.Geb_Cd = Besze.KGeb_Cd NO-ERROR.
  297. DO WHILE iEingang <> 0:
  298. FIND LAST Artbw NO-LOCK USE-INDEX Artbw-k1
  299. WHERE Artbw.Firma = Besze.Firma NO-ERROR.
  300. IF AVAILABLE Artbw THEN i1 = Artbw.Trnr + 1.
  301. ELSE i1 = 1.
  302. FIND Wust NO-LOCK USE-INDEX Wust-k1
  303. WHERE Wust.CodeK = Steuer.MWST-Exkl
  304. AND Wust.CodeA = Artst.MWST NO-ERROR.
  305. IF AVAILABLE Wust THEN MwstCd = Wust.WuCd.
  306. CREATE Artbw.
  307. ASSIGN
  308. Artbw.Firma = Besze.Firma
  309. Artbw.Trnr = i1
  310. Artbw.Tr_Art = 11
  311. Artbw.Artnr = Artst.Artnr
  312. Artbw.Inhalt = Artst.Inhalt
  313. Artbw.Jahr = Artst.Jahr
  314. Artbw.Bez1 = Besze.Bez1
  315. Artbw.Bez2 = Besze.Bez2
  316. Artbw.Knr = tBesko.Knr
  317. Artbw.Menge = Besze.MGel
  318. Artbw.Alk_Gehalt = Artst.Alk_Gehalt
  319. Artbw.Aktion = Besze.Aktion
  320. Artbw.Sk_Ber = FALSE
  321. Artbw.Netto = FALSE
  322. Artbw.Lager = Besze.Lager
  323. Artbw.KGeb_Cd = Besze.KGeb_Cd
  324. Artbw.VGeb_Cd = Besze.VGeb_Cd
  325. Artbw.GGeb_Cd = Besze.GGeb_Cd
  326. Artbw.KGeb_Me = Besze.KGeb_EG
  327. Artbw.VGeb_Me = Besze.VGeb_EG
  328. Artbw.GGeb_Me = Besze.GGeb_EG
  329. Artbw.Preis = Besze.Preis
  330. Artbw.Bru_Betr = Besze.Preis * Besze.MGeli
  331. Artbw.Net_Betr = Besze.Preis * Besze.MGeli
  332. Artbw.Liter = Besze.MGeli * KGebinde.Inhalt / 100
  333. Artbw.Gewicht = (Besze.MGeli * Artst.Gewicht) + KGebinde.Gewicht
  334. Artbw.Datum = tBesko.Lief_Datum
  335. Artbw.Abhol = FALSE
  336. Artbw.FRW = tBesko.FRW
  337. Artbw.Faktor = tBesko.Faktor
  338. Artbw.Kurs = tBesko.Kurs
  339. Artbw.WC = Artst.MWST
  340. Artbw.WuCd = MwstCd
  341. Artbw.Aufnr = Besze.Besnr.
  342. ASSIGN
  343. Besze.Trnr = Artbw.Trnr.
  344. LEAVE.
  345. END.
  346. RELEASE Artbw .
  347. RELEASE Artst .
  348. RELEASE Besze .
  349. RELEASE KGebinde.
  350. END.
  351. FOR EACH BesGebKo NO-LOCK USE-INDEX BesGebKo-k1
  352. WHERE BesGebKo.Firma = tBesko.Firma
  353. AND BesGebKo.Besnr = tBesko.Besnr
  354. AND BesGebKo.Menge <> 0 :
  355. MwstCd = 0.
  356. DO WHILE BesGebKo.Anz_1 <> 0:
  357. FIND GebKonto USE-INDEX GebKonto-k1
  358. WHERE GebKonto.Firma = BesGebKo.Firma
  359. AND GebKonto.Geb_Cd = BesGebKo.Kto_Cd1 NO-ERROR.
  360. IF NOT AVAILABLE GebKonto THEN LEAVE.
  361. IF GebKonto.Depot = 0 THEN GebKonto.Depot = BesGebKo.Wert_1.
  362. IF GebKonto.Depot = 0 THEN LEAVE.
  363. cGebKto = GebKonto.Geb_Cd.
  364. FIND FIRST GebKontr USE-INDEX GebKontr-k2
  365. WHERE GebKontr.Firma = tBesko.Firma
  366. AND GebKontr.Knr = tBesko.Knr
  367. AND GebKontr.Geb_Cd = cGebKto
  368. AND GebKontr.Doknr = tBesko.Besnr
  369. AND GebKontr.Datum = dBuchdatum NO-ERROR.
  370. IF NOT AVAILABLE GebKontr THEN
  371. DO:
  372. RUN CREATE_GebKontr ( cGebKto, MwstCd ).
  373. FIND GebKontr WHERE RECID(GebKontr) = rGebKontr.
  374. END.
  375. GebKontr.Ausgang = GebKontr.Ausgang + BesGebKo.Anz_1.
  376. LEAVE.
  377. END.
  378. DO WHILE BesGebKo.Anz_2 <> 0:
  379. FIND GebKonto USE-INDEX GebKonto-k1
  380. WHERE GebKonto.Firma = BesGebko.Firma
  381. AND GebKonto.Geb_Cd = BesGebKo.Kto_Cd2 NO-ERROR.
  382. IF NOT AVAILABLE GebKonto THEN LEAVE.
  383. IF GebKonto.Depot = 0 THEN GebKonto.Depot = BesGebKo.Wert_1.
  384. IF GebKonto.Depot = 0 THEN LEAVE.
  385. cGebKto = GebKonto.Geb_Cd.
  386. FIND FIRST GebKontr USE-INDEX GebKontr-k2
  387. WHERE GebKontr.Firma = tBesko.Firma
  388. AND GebKontr.Knr = tBesko.Knr
  389. AND GebKontr.Geb_Cd = cGebKto
  390. AND GebKontr.Doknr = tBesko.Besnr
  391. AND GebKontr.Datum = dBuchdatum NO-ERROR.
  392. IF NOT AVAILABLE GebKontr THEN
  393. DO:
  394. RUN CREATE_GebKontr ( cGebKto, MwstCd ).
  395. FIND GebKontr WHERE RECID(GebKontr) = rGebKontr.
  396. END.
  397. GebKontr.Ausgang = GebKontr.Ausgang + BesGebKo.Anz_2.
  398. LEAVE.
  399. END.
  400. DO WHILE BesGebKo.Anz_3 <> 0:
  401. FIND GebKonto USE-INDEX GebKonto-k1
  402. WHERE GebKonto.Firma = BesGebko.Firma
  403. AND GebKonto.Geb_Cd = BesGebKo.Kto_Cd3 NO-ERROR.
  404. IF NOT AVAILABLE GebKonto THEN LEAVE.
  405. IF GebKonto.Depot = 0 THEN GebKonto.Depot = BesGebKo.Wert_1.
  406. IF GebKonto.Depot = 0 THEN LEAVE.
  407. cGebKto = GebKonto.Geb_Cd.
  408. FIND FIRST GebKontr USE-INDEX GebKontr-k2
  409. WHERE GebKontr.Firma = tBesko.Firma
  410. AND GebKontr.Knr = tBesko.Knr
  411. AND GebKontr.Geb_Cd = cGebKto
  412. AND GebKontr.Doknr = tBesko.Besnr
  413. AND GebKontr.Datum = dBuchdatum NO-ERROR.
  414. IF NOT AVAILABLE GebKontr THEN
  415. DO:
  416. RUN CREATE_GebKontr ( cGebKto, MwstCd ).
  417. FIND GebKontr WHERE RECID(GebKontr) = rGebKontr.
  418. END.
  419. GebKontr.Ausgang = GebKontr.Ausgang + BesGebKo.Anz_3.
  420. LEAVE.
  421. END.
  422. RELEASE GebKontr.
  423. RELEASE GebKonto.
  424. END.
  425. lGebucht = TRUE.
  426. LEAVE.
  427. END.
  428. RELEASE Artst.
  429. IF lGebucht THEN RETURN ''.
  430. ELSE RETURN 'ERROR'.
  431. END PROCEDURE.
  432. PROCEDURE EINLAGERN_BESEINGANG:
  433. /*------------------------------------------------------------------------------*/
  434. /* Purpose: */
  435. /* Notes: */
  436. /*------------------------------------------------------------------------------*/
  437. DEFINE INPUT PARAMETER iprBesEing AS RECID NO-UNDO.
  438. DEFINE OUTPUT PARAMETER oplOk AS LOGICAL NO-UNDO INIT FALSE.
  439. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  440. DEFINE VARIABLE rHoReLager AS RECID NO-UNDO.
  441. DEFINE VARIABLE dVerfall AS DATE NO-UNDO.
  442. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  443. DEFINE BUFFER bBesEing FOR BesEing.
  444. DEFINE BUFFER bHoReLager FOR HoReLager.
  445. lBatch = DYNAMIC-FUNCTION ('getBatch':U).
  446. EINLAGERUNG:
  447. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  448. FIND bBesEing WHERE RECID(bBesEing) = iprBesEing.
  449. FIND ArtLager NO-LOCK OF bBesEing NO-ERROR.
  450. IF ArtLager.Ort = '' THEN
  451. DO:
  452. FIND FIRST HoReLager NO-LOCK USE-INDEX HoReLager-k1
  453. WHERE HoReLager.Firma = bBesEing.Firma
  454. AND HoReLager.Lager = 0
  455. AND HoReLager.Art = 3
  456. AND HoReLager.Artnr = 0 NO-ERROR.
  457. IF AVAILABLE HoReLager THEN LEAVE.
  458. FIND LAST HoReLager NO-LOCK USE-INDEX HoReLager-k1
  459. WHERE HoReLager.Firma = bBesEing.Firma
  460. AND HoReLager.Lager = 0
  461. AND HoReLager.Art = 3
  462. AND HoReLager.Sf > '' NO-ERROR.
  463. IF NOT AVAILABLE HoReLager THEN LEAVE.
  464. IF HoReLager.Sf >= '98' THEN
  465. DO:
  466. RELEASE HoReLager.
  467. LEAVE.
  468. END.
  469. ii = INTEGER(HoReLager.Sf) + 1.
  470. CREATE bHoreLager.
  471. BUFFER-COPY HoReLager
  472. USING Firma Lager Art Regal Platz Niveau
  473. TO bHoReLager
  474. ASSIGN
  475. bHoReLager.Sf = STRING(ii,'99')
  476. bHoReLager.iStatus = 0
  477. bHoReLager.cSort = SUBSTITUTE('&1-&2-&3-&4', HoReLager.Regal, HoReLager.Platz, HoReLager.Niveau, STRING(ii,'99'))
  478. bHoReLager.Artnr = bBesEing.Artnr
  479. bHoReLager.Inhalt = bBesEing.Inhalt
  480. bHoReLager.Jahr = bBesEing.Jahr
  481. bHoReLager.iStatus = 2.
  482. .
  483. END.
  484. DO WHILE TRUE:
  485. FIND FIRST HoReLager NO-LOCK
  486. WHERE HoReLager.Firma = bBesEing.Firma
  487. AND HoReLager.Lager = 0
  488. AND HoReLager.Art = 1
  489. AND HoReLager.Artnr = bBesEing.Artnr
  490. AND HoReLager.Inhalt = bBesEing.Inhalt
  491. AND ((bBesEing.GGeb_EG = 0)
  492. OR (bBesEing.GGeb_EG > 0 AND HoReLager.Bestand = 0)
  493. OR (bBesEing.GGeb_EG < 0 AND HoReLager.Bestand > ABS(bBesEing.GGeb_EG))) NO-ERROR.
  494. IF AVAILABLE HoReLager THEN LEAVE.
  495. FIND FIRST HoReLager NO-LOCK
  496. WHERE HoReLager.Firma = bBesEing.Firma
  497. AND HoReLager.Lager = 0
  498. AND HoReLager.Art = 2
  499. AND HoReLager.Artnr = bBesEing.Artnr
  500. AND HoReLager.Inhalt = bBesEing.Inhalt
  501. AND ((bBesEing.GGeb_EG = 0)
  502. OR (bBesEing.GGeb_EG > 0 AND HoReLager.Bestand = 0)
  503. OR (bBesEing.GGeb_EG < 0 AND HoReLager.Bestand > ABS(bBesEing.GGeb_EG))) NO-ERROR.
  504. IF AVAILABLE HoReLager THEN LEAVE.
  505. FIND FIRST HoReLager NO-LOCK
  506. WHERE HoReLager.Firma = bBesEing.Firma
  507. AND HoReLager.Lager = 0
  508. AND HoReLager.Artnr = bBesEing.Artnr
  509. AND HoReLager.Inhalt = bBesEing.Inhalt NO-ERROR.
  510. IF AVAILABLE HoReLager THEN LEAVE.
  511. IF NOT lBatch THEN
  512. DO:
  513. cString = SUBSTITUTE('&1/&2/&3', bBesEing.Artnr, bBesEing.Inhalt, bBesEing.Jahr).
  514. DYNAMIC-FUNCTION ('fehlerMeldung':U, 1117, cString ) NO-ERROR.
  515. UNDO EINLAGERUNG, LEAVE EINLAGERUNG.
  516. END.
  517. oplOK = TRUE.
  518. RELEASE BesEing.
  519. LEAVE EINLAGERUNG.
  520. END.
  521. rHoReLager = RECID(HoReLager).
  522. RELEASE HoReLager.
  523. FIND HoReLager WHERE RECID(HoReLager) = rHoReLager.
  524. ASSIGN
  525. HoReLager.iStatus = 2
  526. HoReLager.Bestand = HoReLager.Bestand + bBesEing.Eingang.
  527. IF HoReLager.Eingang = ? THEN HoReLager.Eingang = TODAY.
  528. IF HoReLager.Bestand < 0 THEN HoReLager.Bestand = 0.
  529. IF NOT bBesEing.lVerfall AND
  530. NOT bBesEing.lLotnr THEN
  531. DO:
  532. oplOk = TRUE.
  533. LEAVE.
  534. END.
  535. dVerfall = (IF bBesEing.lVerfall THEN bBesEing.Verfall ELSE bBesEing.Eing_Dat).
  536. IF dVerfall = ? THEN dVerfall = TODAY.
  537. FIND FIRST LotLager USE-INDEX LotLager-k1
  538. WHERE LotLager.HoReLager_Id = HoReLager.HoReLager_Id
  539. AND LotLager.Verfall = dVerfall
  540. AND LotLager.Lotnummer = bBesEing.Lotnr NO-ERROR.
  541. IF NOT AVAILABLE LotLager AND
  542. bBesEing.Eingang > 0 THEN
  543. DO:
  544. CREATE LotLager.
  545. ASSIGN
  546. LotLager.HoReLager_Id = HoReLager.HoReLager_Id
  547. LotLager.Artnr = bBesEing.Artnr
  548. LotLager.Inhalt = bBesEing.Inhalt
  549. LotLager.Jahr = bBesEing.Jahr
  550. LotLager.Eingang = bBesEing.Eing_Dat
  551. LotLager.Verfall = dVerfall
  552. LotLager.Lotnummer = bBesEing.Lotnr
  553. LotLager.Firma = bBesEing.Firma
  554. LotLager.Barcode = bBesEing.Barcode.
  555. END.
  556. IF AVAILABLE LotLager THEN LotLager.Bestand = LotLager.Bestand + bBesEing.Eingang.
  557. oplOk = TRUE.
  558. LEAVE.
  559. END.
  560. END PROCEDURE.
  561. /* ************************ Function Implementations ***************** */
  562. FUNCTION calculateBeskoTotal RETURNS DECIMAL
  563. ( ipcFirma AS CHARACTER, ipiBesnr AS INTEGER, OUTPUT opnTotale AS DECIMAL EXTENT 10 ):
  564. /*------------------------------------------------------------------------------*/
  565. /* Purpose: */
  566. /* Notes: */
  567. /*------------------------------------------------------------------------------*/
  568. DEFINE VARIABLE nBetrag AS DECIMAL NO-UNDO INIT 0.00.
  569. DEFINE VARIABLE iMwst_Cd AS INTEGER NO-UNDO.
  570. DEFINE VARIABLE iGGeb_Me AS DECIMAL NO-UNDO.
  571. DEFINE VARIABLE iVGeb_Me AS DECIMAL NO-UNDO.
  572. DEFINE VARIABLE iKGeb_Me AS DECIMAL NO-UNDO.
  573. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  574. DEFINE BUFFER bBesko FOR Besko .
  575. DEFINE BUFFER bBesze FOR Besze .
  576. DEFINE BUFFER bBesGebKo FOR BesGebKo.
  577. opnTotale = 0.
  578. iMwst_Cd = INTEGER(DYNAMIC-FUNCTION('getFehlwert':U, ipcFirma, 'MWSTLIEFERANT' )).
  579. REPEAT TRANSACTION:
  580. FIND bBesko
  581. WHERE bBesko.Firma = ipcFirma
  582. AND bBesko.Besnr = ipiBesnr NO-ERROR.
  583. IF NOT AVAILABLE bBesko THEN RETURN nBetrag.
  584. FOR EACH bBesze NO-LOCK OF bBesko:
  585. IF bBesze.Artnr = 0 THEN NEXT.
  586. opnTotale[01] = opnTotale[01] + bBesze.Netto .
  587. opnTotale[02] = opnTotale[02] + bBesze.SpesenBetr.
  588. IF bBesze.MGel > 0 THEN
  589. ASSIGN
  590. iGGeb_Me = bBesze.GGeb_EG
  591. iVGeb_Me = bBesze.VGeb_EG
  592. iKGeb_Me = bBesze.KGeb_EG.
  593. ELSE
  594. ASSIGN
  595. iGGeb_Me = bBesze.GGeb_Me
  596. iVGeb_Me = bBesze.VGeb_Me
  597. iKGeb_Me = bBesze.KGeb_Me.
  598. IF iGGeb_Me <> 0 THEN
  599. DO:
  600. FIND GebKonto NO-LOCK
  601. WHERE GebKonto.Firma = bBesze.Firma
  602. AND GebKonto.Geb_Cd = bBesze.GGebKto NO-ERROR.
  603. IF AVAILABLE GebKonto THEN
  604. DO:
  605. opnTotale[03] = opnTotale[03] + (iGGeb_Me * GebKonto.Depot ).
  606. opnTotale[04] = opnTotale[04] + (iGGeb_Me * GebKonto.Gebuehr).
  607. END.
  608. END.
  609. IF iVGeb_Me <> 0 THEN
  610. DO:
  611. FIND GebKonto NO-LOCK
  612. WHERE GebKonto.Firma = bBesze.Firma
  613. AND GebKonto.Geb_Cd = bBesze.VGebKto.
  614. IF AVAILABLE GebKonto THEN
  615. DO:
  616. opnTotale[03] = opnTotale[03] + (iVGeb_Me * GebKonto.Depot ).
  617. opnTotale[04] = opnTotale[04] + (iVGeb_Me * GebKonto.Gebuehr).
  618. END.
  619. END.
  620. IF iKGeb_Me <> 0 THEN
  621. DO:
  622. FIND GebKonto NO-LOCK
  623. WHERE GebKonto.Firma = bBesze.Firma
  624. AND GebKonto.Geb_Cd = bBesze.KGebKto.
  625. IF AVAILABLE GebKonto THEN
  626. DO:
  627. opnTotale[03] = opnTotale[03] + (iKGeb_Me * GebKonto.Depot ).
  628. opnTotale[04] = opnTotale[04] + (iKGeb_Me * GebKonto.Gebuehr).
  629. END.
  630. END.
  631. RELEASE bBesze.
  632. END.
  633. FOR EACH bBesGebKo NO-LOCK OF bBesko:
  634. opnTotale[05] = opnTotale[05] - bBesGebKo.Betrag_1 - bBesGebKo.Betrag_2 - bBesGebKo.Betrag_3.
  635. RELEASE bBesGebKo.
  636. END.
  637. ASSIGN
  638. bBesko.SpesenBetr = opnTotale[02]
  639. bBesko.Best_Tot = opnTotale[01].
  640. DO ii = 1 TO 9:
  641. opnTotale[10] = opnTotale[10] + opnTotale[ii].
  642. END.
  643. RELEASE bBesko.
  644. RELEASE bBesze.
  645. RELEASE bBesGebKo.
  646. nBetrag = opnTotale[10].
  647. LEAVE.
  648. END.
  649. RETURN nBetrag.
  650. END FUNCTION.
  651. FUNCTION calculateBeszeNetto RETURNS LOGICAL
  652. ( ipcFirma AS CHARACTER, ipiBesnr AS INTEGER, ipiPos AS INTEGER, ipiRecid AS RECID ):
  653. /*------------------------------------------------------------------------------*/
  654. /* Purpose: */
  655. /* Notes: */
  656. /*------------------------------------------------------------------------------*/
  657. DEFINE VARIABLE nBetrag AS DECIMAL NO-UNDO DECIMALS 4.
  658. DEFINE VARIABLE nSpesen AS DECIMAL NO-UNDO DECIMALS 4.
  659. DEFINE VARIABLE nMenge AS DECIMAL NO-UNDO.
  660. DEFINE BUFFER bBesko FOR Besko.
  661. DEFINE BUFFER bBesze FOR Besze.
  662. REPEAT TRANSACTION:
  663. IF ipiRecid <> ? THEN FIND bBesze WHERE RECID(bBesze) = ipiRecid NO-ERROR.
  664. ELSE
  665. DO:
  666. FIND bBesze
  667. WHERE bBesze.Firma = ipcFirma
  668. AND bBesze.Besnr = ipiBesnr
  669. AND bBesze.Pos = ipiPos NO-ERROR.
  670. END.
  671. IF NOT AVAILABLE bBesze THEN RETURN FALSE.
  672. FIND bBesko NO-LOCK OF bBesze NO-ERROR.
  673. IF NOT AVAILABLE bBesko THEN RETURN FALSE.
  674. IF bBesko.Best_Sta > 2 THEN nMenge = bBesze.MGel.
  675. ELSE nMenge = bBesze.MBest.
  676. nBetrag = bBesze.S_Preis_Frw * (100 - bBesze.Rabatt) / 100.
  677. nBetrag = nBetrag * (100 - bBesze.ZusRab) / 100.
  678. nSpesen = nBetrag * bBesze.Spesen / 100.
  679. ASSIGN
  680. bBesze.Netto = nBetrag * nMenge
  681. bBesze.SpesenBetr = nSpesen * nMenge
  682. bBesze.Preis = nBetrag + nSpesen.
  683. /* bBesze.L_EP_FRW = nBetrag + nSpesen */
  684. /* bBesze.L_EP = L_EP_Frw * bBesze.Kurs / bBesze.Faktor*/
  685. .
  686. RELEASE bBesze.
  687. LEAVE.
  688. END.
  689. RETURN TRUE.
  690. END FUNCTION.
  691. FUNCTION calculatetBeszeNetto RETURNS LOGICAL
  692. ( INPUT-OUTPUT iphtBesze AS HANDLE ):
  693. /*------------------------------------------------------------------------------*/
  694. /* Purpose: */
  695. /* Notes: */
  696. /*------------------------------------------------------------------------------*/
  697. DEFINE VARIABLE nBetrag AS DECIMAL NO-UNDO DECIMALS 4.
  698. DEFINE VARIABLE nSpesen AS DECIMAL NO-UNDO DECIMALS 4.
  699. DEFINE VARIABLE nMenge AS DECIMAL NO-UNDO.
  700. DEFINE BUFFER bBesko FOR Besko.
  701. REPEAT TRANSACTION:
  702. FIND bBesko NO-LOCK
  703. WHERE bBesko.Firma = iphtBesze::Firma
  704. AND bBesko.Besnr = iphtBesze::Besnr NO-ERROR.
  705. IF NOT AVAILABLE bBesko THEN RETURN FALSE.
  706. IF bBesko.Best_Sta > 2 THEN nMenge = iphtBesze::MGel.
  707. ELSE nMenge = iphtBesze::MBest.
  708. nBetrag = iphtBesze::S_Preis_Frw * (100 - iphtBesze::Rabatt) / 100.
  709. nBetrag = nBetrag * (100 - iphtBesze::ZusRab) / 100.
  710. nSpesen = nBetrag * iphtBesze::Spesen / 100.
  711. ASSIGN
  712. iphtBesze::Netto = nBetrag * nMenge
  713. iphtBesze::SpesenBetr = nSpesen * nMenge
  714. iphtBesze::Preis = nBetrag + nSpesen.
  715. .
  716. LEAVE.
  717. END.
  718. RETURN TRUE.
  719. END FUNCTION.
  720. FUNCTION changeBestellStatus RETURNS LOGICAL
  721. ( INPUT-OUTPUT iohBesko AS HANDLE ):
  722. /*------------------------------------------------------------------------------*/
  723. /* Purpose: */
  724. /* Notes: */
  725. /*------------------------------------------------------------------------------*/
  726. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  727. DEFINE BUFFER bBesko FOR Besko.
  728. DEFINE BUFFER bBesze FOR Besze.
  729. EMPTY TEMP-TABLE tBesko.
  730. CREATE tBesko.
  731. htBesko:BUFFER-COPY ( iohBesko ).
  732. IF tBesko.Best_Sta = 4 THEN RETURN lRetVal.
  733. REPEAT TRANSACTION WHILE tBesko.Best_Sta = 1 ON ERROR UNDO, LEAVE:
  734. FIND bBesko OF tBesko.
  735. bBesko.Best_Sta = bBesko.Best_Sta + 1.
  736. FOR EACH bBesze OF bBesko:
  737. IF bBesze.Artnr = 0 THEN NEXT.
  738. IF bBesze.MBest = 0 THEN
  739. DO:
  740. DELETE bBesze.
  741. END.
  742. FIND Artst NO-LOCK OF bBesze.
  743. FIND ArtLief NO-LOCK
  744. WHERE ArtLief.Firma = bBesze.Firma
  745. AND ArtLief.Knr = tBesko.Knr
  746. AND ArtLief.Artnr = bBesze.Artnr
  747. AND ArtLief.Inhalt = bBesze.Inhalt
  748. AND ArtLief.Jahr = bBesze.Jahr NO-ERROR.
  749. ASSIGN
  750. bBesze.Best_Sta = bBesko.Best_Sta
  751. bBesze.MRuek = bBesze.MBest - bBesze.MGeli - bBesze.Eingang
  752. bBesze.lVerfall = Artst.lVerfall
  753. bBesze.lLotnr = Artst.lLotnr
  754. bBesze.S_Artnr = (IF ArtLief.S_Artnr <> '' THEN ArtLief.S_Artnr ELSE STRING(bBesze.Artnr,'999999'))
  755. bBesze.S_Bez1 = (IF ArtLief.S_Bez1 <> '' THEN ArtLief.S_Bez1 ELSE bBesze.Bez1 )
  756. bBesze.S_Bez2 = (IF ArtLief.S_Bez2 <> '' THEN ArtLief.S_Bez2 ELSE bBesze.Bez2 )
  757. .
  758. RELEASE bBesze.
  759. RELEASE Artst.
  760. END.
  761. BUFFER-COPY bBesko TO tBesko.
  762. iohBesko:BUFFER-COPY ( htBesko ).
  763. RELEASE bBesko.
  764. lRetVal = TRUE.
  765. RETURN lRetVal.
  766. END.
  767. EINGANGBUCHEN:
  768. REPEAT TRANSACTION WHILE tBesko.Best_Sta = 2 ON ERROR UNDO, LEAVE:
  769. FIND bBesko OF tBesko.
  770. bBesko.Best_Sta = bBesko.Best_Sta + 1.
  771. FOR EACH bBesze OF bBesko:
  772. IF bBesze.Artnr = 0 THEN NEXT.
  773. IF bBesze.MBest = 0 THEN
  774. DO:
  775. DELETE bBesze.
  776. NEXT.
  777. END.
  778. bBesze.Best_Sta = bBesko.Best_Sta.
  779. RELEASE bBesze.
  780. END.
  781. BUFFER-COPY bBesko TO tBesko.
  782. iohBesko:BUFFER-COPY ( htBesko ).
  783. RELEASE bBesko.
  784. RUN EINBUCHEN_MENGEN.
  785. IF RETURN-VALUE = '' THEN
  786. DO:
  787. lRetVal = TRUE.
  788. LEAVE EINGANGBUCHEN.
  789. END.
  790. UNDO EINGANGBUCHEN, LEAVE EINGANGBUCHEN.
  791. END.
  792. RETURN lRetVal.
  793. END FUNCTION.
  794. FUNCTION createBesGebKo RETURNS LOGICAL
  795. ( ipcFirma AS CHARACTER, ipiBesnr AS INTEGER ):
  796. /*------------------------------------------------------------------------------
  797. Purpose:
  798. Notes:
  799. ------------------------------------------------------------------------------*/
  800. FOR EACH GebRueck NO-LOCK
  801. WHERE GebRueck.Firma = Firma:
  802. CREATE BesGebKo.
  803. ASSIGN
  804. BesGebKo.Firma = ipcFirma
  805. BesGebKo.Besnr = ipiBesnr
  806. BesGebKo.Sort_Cd = GebRueck.Sort_Cd
  807. BesGebKo.Geb_Cd = GebRueck.Geb_Cd
  808. BesGebKo.Anz_1 = GebRueck.Anz_1
  809. BesGebKo.Kto_Cd1 = GebRueck.Kto_Cd1
  810. BesGebKo.Anz_2 = GebRueck.Anz_2
  811. BesGebKo.Kto_Cd2 = GebRueck.Kto_Cd2
  812. BesGebKo.Anz_3 = GebRueck.Anz_3
  813. BesGebKo.Kto_Cd3 = GebRueck.Kto_Cd3.
  814. IF BesGebKo.Kto_Cd1 <> '' THEN
  815. DO:
  816. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  817. WHERE GebKonto.Firma = ipcFirma
  818. AND GebKonto.Geb_Cd = BesGebKo.Kto_Cd1 NO-ERROR.
  819. IF AVAILABLE GebKonto THEN BesGebKo.Wert_1 = GebKonto.Depot.
  820. END.
  821. IF BesGebKo.Kto_Cd2 <> '' THEN
  822. DO:
  823. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  824. WHERE GebKonto.Firma = ipcFirma
  825. AND GebKonto.Geb_Cd = BesGebKo.Kto_Cd2 NO-ERROR.
  826. IF AVAILABLE GebKonto THEN BesGebKo.Wert_2 = GebKonto.Depot.
  827. END.
  828. IF BesGebKo.Kto_Cd3 <> '' THEN
  829. DO:
  830. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1
  831. WHERE GebKonto.Firma = ipcFirma
  832. AND GebKonto.Geb_Cd = BesGebKo.Kto_Cd3 NO-ERROR.
  833. IF AVAILABLE GebKonto THEN BesGebKo.Wert_3 = GebKonto.Depot.
  834. END.
  835. RELEASE BesGebKo.
  836. END.
  837. RETURN TRUE.
  838. END FUNCTION.
  839. FUNCTION createBestellnummer RETURNS INTEGER
  840. ( ipFirma AS CHARACTER ):
  841. /*------------------------------------------------------------------------------
  842. Purpose:
  843. Notes:
  844. ------------------------------------------------------------------------------*/
  845. DEFINE VARIABLE iBesnr AS INTEGER INIT 0 NO-UNDO.
  846. REPEAT TRANSACTION:
  847. FIND SteuNr WHERE SteuNr.Firma = ipFirma
  848. EXCLUSIVE-LOCK NO-WAIT NO-ERROR.
  849. IF AVAILABLE SteuNr THEN
  850. DO:
  851. ASSIGN
  852. SteuNr.Nr3 = SteuNr.Nr3 + 1
  853. iBesnr = SteuNr.Nr3.
  854. RELEASE SteuNr.
  855. LEAVE.
  856. END.
  857. IF LOCKED SteuNr THEN
  858. DO:
  859. MESSAGE 'SteuNr LOCKED' VIEW-AS ALERT-BOX INFORMATION.
  860. NEXT.
  861. END.
  862. RELEASE SteuNr.
  863. LEAVE.
  864. END.
  865. RETURN iBesnr.
  866. END FUNCTION.
  867. FUNCTION fillBesze RETURNS INTEGER
  868. ( INPUT-OUTPUT iohtBesze AS HANDLE ):
  869. /*------------------------------------------------------------------------------
  870. Purpose:
  871. Notes:
  872. ------------------------------------------------------------------------------*/
  873. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO INIT 0.
  874. DEFINE VARIABLE iPos AS INTEGER NO-UNDO.
  875. DEFINE BUFFER bBesko FOR Besko.
  876. DEFINE BUFFER bBesze FOR Besze.
  877. DEFINE BUFFER bArtst FOR Artst.
  878. DEFINE BUFFER bArtBez FOR ArtBez.
  879. DEFINE BUFFER bArtLager FOR ArtLager.
  880. DEFINE BUFFER bArtLief FOR ArtLief.
  881. EMPTY TEMP-TABLE tBesze.
  882. CREATE tBesze.
  883. htBesze:BUFFER-COPY ( iohtBesze ).
  884. IF tBesze.Pos = 0 THEN
  885. DO:
  886. FIND LAST bBesze NO-LOCK
  887. WHERE bBesze.Firma = tBesze.Firma
  888. AND bBesze.Besnr = tBesze.Besnr NO-ERROR.
  889. iPos = (IF AVAILABLE bBesze THEN (bBesze.Pos - (bBesze.Pos MOD 10)) + 10 ELSE 10).
  890. tBesze.Pos = iPos.
  891. END.
  892. ELSE iPos = bBesze.Pos.
  893. FIND bBesko NO-LOCK
  894. WHERE bBesko.Firma = tBesze.Firma
  895. AND bBesko.Besnr = tBesze.Besnr NO-ERROR.
  896. CASE tBesze.iStatus:
  897. WHEN 0 THEN
  898. DO:
  899. ASSIGN
  900. tBesze.Lager = bBesko.Lager
  901. tBesze.Verbucht = bBesko.Verbucht
  902. tBesze.Spesen = bBesko.Spesen
  903. tBesze.Rabatt = bBesko.Rabatt
  904. tBesze.ZusRab = bBesko.ZusRab
  905. tBesze.FRW = bBesko.FRW
  906. tBesze.Kurs = bBesko.Kurs
  907. tBesze.Faktor = bBesko.Faktor
  908. tBesze.Best_Sta = bBesko.Best_Sta.
  909. IF tBesze.Artnr = 0 THEN
  910. DO:
  911. ASSIGN
  912. tBesze.Spesen = 0.00
  913. tBesze.Rabatt = 0.00
  914. tBesze.ZusRab = 0.00
  915. tBesze.Best_Sta = bBesko.Best_Sta.
  916. iohtBesze:BUFFER-COPY ( htBesze ).
  917. RETURN iRetVal.
  918. END.
  919. END.
  920. OTHERWISE
  921. DO:
  922. IF tBesze.Artnr = 0 THEN RETURN iRetVal.
  923. END.
  924. END CASE.
  925. DO WHILE TRUE:
  926. FIND bArtst NO-LOCK
  927. WHERE bArtst.Firma = tBesze.Firma
  928. AND bArtst.Artnr = tBesze.Artnr
  929. AND bArtst.Inhalt = tBesze.Inhalt
  930. AND bArtst.Jahr = tBesze.Jahr NO-ERROR.
  931. IF NOT AVAILABLE bArtst THEN
  932. DO:
  933. iRetVal = 213.
  934. LEAVE.
  935. END.
  936. FIND FIRST bArtBez NO-LOCK
  937. WHERE bArtBez.Firma = tBesze.Firma
  938. AND bArtBez.Artnr = tBesze.Artnr
  939. AND bArtBez.Inhalt = tBesze.Inhalt
  940. AND bArtBez.Jahr = tBesze.Jahr NO-ERROR.
  941. IF NOT AVAILABLE bArtBez THEN
  942. DO:
  943. iRetVal = 222.
  944. RELEASE bArtst.
  945. LEAVE.
  946. END.
  947. FIND FIRST bArtLief NO-LOCK
  948. WHERE bArtLief.Firma = tBesze.Firma
  949. AND bArtLief.Knr = bBesko.Knr
  950. AND bArtLief.Artnr = tBesze.Artnr
  951. AND bArtLief.Inhalt = tBesze.Inhalt
  952. AND bArtLief.Jahr = tBesze.Jahr NO-ERROR.
  953. IF NOT AVAILABLE bArtLief THEN
  954. DO:
  955. iRetVal = 218.
  956. RELEASE bArtst.
  957. RELEASE bArtBez.
  958. LEAVE.
  959. END.
  960. FIND FIRST bArtLager NO-LOCK
  961. WHERE bArtLager.Firma = tBesze.Firma
  962. AND bArtLager.Artnr = tBesze.Artnr
  963. AND bArtLager.Inhalt = tBesze.Inhalt
  964. AND bArtLager.Jahr = tBesze.Jahr
  965. AND bArtLager.Lager = bBesko.Lager NO-ERROR.
  966. IF NOT AVAILABLE bArtLager THEN
  967. DO:
  968. iRetVal = 1107.
  969. RELEASE bArtst.
  970. RELEASE bArtBez.
  971. RELEASE bArtLief.
  972. LEAVE.
  973. END.
  974. LEAVE.
  975. END.
  976. IF iRetVal > 0 THEN RETURN iRetVal.
  977. IF tBesze.iStatus = 0 THEN
  978. DO:
  979. ASSIGN
  980. tBesze.Bez1 = bArtBez.Bez1
  981. tBesze.Bez2 = bArtBez.Bez2
  982. tBesze.Zustext[ 1] = bArtBez.Zustext[ 1]
  983. tBesze.Zustext[ 2] = bArtBez.Zustext[ 2]
  984. tBesze.Zustext[ 3] = bArtBez.Zustext[ 3]
  985. tBesze.Zustext[ 4] = bArtBez.Zustext[ 4]
  986. tBesze.Zustext[ 5] = bArtBez.Zustext[ 5]
  987. tBesze.Zustext[ 6] = bArtBez.Zustext[ 6]
  988. tBesze.Zustext[ 7] = bArtBez.Zustext[ 7]
  989. tBesze.Zustext[ 8] = bArtBez.Zustext[ 8]
  990. tBesze.Zustext[ 9] = bArtBez.Zustext[ 9]
  991. tBesze.Zustext[10] = bArtBez.Zustext[10]
  992. tBesze.KGeb_Cd = bArtst.KGeb_Cd
  993. tBesze.VGeb_Cd = bArtst.VGeb_Cd
  994. tBesze.GGeb_Cd = bArtst.GGeb_Cd
  995. tBesze.EP = bArtst.DEP
  996. tBesze.Alter_EP = bArtst.LEP
  997. tBesze.S_Artnr = bArtLief.S_Artnr
  998. tBesze.S_Bez1 = bArtLief.S_Bez1
  999. tBesze.S_Bez2 = bArtLief.S_Bez2
  1000. tBesze.S_Preis = bArtLief.S_Preis
  1001. tBesze.S_Preis_FRW = bArtLief.S_Preis_FRW
  1002. tBesze.L_EP = bArtLief.L_EP
  1003. tBesze.L_EP_FRW = bArtLief.L_EP_FRW
  1004. tBesze.L_Rabatt = bArtLief.L_Rabatt
  1005. tBesze.Spesen = (IF bArtLief.Spesen = 0 THEN bBesko.Spesen ELSE bArtLief.Spesen)
  1006. tBesze.Rabatt = (IF bArtLief.Rabatt = 0 THEN bBesko.Rabatt ELSE bArtLief.Rabatt)
  1007. tBesze.ZusRab = bBesko.ZusRab
  1008. tBesze.FRW = bBesko.FRW
  1009. tBesze.Kurs = bBesko.Kurs
  1010. tBesze.Faktor = bBesko.Faktor
  1011. tBesze.Alter_Listen_EP = bArtst.Listen_EP
  1012. tBesze.Alter_EP = bArtst.EP
  1013. tBesze.lLotnr = bArtst.lLotnr
  1014. tBesze.lVerfall = bArtst.lVerfall
  1015. tBesze.Best_Sta = bBesko.Best_Sta
  1016. tBesze.Preis = ((bArtLief.S_Preis * (100 - tBesze.Rabatt)) * (100 - tBesze.ZusRab) / 10000 * (100 + tBesze.Spesen) / 100 )
  1017. .
  1018. IF tBesze.S_Artnr = '' THEN tBesze.S_Artnr = STRING(tBesze.Artnr,'999999').
  1019. IF tBesze.S_Bez1 = '' THEN tBesze.S_Bez1 = tBesze.Bez1 .
  1020. IF tBesze.S_Bez2 = '' THEN tBesze.S_Bez2 = tBesze.Bez2 .
  1021. IF tBesze.GGeb_Cd <> '' THEN
  1022. DO:
  1023. FIND GGebinde NO-LOCK
  1024. WHERE GGebinde.Firma = tBesze.Firma
  1025. AND GGebinde.Geb_Cd = tBesze.GGeb_Cd NO-ERROR.
  1026. ASSIGN
  1027. tBesze.GGebinde = GGebinde.KBez
  1028. tBesze.GGebKto = GGebinde.Geb_Kto.
  1029. END.
  1030. IF tBesze.VGeb_Cd <> '' THEN
  1031. DO:
  1032. FIND VGebinde NO-LOCK
  1033. WHERE VGebinde.Firma = tBesze.Firma
  1034. AND VGebinde.Geb_Cd = tBesze.VGeb_Cd NO-ERROR.
  1035. ASSIGN
  1036. tBesze.VGebinde = VGebinde.KBez
  1037. tBesze.VGebKto = VGebinde.Geb_Kto.
  1038. END.
  1039. IF tBesze.KGeb_Cd <> '' THEN
  1040. DO:
  1041. FIND KGebinde NO-LOCK
  1042. WHERE KGebinde.Firma = tBesze.Firma
  1043. AND KGebinde.Geb_Cd = tBesze.KGeb_Cd NO-ERROR.
  1044. ASSIGN
  1045. tBesze.KGebinde = KGebinde.KBez
  1046. tBesze.KGebKto = KGebinde.Geb_Kto.
  1047. END.
  1048. END.
  1049. ELSE
  1050. DO:
  1051. .
  1052. END.
  1053. RELEASE bBesko .
  1054. RELEASE bBesze .
  1055. RELEASE bArtst .
  1056. RELEASE bArtBez .
  1057. RELEASE bArtLager.
  1058. RELEASE bArtLief .
  1059. RELEASE GGebinde .
  1060. RELEASE VGebinde .
  1061. RELEASE KGebinde .
  1062. iohtBesze:BUFFER-COPY ( htBesze ).
  1063. RETURN iRetVal.
  1064. END FUNCTION.
  1065. FUNCTION filltBesko RETURNS LOGICAL
  1066. ( INPUT-OUTPUT iohtBesko AS HANDLE ):
  1067. /*------------------------------------------------------------------------------
  1068. Purpose:
  1069. Notes:
  1070. ------------------------------------------------------------------------------*/
  1071. DEFINE VARIABLE lRetVal AS LOG NO-UNDO INIT TRUE.
  1072. DEFINE VARIABLE cKontakt AS CHARACTER NO-UNDO.
  1073. DEFINE VARIABLE iRecid AS RECID NO-UNDO.
  1074. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1075. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1076. DEFINE BUFFER bAdresse FOR Adresse .
  1077. DEFINE BUFFER bAnsprech FOR Ansprech.
  1078. DEFINE BUFFER bLiefst FOR Liefst .
  1079. DEFINE BUFFER bWaehrung FOR Waehrung .
  1080. EMPTY TEMP-TABLE tBesko.
  1081. CREATE tBesko.
  1082. ASSIGN
  1083. tBesko.Lieferungen = ''
  1084. tBesko.Lieferant = ''
  1085. tBesko.BestelltBis = ''
  1086. tBesko.iStatus = 9.
  1087. htBesko:BUFFER-COPY( iohtBesko ).
  1088. cKontakt = ''.
  1089. AdFirma = DYNAMIC-FUNCTION ('GETADMANDANT') NO-ERROR.
  1090. FIND bAdresse NO-LOCK
  1091. WHERE bAdresse.Firma = AdFirma
  1092. AND bAdresse.Knr = tBesko.Knr.
  1093. FIND bLiefst NO-LOCK
  1094. WHERE bLiefst.Firma = tBesko.Firma
  1095. AND bLiefst.Knr = tBesko.Knr
  1096. AND bLiefst.Aktiv = TRUE NO-ERROR.
  1097. IF NOT AVAILABLE bLiefst THEN
  1098. DO:
  1099. RUN FEHLER ( 1027 ).
  1100. RETURN TRUE.
  1101. END.
  1102. FIND FIRST bAnsprech NO-LOCK
  1103. WHERE bAnsprech.Firma = tBesko.Firma
  1104. AND bAnsprech.Knr = tBesko.Knr
  1105. AND bAnsprech.Bestellung = TRUE NO-ERROR.
  1106. IF AVAILABLE bAnsprech THEN cKontakt = TRIM(bAnsprech.Vorname + ' ' + bAnsprech.Name).
  1107. ELSE cKontakt = bLiefst.Kontakt.
  1108. ASSIGN
  1109. tBesko.Frw = bLiefst.Frw
  1110. tBesko.Rabatt = bLiefst.Rabatt
  1111. tBesko.ZusRab = bLiefst.ZusRab
  1112. tBesko.Kopf = bLiefst.Kopf
  1113. tBesko.Schluss = bLiefst.Schluss
  1114. tBesko.Bemerkung = bLiefst.Bemerkung
  1115. tBesko.Abholtext = ''
  1116. tBesko.Abgeholt = FALSE
  1117. tBesko.Verbucht = FALSE
  1118. tBesko.Gedruckt = FALSE
  1119. tBesko.I_Best = cKontakt
  1120. tBesko.Spesen = bLiefst.Spesen
  1121. tBesko.Bemerkung = bLiefst.Bemerkung
  1122. tBesko.Kopf = bLiefst.Kopf
  1123. tBesko.Schluss = bLiefst.Schluss
  1124. tBesko.Kond = bLiefst.Kond NO-ERROR.
  1125. FIND bWaehrung NO-LOCK
  1126. WHERE bWaehrung.Firma = bLiefst.Firma
  1127. AND bWaehrung.Frw = bLiefst.Frw NO-ERROR.
  1128. ASSIGN
  1129. tBesko.Kurs = bWaehrung.Kurs
  1130. tBesko.Faktor = bWaehrung.Faktor.
  1131. ASSIGN
  1132. tBesko.Lieferungen = bLiefst.Lieferungen
  1133. tBesko.BestelltBis = bLiefst.BestBis
  1134. tBesko.Lieferant = bAdresse.Anzeig_br.
  1135. IF tBesko.iStatus = 0 THEN
  1136. DO:
  1137. ASSIGN
  1138. tBesko.Best_Datum = TODAY
  1139. tBesko.Lief_Datum = TODAY + 7.
  1140. END.
  1141. RELEASE bAdresse .
  1142. RELEASE bLiefst .
  1143. RELEASE bAnsprech.
  1144. RELEASE bWaehrung .
  1145. iohtBesko:BUFFER-COPY(htBesko).
  1146. END FUNCTION.
  1147. FUNCTION getBestand RETURNS DECIMAL
  1148. ( ipcFirma AS CHARACTER, ipiArtnr AS INTEGER, ipiInhalt AS INTEGER, ipiJahr AS INTEGER, ipiLager AS INTEGER ):
  1149. /*------------------------------------------------------------------------------
  1150. Purpose:
  1151. Notes:
  1152. ------------------------------------------------------------------------------*/
  1153. DEFINE VARIABLE nBestand AS DECIMAL NO-UNDO INIT 0.00.
  1154. DEFINE BUFFER bArtLager FOR ArtLager.
  1155. FIND bArtLager NO-LOCK
  1156. WHERE bArtLager.Firma = ipcFirma
  1157. AND bArtLager.Artnr = ipiArtnr
  1158. AND bArtLager.Inhalt = ipiInhalt
  1159. AND bArtLager.Jahr = ipiJahr
  1160. AND bArtLager.Lager = ipiLager NO-ERROR.
  1161. nBestand = (IF AVAILABLE bArtLager THEN bArtLager.Bestand ELSE 0.00).
  1162. RELEASE bArtLager.
  1163. RETURN nBestand.
  1164. END FUNCTION.