&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 - ADM2 &ANALYZE-RESUME {adecomm/appserv.i} &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 ObjRecordSet AS COM-HANDLE NO-UNDO. DEF VAR ObjConnection AS COM-HANDLE NO-UNDO. DEF VAR ObjCommand AS COM-HANDLE NO-UNDO. DEF VAR ODBC-DSN AS CHAR NO-UNDO. DEF VAR ODBC-SERVER AS CHAR NO-UNDO. DEF VAR ODBC-USERID AS CHAR NO-UNDO. DEF VAR ODBC-PASSWD AS CHAR NO-UNDO. DEF VAR ODBC-QUERY AS CHAR NO-UNDO. DEF VAR ODBC-STATUS AS CHAR NO-UNDO. DEF VAR ODBC-RECCOUNT AS INT NO-UNDO. DEF VAR ODBC-NULL AS CHAR NO-UNDO. DEF VAR ODBC-CURSOR AS INT NO-UNDO. DEF VAR fEnde AS LOG NO-UNDO. DEF VAR cTempName AS CHAR NO-UNDO. DEF VAR cTempDir AS CHAR NO-UNDO. DEF VAR cJournal AS CHAR NO-UNDO. DEF VAR WebString AS CHAR NO-UNDO. DEF VAR AllesOK AS LOG NO-UNDO. DEF VAR Sprcd AS INT NO-UNDO. DEF VAR LVAdx AS CHAR NO-UNDO EXTENT 15. DEF VAR LVAdy AS CHAR NO-UNDO EXTENT 15. DEF VAR cOrt AS CHAR NO-UNDO. DEF VAR Firma AS CHAR NO-UNDO INIT '9999'. DEF VAR GVFirma AS CHAR NO-UNDO INIT '9999'. DEF VAR ja AS LOG NO-UNDO. DEF VAR CrLf AS CHAR NO-UNDO. DEF VAR cMessage AS CHAR NO-UNDO. DEF STREAM LogStream. DEF STREAM Logfile. DEF TEMP-TABLE tMwstBetr FIELD Konto AS CHAR FIELD MwstCd AS INT FIELD MwstPfl AS DEC DECIMALS 2 FIELD MwstBet AS DEC DECIMALS 2 FIELD MwstAns AS DEC DECIMALS 2. DEF TEMP-TABLE tDebop FIELD DocType AS INT FIELD OpId AS CHAR FIELD KndNr AS INT FIELD Konto AS CHAR FIELD OpText AS CHAR FIELD OpDate AS DATE FIELD ZabId AS CHAR FIELD SortId AS CHAR FIELD Firma AS CHAR FIELD Zusatz1 AS CHAR FIELD Strasse AS CHAR FIELD Plz AS CHAR FIELD Ort AS CHAR FIELD Telefon1 AS CHAR FIELD Telefon4 AS CHAR FIELD EsrNr AS CHAR FIELD Sprache AS CHAR FIELD iStatus AS INT. /* DEF TEMP-TABLE TDebDet FIELD DocKey AS CHAR. */ DEF TEMP-TABLE TMwst FIELD MwstTyp AS CHAR FIELD MwstId AS CHAR. DEF TEMP-TABLE TZaKo FIELD ZabId AS CHAR FIELD ZabId2 AS CHAR. DEF TEMP-TABLE TDetail FIELD DocKey AS INT FIELD DocLine AS INT FIELD Konto AS CHAR FIELD cText AS CHAR FIELD MwstTyp AS CHAR FIELD Betrag AS DEC DECIMALS 2 FIELD BetragMwst AS DEC DECIMALS 2 FIELD BetragFW AS DEC DECIMALS 2 FIELD BuchTyp AS CHAR FIELD Kostenstelle AS CHAR FIELD cCode AS CHAR FIELD iStatus AS INT. DEF TEMP-TABLE TOpSaldo FIELD OpId AS CHAR FIELD PkNr AS INT FIELD Betrag AS DEC FIELD BetragFW AS DEC INDEX Kunde IS PRIMARY PkNr INDEX Faknr OpId. DEF TEMP-TABLE TBeleg FIELD OpID AS CHAR FIELD KndNr AS INT FIELD DocKey AS INT INDEX Faknr IS PRIMARY OpID. DEF TEMP-TABLE TBelegDetail FIELD DocKey AS INT FIELD DocLine AS INT INDEX DokNr IS PRIMARY DocKey. DEF TEMP-TABLE xDetail LIKE TDetail . DEF TEMP-TABLE xOpSaldo LIKE TOpSaldo. /* _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-cancelSQLTransaction) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD cancelSQLTransaction Procedure FUNCTION cancelSQLTransaction RETURNS LOGICAL ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CloseConnection) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD CloseConnection Procedure FUNCTION CloseConnection RETURNS LOGICAL ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-closeSQLTransaction) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD closeSQLTransaction Procedure FUNCTION closeSQLTransaction RETURNS LOGICAL ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CreateConnection) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD CreateConnection Procedure FUNCTION CreateConnection RETURNS LOGICAL ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CreateSetDaten) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD CreateSetDaten Procedure FUNCTION CreateSetDaten RETURNS CHARACTER ( iphBuffer AS HANDLE, ipArt AS INT ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-getDocKey) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDocKey Procedure FUNCTION getDocKey RETURNS INTEGER ( ipDocKey AS INT ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &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-getODBCDaten) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getODBCDaten Procedure FUNCTION getODBCDaten RETURNS LOGICAL ( iphBuffer AS HANDLE ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ifMwst) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD ifMwst Procedure FUNCTION ifMwst RETURNS LOGICAL ( ipMwstId AS CHAR ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ifZaKo) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD ifZaKo Procedure FUNCTION ifZaKo RETURNS LOGICAL ( ipZabId AS CHAR ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-lesenBeleg) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD lesenBeleg Procedure FUNCTION lesenBeleg RETURNS INTEGER ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-lesenBelegDetail) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD lesenBelegDetail Procedure FUNCTION lesenBelegDetail RETURNS INTEGER ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-lesenOpSaldo) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD lesenOpSaldo Procedure FUNCTION lesenOpSaldo RETURNS INTEGER ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-MAKE_DATUM) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD MAKE_DATUM Procedure FUNCTION MAKE_DATUM RETURNS DATE ( ipDatum AS CHAR ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-setTimeStamp) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setTimeStamp Procedure FUNCTION setTimeStamp RETURNS CHARACTER ( ipDatum AS DATE ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-startSQLTransaction) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD startSQLTransaction Procedure FUNCTION startSQLTransaction RETURNS LOGICAL ( /* parameter-definitions */ ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateBeleg) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD updateBeleg Procedure FUNCTION updateBeleg RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateBelegDetail) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD updateBelegDetail Procedure FUNCTION updateBelegDetail RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateMwstMap) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD updateMwstMap Procedure FUNCTION updateMwstMap RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateZabMap) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD updateZabMap Procedure FUNCTION updateZabMap RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) 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 APPSERVER */ &ANALYZE-RESUME _END-PROCEDURE-SETTINGS /* ************************* Create Window ************************** */ &ANALYZE-SUSPEND _CREATE-WINDOW /* DESIGN Window definition (used by the UIB) CREATE WINDOW Procedure ASSIGN HEIGHT = 10.86 WIDTH = 52.6. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure /* *************************** Main Block *************************** */ cTempName = '\\GEMHG\LogFiles$\SAGE\SageSpezial.log'. cJournal = REPLACE(cTempName, '.log', '.csv'). cMessage = 'Start Datentransfer Ge_MIS <-> SAGE '. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. ja = DYNAMIC-FUNCTION('CreateConnection':U) NO-ERROR. IF NOT ja THEN QUIT. /* RUN FUELLEN_MWST. RUN FUELLEN_ZAKOND. */ /* RUN FUELLEN_OP. */ /* Für Abgleich ende Jahr gemacht 07.01.2019 */ RUN LESEN_OFFENESALDI. /* RUN REORG_DB. */ DYNAMIC-FUNCTION('CloseConnection':U) NO-ERROR. cMessage = 'Ende Datentransfer Ge_MIS <-> SAGE ' + CHR(10). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. QUIT. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &IF DEFINED(EXCLUDE-FUELLEN_MWST) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE FUELLEN_MWST Procedure PROCEDURE FUELLEN_MWST : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR hTMwst AS HANDLE NO-UNDO. DEF VAR xx AS INT NO-UNDO. EMPTY TEMP-TABLE TMwst. hTMwst = BUFFER TMwst:HANDLE. FOR EACH MWSTAns NO-LOCK WHERE MWSTAns.Datum <= TODAY BREAK BY MWSTAns.MWST_Cd BY MWSTAns.Datum: IF NOT LAST-OF ( MWSTAns.MWST_Cd ) THEN NEXT. FIND FIRST Wust USE-INDEX Wust-k2 WHERE Wust.WuCd = MWSTAns.MWST_Cd NO-LOCK NO-ERROR. CREATE TMwst. ASSIGN TMwst.MwstTyp = STRING(MWSTAns.MWST_Cd,'99') TMwst.MwstId = ''. END. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. xx = 0. FOR EACH TMwst: ja = DYNAMIC-FUNCTION('ifMwst':U, INPUT TMwst.MwstId) NO-ERROR. IF ja = ? THEN NEXT. IF ja = TRUE THEN NEXT. /* DYNAMIC-FUNCTION('updateMwstMap':U, INPUT hTMwst, INPUT 1) NO-ERROR. */ END. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-FUELLEN_OP) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE FUELLEN_OP Procedure PROCEDURE FUELLEN_OP : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR htDebop AS HANDLE NO-UNDO. DEF VAR htDetail AS HANDLE NO-UNDO. DEF VAR xx AS INT NO-UNDO. DEF VAR cOrt AS CHAR NO-UNDO. DEF VAR dFakBetr AS DEC DECIMALS 2 NO-UNDO. DEF VAR BuchBetr AS DEC DECIMALS 2 NO-UNDO. DEF VAR Ansatz AS DEC NO-UNDO. DEF VAR Inkl AS LOG NO-UNDO. DEF VAR ii AS INT NO-UNDO. DEF VAR cString AS CHAR NO-UNDO. DEF VAR iDocKey AS INT NO-UNDO. DEF VAR cAdresse AS CHAR NO-UNDO. DEF VAR dMwst AS DEC NO-UNDO. DEF VAR lErst AS LOG NO-UNDO. DEF VAR lMwstAdd AS LOG NO-UNDO. DEF VAR nDiff AS DEC DECIMALS 2 NO-UNDO. DEF VAR cExport AS CHAR NO-UNDO. EMPTY TEMP-TABLE tDebop . EMPTY TEMP-TABLE tDetail . EMPTY TEMP-TABLE xDetail . EMPTY TEMP-TABLE xOpSaldo. htDebop = BUFFER tDebop :HANDLE. htDetail = BUFFER xDetail:HANDLE. CREATE xDetail. FIND Steuer WHERE Steuer.Firma = '1000' NO-LOCK. cMessage = ' Einlesen Daten aus SESAM gestartet'. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. xx = DYNAMIC-FUNCTION('lesenOpSaldo':U) NO-ERROR. cMessage = SUBSTITUTE(' Anzahl eingelesene verarbeitete Rechnungen aus SESAM -> &1 ', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. xx = DYNAMIC-FUNCTION('lesenBeleg':U) NO-ERROR. cMessage = SUBSTITUTE(' Anzahl eingelesene Belege aus SESAM -> &1 ', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. xx = DYNAMIC-FUNCTION('lesenBelegDetail':U) NO-ERROR. cMessage = SUBSTITUTE(' Anzahl eingelesene Beleg-Details aus SESAM -> &1 ', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. cMessage = ' Einlesen Daten aus SESAM beendet'. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. cMessage = ' '. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. cExport = SUBSTITUTE('%1Beleg.csv', cTempDir). OUTPUT TO VALUE(cExport) NO-MAP NO-CONVERT. FOR EACH tBeleg: EXPORT DELIMITER ';' tBeleg. END. OUTPUT CLOSE. cExport = SUBSTITUTE('%1BelegDetail.csv', cTempDir). OUTPUT TO VALUE(cExport) NO-MAP NO-CONVERT. FOR EACH tBelegDetail: EXPORT DELIMITER ';' tBelegDetail. END. OUTPUT CLOSE. xx = 0. FOR EACH Debop NO-LOCK WHERE Debop.Firma = '1000' AND Debop.Faknr >= 30000 AND ((Debop.Fakbetr <> 0 AND Debop.Saldo <> 0.0) OR (Debop.Fakbetr = 0)) , FIRST Adresse NO-LOCK WHERE Adresse.Firma = Debop.Firma AND Adresse.Knr = Debop.Knr : FIND FIRST tBeleg NO-LOCK WHERE tBeleg.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>')) NO-ERROR. IF AVAILABLE tBeleg THEN NEXT. IF Debop.Fakbetr = 0 THEN DO: dMwst = 0. DO ii = 1 TO 10: dMwst = dMwst + Debop.FakWpfl[ii]. END. IF dMwst = 0 THEN NEXT. END. FIND Orte OF Adresse NO-LOCK NO-ERROR. IF Adresse.Ort <> '' THEN cOrt = Adresse.Ort. ELSE IF AVAILABLE Orte THEN cOrt = Orte.Ort. ELSE cOrt = '??????????'. FIND Sprache OF Adresse NO-LOCK NO-ERROR. IF Adresse.Firma1 <> '' THEN cAdresse = TRIM(Adresse.Firma1). ELSE cAdresse = TRIM(Adresse.Name + ' ' + Adresse.Vorname). cAdresse = TRIM(SUBSTRING(cAdresse,01,30)). CREATE tDebop. ASSIGN tDebop.DocTyp = 0 tDebop.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>')) tDebop.KndNr = Debop.Knr tDebop.Konto = Debop.Konto tDebop.OpDate = Debop.Fakdat tDebop.ZabId = STRING(Debop.Kond,'99') tDebop.Firma = cAdresse tDebop.SortId = TRIM(SUBSTRING(Adresse.Suchbe ,01,10)) tDebop.Zusatz1 = TRIM(SUBSTRING(Adresse.Zusatz1,01,30)) tDebop.Strasse = TRIM(SUBSTRING(Adresse.Strasse,01,30)) tDebop.Plz = TRIM(SUBSTRING(Adresse.Plz ,01,06)) tDebop.Ort = TRIM(SUBSTRING(cOrt ,01,24)) tDebop.Telefon1 = TRIM(SUBSTRING(Adresse.Tel-1 ,01,20)) tDebop.Telefon4 = TRIM(SUBSTRING(Adresse.Tel-3 ,01,20)) tDebop.EsrNr = '' tDebop.Sprache = (IF AVAILABLE Sprache THEN SUBSTRING(Sprache.Bez,01,01) ELSE 'D') tDebop.iStatus = 9. . IF tDebop.Firma = '' THEN tDebop.Firma = TRIM(SUBSTRING((Adresse.NAME + ' ' + Adresse.Vorname),01,30)). dFakBetr = Debop.FakBetr. EMPTY TEMP-TABLE tMwstBetr. FOR EACH Interf NO-LOCK WHERE Interf.Firma = Steuer.Fwc09 AND Interf.TrNr1 = Debop.TrNr1 AND Interf.TrNr2 = Debop.TrNr2 AND Interf.Herk >= 50 AND Interf.Herk <= 59 AND Interf.MWSt_Art = 0 BREAK BY Interf.Firma BY Interf.TrNr1 BY Interf.TrNr2 BY Interf.Trnr : FIND FIRST tMwstBetr WHERE tMwstbetr.Konto = Interf.Kto2 AND tMwstbetr.MwstCd = Interf.Mwst_Cd NO-ERROR. IF NOT AVAILABLE tMwstBetr THEN DO: CREATE tMwstBetr. ASSIGN tMwstBetr.Konto = Interf.Kto2 tMwstBetr.MwstCd = Interf.Mwst_Cd tMwstBetr.MwstAns = Debop.Fakwpro[Interf.Mwst_Cd]. END. ASSIGN tMwstBetr.MwstPfl = tMwstBetr.MwstPfl + Interf.Betrag. IF NOT LAST-OF ( Interf.TrNr2 ) THEN NEXT. BuchBetr = 0. lMwstAdd = FALSE. FOR EACH tMwstBetr BREAK BY tMwstBetr.MwstCd: IF FIRST-OF ( tMwstBetr.MwstCd ) THEN BuchBetr = 0. BuchBetr = BuchBetr + tMwstBetr.MwstPfl. IF NOT LAST-OF ( tMwstBetr.MwstCd ) THEN NEXT. ii = tMwstBetr.MwstCd. IF ABS(Debop.FakWpfl[ii] - BuchBetr) < ABS(Debop.FakWpfl[ii] * 0.01) THEN DO. lMwstAdd = TRUE. LEAVE. END. END. /* lMwstAdd = TRUE --> Beim Betrag muss die Mwst dazugerechnet werden */ /* In der Schnittstelle werden nur Inklusiv-Beträge übermittelt */ IF lMwstAdd THEN DO: FOR EACH tMwstBetr : tMwstBetr.MwstPfl = tMwstBetr.MwstPfl * (100 + tMwstBetr.MwstAns) / 100. END. END. /* Different zwischen Fakbetr und einzelnen Buchungen errechnen */ /* Differenz auf dem Konto mit dem grössten Betrag ausgleichen */ Buchbetr = 0. FOR EACH tMwstBetr: tMwstBetr.MwstPfl = DECIMAL(STRING(tMwstBetr.MwstPfl,'999999999.99-')). BuchBetr = BuchBetr + tMwstBetr.MwstPfl. END. Buchbetr = DECIMAL(STRING(Buchbetr,'999999999.99-')). nDiff = dFakBetr - Buchbetr. FOR FIRST tMwstBetr BY tMwstBetr.MwstPfl DESCENDING: tMwstBetr.MwstPfl = tMwstBetr.MwstPfl + nDiff. END. ii = 0. FOR EACH tMwstBetr BY tMwstBetr.Konto BY tMwstBetr.MwstCd: ii = ii + 1. CREATE tDetail. ASSIGN tDetail.DocKey = Debop.Faknr tDetail.DocLine = ii tDetail.Konto = tMwstBetr.Konto tDetail.cText = '' tDetail.MwstTyp = STRING(tMwstBetr.MWStCd,'99') tDetail.Betrag = tMwstBetr.MwstPfl tDetail.BetragMwst = 0 tDetail.BetragFW = 0 tDetail.BuchTyp = '' tDetail.Kostenstelle = '' tDetail.cCode = '' tDetail.iStatus = 9. END. END. xx = xx + 1. END. cMessage = SUBSTITUTE(' Anzahl beruecksichtigte Rechnungen aus Ge_MIS -> &1', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. xx = 0. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. FOR EACH tDebop: FIND FIRST tBeleg WHERE tBeleg.OpId = tDebop.OpID NO-ERROR. IF AVAILABLE tBeleg THEN NEXT. ja = DYNAMIC-FUNCTION('updateBeleg':U, INPUT htDebop, INPUT 1) NO-ERROR. tDebop.iStatus = (IF ja THEN 1 ELSE 0). xx = xx + 1. IF xx MOD 100 = 0 THEN DO: DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. cMessage = SUBSTITUTE(' -> bereits eingefuegte Belege -> &1', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. ii = ETIME(TRUE). DO WHILE ETIME < 1000: END. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. END. FIND Debop NO-LOCK WHERE Debop.Firma = '1000' AND Debop.Knr = tDebop.KndNr AND Debop.Faknr = INTEGER(tDebop.OpId) NO-ERROR. CREATE tOpSaldo. ASSIGN tOpSaldo.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>')) tOpSaldo.PkNr = Debop.Knr tOpSaldo.Betrag = Debop.Saldo tOpSaldo.BetragFW = Debop.Saldo NO-ERROR. END. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. cMessage = SUBSTITUTE(' Anzahl eingefügte Belege -> &1', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. ii = ETIME(TRUE). DO WHILE ETIME < 1000: END. xx = DYNAMIC-FUNCTION('lesenBeleg':U) NO-ERROR. cMessage = SUBSTITUTE(' Anzahl eingelesene Belege aus SESAM nach Belegverbuchen -> &1', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. xx = 0. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. FOR EACH tDetail: FIND FIRST tBeleg WHERE tBeleg.OpId = TRIM(STRING(tDetail.DocKey,'>>>>>>>>')) NO-ERROR. IF NOT AVAILABLE tBeleg THEN NEXT. iDocKey = tBeleg.DocKey. FIND FIRST tBelegDetail WHERE tBelegDetail.DocKey = iDocKey AND tBelegDetail.DocLine = tDetail.DocLine NO-ERROR. IF AVAILABLE tBelegDetail THEN NEXT. FIND FIRST xDetail. BUFFER-COPY tDetail EXCEPT DocKey TO xDetail ASSIGN xDetail.DocKey = iDocKey. /* tDetail.DocKey = cDocKey. IF tDetail.DocKey = ? THEN NEXT. IF tDetail.DocKey = 0 THEN NEXT. ja = DYNAMIC-FUNCTION('ifBelegDetail':U, INPUT tDetail.DocKey, INPUT tDetail.DocLine) NO-ERROR. IF ja = ? THEN NEXT. IF ja = TRUE THEN NEXT. */ DYNAMIC-FUNCTION('updateBelegDetail':U, INPUT htDetail, INPUT 1) NO-ERROR. tDetail.iStatus = (IF ja THEN 1 ELSE 0). xx = xx + 1. IF xx MOD 100 = 0 THEN DO: DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. cMessage = SUBSTITUTE(' -> bereits eingefuegte BelegDetail -> &1', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. ii = ETIME(TRUE). DO WHILE ETIME < 500: END. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. END. END. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. cMessage = SUBSTITUTE(' Anzahl eingefuegte BelegDetail -> &1', xx). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. /* RUN loeschenDoppelteEintraege. */ OUTPUT TO VALUE(cJournal) NO-MAP NO-CONVERT. FOR EACH tDebop: PUT CONTROL tDebop.OpId ';' tDebop.KndNr ';' tDebop.Firma ';' tDebop.Zusatz ';' tDebop.Ort ';' tDebop.iStatus ';' tDebop.Konto ';'. lErst = TRUE. FIND FIRST tBeleg WHERE tBeleg.OpId = tDebop.OpId. FOR EACH tDetail WHERE tDetail.DocKey = INTEGER(tDebop.OpID): IF NOT lErst THEN PUT CONTROL ';;;;;;;'. PUT CONTROL tDetail.Konto ';' tDetail.cText ';' tDetail.MwstTyp ';' TRIM(STRING(tDetail.BetragMwst,'->>>>>>>>9.99')) ';' TRIM(STRING(tDetail.Betrag ,'->>>>>>>>9.99')) ';' tDetail.BuchTyp ';' tDetail.iStatus CHR(10). lErst = FALSE. END. END. OUTPUT CLOSE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-FUELLEN_ZAKOND) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE FUELLEN_ZAKOND Procedure PROCEDURE FUELLEN_ZAKOND : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR hTZaKo AS HANDLE NO-UNDO. DEF VAR xx AS INT NO-UNDO. EMPTY TEMP-TABLE TZaKo. hTZaKo = BUFFER TZaKo:HANDLE. FOR EACH Kondi NO-LOCK: CREATE TZaKo. ASSIGN TZaKo.ZabId = STRING(Kondi.Kond,'99') TZaKo.ZabId2 = ''. END. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. xx = 0. FOR EACH TZaKo: ja = DYNAMIC-FUNCTION('ifZaKo':U, INPUT TZaKo.ZabId) NO-ERROR. IF ja = ? THEN NEXT. IF ja = TRUE THEN NEXT. DYNAMIC-FUNCTION('updateZabMap':U, INPUT hTZaKo, INPUT 1) NO-ERROR. END. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-LESEN_OFFENESALDI) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE LESEN_OFFENESALDI Procedure PROCEDURE LESEN_OFFENESALDI : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR Saldo AS DEC NO-UNDO. DEF VAR Diff AS DEC NO-UNDO. DEF VAR cExport AS CHAR NO-UNDO. DEF BUFFER BDebst FOR Debst. DYNAMIC-FUNCTION('lesenOpSaldo':U) NO-ERROR. cExport = SUBSTITUTE('&1tOpSaldo.csv', cTempDir). OUTPUT TO VALUE(cExport) NO-MAP NO-CONVERT. FOR EACH tOpSaldo: EXPORT DELIMITER ';' tOpSaldo. END. OUTPUT CLOSE. FIND FIRST tOpSaldo NO-LOCK NO-ERROR. IF NOT AVAILABLE tOpSaldo THEN RETURN. FOR EACH Debst NO-LOCK: Saldo = 0. FOR EACH Debop USE-INDEX Debop-k1 WHERE Debop.Firma = Debst.Firma AND Debop.Knr = Debst.Knr AND Debop.Fakdat <= 12/31/2018: FIND FIRST tOpSaldo NO-LOCK USE-INDEX Faknr WHERE tOpSaldo.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>')) AND tOpSaldo.PkNr = Debst.Knr NO-ERROR. IF AVAILABLE tOpSaldo THEN Diff = Debop.Saldo - tOpSaldo.Betrag. ELSE Diff = (IF Debop.Fakdat < (TODAY - 3) THEN Debop.Saldo ELSE 0). IF Diff <> 0 THEN DO: Debop.ZahBetr = Debop.ZahBetr + Diff. Debop.Saldo = Debop.Fakbetr - Debop.Zahbetr - Debop.Skonto. Debop.Zahdat = TODAY. END. Saldo = Saldo + Debop.Saldo. IF Debop.Saldo <> 0 THEN NEXT. IF Debop.FakDat > (TODAY - 360) THEN NEXT. /* DELETE Debop. */ END. IF Saldo = Debst.Saldo THEN NEXT. FIND BDebst WHERE RECID(BDebst) = RECID(Debst) EXCLUSIVE-LOCK NO-WAIT NO-ERROR. IF NOT AVAILABLE BDebst THEN NEXT. BDebst.Saldo = Saldo. RELEASE BDebst. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-loeschenDoppelteEintraege) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loeschenDoppelteEintraege Procedure PROCEDURE loeschenDoppelteEintraege : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ OUTPUT TO "C:\Temp\Loeschen.log" APPEND NO-MAP NO-CONVERT. DEF VAR AnzRec AS INT NO-UNDO. DEF VAR cWhere AS CHAR NO-UNDO. DYNAMIC-FUNCTION('lesenBeleg':U). DO WHILE TRUE: FOR EACH TBeleg NO-LOCK BREAK BY TBeleg.OpID BY TBeleg.DocKey: IF FIRST-OF ( TBeleg.OpID ) THEN NEXT. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR. ODBC-QUERY = "DELETE FROM [Huber].[dbo].[BelegDetail] " + "WHERE DocKey = '" + STRING(TBeleg.DocKey) + "' ". PUT CONTROL ODBC-QUERY ' --> '. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. PUT CONTROL ODBC-NULL ' / ' ODBC-RECCOUNT CHR(10). ODBC-QUERY = "DELETE FROM [Huber].[dbo].[Beleg] " + "WHERE OpId = '" + TBeleg.OpId + "' ". PUT CONTROL ODBC-QUERY ' --> '. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. PUT CONTROL ODBC-NULL ' / ' ODBC-RECCOUNT CHR(10) CHR(10). DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR. END. LEAVE. END. OUTPUT CLOSE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-REORG_DB) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE REORG_DB Procedure PROCEDURE REORG_DB : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR AnzRec AS INT NO-UNDO. DEF VAR cWhere AS CHAR NO-UNDO. AnzRec = DYNAMIC-FUNCTION('lesenBeleg':U) NO-ERROR. cMessage = SUBSTITUTE('REORG OP&1Anzahl gelesene Records = &2', CHR(10), AnzRec). DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. /* DO WHILE TRUE: IF AnzRec = ? THEN LEAVE. IF AnzRec = 0 THEN LEAVE. FOR EACH TBeleg NO-LOCK: FIND Debop NO-LOCK USE-INDEX Debop-k1 WHERE Debop.Firma = '1000' AND Debop.Knr = TBeleg.KndNr AND Debop.Faknr = INTEGER(TBeleg.OpId) NO-ERROR. IF AVAILABLE Debop THEN NEXT. ODBC-QUERY = "DELETE FROM [Huber].[dbo].[BelegDetail] " + "WHERE DocKey = '" + STRING(TBeleg.DocKey) + "' ". PUT CONTROL ODBC-QUERY ' --> '. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) NO-ERROR. PUT CONTROL ODBC-NULL CHR(10) CHR(13). ODBC-QUERY = "DELETE FROM [Huber].[dbo].[Beleg] " + "WHERE OpId = '" + TBeleg.OpId + "' ". PUT CONTROL ODBC-QUERY ' --> '. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) NO-ERROR. PUT CONTROL ODBC-NULL CHR(10) CHR(13). END. LEAVE. END. AnzRec = DYNAMIC-FUNCTION('lesenBelegDetail':U) NO-ERROR. PUT CONTROL 'REORG DETAIL' CHR(10) CHR(13) 'Anzahl gelesene Records = ' STRING(AnzRec) CHR(10) CHR(13). DO WHILE TRUE: IF AnzRec = ? THEN LEAVE. IF AnzRec = 0 THEN LEAVE. FOR EACH TBelegDetail NO-LOCK: ODBC-QUERY = "SELECT [OpId] FROM [Huber].[dbo].[Beleg] " + "WHERE DocKey = '" + STRING(TBelegDetail.DocKey) + "' ". ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. IF ODBC-RECCOUNT <> ? AND ODBC-RECCOUNT <> 0 THEN NEXT. AnzRec = AnzRec + 1. ODBC-QUERY = "DELETE FROM [Huber].[dbo].[BelegDetail] " + "WHERE DocKey = '" + STRING(TBelegDetail.DocKey) + "' " + "AND DocLine = '" + STRING(TBelegDetail.DocLine) + "' " . PUT CONTROL ODBC-QUERY ' --> '. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) NO-ERROR. PUT CONTROL ODBC-NULL CHR(10) CHR(13). END. LEAVE. END. */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-RUNDEN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE RUNDEN Procedure PROCEDURE RUNDEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER Rundcode AS INT NO-UNDO. DEF INPUT-OUTPUT PARAMETER Rundbetr AS DEC DECIMALS 4 NO-UNDO. DEF VAR VBetr AS DEC DECIMALS 4 NO-UNDO. DEF VAR VOp AS DEC INIT 0.2 NO-UNDO. DEF VAR XPChar AS CHAR NO-UNDO. DO TRANSACTION: VBetr = Rundbetr. IF Rundcode = 1 THEN DO: VBetr = ROUND((VBetr / 100 * VOp), 4) / VOp * 100. END. IF Rundcode = 2 THEN DO: VBetr = ROUND((VBetr / 100), 3) * 100. END. IF Rundcode = 3 THEN DO: VBetr = VBetr + 0.0499. VBetr = ROUND((VBetr / 100), 3) * 100. END. IF Rundcode = 4 THEN DO: VBetr = VBetr - 0.0500. VBetr = ROUND((VBetr / 100), 3) * 100. END. IF Rundcode = 5 THEN DO: VBetr = ROUND((VBetr / 100), 2) * 100. END. IF Rundcode = 6 THEN DO: VBetr = VBetr + 0.4999. VBetr = ROUND((VBetr / 100), 2) * 100. END. IF Rundcode = 7 THEN DO: VBetr = VBetr - 0.5000. VBetr = ROUND((VBetr / 100), 2) * 100. END. IF Rundcode = 8 THEN DO: VBetr = ROUND((VBetr / 1000), 2) * 1000. END. IF Rundcode = 9 THEN DO: VBetr = VBetr + 4.9999. VBetr = ROUND((VBetr / 1000), 2) * 1000. END. IF Rundcode = 10 THEN DO: VBetr = VBetr - 5.0000. VBetr = ROUND((VBetr / 1000), 2) * 1000. END. IF Rundcode = 99 THEN DO: XPChar = STRING(VBetr,"-99999999.999"). VBetr = DECIMAL(SUBSTRING(XPChar,01,12)). IF SUBSTRING(XPChar,13,01) > "4" THEN VBetr = VBetr + 0.01. END. Rundbetr = VBetr. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-SEND_WEBREQUEST) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE SEND_WEBREQUEST Procedure PROCEDURE SEND_WEBREQUEST : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR hWebserver AS HANDLE NO-UNDO. DEF VAR cConn AS CHAR NO-UNDO. DEF VAR fio AS LOG NO-UNDO. DEF VAR cWebHost AS CHAR NO-UNDO INIT '192.168.99.10'. DEF VAR cWebPort AS CHAR NO-UNDO INIT '8080'. DEF VAR cWebHead AS CHAR NO-UNDO INIT 'webspeed/cgi'. DEF VAR cWebPath AS CHAR NO-UNDO INIT 'cgiip.exe/WService=wsEShop/'. DEF VAR vparam AS CHAR NO-UNDO. DEF VAR vURL AS CHAR NO-UNDO. DEF VAR Aufnr AS INT NO-UNDO. DEF VAR vBuff AS MEMPTR NO-UNDO. DEF VAR cc AS INT NO-UNDO. DEF VAR dd AS INT NO-UNDO. DEF VAR cURL AS CHAR NO-UNDO. DEF VAR iTime AS INT NO-UNDO. DEF VAR xTime AS INT NO-UNDO. CrLf = CHR(10)+ CHR(13). CREATE SOCKET hWebserver. hWebserver:SET-READ-RESPONSE-PROCEDURE('lesenWebantwort'). cConn = '-H ' + cWebHost + ' -S ' + cWebPort. fio = hWebserver:CONNECT(cConn) NO-ERROR. IF NOT fio OR hWebserver:CONNECTED() = FALSE THEN DO: MESSAGE 'Kein Verbindung zu Webserver' view-as alert-box. hWebserver:DISCONNECT() NO-ERROR. DELETE OBJECT hWebserver NO-ERROR. RETURN. END. cWebHead = cWebHost + ':' + cWebPort + '/' + cWebHead. vParam = 'ipFrom=SESAM&ipTo=walter.riechsteiner@adprime.ch&ipCC=&ipBC=&ipSubject=SESAM-Meldung&ipBody=Anhang mit SESAM-Logfile&ipAttach='. vURL = 'http://' + cWebHead + '/' + cWebPath + '/send_mail.p'. WebString = ''. vURL = 'POST ' + vURL + ' HTTP/1.0' + CrLf + 'Content-Type: application/x-www-form-urlencoded' + CrLf + 'Content-Length:' + STRING(LENGTH(vParam)) + CrLf + CrLf + vParam + CrLf. SET-SIZE(vBuff) = 0. SET-SIZE(vBuff) = LENGTH(vURL) + 1. SET-BYTE-ORDER(vBuff) = BIG-ENDIAN. PUT-STRING(vBuff,1) = vURL. cURl = REPLACE(vURL, CHR(10), '->'). cURl = REPLACE(cURL, CHR(13), ''). iTime = ETIME(FALSE). DO WHILE (ETIME - iTime) < 30000: hWebserver:WRITE(vBuff, 1, LENGTH(vURL)) NO-ERROR. IF ERROR-STATUS:ERROR THEN NEXT. DO WHILE hWebserver:BYTES-WRITTEN < LENGTH(vURL): xTime = ETIME(FALSE). DO WHILE (ETIME - xTime) < 1000: END. END. DO WHILE hWebserver:GET-BYTES-AVAILABLE() > 0: xTime = ETIME(FALSE). DO WHILE (ETIME(FALSE) - xTime) < 1000: END. END. LEAVE. END. SET-SIZE(vBuff) = 0. MESSAGE 'io' view-as alert-box. hWebserver:DISCONNECT() NO-ERROR. DELETE OBJECT hWebserver NO-ERROR. /* http://192.168.99.10:8080/webspeed/cgi/cgiip.exe/WService=wsEShop/ */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* ************************ Function Implementations ***************** */ &IF DEFINED(EXCLUDE-cancelSQLTransaction) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION cancelSQLTransaction Procedure FUNCTION cancelSQLTransaction RETURNS LOGICAL ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ ODBC-QUERY = 'ROLLBACK'. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ). END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CloseConnection) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION CloseConnection Procedure FUNCTION CloseConnection RETURNS LOGICAL ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ ObjConnection:Close NO-ERROR. RELEASE OBJECT ObjConnection NO-ERROR. RELEASE OBJECT ObjCommand NO-ERROR. RELEASE OBJECT ObjRecordSet NO-ERROR. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-closeSQLTransaction) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION closeSQLTransaction Procedure FUNCTION closeSQLTransaction RETURNS LOGICAL ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ ODBC-QUERY = 'COMMIT'. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ). END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CreateConnection) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION CreateConnection Procedure FUNCTION CreateConnection RETURNS LOGICAL ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cConnCommand AS CHAR NO-UNDO. DEF VAR cDSN AS CHAR NO-UNDO. DEF VAR cServer AS CHAR NO-UNDO. DEF VAR ix AS INT NO-UNDO. DEF VAR ii AS INT NO-UNDO. DEF VAR cMessage AS CHAR NO-UNDO. Create "ADODB.Connection" ObjConnection NO-ERROR. Create "ADODB.RecordSet" ObjRecordSet NO-ERROR. Create "ADODB.Command" ObjCommand NO-ERROR. GET-KEY-VALUE SECTION 'Grundeinstellungen' KEY 'SQLServer' VALUE cServer. IF cServer = ? THEN RETURN FALSE. IF cServer = '' THEN RETURN FALSE. GET-KEY-VALUE SECTION 'Grundeinstellungen' KEY 'SQLDSN' VALUE cDSN. IF cDSN = ? THEN RETURN FALSE. IF cDSN = '' THEN RETURN FALSE. ASSIGN ODBC-STATUS = '' ODBC-NULL = '' ODBC-DSN = cDSN ODBC-SERVER = cServer ODBC-USERID = 'gebtools' ODBC-PASSWD = 'gebtools' ODBC-QUERY = ''. cConnCommand = 'data source=' + ODBC-DSN + ';server=' + ODBC-SERVER . ObjConnection:Open ( cConnCommand, ODBC-USERID, ODBC-PASSWD, 0 ) NO-ERROR. If ( ERROR-STATUS:NUM-MESSAGES > 0 ) THEN DO: ii = ERROR-STATUS:NUM-MESSAGES. ODBC-STATUS = "Error: keine Verbindung zu Datenserver " + cConnCommand. cMessage = ODBC-STATUS. DO ix = 1 TO ii: cMessage = cMessage + CHR(10) + ERROR-STATUS:GET-MESSAGE(ix). END. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. RETURN FALSE. END. ASSIGN ObjCommand:ActiveConnection = ObjConnection ObjCommand:CommandType = 1 /* adCmdText */ ObjConnection:CursorLocation = 3 /* adUseClient */ ObjRecordSet:CursorType = 3 /* adOpenStatic */. cMessage = 'Start SESAM SQL mit Connection ' + cConnCommand. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-CreateSetDaten) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION CreateSetDaten Procedure FUNCTION CreateSetDaten RETURNS CHARACTER ( iphBuffer AS HANDLE, ipArt AS INT ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cSet AS CHAR NO-UNDO. DEF VAR ii AS INT NO-UNDO. DEF VAR hFeld AS HANDLE NO-UNDO. DEF VAR cFeld AS CHAR NO-UNDO. DEF VAR cInhalt AS CHAR NO-UNDO. DEF VAR cFelder AS CHAR NO-UNDO. DEF VAR cInhalte AS CHAR NO-UNDO. DEF VAR xFeld AS CHAR NO-UNDO. DEF VAR xInhalt AS CHAR NO-UNDO. cSet = ''. cFelder = ''. cInhalte = ''. DO ii = 1 TO iphBuffer:NUM-FIELDS: hFeld = iphBuffer:BUFFER-FIELD(ii). IF hFeld:BUFFER-VALUE(0) = ? THEN NEXT. cFeld = hFeld:NAME. IF cFeld = 'cCode' THEN cFeld = 'Code'. /* ProgressSchlüsselFeld */ IF cFeld = 'cText' THEN cFeld = 'Text'. /* ProgressSchlüsselFeld */ IF cFeld = 'iStatus' THEN NEXT. /* Kein SQL-Feld */ DO WHILE TRUE: IF hFeld:BUFFER-VALUE(0) <> ? AND hFeld:BUFFER-VALUE(0) <> '?' THEN LEAVE. CASE hFeld:DATA-TYPE: WHEN 'INTEGER' THEN hFeld:BUFFER-VALUE(0) = '0'. WHEN 'DECIMAL' THEN hFeld:BUFFER-VALUE(0) = '0.0'. WHEN 'DATE' THEN hFeld:BUFFER-VALUE(0) = ''. WHEN 'LOGICAL' THEN hFeld:BUFFER-VALUE(0) = STRING(FALSE). OTHERWISE hFeld:BUFFER-VALUE(0) = ''. END CASE. LEAVE. END. xFeld = "[" + TRIM(cFeld) + "]". xInhalt = TRIM(hFeld:BUFFER-VALUE(0)). xInhalt = REPLACE(xInhalt, "'", '"'). xInhalt = "'" + xInhalt + "'". cInhalte = cInhalte + "," + xInhalt. cFelder = cFelder + "," + xFeld. END. cInhalte = SUBSTRING(cInhalte,02). cFelder = SUBSTRING(cFelder ,02). CASE ipArt: WHEN 1 THEN DO: cSet = '(' + cFelder + ') VALUES (' + cInhalte + ')'. END. WHEN 0 THEN DO: cSet = 'SET '. DO ii = 1 TO NUM-ENTRIES(cFelder, ','): cSet = cSet + ENTRY(ii, cFelder, ',') + ' = ' + ENTRY(ii, cInhalte, ','). IF ii < NUM-ENTRIES(cFelder, ',') THEN cSet = cSet + ', '. END. END. END CASE. RETURN cSet. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-getDocKey) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDocKey Procedure FUNCTION getDocKey RETURNS INTEGER ( ipDocKey AS INT ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR iDocKey AS INT NO-UNDO. iDocKey = ipDocKey. ODBC-QUERY = "SELECT [DocKey] FROM [Huber].[dbo].[Beleg] " + "WHERE OpId = '" + STRING(ipDocKey,'999999') + "' ". ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. DO WHILE TRUE: IF ODBC-RECCOUNT = 0 THEN LEAVE. IF ODBC-RECCOUNT = ? THEN LEAVE. ObjRecordSet:MoveFirst NO-ERROR. iDocKey = ObjRecordSet:FIELDS("DocKey"):VALUE. LEAVE. END. RETURN iDocKey. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &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 'SESAM_SQL_LOG' 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 + 'SESAMSQL-' + REPLACE(STRING(TODAY,'99.99.9999'), '.', '') + '.Log'. RETURN cPath. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-getODBCDaten) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getODBCDaten Procedure FUNCTION getODBCDaten RETURNS LOGICAL ( iphBuffer AS HANDLE ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR ii AS INT NO-UNDO. DEF VAR hFeld AS HANDLE NO-UNDO. DEF VAR cFeld AS CHAR NO-UNDO. DO ii = 1 TO iphBuffer:NUM-FIELDS: hFeld = iphBuffer:BUFFER-FIELD(ii). cFeld = hFeld:NAME. hFeld:BUFFER-VALUE(0) = ObjRecordSet:FIELDS(cFeld):VALUE NO-ERROR. END. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ifMwst) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION ifMwst Procedure FUNCTION ifMwst RETURNS LOGICAL ( ipMwstId AS CHAR ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ ODBC-QUERY = "SELECT MwstId " + "FROM [Huber].[dbo].[MwstMap] WHERE MwstId = '" + ipMwstId + "' ". ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, '', 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. IF ODBC-RECCOUNT = ? THEN ODBC-RECCOUNT = 0. IF ODBC-RECCOUNT = 0 THEN RETURN FALSE. ELSE RETURN TRUE . END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ifZaKo) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION ifZaKo Procedure FUNCTION ifZaKo RETURNS LOGICAL ( ipZabId AS CHAR ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ ODBC-QUERY = "SELECT ZabId " + "FROM [Huber].[dbo].[ZabMap] WHERE ZabId = '" + ipZabId + "' ". ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, '', 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. IF ODBC-RECCOUNT = ? THEN ODBC-RECCOUNT = 0. IF ODBC-RECCOUNT = 0 THEN RETURN FALSE. ELSE RETURN TRUE . END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-lesenBeleg) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION lesenBeleg Procedure FUNCTION lesenBeleg RETURNS INTEGER ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ EMPTY TEMP-TABLE tBeleg. ODBC-QUERY = 'SELECT [OpId],[KndNr],[DocKey] FROM [Huber].[dbo].[Beleg]'. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. DO WHILE TRUE: IF ODBC-RECCOUNT = 0 THEN LEAVE. IF ODBC-RECCOUNT = ? THEN LEAVE. ODBC-CURSOR = 0. ObjRecordSet:MoveFirst NO-ERROR. DO WHILE ODBC-CURSOR < ODBC-RECCOUNT: CREATE tBeleg. ASSIGN tBeleg.Opid = ObjRecordSet:FIELDS("OpId") :VALUE tBeleg.KndNr = ObjRecordSet:FIELDS("KndNr") :VALUE. tBeleg.DocKey = ObjRecordSet:FIELDS("DocKey"):VALUE. ASSIGN ODBC-CURSOR = ODBC-CURSOR + 1. ObjRecordSet:MoveNext NO-ERROR. END. LEAVE. END. RETURN ODBC-RECCOUNT. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-lesenBelegDetail) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION lesenBelegDetail Procedure FUNCTION lesenBelegDetail RETURNS INTEGER ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ EMPTY TEMP-TABLE TBelegDetail. ODBC-QUERY = 'SELECT [DocKey],[DocLine] FROM [Huber].[dbo].[BelegDetail]'. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. DO WHILE TRUE: IF ODBC-RECCOUNT = 0 THEN LEAVE. IF ODBC-RECCOUNT = ? THEN LEAVE. ODBC-CURSOR = 0. ObjRecordSet:MoveFirst NO-ERROR. DO WHILE ODBC-CURSOR < ODBC-RECCOUNT: CREATE TBelegDetail. ASSIGN TBelegDetail.DocKey = ObjRecordSet:FIELDS("DocKey") :VALUE TBelegDetail.DocLine = ObjRecordSet:FIELDS("DocLine"):VALUE. ASSIGN ODBC-CURSOR = ODBC-CURSOR + 1. ObjRecordSet:MoveNext NO-ERROR. END. LEAVE. END. RETURN ODBC-RECCOUNT. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-lesenOpSaldo) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION lesenOpSaldo Procedure FUNCTION lesenOpSaldo RETURNS INTEGER ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ EMPTY TEMP-TABLE TOpSaldo. /* FOR EACH xOpSaldo: CREATE tOpSaldo. BUFFER-COPY xOpSaldo TO tOpSaldo. END. */ ODBC-QUERY = "SELECT * FROM [Huber].[dbo].[OpListe] WHERE OpId > '300000' ". ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 ) ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR. DO WHILE TRUE: IF ODBC-RECCOUNT = 0 THEN LEAVE. IF ODBC-RECCOUNT = ? THEN LEAVE. ODBC-CURSOR = 0. ObjRecordSet:MoveFirst NO-ERROR. DO WHILE ODBC-CURSOR < ODBC-RECCOUNT: CREATE TOpSaldo. ASSIGN TOpSaldo.Opid = ObjRecordSet:FIELDS("OpId") :VALUE TOpSaldo.PkNr = ObjRecordSet:FIELDS("PkNr") :VALUE TOpSaldo.Betrag = ObjRecordSet:FIELDS("Betrag") :VALUE TOpSaldo.BetragFW = ObjRecordSet:FIELDS("BetragFW"):VALUE. ASSIGN ODBC-CURSOR = ODBC-CURSOR + 1. ObjRecordSet:MoveNext NO-ERROR. END. LEAVE. END. RETURN ODBC-RECCOUNT. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-MAKE_DATUM) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION MAKE_DATUM Procedure FUNCTION MAKE_DATUM RETURNS DATE ( ipDatum AS CHAR ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cDatum AS CHAR NO-UNDO. DEF VAR dDatum AS DATE NO-UNDO INIT ?. cDatum = TRIM(SUBSTRING(ipDatum,01,10)). IF cDatum = '' THEN cDatum = STRING(YEAR (TODAY),'9999') + '-' + STRING(MONTH(TODAY),'99') + '-' + STRING(DAY (TODAY),'99'). dDatum = DATE(INTEGER(SUBSTRING(cDatum,06,02)), INTEGER(SUBSTRING(cDatum,09,02)), INTEGER(SUBSTRING(cDatum,01,04))) NO-ERROR. IF dDatum = ? THEN dDatum = TODAY. RETURN dDatum. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-setTimeStamp) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setTimeStamp Procedure FUNCTION setTimeStamp RETURNS CHARACTER ( ipDatum AS DATE ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cDate AS CHAR NO-UNDO. cDate = STRING(YEAR (TODAY),'9999') + '-' + STRING(MONTH(TODAY),'99') + '-' + STRING(DAY (TODAY),'99') + ' ' + STRING(TIME,'HH:MM:SS'). RETURN cDate. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-startSQLTransaction) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION startSQLTransaction Procedure FUNCTION startSQLTransaction RETURNS LOGICAL ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ ODBC-QUERY = 'BEGIN TRANSACTION'. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ). END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateBeleg) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION updateBeleg Procedure FUNCTION updateBeleg RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cSet AS CHAR NO-UNDO. DEF VAR hFeld AS HANDLE NO-UNDO. DEF VAR cFeld AS CHAR NO-UNDO. cSet = DYNAMIC-FUNCTION('CreateSetDaten':U, INPUT ipTHandle, INPUT ipArt) NO-ERROR. hFeld = ipTHandle:BUFFER-FIELD('OpId'). cFeld = hFeld:BUFFER-VALUE(0). IF ipArt = 1 THEN DO: /* INSERT */ ODBC-QUERY = "INSERT INTO [Huber].[dbo].[Beleg] " + cSet. END. IF ipArt = 0 THEN DO: /* UPDATE */ ODBC-QUERY = "UPDATE [Huber].[dbo].[Beleg] " + cSet + " WHERE OpId = '" + cFeld + "' ". END. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE(OUTPUT ODBC-NULL, "", 32) NO-ERROR. IF ODBC-NULL <> '1' THEN DO: OUTPUT TO VALUE(cTempName) NO-MAP NO-CONVERT APPEND. PUT CONTROL 'Fehler ' ODBC-NULL ' bei ' ODBC-QUERY CHR(10). OUTPUT CLOSE. RETURN FALSE. END. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateBelegDetail) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION updateBelegDetail Procedure FUNCTION updateBelegDetail RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cSet AS CHAR NO-UNDO. DEF VAR hFeld AS HANDLE NO-UNDO. DEF VAR cFaknr AS CHAR NO-UNDO. DEF VAR cIndex AS CHAR NO-UNDO. cSet = DYNAMIC-FUNCTION('CreateSetDaten':U, INPUT ipTHandle, INPUT ipArt) NO-ERROR. hFeld = ipTHandle:BUFFER-FIELD('DocKey'). cFaknr = hFeld:BUFFER-VALUE(0). hFeld = ipTHandle:BUFFER-FIELD('DocLine'). cIndex = hFeld:BUFFER-VALUE(0). IF ipArt = 1 THEN DO: /* INSERT */ ODBC-QUERY = "INSERT INTO [Huber].[dbo].[BelegDetail] " + cSet. END. IF ipArt = 0 THEN DO: /* UPDATE */ ODBC-QUERY = "UPDATE [Huber].[dbo].[BelegDetail] " + cSet + " WHERE DocKey = '" + cFaknr + "' " + "AND DocLine = '" + cIndex + "'". END. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) NO-ERROR. IF ODBC-NULL <> '1' THEN DO: OUTPUT TO VALUE(cTempName) NO-MAP NO-CONVERT APPEND. PUT CONTROL 'Fehler ' ODBC-NULL ' bei ' ODBC-QUERY CHR(10). OUTPUT CLOSE. RETURN FALSE. END. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateMwstMap) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION updateMwstMap Procedure FUNCTION updateMwstMap RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cSet AS CHAR NO-UNDO. DEF VAR hFeld AS HANDLE NO-UNDO. DEF VAR cFeld AS CHAR NO-UNDO. cSet = DYNAMIC-FUNCTION('CreateSetDaten':U, INPUT ipTHandle, INPUT ipArt) NO-ERROR. hFeld = ipTHandle:BUFFER-FIELD('MwstId'). cFeld = hFeld:BUFFER-VALUE(0). IF ipArt = 1 THEN DO: /* INSERT */ ODBC-QUERY = "INSERT INTO [Huber].[dbo].[MwstMap] " + cSet. END. IF ipArt = 0 THEN DO: /* UPDATE */ ODBC-QUERY = "UPDATE [Huber].[dbo].[MwstMap] " + cSet + " WHERE MwstId = '" + cFeld + "'". END. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) NO-ERROR. IF ODBC-NULL <> '1' THEN DO: OUTPUT TO VALUE(cTempName) NO-MAP NO-CONVERT APPEND. PUT CONTROL 'Fehler ' ODBC-NULL ' bei ' ODBC-QUERY CHR(10). OUTPUT CLOSE. RETURN FALSE. END. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-updateZabMap) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION updateZabMap Procedure FUNCTION updateZabMap RETURNS LOGICAL ( ipTHandle AS HANDLE, ipArt AS INT ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEF VAR cSet AS CHAR NO-UNDO. DEF VAR hFeld AS HANDLE NO-UNDO. DEF VAR cFeld AS CHAR NO-UNDO. cSet = DYNAMIC-FUNCTION('CreateSetDaten':U, INPUT ipTHandle, INPUT ipArt) NO-ERROR. hFeld = ipTHandle:BUFFER-FIELD('ZabId'). cFeld = hFeld:BUFFER-VALUE(0). IF ipArt = 1 THEN DO: /* INSERT */ ODBC-QUERY = "INSERT INTO [Huber].[dbo].[ZabMap] " + cSet. END. IF ipArt = 0 THEN DO: /* UPDATE */ ODBC-QUERY = "UPDATE [Huber].[dbo].[ZabMap] " + cSet + " WHERE ZabId = '" + cFeld + "'". END. ASSIGN ObjCommand:CommandText = ODBC-QUERY ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ) NO-ERROR. IF ODBC-NULL <> '1' THEN DO: OUTPUT TO VALUE(cTempName) NO-MAP NO-CONVERT APPEND. PUT CONTROL 'Fehler ' ODBC-NULL ' bei ' ODBC-QUERY CHR(10). OUTPUT CLOSE. RETURN FALSE. END. RETURN TRUE. 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 &2 -> &3', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS'), ipMessage). OUTPUT STREAM LogStream TO VALUE(cTempName) APPEND. PUT STREAM LogStream CONTROL cString CHR(10). OUTPUT STREAM LogStream CLOSE. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF