ArtikelBestandRechnen.p 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. &ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12
  2. &ANALYZE-RESUME
  3. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
  4. /*------------------------------------------------------------------------
  5. File :
  6. Purpose :
  7. Syntax :
  8. Description :
  9. Author(s) :
  10. Created :
  11. Notes :
  12. ----------------------------------------------------------------------*/
  13. /* This .W file was created with the Progress AppBuilder. */
  14. /*----------------------------------------------------------------------*/
  15. /* *************************** Definitions ************************** */
  16. DEF VAR cParam AS CHAR NO-UNDO.
  17. DEF VAR cFirma AS CHAR NO-UNDO.
  18. DEF VAR iVonArtnr AS INT NO-UNDO.
  19. DEF VAR iBisArtnr AS INT NO-UNDO.
  20. DEF VAR iVonInhalt AS INT NO-UNDO.
  21. DEF VAR iBisInhalt AS INT NO-UNDO.
  22. DEF VAR iVonJahr AS INT NO-UNDO.
  23. DEF VAR iBisJahr AS INT NO-UNDO.
  24. DEF VAR cBenutzer AS CHAR INIT 'Batch' NO-UNDO.
  25. DEF VAR cLogName AS CHAR NO-UNDO.
  26. DEF STREAM LogStream.
  27. DEF TEMP-TABLE tBestand
  28. FIELD Lager AS INT
  29. FIELD ilRecid AS RECID
  30. FIELD iaRecid AS RECID
  31. FIELD Inv_Datum AS DATE
  32. FIELD Inv_Bestand AS DEC
  33. FIELD Eingang AS DEC
  34. FIELD Ausgang AS DEC
  35. FIELD iTrnr AS INT
  36. .
  37. /* _UIB-CODE-BLOCK-END */
  38. &ANALYZE-RESUME
  39. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  40. /* ******************** Preprocessor Definitions ******************** */
  41. &Scoped-define PROCEDURE-TYPE Procedure
  42. &Scoped-define DB-AWARE no
  43. /* _UIB-PREPROCESSOR-BLOCK-END */
  44. &ANALYZE-RESUME
  45. /* ************************ Function Prototypes ********************** */
  46. &IF DEFINED(EXCLUDE-getLogName) = 0 &THEN
  47. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLogName Procedure
  48. FUNCTION getLogName RETURNS CHARACTER
  49. ( /* parameter-definitions */ ) FORWARD.
  50. /* _UIB-CODE-BLOCK-END */
  51. &ANALYZE-RESUME
  52. &ENDIF
  53. &IF DEFINED(EXCLUDE-writeLogFile) = 0 &THEN
  54. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD writeLogFile Procedure
  55. FUNCTION writeLogFile RETURNS LOGICAL
  56. ( ipMessage AS CHAR ) FORWARD.
  57. /* _UIB-CODE-BLOCK-END */
  58. &ANALYZE-RESUME
  59. &ENDIF
  60. /* *********************** Procedure Settings ************************ */
  61. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  62. /* Settings for THIS-PROCEDURE
  63. Type: Procedure
  64. Allow:
  65. Frames: 0
  66. Add Fields to: Neither
  67. Other Settings: CODE-ONLY COMPILE
  68. */
  69. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  70. /* ************************* Create Window ************************** */
  71. &ANALYZE-SUSPEND _CREATE-WINDOW
  72. /* DESIGN Window definition (used by the UIB)
  73. CREATE WINDOW Procedure ASSIGN
  74. HEIGHT = 15
  75. WIDTH = 61.4.
  76. /* END WINDOW DEFINITION */
  77. */
  78. &ANALYZE-RESUME
  79. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  80. /* *************************** Main Block *************************** */
  81. DEF VAR cMessage AS CHAR NO-UNDO.
  82. cLogName = DYNAMIC-FUNCTION('getLogName':U) NO-ERROR.
  83. cParam = SESSION:PARAMETER.
  84. ASSIGN
  85. cFirma = ENTRY(1, cParam, ';')
  86. iVonArtnr = INTEGER(ENTRY(2, cParam, ';'))
  87. iBisArtnr = INTEGER(ENTRY(3, cParam, ';'))
  88. iVonInhalt = INTEGER(ENTRY(4, cParam, ';'))
  89. iBisInhalt = INTEGER(ENTRY(5, cParam, ';'))
  90. iVonJahr = INTEGER(ENTRY(6, cParam, ';'))
  91. iBisJahr = INTEGER(ENTRY(7, cParam, ';')).
  92. cMessage = SUBSTITUTE('Start der Bestandeskorrektur am &1 um &2 für Firma &3', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS'), cFirma).
  93. cMessage = cMessage + SUBSTITUTE(' mit Parameter -> &1-&2 / &3-&4 / &5-&6' , iVonArtnr, iBisArtnr, iVonInhalt, iBisInhalt, iVonJahr, iBisJahr).
  94. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  95. RUN RECHNEN.
  96. cMessage = SUBSTITUTE('Ende der Bestandeskorrektur am &1 um &2 für Firma &3', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS'), cFirma).
  97. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  98. RUN KUNBESTBEREINIGEN.
  99. /* _UIB-CODE-BLOCK-END */
  100. &ANALYZE-RESUME
  101. /* ********************** Internal Procedures *********************** */
  102. &IF DEFINED(EXCLUDE-KUNBESTBEREINIGEN) = 0 &THEN
  103. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE KUNBESTBEREINIGEN Procedure
  104. PROCEDURE KUNBESTBEREINIGEN :
  105. /*------------------------------------------------------------------------------
  106. Purpose:
  107. Parameters: <none>
  108. Notes:
  109. ------------------------------------------------------------------------------*/
  110. FOR EACH KunBest
  111. WHERE KunBest.Firma = cFirma:
  112. FIND Artst NO-LOCK OF KunBest NO-ERROR.
  113. IF NOT AVAILABLE Artst THEN
  114. DO:
  115. DELETE KunBest.
  116. NEXT.
  117. END.
  118. IF NOT Artst.Aktiv THEN
  119. DO:
  120. DELETE KunBest.
  121. NEXT.
  122. END.
  123. IF Artst.Ausverk <> 9 THEN NEXT.
  124. DELETE KunBest.
  125. END.
  126. END PROCEDURE.
  127. /* _UIB-CODE-BLOCK-END */
  128. &ANALYZE-RESUME
  129. &ENDIF
  130. &IF DEFINED(EXCLUDE-RECHNEN) = 0 &THEN
  131. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE RECHNEN Procedure
  132. PROCEDURE RECHNEN :
  133. /*------------------------------------------------------------------------------
  134. Purpose:
  135. Parameters: <none>
  136. Notes:
  137. ------------------------------------------------------------------------------*/
  138. DEF VAR VInvBest AS DEC DECIMALS 4 NO-UNDO.
  139. DEF VAR VEingang AS DEC DECIMALS 4 NO-UNDO.
  140. DEF VAR VAusgang AS DEC DECIMALS 4 NO-UNDO.
  141. DEF VAR VDatum AS DATE NO-UNDO.
  142. DEF VAR nOldBestand AS DEC DECIMALS 4 NO-UNDO.
  143. DEF VAR cString AS CHAR NO-UNDO.
  144. DEF BUFFER bArtLager FOR ArtLager.
  145. DEF BUFFER bArtst FOR Artst .
  146. DEF BUFFER bArtbw FOR Artbw .
  147. DISABLE TRIGGERS FOR LOAD OF Artst .
  148. DISABLE TRIGGERS FOR LOAD OF ArtLager.
  149. FOR EACH bArtst NO-LOCK
  150. WHERE bArtst.Firma = cFirma
  151. AND bArtst.Artnr >= iVonArtnr
  152. AND bArtst.Artnr <= iBisArtnr
  153. AND bArtst.Inhalt >= iVonInhalt
  154. AND bArtst.Inhalt <= iBisInhalt
  155. AND bArtst.Jahr >= iVonJahr
  156. AND bArtst.Jahr <= iBisJahr:
  157. EMPTY TEMP-TABLE tBestand.
  158. FOR EACH bArtLager NO-LOCK
  159. WHERE bArtLager.Firma = cFirma
  160. AND bArtLager.Artnr = bArtst.Artnr
  161. AND bArtLager.Inhalt = bArtst.Inhalt
  162. AND bArtLager.Jahr = bArtst.Jahr:
  163. CREATE tBestand.
  164. ASSIGN
  165. tBestand.Lager = bArtLager.Lager
  166. tBestand.ilRecid = RECID(bArtLager)
  167. tBestand.iaRecid = RECID(bArtst)
  168. tBestand.Inv_Datum = bArtLager.Datum_Inv
  169. tBestand.iTrnr = 0.
  170. IF tBestand.Inv_Datum <> ? THEN
  171. DO:
  172. FOR EACH bArtbw NO-LOCK
  173. WHERE bArtbw.Firma = bArtst.Firma
  174. AND bArtbw.Artnr = bArtst.Artnr
  175. AND bArtbw.Inhalt = bArtst.Inhalt
  176. AND bArtbw.Jahr = bArtst.Jahr
  177. AND bArtbw.Lager = bArtLager.Lager
  178. AND bArtbw.Tr_Art = 21
  179. AND bArtbw.Datum = tBestand.Inv_Datum :
  180. IF bArtbw.Trnr > tBestand.iTrnr THEN tBestand.iTrnr = bArtbw.Trnr.
  181. END.
  182. END.
  183. IF tBestand.Inv_Datum = ? THEN
  184. DO:
  185. FIND FIRST bArtbw NO-LOCK USE-INDEX Artbw-k7
  186. WHERE bArtbw.Firma = bArtst.Firma
  187. AND bArtbw.Artnr = bArtst.Artnr
  188. AND bArtbw.Inhalt = bArtst.Inhalt
  189. AND bArtbw.Jahr = bArtst.Jahr
  190. AND bArtbw.Lager = bArtLager.Lager
  191. AND bArtbw.Tr_Art = 21 NO-ERROR.
  192. IF AVAILABLE bArtbw THEN tBestand.Inv_Datum = bArtbw.Datum.
  193. ELSE tBestand.Inv_Datum = 01/01/0001.
  194. IF AVAILABLE bArtbw AND
  195. bArtbw.Trnr < tBestand.iTrnr THEN tBestand.iTrnr = bArtbw.Trnr.
  196. END.
  197. END.
  198. FOR EACH tBestand:
  199. FOR EACH bArtbw NO-LOCK USE-INDEX Artbw-k2
  200. WHERE bArtbw.Firma = bArtst.Firma
  201. AND bArtbw.Artnr = bArtst.Artnr
  202. AND bArtbw.Inhalt = bArtst.Inhalt
  203. AND bArtbw.Jahr = bArtst.Jahr
  204. AND bArtbw.Lag_Buch = TRUE
  205. AND bArtbw.Lager = tBestand.Lager
  206. AND bArtbw.Datum >= tBestand.Inv_Datum:
  207. IF bArtbw.Datum = tBestand.Inv_Datum AND
  208. bArtbw.Tr_Art < 21 AND
  209. bArtbw.Trnr < tBestand.iTrnr THEN NEXT.
  210. DO WHILE TRUE:
  211. IF bArtbw.Tr_Art < 11 THEN
  212. DO:
  213. tBestand.Ausgang = tBestand.Ausgang + bArtbw.Menge.
  214. LEAVE.
  215. END.
  216. IF bArtbw.Tr_Art < 21 THEN
  217. DO:
  218. tBestand.Eingang = tBestand.Eingang + bArtbw.Menge.
  219. LEAVE.
  220. END.
  221. tBestand.Inv_Bestand = tBestand.Inv_Bestand + bArtbw.Menge.
  222. LEAVE.
  223. END.
  224. END.
  225. END.
  226. REPEAT TRANSACTION:
  227. FIND FIRST tBestand.
  228. FIND Artst EXCLUSIVE-LOCK
  229. WHERE RECID(Artst) = tBestand.iaRecid NO-WAIT NO-ERROR.
  230. IF NOT AVAILABLE Artst AND
  231. LOCKED Artst THEN
  232. DO:
  233. cString = SUBSTITUTE('Artst &1 ist in Zugriff', Artst.Artnr ).
  234. DYNAMIC-FUNCTION('writeLogFile':U, cString) NO-ERROR.
  235. NEXT.
  236. END.
  237. nOldBestand = Artst.Bestand.
  238. Artst.Bestand = 0.
  239. FOR EACH tBestand:
  240. FIND ArtLager EXCLUSIVE-LOCK
  241. WHERE RECID(ArtLager) = tBestand.ilRecid NO-WAIT NO-ERROR.
  242. IF NOT AVAILABLE ArtLager AND
  243. LOCKED ArtLager THEN
  244. DO:
  245. cString = SUBSTITUTE('ArtLager &1 ist in Zugriff', Artst.Artnr ).
  246. DYNAMIC-FUNCTION('writeLogFile':U, cString) NO-ERROR.
  247. NEXT.
  248. END.
  249. ASSIGN
  250. ArtLager.Inv_Best = tBestand.Inv_Bestand
  251. ArtLager.Eingang = tBestand.Eingang
  252. ArtLager.Ausgang = tBestand.Ausgang
  253. ArtLager.Bestand = tBestand.Inv_Bestand
  254. + tBestand.Eingang
  255. - tBestand.Ausgang.
  256. IF tBestand.Inv_Datum <> 01/01/0001 THEN ArtLager.Datum_Inv = tBestand.Inv_Datum.
  257. Artst.Bestand = Artst.Bestand + ArtLager.Bestand.
  258. RELEASE ArtLager.
  259. END.
  260. IF Artst.Bestand <> nOldBestand THEN
  261. DO:
  262. cString = SUBSTITUTE('&1;&2;&3', Artst.Artnr, Artst.Bestand, nOldBestand ).
  263. DYNAMIC-FUNCTION('writeLogFile':U, cString) NO-ERROR.
  264. END.
  265. RELEASE Artst.
  266. LEAVE.
  267. END.
  268. END.
  269. END PROCEDURE.
  270. /* _UIB-CODE-BLOCK-END */
  271. &ANALYZE-RESUME
  272. &ENDIF
  273. /* ************************ Function Implementations ***************** */
  274. &IF DEFINED(EXCLUDE-getLogName) = 0 &THEN
  275. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLogName Procedure
  276. FUNCTION getLogName RETURNS CHARACTER
  277. ( /* parameter-definitions */ ) :
  278. /*------------------------------------------------------------------------------
  279. Purpose:
  280. Notes:
  281. ------------------------------------------------------------------------------*/
  282. DEF VAR cPath AS CHAR NO-UNDO.
  283. GET-KEY-VALUE SECTION 'GrundEinstellungen'
  284. KEY 'Ge_MIS_LOGS'
  285. VALUE cPath.
  286. IF cPath = '' OR
  287. cPath = ? THEN cPath = SESSION:TEMP-DIRECTORY.
  288. IF SUBSTRING(cPath, LENGTH(cPath), 01) <> '/' AND
  289. SUBSTRING(cPath, LENGTH(cPath), 01) <> '\' THEN cPath = cPath + '\'.
  290. cPath = cPath
  291. + 'BestandesKorrektur.csv'.
  292. RETURN cPath.
  293. END FUNCTION.
  294. /* _UIB-CODE-BLOCK-END */
  295. &ANALYZE-RESUME
  296. &ENDIF
  297. &IF DEFINED(EXCLUDE-writeLogFile) = 0 &THEN
  298. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION writeLogFile Procedure
  299. FUNCTION writeLogFile RETURNS LOGICAL
  300. ( ipMessage AS CHAR ) :
  301. /*------------------------------------------------------------------------------
  302. Purpose:
  303. Notes:
  304. ------------------------------------------------------------------------------*/
  305. DEF VAR cString AS CHAR NO-UNDO.
  306. cString = SUBSTITUTE('&1', ipMessage).
  307. OUTPUT STREAM LogStream TO VALUE(cLogName) APPEND.
  308. PUT STREAM LogStream CONTROL cString CHR(10).
  309. OUTPUT STREAM LogStream CLOSE.
  310. RETURN TRUE.
  311. END FUNCTION.
  312. /* _UIB-CODE-BLOCK-END */
  313. &ANALYZE-RESUME
  314. &ENDIF