&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure /*------------------------------------------------------------------------ File : Purpose : Syntax : Description : Author(s) : Created : Notes : ----------------------------------------------------------------------*/ /* This .W file was created with the Progress AppBuilder. */ /*----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ DEF VAR cParam AS CHAR NO-UNDO. DEF VAR cFirma AS CHAR NO-UNDO. DEF VAR iVonArtnr AS INT NO-UNDO. DEF VAR iBisArtnr AS INT NO-UNDO. DEF VAR iVonInhalt AS INT NO-UNDO. DEF VAR iBisInhalt AS INT NO-UNDO. DEF VAR iVonJahr AS INT NO-UNDO. DEF VAR iBisJahr AS INT NO-UNDO. DEF VAR cBenutzer AS CHAR INIT 'Batch' NO-UNDO. DEF VAR cLogName AS CHAR NO-UNDO. DEF STREAM LogStream. DEF TEMP-TABLE tBestand FIELD Lager AS INT FIELD ilRecid AS RECID FIELD iaRecid AS RECID FIELD Inv_Datum AS DATE FIELD Inv_Bestand AS DEC FIELD Eingang AS DEC FIELD Ausgang AS DEC FIELD iTrnr AS INT . /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK /* ******************** Preprocessor Definitions ******************** */ &Scoped-define PROCEDURE-TYPE Procedure &Scoped-define DB-AWARE no /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* ************************ Function Prototypes ********************** */ &IF DEFINED(EXCLUDE-getLogName) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLogName Procedure FUNCTION getLogName RETURNS CHARACTER ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-writeLogFile) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD writeLogFile Procedure FUNCTION writeLogFile RETURNS LOGICAL ( ipMessage AS CHAR ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: Procedure Allow: Frames: 0 Add Fields to: Neither Other Settings: CODE-ONLY COMPILE */ &ANALYZE-RESUME _END-PROCEDURE-SETTINGS /* ************************* Create Window ************************** */ &ANALYZE-SUSPEND _CREATE-WINDOW /* DESIGN Window definition (used by the UIB) CREATE WINDOW Procedure ASSIGN HEIGHT = 15 WIDTH = 61.4. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure /* *************************** Main Block *************************** */ DEF VAR cMessage AS CHAR NO-UNDO. cLogName = DYNAMIC-FUNCTION('getLogName':U) NO-ERROR. cParam = SESSION:PARAMETER. ASSIGN cFirma = ENTRY(1, cParam, ';') iVonArtnr = INTEGER(ENTRY(2, cParam, ';')) iBisArtnr = INTEGER(ENTRY(3, cParam, ';')) iVonInhalt = INTEGER(ENTRY(4, cParam, ';')) iBisInhalt = INTEGER(ENTRY(5, cParam, ';')) iVonJahr = INTEGER(ENTRY(6, cParam, ';')) iBisJahr = INTEGER(ENTRY(7, cParam, ';')). cMessage = SUBSTITUTE('Start der Bestandeskorrektur am &1 um &2 für Firma &3', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS'), cFirma). cMessage = cMessage + SUBSTITUTE(' mit Parameter -> &1-&2 / &3-&4 / &5-&6' , iVonArtnr, iBisArtnr, iVonInhalt, iBisInhalt, iVonJahr, iBisJahr). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. RUN RECHNEN. cMessage = SUBSTITUTE('Ende der Bestandeskorrektur am &1 um &2 für Firma &3', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS'), cFirma). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. RUN KUNBESTBEREINIGEN. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &IF DEFINED(EXCLUDE-KUNBESTBEREINIGEN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE KUNBESTBEREINIGEN Procedure PROCEDURE KUNBESTBEREINIGEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ FOR EACH KunBest WHERE KunBest.Firma = cFirma: FIND Artst NO-LOCK OF KunBest NO-ERROR. IF NOT AVAILABLE Artst THEN DO: DELETE KunBest. NEXT. END. IF NOT Artst.Aktiv THEN DO: DELETE KunBest. NEXT. END. IF Artst.Ausverk <> 9 THEN NEXT. DELETE KunBest. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-RECHNEN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE RECHNEN Procedure PROCEDURE RECHNEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR VInvBest AS DEC DECIMALS 4 NO-UNDO. DEF VAR VEingang AS DEC DECIMALS 4 NO-UNDO. DEF VAR VAusgang AS DEC DECIMALS 4 NO-UNDO. DEF VAR VDatum AS DATE NO-UNDO. DEF VAR nOldBestand AS DEC DECIMALS 4 NO-UNDO. DEF VAR cString AS CHAR NO-UNDO. DEF BUFFER bArtLager FOR ArtLager. DEF BUFFER bArtst FOR Artst . DEF BUFFER bArtbw FOR Artbw . DISABLE TRIGGERS FOR LOAD OF Artst . DISABLE TRIGGERS FOR LOAD OF ArtLager. FOR EACH bArtst NO-LOCK WHERE bArtst.Firma = cFirma AND bArtst.Artnr >= iVonArtnr AND bArtst.Artnr <= iBisArtnr AND bArtst.Inhalt >= iVonInhalt AND bArtst.Inhalt <= iBisInhalt AND bArtst.Jahr >= iVonJahr AND bArtst.Jahr <= iBisJahr: EMPTY TEMP-TABLE tBestand. FOR EACH bArtLager NO-LOCK WHERE bArtLager.Firma = cFirma AND bArtLager.Artnr = bArtst.Artnr AND bArtLager.Inhalt = bArtst.Inhalt AND bArtLager.Jahr = bArtst.Jahr: CREATE tBestand. ASSIGN tBestand.Lager = bArtLager.Lager tBestand.ilRecid = RECID(bArtLager) tBestand.iaRecid = RECID(bArtst) tBestand.Inv_Datum = bArtLager.Datum_Inv tBestand.iTrnr = 0. IF tBestand.Inv_Datum <> ? THEN DO: FOR EACH bArtbw NO-LOCK WHERE bArtbw.Firma = bArtst.Firma AND bArtbw.Artnr = bArtst.Artnr AND bArtbw.Inhalt = bArtst.Inhalt AND bArtbw.Jahr = bArtst.Jahr AND bArtbw.Lager = bArtLager.Lager AND bArtbw.Tr_Art = 21 AND bArtbw.Datum = tBestand.Inv_Datum : IF bArtbw.Trnr > tBestand.iTrnr THEN tBestand.iTrnr = bArtbw.Trnr. END. END. IF tBestand.Inv_Datum = ? THEN DO: FIND FIRST bArtbw NO-LOCK USE-INDEX Artbw-k7 WHERE bArtbw.Firma = bArtst.Firma AND bArtbw.Artnr = bArtst.Artnr AND bArtbw.Inhalt = bArtst.Inhalt AND bArtbw.Jahr = bArtst.Jahr AND bArtbw.Lager = bArtLager.Lager AND bArtbw.Tr_Art = 21 NO-ERROR. IF AVAILABLE bArtbw THEN tBestand.Inv_Datum = bArtbw.Datum. ELSE tBestand.Inv_Datum = 01/01/0001. IF AVAILABLE bArtbw AND bArtbw.Trnr < tBestand.iTrnr THEN tBestand.iTrnr = bArtbw.Trnr. END. END. FOR EACH tBestand: FOR EACH bArtbw NO-LOCK USE-INDEX Artbw-k2 WHERE bArtbw.Firma = bArtst.Firma AND bArtbw.Artnr = bArtst.Artnr AND bArtbw.Inhalt = bArtst.Inhalt AND bArtbw.Jahr = bArtst.Jahr AND bArtbw.Lag_Buch = TRUE AND bArtbw.Lager = tBestand.Lager AND bArtbw.Datum >= tBestand.Inv_Datum: IF bArtbw.Datum = tBestand.Inv_Datum AND bArtbw.Tr_Art < 21 AND bArtbw.Trnr < tBestand.iTrnr THEN NEXT. DO WHILE TRUE: IF bArtbw.Tr_Art < 11 THEN DO: tBestand.Ausgang = tBestand.Ausgang + bArtbw.Menge. LEAVE. END. IF bArtbw.Tr_Art < 21 THEN DO: tBestand.Eingang = tBestand.Eingang + bArtbw.Menge. LEAVE. END. tBestand.Inv_Bestand = tBestand.Inv_Bestand + bArtbw.Menge. LEAVE. END. END. END. REPEAT TRANSACTION: FIND FIRST tBestand. FIND Artst EXCLUSIVE-LOCK WHERE RECID(Artst) = tBestand.iaRecid NO-WAIT NO-ERROR. IF NOT AVAILABLE Artst AND LOCKED Artst THEN DO: cString = SUBSTITUTE('Artst &1 ist in Zugriff', Artst.Artnr ). DYNAMIC-FUNCTION('writeLogFile':U, cString) NO-ERROR. NEXT. END. nOldBestand = Artst.Bestand. Artst.Bestand = 0. FOR EACH tBestand: FIND ArtLager EXCLUSIVE-LOCK WHERE RECID(ArtLager) = tBestand.ilRecid NO-WAIT NO-ERROR. IF NOT AVAILABLE ArtLager AND LOCKED ArtLager THEN DO: cString = SUBSTITUTE('ArtLager &1 ist in Zugriff', Artst.Artnr ). DYNAMIC-FUNCTION('writeLogFile':U, cString) NO-ERROR. NEXT. END. ASSIGN ArtLager.Inv_Best = tBestand.Inv_Bestand ArtLager.Eingang = tBestand.Eingang ArtLager.Ausgang = tBestand.Ausgang ArtLager.Bestand = tBestand.Inv_Bestand + tBestand.Eingang - tBestand.Ausgang. IF tBestand.Inv_Datum <> 01/01/0001 THEN ArtLager.Datum_Inv = tBestand.Inv_Datum. Artst.Bestand = Artst.Bestand + ArtLager.Bestand. RELEASE ArtLager. END. IF Artst.Bestand <> nOldBestand THEN DO: cString = SUBSTITUTE('&1;&2;&3', Artst.Artnr, Artst.Bestand, nOldBestand ). DYNAMIC-FUNCTION('writeLogFile':U, cString) NO-ERROR. END. RELEASE Artst. LEAVE. END. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* ************************ Function Implementations ***************** */ &IF DEFINED(EXCLUDE-getLogName) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLogName Procedure FUNCTION getLogName RETURNS CHARACTER ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cPath AS CHAR NO-UNDO. GET-KEY-VALUE SECTION 'GrundEinstellungen' KEY 'Ge_MIS_LOGS' VALUE cPath. IF cPath = '' OR cPath = ? THEN cPath = SESSION:TEMP-DIRECTORY. IF SUBSTRING(cPath, LENGTH(cPath), 01) <> '/' AND SUBSTRING(cPath, LENGTH(cPath), 01) <> '\' THEN cPath = cPath + '\'. cPath = cPath + 'BestandesKorrektur.csv'. RETURN cPath. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-writeLogFile) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION writeLogFile Procedure FUNCTION writeLogFile RETURNS LOGICAL ( ipMessage AS CHAR ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cString AS CHAR NO-UNDO. cString = SUBSTITUTE('&1', ipMessage). OUTPUT STREAM LogStream TO VALUE(cLogName) APPEND. PUT STREAM LogStream CONTROL cString CHR(10). OUTPUT STREAM LogStream CLOSE. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF