LotLagerBereinigung.p 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. DEF VAR nBestand AS DECIMAL NO-UNDO.
  2. DEF VAR lFound AS LOGICAL NO-UNDO.
  3. DEF BUFFER bLotLager FOR LotLager.
  4. DEF BUFFER bHoReLager FOR HoReLager.
  5. DEF TEMP-TABLE tArtst
  6. FIELD Artnr AS INT
  7. FIELD Inhalt AS INT
  8. FIELD Jahr AS INT
  9. FIELD Bestand AS INT
  10. FIELD TagBest AS INT
  11. FIELD HoReBest AS INT
  12. FIELD GGebMe AS INT
  13. .
  14. DISABLE TRIGGERS FOR LOAD OF HoReLager.
  15. DISABLE TRIGGERS FOR LOAD OF LotLager .
  16. DISABLE TRIGGERS FOR LOAD OF ArtLager .
  17. OUTPUT TO 'C:\LogFiles\LotLager.d' APPEND NO-MAP NO-CONVERT.
  18. FOR EACH LotLager
  19. WHERE LotLager.Firma = '1000':
  20. FIND HoReLager NO-LOCK
  21. WHERE HoReLager.HoReLager_Id = LotLager.HoReLager_Id
  22. AND HoReLager.Artnr = LotLager.Artnr NO-ERROR.
  23. IF AVAILABLE HoReLager THEN NEXT.
  24. IF LotLager.Bestand <= 0 THEN DO:
  25. EXPORT LotLager.
  26. DELETE LotLager.
  27. NEXT.
  28. END.
  29. FIND FIRST ArtLager NO-LOCK OF LotLager.
  30. FIND FIRST Artst NO-LOCK OF LotLager.
  31. nBestand = ArtLager.Bestand.
  32. FOR EACH Aufze NO-LOCK
  33. WHERE Aufze.Firma = Artst.Firma
  34. AND Aufze.Artnr = Artst.Artnr
  35. AND Aufze.Inhalt = Artst.Inhalt
  36. AND Aufze.Jahr = Artst.Jahr
  37. AND Aufze.Lag_Buch = TRUE,
  38. FIRST Aufko NO-LOCK OF Aufze:
  39. IF Aufko.Lief_Datum > TODAY THEN nBestand = nBestand + Aufze.MGel.
  40. END.
  41. IF nBestand <= 0 THEN DO:
  42. EXPORT LotLager.
  43. DELETE LotLager.
  44. NEXT.
  45. END.
  46. FIND FIRST HoReLager
  47. WHERE HoReLager.Firma = LotLager.Firma
  48. AND HoReLager.Art = 1
  49. AND HoReLager.Lager = 0
  50. AND HoReLager.Artnr = LotLager.Artnr
  51. AND HoReLager.Inhalt = LotLager.Inhalt NO-ERROR.
  52. IF NOT AVAILABLE HoReLager THEN DO:
  53. FIND FIRST HoReLager
  54. WHERE HoReLager.Firma = LotLager.Firma
  55. AND HoReLager.Art = 3
  56. AND HoReLager.Lager = 0
  57. AND HoReLager.Artnr = LotLager.Artnr
  58. AND HoReLager.Inhalt = LotLager.Inhalt NO-ERROR.
  59. END.
  60. IF NOT AVAILABLE HoReLager THEN DO:
  61. FIND FIRST HoReLager
  62. WHERE HoReLager.Firma = LotLager.Firma
  63. AND HoReLager.Art = 2
  64. AND HoReLager.Lager = 0
  65. AND HoReLager.Artnr = LotLager.Artnr
  66. AND HoReLager.Inhalt = LotLager.Inhalt NO-ERROR.
  67. END.
  68. IF AVAILABLE HoReLager THEN DO:
  69. FIND FIRST bLotLager
  70. WHERE bLotLager.HoReLager_Id = HoReLager.HoReLager_Id
  71. AND bLotLager.Lager = HoReLager.Lager
  72. AND bLotLager.Artnr = LotLager.Artnr
  73. AND bLotLager.Inhalt = LotLager.Inhalt
  74. AND bLotLager.Jahr = LotLager.Jahr
  75. AND bLotLager.Verfall = LotLager.Verfall NO-ERROR.
  76. IF AVAILABLE bLotLager THEN DO:
  77. bLotLager.Bestand = bLotLager.Bestand + LotLager.Bestand.
  78. HoReLager.Bestand = HoReLager.Bestand + LotLager.Bestand.
  79. EXPORT LotLager.
  80. DELETE LotLager.
  81. NEXT.
  82. END.
  83. LotLager.HoReLager_Id = HoReLager.HoReLager_Id.
  84. HoReLager.Bestand = HoReLager.Bestand + LotLager.Bestand.
  85. NEXT.
  86. END.
  87. FIND FIRST HoReLager
  88. WHERE HoReLager.HoReLager_Id = LotLager.HoReLager_Id NO-ERROR.
  89. IF AVAILABLE HoReLager THEN DO:
  90. IF HoReLager.Artnr = 0 THEN DO:
  91. ASSIGN HoReLager.Artnr = LotLager.Artnr
  92. HoReLager.Inhalt = LotLager.Inhalt
  93. HoReLager.iStatus = 2
  94. HoReLager.Bestand = LotLager.Bestand.
  95. LotLager.HoReLager_Id = HoReLager.HoReLager_Id.
  96. NEXT.
  97. END.
  98. END.
  99. IF ArtLager.Ort <> '' THEN DO:
  100. FIND FIRST HoReLager
  101. WHERE HoReLager.Firma = LotLager.Firma
  102. AND HoReLager.Art = 1
  103. AND HoReLager.Lager = 0
  104. AND HoReLager.cSort = ArtLager.Ort NO-ERROR.
  105. IF NOT AVAILABLE HoReLager THEN DO:
  106. FIND FIRST HoReLager
  107. WHERE HoReLager.Firma = LotLager.Firma
  108. AND HoReLager.Art = 3
  109. AND HoReLager.Lager = 0
  110. AND HoReLager.cSort = ArtLager.Ort NO-ERROR.
  111. END.
  112. IF NOT AVAILABLE HoReLager THEN DO:
  113. FIND FIRST HoReLager
  114. WHERE HoReLager.Firma = LotLager.Firma
  115. AND HoReLager.Art = 2
  116. AND HoReLager.Lager = 0
  117. AND HoReLager.cSort = ArtLager.Ort NO-ERROR.
  118. END.
  119. IF NOT AVAILABLE HoReLager THEN DO:
  120. EXPORT LotLager.
  121. DELETE LotLager.
  122. NEXT.
  123. END.
  124. IF HoReLager.Artnr <> 0 THEN DO:
  125. EXPORT LotLager.
  126. DELETE HoReLager.
  127. NEXT.
  128. END.
  129. ASSIGN HoReLager.Artnr = LotLager.Artnr
  130. HoReLager.Inhalt = LotLager.Inhalt
  131. HoReLager.iStatus = 2
  132. HoReLager.Bestand = LotLager.Bestand.
  133. LotLager.HoReLager_Id = HoReLager.HoReLager_Id.
  134. NEXT.
  135. END.
  136. EXPORT LotLager.
  137. DELETE LotLager.
  138. END.
  139. OUTPUT CLOSE.
  140. FOR EACH Artst NO-LOCK
  141. WHERE Artst.Firma = '1000',
  142. FIRST ArtLager OF Artst:
  143. ArtLager.Ort = ''.
  144. IF NOT Artst.Lager THEN NEXT.
  145. CREATE tArtst.
  146. BUFFER-COPY ArtLager TO tArtst.
  147. FIND VGebinde NO-LOCK
  148. WHERE VGebinde.Firma = Artst.Firma
  149. AND VGebinde.Geb_Cd = Artst.VGeb_Cd NO-ERROR.
  150. FIND GGebinde NO-LOCK
  151. WHERE GGebinde.Firma = Artst.Firma
  152. AND GGebinde.Geb_Cd = Artst.GGeb_Cd NO-ERROR.
  153. IF AVAILABLE GGebinde AND
  154. AVAILABLE VGebinde THEN tArtst.GGebMe = GGebinde.Inhalt * VGebinde.Inhalt.
  155. tArtst.TagBest = ArtLager.Bestand.
  156. FOR EACH Aufze NO-LOCK
  157. WHERE Aufze.Firma = Artst.Firma
  158. AND Aufze.Artnr = Artst.Artnr
  159. AND Aufze.Inhalt = Artst.Inhalt
  160. AND Aufze.Jahr = Artst.Jahr
  161. AND Aufze.Lag_Buch = TRUE,
  162. FIRST Aufko NO-LOCK OF Aufze:
  163. IF Aufko.Lief_Datum > (TODAY + 1) THEN tArtst.TagBest = tArtst.TagBest + Aufze.MGel.
  164. END.
  165. tArtst.HoReBest = tArtst.TagBest.
  166. END.
  167. FOR EACH tArtst:
  168. FOR EACH LotLager
  169. WHERE LotLager.Firma = '1000'
  170. AND LotLager.Artnr = tArtst.Artnr
  171. AND LotLager.Inhalt = tArtst.Inhalt
  172. AND LotLager.Jahr = tArtst.Jahr
  173. BY LotLager.Verfall DESCENDING:
  174. IF tArtst.TagBest = 0 THEN DO:
  175. LotLager.Bestand = 0.
  176. NEXT.
  177. END.
  178. IF LotLager.Bestand <= tArtst.TagBest THEN DO:
  179. tArtst.TagBest = tArtst.TagBest - LotLager.Bestand.
  180. END.
  181. ELSE DO:
  182. LotLager.Bestand = tArtst.TagBest.
  183. tArtst.TagBest = 0.
  184. END.
  185. END.
  186. END.
  187. FOR EACH HoReLager
  188. WHERE HoReLager.Firma = '1000'
  189. AND HoReLager.Art = 3
  190. AND HoReLager.Lager = 0
  191. AND HoReLager.Artnr > 0:
  192. FOR EACH ArtLager
  193. WHERE ArtLager.Firma = '1000'
  194. AND ArtLager.Lager = 0
  195. AND ArtLager.Artnr = HoReLager.Artnr
  196. AND ArtLager.Inhalt = HoReLager.Inhalt:
  197. ArtLager.Ort = HoReLager.cSort.
  198. END.
  199. nBestand = 0.
  200. lFound = FALSE.
  201. FOR EACH LotLager
  202. WHERE LotLager.HoReLager_Id = HoReLager.HoReLager_Id
  203. AND LotLager.Artnr = HoReLager.Artnr
  204. AND LotLager.Inhalt = HoReLager.Inhalt:
  205. nBestand = nBestand + LotLager.Bestand.
  206. lFound = TRUE.
  207. END.
  208. IF lFound THEN DO:
  209. HoReLager.Bestand = nBestand.
  210. NEXT.
  211. END.
  212. END.
  213. FOR EACH HoReLager
  214. WHERE HoReLager.Firma = '1000'
  215. AND HoReLager.Art = 1
  216. AND HoReLager.Lager = 0
  217. AND HoReLager.Artnr > 0:
  218. FOR EACH ArtLager
  219. WHERE ArtLager.Firma = '1000'
  220. AND ArtLager.Lager = 0
  221. AND ArtLager.Artnr = HoReLager.Artnr
  222. AND ArtLager.Inhalt = HoReLager.Inhalt:
  223. ArtLager.Ort = HoReLager.cSort.
  224. END.
  225. nBestand = 0.
  226. lFound = FALSE.
  227. FOR EACH LotLager
  228. WHERE LotLager.HoReLager_Id = HoReLager.HoReLager_Id
  229. AND LotLager.Artnr = HoReLager.Artnr
  230. AND LotLager.Inhalt = HoReLager.Inhalt:
  231. nBestand = nBestand + LotLager.Bestand.
  232. lFound = TRUE.
  233. END.
  234. IF lFound THEN DO:
  235. HoReLager.Bestand = nBestand.
  236. NEXT.
  237. END.
  238. END.
  239. FOR EACH HoReLager
  240. WHERE HoReLager.Firma = '1000'
  241. AND HoReLager.Art = 2
  242. AND HoReLager.Lager = 0
  243. AND HoReLager.Artnr > 0:
  244. nBestand = 0.
  245. lFound = FALSE.
  246. FOR EACH LotLager
  247. WHERE LotLager.HoReLager_Id = HoReLager.HoReLager_Id
  248. AND LotLager.Artnr = HoReLager.Artnr
  249. AND LotLager.Inhalt = HoReLager.Inhalt:
  250. nBestand = nBestand + LotLager.Bestand.
  251. lFound = TRUE.
  252. END.
  253. IF lFound THEN DO:
  254. HoReLager.Bestand = nBestand.
  255. NEXT.
  256. END.
  257. END.
  258. FOR EACH tArtst,
  259. FIRST Artst NO-LOCK
  260. WHERE Artst.Firma = '1000'
  261. AND Artst.Artnr = tArtst.Artnr
  262. AND Artst.Inhalt = tArtst.Inhalt
  263. AND Artst.Jahr = tArtst.Jahr
  264. AND NOT Artst.lVerfall:
  265. FIND FIRST bHoReLager
  266. WHERE bHoReLager.Firma = '1000'
  267. AND bHoReLager.Art = 1
  268. AND bHoReLager.Lager = 0
  269. AND bHoReLager.Artnr = tArtst.Artnr NO-ERROR.
  270. IF NOT AVAILABLE bHoReLager THEN DO:
  271. FIND FIRST bHoReLager
  272. WHERE bHoReLager.Firma = '1000'
  273. AND bHoReLager.Art = 3
  274. AND bHoReLager.Lager = 0
  275. AND bHoReLager.Artnr = tArtst.Artnr NO-ERROR.
  276. END.
  277. IF NOT AVAILABLE bHoReLager THEN NEXT.
  278. bHoReLager.Bestand = tArtst.HoReBest.
  279. FOR EACH HoReLager
  280. WHERE HoReLager.Firma = '1000'
  281. AND HoReLager.Art = 2
  282. AND HoReLager.Lager = 0
  283. AND HoReLager.Artnr = tArtst.Artnr:
  284. IF tArtst.GGebMe < bHoReLager.Bestand THEN DO:
  285. HoReLager.Bestand = tArtst.GGebMe.
  286. bHoReLager.Bestand = bHoReLager.Bestand - tArtst.GGebMe.
  287. END.
  288. ELSE DO:
  289. HoReLager.Bestand = 0.
  290. END.
  291. END.
  292. END.