| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337 |
- &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: <none>
- 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
|