&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 ************************** */ DEFINE VARIABLE iTrNr1 AS INTEGER NO-UNDO. DEFINE VARIABLE iTrNr2 AS INTEGER NO-UNDO. DEFINE VARIABLE iTrans AS INTEGER NO-UNDO. DEFINE VARIABLE nBetrag AS INTEGER NO-UNDO. DEFINE VARIABLE iFaknr AS INTEGER NO-UNDO. DEFINE VARIABLE cRetVal AS CHARACTER NO-UNDO. DEFINE VARIABLE cBuchtext1 AS CHARACTER NO-UNDO. DEFINE VARIABLE cBuchtext2 AS CHARACTER NO-UNDO. DEFINE VARIABLE D1Firma AS CHARACTER NO-UNDO. DEFINE BUFFER bZahlung FOR Zahlung . DEFINE BUFFER bAdresse FOR Adresse . DEFINE BUFFER bDebop FOR Debop . DEFINE BUFFER bDebza FOR Debza . DEFINE BUFFER bDebhi FOR Debhi . DEFINE BUFFER bDebst FOR Debst . DEFINE BUFFER bDebwu FOR Debwu . DEFINE BUFFER bTransNr FOR TransNr . DEFINE BUFFER bSteuer FOR Steuer . DEFINE BUFFER bSteuNr FOR SteuNr . DEFINE TEMP-TABLE tDebop NO-UNDO LIKE Debop FIELD SkMax_Frw AS DEC FIELD SkMax AS DEC FIELD ZaKonto AS CHAR. DEFINE VARIABLE htDebop AS HANDLE NO-UNDO. htDebop = TEMP-TABLE tDebop:DEFAULT-BUFFER-HANDLE. DEFINE TEMP-TABLE WFile FIELD Kto1 AS CHARACTER FIELD Kto2 AS CHARACTER FIELD Betrag AS DECIMAL FIELD Betrag_Frw AS DECIMAL FIELD MWST_Cd AS INTEGER FIELD Frw AS CHARACTER FIELD Kurs AS DECIMAL DECIMALS 8 FIELD Faktor AS INTEGER FIELD KD_Fl AS LOG INIT FALSE. DEFINE TEMP-TABLE tZahInterf NO-UNDO LIKE Interf. { incl/tmwstcalc.i } /* _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-calculateMwstFaktura) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculateMwstFaktura Procedure FUNCTION calculateMwstFaktura RETURNS LOGICAL ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstCalc, OUTPUT opcMessage AS CHARACTER ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-calculateMwstZahlung) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculateMwstZahlung Procedure FUNCTION calculateMwstZahlung RETURNS LOGICAL ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstZahl, OUTPUT opcMessage AS CHARACTER) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-createTransNr) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createTransNr Procedure FUNCTION createTransNr RETURNS LOGICAL ( INPUT-OUTPUT ioTrNr1 AS INTEGER, INPUT-OUTPUT ioTrNr2 AS INTEGER, INPUT ipStFirma AS CHARACTER, INPUT ipnBetrag AS DECIMAL, INPUT ipHerk AS INTEGER ) 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 = 60. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure /* *************************** Main Block *************************** */ /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &IF DEFINED(EXCLUDE-LOESEN_TRANSNUMMER) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE LOESEN_TRANSNUMMER Procedure PROCEDURE LOESEN_TRANSNUMMER : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT-OUTPUT PARAMETER ipTrNr1 AS INTEGER NO-UNDO. DEFINE INPUT-OUTPUT PARAMETER ipTrNr2 AS INTEGER NO-UNDO. DEFINE INPUT PARAMETER ipHerk AS INTEGER NO-UNDO. DEFINE VARIABLE TrNr1 AS INTEGER NO-UNDO. DEFINE VARIABLE TrNr2 AS INTEGER NO-UNDO. TrNr1 = 1. TrNr2 = 1. REPEAT TRANSACTION ON ERROR UNDO, RETRY: IF RETRY THEN . IF ipTrNr1 = 0 THEN DO: FIND LAST TransNr NO-LOCK USE-INDEX TransNr-k1 WHERE TransNr.Firma = '9999' NO-ERROR. IF AVAILABLE TransNr THEN TrNr1 = TransNr.TrNr1 + 1. END. ELSE DO: FIND LAST TransNr NO-LOCK USE-INDEX TransNr-k1 WHERE TransNr.Firma = '9999' AND TransNr.TrNr1 = ipTrNr1 NO-ERROR. IF AVAILABLE TransNr THEN ASSIGN TrNr1 = TransNr.TrNr1 TrNr2 = TransNr.TrNr2 + 1. END. CREATE TransNr. ASSIGN TransNr.Firma = '9999' TransNr.TrNr1 = TrNr1 TransNr.TrNr2 = TrNr2 TransNr.Herk = ipHerk TransNr.Erf_Dat = TODAY TransNr.Erf_Zeit = TIME TransNr.SaBe = DYNAMIC-FUNCTION ('getBenutzer':U). RELEASE TransNr. LEAVE. END. ipTrNr1 = TrNr1. ipTrNr2 = TrNr2. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-WORKFILE_INTERFACE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE WORKFILE_INTERFACE Procedure PROCEDURE WORKFILE_INTERFACE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE Tranr AS INTEGER NO-UNDO. FIND FIRST tZahInterf NO-LOCK. FOR EACH WFile: IF WFile.Betrag_Frw = 0 AND WFile.Betrag = 0 THEN NEXT. FIND LAST Interf NO-LOCK USE-INDEX Interf-k1 WHERE Interf.Firma = tZahInterf.Firma AND Interf.TrNr1 = tZahInterf.TrNr1 AND Interf.TrNr2 = tZahInterf.TrNr2 NO-ERROR. IF AVAILABLE Interf THEN Tranr = Interf.Trnr. ELSE Tranr = 0. X010: REPEAT: Tranr = Tranr + 1. X020: REPEAT ON ERROR UNDO, LEAVE. PAUSE 0 BEFORE-HIDE NO-MESSAGE. CREATE Interf. BUFFER-COPY tZahInterf TO Interf ASSIGN Interf.TrNr = Tranr Interf.Kto1 = WFile.Kto1 Interf.Kto2 = WFile.Kto2 Interf.FRW = WFile.Frw Interf.Faktor = WFile.Faktor Interf.Kurs = WFile.Kurs Interf.Verbucht = FALSE Interf.MWST_Cd = WFile.MWST_Cd Interf.KD_Fl = WFile.KD_Fl. IF NOT WFile.KD_Fl THEN DO: Interf.Betrag_Frw = WFile.Betrag_Frw. Interf.Betrag = WFile.Betrag. END. ELSE DO: Interf.Betrag_Frw = 0. /* Kursdifferenzen */ Interf.Betrag = WFile.Betrag. /* --------------- */ Interf.Buchtxt1 = 'KD ' + Interf.Buchtxt1. Interf.Buchtxt1 = TRIM(SUBSTRING(Interf.Buchtxt1,01,40)). END. DELETE WFile. HIDE MESSAGE NO-PAUSE. LEAVE X010. END. /* X020 */ /* zur Sicherheit bei Insert-Fehlern (doppelte Tranr) */ END. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ZAHLBERECHNUNG) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZAHLBERECHNUNG Procedure PROCEDURE ZAHLBERECHNUNG : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT-OUTPUT PARAMETER ipDebop AS HANDLE NO-UNDO. DEFINE VARIABLE Betrag AS DECIMAL DECIMALS 8 NO-UNDO. DEFINE VARIABLE Za AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE Sk AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE ZaFrw AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE SkFrw AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE Kurs AS DECIMAL DECIMALS 8 NO-UNDO. DEFINE VARIABLE cFrw AS CHARACTER NO-UNDO. DEFINE VARIABLE Faktor AS INTEGER NO-UNDO. DEFINE VARIABLE PluMin AS INTEGER NO-UNDO. DEFINE VARIABLE Kondi AS INTEGER NO-UNDO. DEFINE VARIABLE Dat1 AS DATE NO-UNDO. DEFINE VARIABLE Dat2 AS DATE NO-UNDO. DEFINE VARIABLE SkM AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE SkMFrw AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE iRundcode AS INTEGER NO-UNDO. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO. hFeld = ipDebop:BUFFER-FIELD('Firma') NO-ERROR. cFirma = hFeld:BUFFER-VALUE NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Kond') NO-ERROR. Kondi = INTEGER(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Saldo') NO-ERROR. Za = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Saldo_Frw') NO-ERROR. ZaFrw = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. Sk = 0. SkFrw = 0. SkM = 0. SkMFrw = 0. hFeld = ipDebop:BUFFER-FIELD('Kurs') NO-ERROR. Kurs = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Faktor') NO-ERROR. Faktor= INTEGER(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Frw') NO-ERROR. cFrw = hFeld:BUFFER-VALUE NO-ERROR. IF Faktor = 0 THEN Faktor = 1. Kurs = ABS(ZaFrw) / ABS(Za) * Faktor. iRundcode = (IF cFrw = 'CHF' THEN 1 ELSE 0). hFeld = ipDebop:BUFFER-FIELD('Fakbetr_Frw') NO-ERROR. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. IF Betrag < 0 THEN PluMin = -1. ELSE PluMin = +1. FIND Adresse NO-LOCK WHERE Adresse.Firma = cFirma AND Adresse.Knr = ipDebop::Knr NO-ERROR. FIND Kondi NO-LOCK USE-INDEX Kondi-k1 WHERE Kondi.Sprcd = Adresse.Sprcd AND Kondi.Kond = Kond NO-ERROR. IF NOT AVAILABLE Kondi THEN DO: FIND FIRST Kondi NO-LOCK WHERE Kondi.Kond = Kond NO-ERROR. END. FIND SteuNr NO-LOCK USE-INDEX SteuNr-k1 WHERE SteuNr.Firma = cFirma NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Skber_Frw') NO-ERROR. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. IF SteuNr.Sk_Tol_% <> 0 THEN SkMFrw = (Betrag * SteuNr.Sk_Tol_% / 100 * PluMin) + SteuNr.Sk_Tol_Max. ELSE SkMFrw = SteuNr.Sk_Tol_Max. SkMFrw = SkMFrw * PluMin. DO WHILE TRUE: IF NOT AVAILABLE Kondi THEN LEAVE. IF Kondi.Tage[01] = 0 THEN LEAVE. hFeld = ipDebop:BUFFER-FIELD('Fakdat') NO-ERROR. Dat1 = DATE (hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Zahdat') NO-ERROR. Dat2 = DATE (hFeld:BUFFER-VALUE) NO-ERROR. Dat1 = Dat1 + Kondi.Tage[01]. IF Dat2 <= Dat1 THEN DO: hFeld = ipDebop:BUFFER-FIELD('Skber_Frw') NO-ERROR. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. SkFrw = Betrag * Kondi.Skonto[01] / 100. Sk = SkFrw * Kurs / Faktor. RUN RUNDEN ( INPUT iRundcode, INPUT-OUTPUT Sk ). SkFrw = Sk * Faktor / Kurs. LEAVE. END. IF Kondi.Tage[02] = 0 THEN LEAVE. hFeld = ipDebop:BUFFER-FIELD('Fakdat') NO-ERROR. Dat1 = DATE (hFeld:BUFFER-VALUE) NO-ERROR. Dat1 = Dat1 + Kondi.Tage[02]. IF Dat2 <= Dat1 THEN DO: hFeld = ipDebop:BUFFER-FIELD('Skber_Frw') NO-ERROR. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. SkFrw = Betrag * Kondi.Skonto[02] / 100. Sk = SkFrw * Kurs / Faktor. RUN RUNDEN ( INPUT iRundcode, INPUT-OUTPUT Sk ). SkFrw = Sk * Faktor / Kurs. LEAVE. END. LEAVE. END. /* Skontomaximum inklusive Toleranz */ SkMFrw = SkMFrw + SkFrw. SkM = SkMFrw * Kurs / Faktor. hFeld = ipDebop:BUFFER-FIELD('SkMax_Frw') NO-ERROR. hFeld:BUFFER-VALUE = STRING(SkMFrw) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('SkMax') NO-ERROR. hFeld:BUFFER-VALUE = STRING(SkM) NO-ERROR. /* -------------------------------- */ IF SkFrw <> 0 THEN DO: hFeld = ipDebop:BUFFER-FIELD('Skonto_Frw') NO-ERROR. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. IF (Betrag * PluMin) >= (SkFrw * PluMin) THEN DO: SkFrw = 0. Sk = 0. END. ELSE DO: SkFrw = SkFrw - Betrag. Sk = SkFrw * Kurs / Faktor. RUN RUNDEN ( INPUT iRundcode, INPUT-OUTPUT Sk ). SkFrw = Sk * Faktor / Kurs. END. END. ZaFrw = ZaFrw - SkFrw. Za = Za - Sk. hFeld = ipDebop:BUFFER-FIELD('ZahBetr_Frw') NO-ERROR. hFeld:BUFFER-VALUE = ZaFrw. hFeld = ipDebop:BUFFER-FIELD('ZahBetr') NO-ERROR. hFeld:BUFFER-VALUE = Za. hFeld = ipDebop:BUFFER-FIELD('Skonto_Frw') NO-ERROR. hFeld:BUFFER-VALUE = SkFrw. hFeld = ipDebop:BUFFER-FIELD('Skonto') NO-ERROR. hFeld:BUFFER-VALUE = Sk. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ZAHLUNGEN_BUCHEN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZAHLUNGEN_BUCHEN Procedure PROCEDURE ZAHLUNGEN_BUCHEN : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipcFirma AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER ipiZahArt AS INTEGER NO-UNDO. DEFINE VARIABLE cKtoSko AS CHARACTER NO-UNDO. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE FBFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE StFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE nBetrag AS INTEGER NO-UNDO. DEFINE VARIABLE iFaknr AS INTEGER NO-UNDO. DEFINE VARIABLE cRetVal AS CHARACTER NO-UNDO. DEFINE VARIABLE cKte AS CHARACTER NO-UNDO. DEFINE VARIABLE hDebza AS HANDLE NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. FIND bSteuer NO-LOCK WHERE bSteuer.Firma = ipcFirma NO-ERROR. ASSIGN AdFirma = bSteuer.AdFirma FBFirma = bSteuer.FBFirma StFirma = bSteuer.StFirma cFirma = bSteuer.Firma. FIND bSteuNr NO-LOCK WHERE bSteunr.Firma = ipcFirma NO-ERROR. FOR EACH bZahlung WHERE bZahlung.Firma = cFirma AND bZahlung.Zahl_Art = ipiZahArt AND bZahlung.Verbucht = FALSE : iFaknr = INTEGER(bZahlung.Faknr). FIND bDebop WHERE bDebop.Firma = bZahlung.Firma AND bDebop.Knr = bZahlung.Knr AND bDebop.Faknr = iFaknr NO-ERROR. IF NOT AVAILABLE bDebop THEN DO: cRetVal = SUBSTITUTE('Kein OP für Knr &1 und Faknr &2', bZahlung.Knr, bZahlung.Faknr). RETURN cRetVal. END. FIND bDebst WHERE bDebst.Firma = bDebop.Firma AND bDebst.Knr = bDebop.Knr. FIND FIRST tDebop NO-ERROR. IF NOT AVAILABLE tDebop THEN CREATE tDebop. ASSIGN tDebop.Firma = bZahlung.Firma tDebop.Knr = bZahlung.Knr tDebop.Faknr = iFaknr tDebop.Kurs = bZahlung.Kurs tDebop.Faktor = bZahlung.Faktor tDebop.Frw = bZahlung.Frw tDebop.Zahdat = bZahlung.Datum_1 tDebop.Zahbetr_Frw = bZahlung.Betrag tDebop.Zahbetr = bZahlung.Betrag * bZahlung.Kurs / bZahlung.Faktor tDebop.Skonto_Frw = bZahlung.Skonto tDebop.Skonto = bZahlung.Skonto * bZahlung.Kurs / bZahlung.Faktor tDebop.Konto = bDebop.Konto tDebop.ZaKonto = bZahlung.Konto_S . RUN ZAHLUNG_BUCHEN ( htDebop, bZahlung.Herk ). bZahlung.Verbucht = TRUE. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-ZAHLUNG_BUCHEN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZAHLUNG_BUCHEN Procedure PROCEDURE ZAHLUNG_BUCHEN : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipDebop AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER ipHerk AS INTEGER NO-UNDO. DEFINE VARIABLE Firma AS CHARACTER NO-UNDO. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE FBFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE Knr AS INTEGER NO-UNDO. DEFINE VARIABLE Faknr AS INTEGER NO-UNDO. DEFINE VARIABLE Tranr AS INTEGER NO-UNDO. DEFINE VARIABLE TrNr1 AS INTEGER NO-UNDO. DEFINE VARIABLE TrNr2 AS INTEGER NO-UNDO. DEFINE VARIABLE Datum AS DATE NO-UNDO. DEFINE VARIABLE DeKto AS CHARACTER NO-UNDO. DEFINE VARIABLE ZaKto AS CHARACTER NO-UNDO. DEFINE VARIABLE SkKto AS CHARACTER NO-UNDO. DEFINE VARIABLE KdKto AS CHARACTER NO-UNDO. DEFINE VARIABLE M1Kto AS CHARACTER NO-UNDO. DEFINE VARIABLE M2Kto AS CHARACTER NO-UNDO. DEFINE VARIABLE SMKto AS CHARACTER NO-UNDO. DEFINE VARIABLE Butxt1 AS CHARACTER NO-UNDO. DEFINE VARIABLE Butxt2 AS CHARACTER NO-UNDO. DEFINE VARIABLE cDebitorSammKto AS CHARACTER NO-UNDO. DEFINE VARIABLE cSkontoSammKto AS CHARACTER NO-UNDO. DEFINE VARIABLE cKursdiffSammKto AS CHARACTER NO-UNDO. DEFINE VARIABLE cMwstKtoSoll AS CHARACTER NO-UNDO. DEFINE VARIABLE cMwstKtoHaben AS CHARACTER NO-UNDO. DEFINE VARIABLE Za AS DECIMAL NO-UNDO. DEFINE VARIABLE Sk AS DECIMAL NO-UNDO. DEFINE VARIABLE ZaFrw AS DECIMAL NO-UNDO. DEFINE VARIABLE SkFrw AS DECIMAL NO-UNDO. DEFINE VARIABLE Kurs AS DECIMAL DECIMALS 8 NO-UNDO. DEFINE VARIABLE Faktor AS INTEGER NO-UNDO. DEFINE VARIABLE Frw AS CHARACTER NO-UNDO. DEFINE VARIABLE Betrag AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE VTot AS DECIMAL EXTENT 12 NO-UNDO. DEFINE VARIABLE VZah AS DECIMAL EXTENT 12 NO-UNDO. DEFINE VARIABLE VSko AS DECIMAL EXTENT 12 NO-UNDO. DEFINE VARIABLE VZRes AS DECIMAL NO-UNDO. DEFINE VARIABLE VSRes AS DECIMAL NO-UNDO. DEFINE VARIABLE VMax AS INTEGER NO-UNDO. DEFINE VARIABLE VAntZ AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE VAntS AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE zz AS INTEGER NO-UNDO. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO. DEFINE VARIABLE xKnr AS INTEGER NO-UNDO. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO. hFeld = ipDebop:BUFFER-FIELD('Firma') NO-ERROR. Firma = hFeld:BUFFER-VALUE NO-ERROR. FIND Steuer NO-LOCK USE-INDEX Steuer-k1 WHERE Steuer.Firma = Firma NO-ERROR. AdFirma = Steuer.AdFirma. FBFirma = Steuer.FBFirma. D1Firma = Steuer.Firma. FIND SteuNr NO-LOCK USE-INDEX SteuNr-k1 WHERE SteuNr.Firma = Firma NO-ERROR. M1Kto = SteuNr.Konto_Wust_H. hFeld = ipDebop:BUFFER-FIELD('Knr') NO-ERROR. Knr = INTEGER(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Faknr') NO-ERROR. Faknr = INTEGER(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Zahdat') NO-ERROR. Datum = DATE (hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Zahbetr_Frw') NO-ERROR. ZaFrw = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Zahbetr') NO-ERROR. Za = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Skonto_Frw') NO-ERROR. SkFrw = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Skonto') NO-ERROR. Sk = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Kurs') NO-ERROR. Kurs = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Faktor') NO-ERROR. Faktor= INTEGER(hFeld:BUFFER-VALUE) NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Frw') NO-ERROR. Frw = hFeld:BUFFER-VALUE NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('Konto') NO-ERROR. DeKto = hFeld:BUFFER-VALUE NO-ERROR. hFeld = ipDebop:BUFFER-FIELD('ZaKonto') NO-ERROR. ZaKto = hFeld:BUFFER-VALUE NO-ERROR. EMPTY TEMP-TABLE WFile. FIND Adresse USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = Knr NO-LOCK NO-ERROR. IF NOT AVAILABLE Adresse THEN RETURN 'ERROR'. IF Adresse.Firma1 <> '' THEN Butxt1 = Adresse.Firma1 + ', '. ELSE Butxt1 = Adresse.Name + ', '. IF Adresse.Lkz <> 'CH' THEN Butxt1 = Butxt1 + Adresse.Lkz + ' '. Butxt1 = Butxt1 + Adresse.Plz + ' ' + Adresse.Ort. Butxt2 = 'Debitorzahlung Rechnung ' + STRING(Faknr,'9999999'). FIND Waehrung NO-LOCK USE-INDEX Waehrung-k1 WHERE Waehrung.Firma = D1Firma AND Waehrung.FRW = Frw NO-ERROR. IF NOT AVAILABLE Waehrung THEN RETURN 'ERROR'. IF ipHerk >= 50 AND ipHerk <= 69 THEN DO: cDebitorSammKto = DeKto. IF cDebitorSammKto = '' THEN cDebitorSammKto = (IF Waehrung.DebSammKto = '' THEN SteuNr.Konto_Debit ELSE Waehrung.DebSammKto ). IF cDebitorSammKto = '' THEN cDebitorSammKto = 'Debitoren'. cSkontoSammKto = (IF Waehrung.SkontoSammKto = '' THEN SteuNr.Konto_Skonto ELSE Waehrung.SkontoSammKto). IF cSkontoSammKto = '' THEN cSkontoSammKto = 'Skonto'. cKursdiffSammKto = Waehrung.KursDiffKto. IF cKursdiffSammKto = '' THEN cKursdiffSammKto = 'Kursdiff'. END. REPEAT TRANSACTION: EMPTY TEMP-TABLE tZahInterf. FIND Debst USE-INDEX Debst-k1 WHERE Debst.Firma = Firma AND Debst.Knr = Knr NO-ERROR. IF NOT AVAILABLE Debst THEN RETURN 'ERROR'. FIND Debop USE-INDEX Debop-k1 WHERE Debop.Firma = Firma AND Debop.Knr = Knr AND Debop.Faknr = Faknr NO-ERROR. IF NOT AVAILABLE Debop THEN RETURN 'ERROR'. TrNr1 = Debop.TrNr1. RUN LOESEN_TRANSNUMMER ( INPUT-OUTPUT TrNr1, INPUT-OUTPUT TrNr2, INPUT ipHerk). Tranr = 1. FIND LAST Debza NO-LOCK USE-INDEX Debza-k1 WHERE Debza.Firma = Firma AND Debza.Knr = Knr AND Debza.Faknr = Faknr NO-ERROR. IF AVAILABLE Debza THEN Tranr = Debza.Trnr + 1. CREATE Debza. ASSIGN Debza.Firma = Firma Debza.Knr = Knr Debza.Faknr = Faknr Debza.Trnr = Tranr Debza.Zahdat = Datum Debza.Zahbetr_Frw = ZaFrw Debza.Zahbetr = Za Debza.Skonto_Frw = SkFrw Debza.Skonto = Sk Debza.FRW = Frw Debza.Kurs = Kurs Debza.Faktor = Faktor Debza.TrNr1 = TrNr1 Debza.TrNr2 = TrNr2 Debza.Konto = ZaKto. /* Zahlbetrag */ CREATE WFile. ASSIGN WFile.Kto1 = Debza.Konto WFile.Kto2 = cDebitorSammKto WFile.Betrag_Frw = Debza.Zahbetr_Frw WFile.Betrag = Debza.Zahbetr WFile.MWST_Cd = 0 WFile.Frw = Debza.Frw WFile.Kurs = Debza.Kurs WFile.Faktor = Debza.Faktor WFile.KD_Fl = FALSE. /* Kursdifferenz-Flag */ /* Skontobetrag */ IF Debza.Skonto_Frw <> 0 THEN DO: CREATE WFile. ASSIGN WFile.Kto1 = cSkontoSammKto WFile.Kto2 = cDebitorSammKto WFile.Betrag_Frw = Debza.Skonto_Frw WFile.Betrag = Debza.Skonto WFile.MWST_Cd = 0 WFile.Frw = Debza.Frw WFile.Kurs = Debza.Kurs WFile.Faktor = Debza.Faktor WFile.KD_Fl = FALSE. /* Kursdifferenz-Flag */ END. /* Mehrwertsteuerverteilung */ VMax = 0. FIND FIRST tMwstParam NO-ERROR. IF NOT AVAILABLE tMwstParam THEN CREATE tMwstParam. ASSIGN tMwstParam.Firma = Debop.Firma tMwstParam.Knr = Debop.Knr tMwstParam.Faknr = Debop.Faknr tMwstParam.Frw = Debop.Frw tMwstParam.Skonto = Sk tMwstParam.Zahlung = Za. DYNAMIC-FUNCTION ('calculateMwstZahlung':U, INPUT TABLE tMwstParam, OUTPUT TABLE tMwstZahl, OUTPUT cMessage). FOR EACH tMwstZahl USE-INDEX tMwstZahl-k1: zz = tMwstZahl.Mwst_Cd. ASSIGN Debza.Zahwpfl[zz] = tMwstZahl.Netto Debza.Zahwust[zz] = tMwstZahl.Mwst Debza.ZahSkon[zz] = tMwstZahl.Skonto. IF zz > VMax THEN VMax = zz. END. /* -------------------------- */ CASE ipHerk. WHEN 61 THEN Debza.Kte = 'EZA'. WHEN 62 THEN Debza.Kte = 'BAR'. WHEN 63 THEN Debza.Kte = 'BES'. OTHERWISE Debza.Kte = 'ZAH'. END CASE. Debop.Zahdat = Debza.Zahdat. Debop.Saldo = Debop.Saldo - Za - Sk. Debop.Saldo_Frw = Debop.Saldo_Frw - ZaFrw - SkFrw. Debop.Skonto = Debop.Skonto + Sk. Debop.Skonto_Frw = Debop.Skonto_Frw + SkFrw. Debop.Zahbetr = Debop.Zahbetr + Za. Debop.Zahbetr_Frw = Debop.Zahbetr_Frw + ZaFrw. DO zz = 1 TO VMax: IF Debza.ZahWpfl[zz] = 0 THEN NEXT. ASSIGN Debop.ZahWpfl[zz] = Debop.ZahWpfl[zz] + Debza.ZahWpfl[zz] Debop.ZahWust[zz] = Debop.ZahWust[zz] + Debza.ZahWust[zz] Debop.ZahSkon[zz] = Debop.ZahSkon[zz] + Debza.ZahSkon[zz]. END. Debst.Saldo = Debst.Saldo - Za - Sk . Debst.Saldo_Frw = Debst.Saldo_Frw - ZaFrw - SkFrw. FIND LAST Debhi NO-LOCK USE-INDEX Debhi-k1 WHERE Debhi.Firma = Debza.Firma AND Debhi.Knr = Debza.Knr NO-ERROR. IF AVAILABLE Debhi THEN Tranr = Debhi.Trnr + 1. ELSE Tranr = 1. CREATE Debhi. ASSIGN Debhi.Firma = Debza.Firma Debhi.Knr = Debza.Knr Debhi.Trnr = Tranr Debhi.Datum = Debza.Zahdat Debhi.Faknr = Debza.Faknr Debhi.Kte = Debza.Kte Debhi.TrNr1 = Debza.TrNr1 Debhi.TrNr2 = Debza.TrNr2 Debhi.Soll = 0 Debhi.Soll_Frw = 0 Debhi.Haben = Debza.Zahbetr Debhi.Haben_Frw = Debza.Zahbetr_Frw Debhi.Skonto = Debza.Skonto Debhi.Skonto_Frw = Debza.Skonto_Frw Debhi.Transp = 0 Debhi.Porto = 0 Debhi.Verp = 0 Debhi.Konto = Debza.Konto Debhi.FRW = Debza.Frw Debhi.Kurs = Debza.Kurs Debhi.Faktor = Debza.Faktor Debhi.Saldo = Debst.Saldo_Frw. IF NOT Debop.Wustabr THEN DO: FIND LAST Debwu NO-LOCK USE-INDEX Debwu-k1 WHERE Debwu.Firma = Debza.Firma AND Debwu.Knr = Debza.Knr AND Debwu.Faknr = Debza.Faknr NO-ERROR. IF AVAILABLE Debwu THEN Tranr = Debwu.Trnr + 1. ELSE Tranr = 1. CREATE Debwu. ASSIGN Debwu.Firma = Debza.Firma Debwu.Knr = Debza.Knr Debwu.Faknr = Debza.Faknr Debwu.Trnr = Tranr Debwu.TrNr1 = Debza.TrNr1 Debwu.TrNr2 = Debza.TrNr2 Debwu.Datum = Debza.Zahdat Debwu.Betrag = Debza.Zahbetr Debwu.Betrag_Frw = Debza.Zahbetr_Frw Debwu.Konto = cMwstKtoSoll Debwu.Kte = Debza.Kte Debwu.FRW = Debza.Frw Debwu.Kurs = Debza.Kurs Debwu.Faktor = Debza.Faktor Debwu.Wustpfl = Debza.Zahwpfl Debwu.Wust = Debza.Zahwust Debwu.Skonto = Debza.ZahSkon . cMwstKtoHaben = SteuNr.Konto_Wust_H. IF cMwstKtoHaben = '' THEN cMwstKtoHaben = 'MwstHaben'. FOR EACH tMwstZahl USE-INDEX tMwstZahl-k1: zz = tMwstZahl.Mwst_Cd. cMwstKtoSoll = ''. FIND LAST MWSTAns NO-LOCK WHERE MWSTAns.MWST_Cd = zz AND MWSTAns.Datum <= Debop.Fakdat NO-ERROR. IF AVAILABLE MWSTAns THEN cMwstKtoSoll = MWSTAns.Konto. IF cMwstKtoSoll = '' THEN DO: FIND FIRST Wust NO-LOCK WHERE Wust.WuCd = zz NO-ERROR. IF AVAILABLE Wust THEN cMwstKtoSoll = Wust.Konto. END. IF cMwstKtoSoll = '' THEN DO: cMwstKtoSoll = SteuNr.Konto_Wust_S. END. IF cMwstKtoSoll = '' THEN cMwstKtoHaben = 'MwstSoll'. IF tMwstZahl.lInklusive THEN Betrag = tMwstZahl.Netto * tMwstZahl.Ansatz / (100 + tMwstZahl.Ansatz). ELSE Betrag = tMwstZahl.Mwst. CREATE WFile. ASSIGN WFile.Kto1 = cMwstKtoHaben WFile.Kto2 = cMwstKtoSoll WFile.Betrag_Frw = Betrag / Debza.Kurs * Debza.Faktor WFile.Betrag = Betrag WFile.MWST_Cd = zz WFile.Frw = Debza.Frw WFile.Kurs = Debza.Kurs WFile.Faktor = Debza.Faktor WFile.KD_Fl = FALSE. /* Kursdifferenz-Flag */ IF zz > VMax THEN VMax = zz. END. END. /* ------ Kursdifferenzen ------------------------- */ IF Debop.Frw <> Steuer.Fwc03 THEN DO: IF Debop.Saldo_Frw = 0 THEN ASSIGN Betrag = Debop.Saldo. ELSE DO: ASSIGN Betrag = ((ZaFrw + SkFrw) * Debop.Kurs / Debop.Fakt) - ((ZaFrw + SkFrw) * Debza.Kurs / Debza.Fakt). Betrag = DECIMAL(SUBSTRING(STRING(Betrag,'-999999999.9999'),01,13)). END. IF Betrag <> 0.00 THEN DO: CREATE WFile. ASSIGN WFile.Kto1 = cKursdiffSammKto WFile.Kto2 = cDebitorSammKto WFile.MWST_Cd = 0 WFile.Frw = Steuer.Fwc03 WFile.Kurs = 1.0 WFile.Faktor = 1 WFile.Betrag_Frw = Betrag WFile.Betrag = Betrag WFile.KD_Fl = TRUE. ASSIGN Debop.Zahbetr = Debop.Zahbetr + Betrag Debop.Saldo = Debop.Saldo - Betrag Debst.Saldo = Debst.Saldo - Betrag. FIND LAST Debhi USE-INDEX Debhi-k1 WHERE Debhi.Firma = Firma AND Debhi.Knr = Knr NO-LOCK NO-ERROR. IF AVAILABLE Debhi THEN Tranr = Debhi.Trnr + 1. ELSE Tranr = 1. CREATE Debhi. ASSIGN Debhi.Firma = Debza.Firma Debhi.Knr = Debza.Knr Debhi.Trnr = Tranr Debhi.Datum = Debza.Zahdat Debhi.Faknr = Debza.Faknr Debhi.Kte = 'KDI' Debhi.TrNr1 = Debza.TrNr1 Debhi.TrNr2 = Debza.TrNr2 Debhi.Soll = 0 Debhi.Soll_Frw = 0 Debhi.Haben = Betrag Debhi.Haben_Frw = 0 Debhi.Skonto = 0 Debhi.Skonto_Frw = 0 Debhi.Transp = 0 Debhi.Porto = 0 Debhi.Verp = 0 Debhi.Konto = KdKto Debhi.FRW = Steuer.Fwc03 Debhi.Kurs = 1.0 Debhi.Faktor = 1 Debhi.Saldo = Debst.Saldo_Frw. END. END. CREATE tZahInterf. ASSIGN tZahInterf.Firma = FBFirma tZahInterf.TrNr1 = TrNr1 tZahInterf.TrNr2 = TrNr2 tZahInterf.Buchtxt1 = Butxt1 tZahInterf.Buchtxt2 = Butxt2 tZahInterf.Herk = ipHerk tZahInterf.Datum = Datum tZahInterf.Faknr = STRING(Faknr,'9999999') tZahInterf.Knr = Knr tZahInterf.MWST_Nr = '' tZahInterf.HKFirma = Firma. RUN WORKFILE_INTERFACE. RELEASE Debst. RELEASE Debop. RELEASE Debhi. RELEASE Debza. RELEASE Debwu. LEAVE. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* ************************ Function Implementations ***************** */ &IF DEFINED(EXCLUDE-calculateMwstFaktura) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculateMwstFaktura Procedure FUNCTION calculateMwstFaktura RETURNS LOGICAL ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstCalc, OUTPUT opcMessage AS CHARACTER ) : /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE nWW AS DECIMAL NO-UNDO INIT 0.00. DEFINE VARIABLE nProz AS DECIMAL NO-UNDO INIT 100.00. DEFINE VARIABLE nFakBetr AS DECIMAL NO-UNDO. DEFINE VARIABLE nTotNebenkosten AS DECIMAL NO-UNDO DECIMALS 2. DEFINE VARIABLE nRestNebenkosten AS DECIMAL NO-UNDO DECIMALS 2. DEFINE VARIABLE iFaktNebenkosten AS INTEGER NO-UNDO. DEFINE VARIABLE htMwstCalc AS HANDLE NO-UNDO. DEFINE VARIABLE iStdCd AS INTEGER NO-UNDO. DEFINE VARIABLE nStdAnsatz AS DECIMAL NO-UNDO. DEFINE VARIABLE nRundbetr AS DECIMAL NO-UNDO DECIMALS 4. DEFINE VARIABLE iRundcode AS INTEGER NO-UNDO INIT 1. DEFINE VARIABLE cFrw AS CHARACTER NO-UNDO. DEFINE VARIABLE nMwstBetr AS DECIMAL NO-UNDO. DEFINE BUFFER btMwstCalc FOR tMwstCalc. htMwstCalc = TEMP-TABLE tMwstCalc:DEFAULT-BUFFER-HANDLE. EMPTY TEMP-TABLE tMwstCalc. FIND FIRST tMwstParam. opcMessage = ''. nFakBetr = 0.00. nMwstBetr = 0.00. /* iRundcode = (IF tMwstParam.Frw = 'CHF' THEN 1 ELSE 0).*/ iRundcode = 0. cFrw = tMwstParam.Frw. DO i1 = 1 TO 11: IF tMwstParam.MwstPfl[i1] = 0 THEN NEXT. FIND LAST MwstAns NO-LOCK WHERE MwstAns.Mwst_Cd = i1 AND MwstAns.Datum <= tMwstParam.Datum NO-ERROR. CREATE tMwstCalc. ASSIGN tMwstCalc.Mwst_Cd = i1 tMwstCalc.Faktor = (IF tMwstParam.MwstPfl[i1] >= 0 THEN 1 ELSE -1) tMwstCalc.Ansatz = MWSTAns.Ansatz tMwstCalc.lInklusive = MWSTAns.Incl. IF tMwstCalc.lInklusive THEN DO: ASSIGN tMwstCalc.Brutto = tMwstParam.MwstPfl[i1] nRundbetr = tMwstCalc.Brutto * tMwstCalc.Ansatz / (100 + tMwstCalc.Ansatz). RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundbetr). tMwstCalc.Mwst = nRundbetr. tMwstCalc.Netto = tMwstCalc.Brutto - tMwstCalc.Mwst. END. ELSE DO: ASSIGN tMwstCalc.Netto = tMwstParam.MwstPfl[i1] nRundbetr = tMwstParam.MwstPfl[i1] * tMwstCalc.Ansatz / 100. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundbetr). tMwstCalc.Mwst = nRundbetr. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst. END. ASSIGN tMwstCalc.WW = tMwstCalc.Netto tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto) tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto ) tMwstCalc.AbsMwst = ABS(tMwstCalc.Mwst ) . ASSIGN tMwstCalc.BruttoOhne = tMwstCalc.Brutto tMwstCalc.NettoOhne = tMwstCalc.Netto tMwstCalc.MwstOhne = tMwstCalc.Mwst. nWW = nWW + ABS(tMwstCalc.WW). nFakBetr = nFakBetr + tMwstCalc.Brutto. nMwstBetr = nMwstBetr + (IF tMwstCalc.lInklusive THEN 0.00 ELSE tMwstCalc.Mwst). END. FIND FIRST tMwstCalc NO-ERROR. DO WHILE NOT AVAILABLE tMwstCalc: /* Nur Nebenkosten ? */ IF tMwstParam.MwstPfl[12] = 0 THEN LEAVE. /* Keine Nebenkosten, Keine Beträge */ /* Nebenkosten zum ersten Ansatz aus Wusttabelle */ DO i1 = 1 TO 11: FIND Wust NO-LOCK WHERE Wust.CodeK = tMwstParam.MwstCdKd AND Wust.CodeA = i1 NO-ERROR. IF NOT AVAILABLE Wust THEN NEXT. FIND LAST MwstAns NO-LOCK WHERE MwstAns.Mwst_Cd = Wust.Wucd AND MwstAns.Datum <= tMwstParam.Datum NO-ERROR. IF NOT AVAILABLE MwstAns THEN NEXT. ASSIGN iStdCd = Wust.WuCd nStdAnsatz = MwstAns.Ansatz. LEAVE. END. /* Nur Kosten */ CREATE tMwstCalc. ASSIGN tMwstCalc.Mwst_Cd = iStdCd tMwstCalc.Faktor = (IF tMwstParam.MwstPfl[12] >= 0 THEN 1 ELSE -1) tMwstCalc.Ansatz = nStdAnsatz tMwstCalc.Fakbetr = 0 tMwstCalc.ProzAnt = 100.00 tMwstCalc.VerpAnt = 0.00 tMwstCalc.Brutto = 0.00 . ASSIGN tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto) tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto ) tMwstCalc.AbsMwst = ABS(tMwstCalc.Mwst ) . LEAVE. END. DO WHILE tMwstParam.MwstPfl[12] <> 0: /* Nebenkosten zum verteilen */ CREATE tMwstCalc. ASSIGN tMwstCalc.Mwst_Cd = 999 tMwstCalc.Faktor = (IF tMwstParam.MwstPfl[12] >= 0 THEN 1 ELSE -1) tMwstCalc.Ansatz = 0.0 tMwstCalc.Brutto = tMwstParam.MwstPfl[12] tMwstCalc.Netto = tMwstParam.MwstPfl[12] tMwstCalc.Mwst = 0 tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto) tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto ) tMwstCalc.AbsMwst = 0 tMwstCalc.ProzAnt = 0. LEAVE. END. DO WHILE TRUE: FIND FIRST tMwstCalc NO-ERROR. IF NOT AVAILABLE tMwstCalc THEN LEAVE. FIND FIRST btMwstCalc WHERE btMwstCalc.Mwst_Cd = 999 NO-ERROR. IF NOT AVAILABLE btMwstCalc THEN LEAVE. /* Verteilung der Nebenkosten */ nRestNebenkosten = btMwstCalc.Brutto. nTotNebenkosten = btMwstCalc.AbsBrutto. iFaktNebenkosten = btMwstCalc.Faktor. ASSIGN nFakBetr = 0.00 nMwstBetr = 0.00. FOR EACH tMwstCalc WHERE tMwstCalc.Mwst_Cd < 999 BREAK BY tMwstCalc.Mwst_Cd: IF LAST(tMwstCalc.Mwst_Cd) THEN DO: tMwstCalc.ProzAnt = nProz. tMwstCalc.VerpAnt = nRestNebenkosten. IF tMwstCalc.lInklusive THEN DO: tMwstCalc.Brutto = tMwstCalc.Brutto + nRestNebenkosten. tMwstCalc.Netto = tMwstCalc.Brutto * 100 / (100 + tMwstCalc.Ansatz). tMwstCalc.Mwst = tMwstCalc.Brutto - tMwstCalc.Netto. END. ELSE DO: tMwstCalc.Netto = tMwstCalc.Netto + nRestNebenkosten. nRundbetr = tMwstCalc.Netto * tMwstCalc.Ansatz / 100. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundBetr). tMwstCalc.Mwst = nRundbetr. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst. END. nFakBetr = nFakBetr + tMwstCalc.Brutto. nMwstBetr = nMwstBetr + (IF tMwstCalc.lInklusive THEN 0.00 ELSE tMwstCalc.Mwst). LEAVE. END. tMwstCalc.ProzAnt = tMwstCalc.AbsNetto * 100 / nWW. tMwstCalc.VerpAnt = nTotNebenkosten * tMwstCalc.ProzAnt / 100 * iFaktNebenkosten. IF tMwstCalc.lInklusive THEN DO: tMwstCalc.Brutto = tMwstCalc.Brutto + tMwstCalc.VerpAnt. tMwstCalc.Netto = tMwstCalc.Brutto * 100 / (100 + tMwstCalc.Ansatz). tMwstCalc.Mwst = tMwstCalc.Brutto - tMwstCalc.Netto. END. ELSE DO: tMwstCalc.Netto = tMwstCalc.Netto + tMwstCalc.VerpAnt. nRundbetr = tMwstCalc.Netto * tMwstCalc.Ansatz / 100. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundBetr). tMwstCalc.Mwst = nRundbetr. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst. END. nProz = nProz - tMwstCalc.ProzAnt. nRestNebenkosten = nRestNebenkosten - tMwstCalc.VerpAnt. nFakBetr = nFakBetr + tMwstCalc.Brutto. nMwstBetr = nMwstBetr + (IF tMwstCalc.lInklusive THEN 0.00 ELSE tMwstCalc.Mwst). END. LEAVE. END. iRundcode = 1. nRundbetr = nFakbetr. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundbetr ). nFakbetr = nRundbetr. opcMessage = SUBSTITUTE('&1;&2', nFakbetr, nMwstBetr). RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-calculateMwstZahlung) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculateMwstZahlung Procedure FUNCTION calculateMwstZahlung RETURNS LOGICAL ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstZahl, OUTPUT opcMessage AS CHARACTER ) : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE nProzZahlung AS DECIMAL NO-UNDO. DEFINE VARIABLE nProzSkonto AS DECIMAL NO-UNDO. DEFINE BUFFER bDebop FOR Debop. EMPTY TEMP-TABLE tMwstZahl. FIND FIRST tMwstParam. opcMessage = ''. FIND bDebop NO-LOCK WHERE bDebop.Firma = tMwstParam.Firma AND bDebop.Knr = tMwstParam.Knr AND bDebop.Faknr = tMwstParam.Faknr. IF tMwstParam.Zahlung <> 0 THEN nProzZahlung = tMwstParam.Zahlung * 100 / bDebop.Fakbetr. ELSE nProzZahlung = 0.00. IF tMwstParam.Skonto <> 0 THEN nProzSkonto = tMwstParam.Skonto * 100 / bDebop.Fakbetr. ELSE nProzSkonto = 0.00. DO i1 = 1 TO 11: IF bDebop.Fakwpfl[i1] = 0 THEN NEXT. CREATE tMwstZahl. ASSIGN tMwstZahl.Mwst_Cd = i1 tMwstZahl.Ansatz = bDebop.Fakwpro[i1] tMwstZahl.lInklusive = bDebop.Fakincl[i1] tMwstZahl.ZahlBetrag = bDebop.FakWpfl[i1] * nProzZahlung / 100 tMwstZahl.SkonBetrag = bDebop.FakWpfl[i1] * nProzSkonto / 100 . IF tMwstZahl.lInklusive THEN DO: ASSIGN tMwstZahl.Brutto = tMwstZahl.ZahlBetrag tMwstZahl.Mwst = 0.00 tMwstZahl.Netto = tMwstZahl.Brutto tMwstZahl.Skonto = tMwstZahl.SkonBetrag. END. ELSE DO: ASSIGN tMwstZahl.Mwst = tMwstZahl.ZahlBetrag * tMwstZahl.Ansatz / 100 tMwstZahl.Brutto = tMwstZahl.ZahlBetrag + tMwstZahl.Mwst tMwstZahl.Netto = tMwstZahl.Brutto - tMwstZahl.Mwst tMwstZahl.Skonto = tMwstZahl.SkonBetrag. END. END. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-createTransNr) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createTransNr Procedure FUNCTION createTransNr RETURNS LOGICAL ( INPUT-OUTPUT ioTrNr1 AS INTEGER, INPUT-OUTPUT ioTrNr2 AS INTEGER, INPUT ipStFirma AS CHARACTER, INPUT ipnBetrag AS DECIMAL, INPUT ipHerk AS INTEGER ): /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ REPEAT TRANSACTION: IF ioTrNr1 = 0 THEN DO: FIND LAST TransNr NO-LOCK WHERE TransNr.Firma = ipStFirma NO-ERROR. IF AVAILABLE TransNr THEN ioTrNr1 = TransNr.TrNr1 + 1. ELSE ioTrNr1 = 1. ioTrNr2 = 1. END. IF ioTrNr2 = 0 THEN DO: FIND LAST TransNr NO-LOCK WHERE TransNr.Firma = ipStFirma AND TransNr.TrNr1 = ioTrNr1 NO-ERROR. IF AVAILABLE TransNr THEN ioTrNr2 = TransNr.TrNr2 + 1. ELSE ioTrNr2 = 1. END. CREATE TransNr. ASSIGN TransNr.Firma = ipStFirma TransNr.TrNr1 = ioTrnr1 TransNr.TrNr2 = ioTrnr2 TransNr.Herk = ipHerk TransNr.Erf_Datum = TODAY TransNr.Erf_Zeit = TIME TransNr.SaBe = DYNAMIC-FUNCTION('getSysUser':U) TransNr.Betrag = ipnBetrag. RELEASE TransNr. LEAVE. END. RETURN TRUE. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF