debitorfunkt.p 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337
  1. &ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12
  2. &ANALYZE-RESUME
  3. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
  4. /*------------------------------------------------------------------------
  5. File :
  6. Purpose :
  7. Syntax :
  8. Description :
  9. Author(s) :
  10. Created :
  11. Notes :
  12. ----------------------------------------------------------------------*/
  13. /* This .W file was created with the Progress AppBuilder. */
  14. /*----------------------------------------------------------------------*/
  15. /* *************************** Definitions ************************** */
  16. DEFINE VARIABLE iTrNr1 AS INTEGER NO-UNDO.
  17. DEFINE VARIABLE iTrNr2 AS INTEGER NO-UNDO.
  18. DEFINE VARIABLE iTrans AS INTEGER NO-UNDO.
  19. DEFINE VARIABLE nBetrag AS INTEGER NO-UNDO.
  20. DEFINE VARIABLE iFaknr AS INTEGER NO-UNDO.
  21. DEFINE VARIABLE cRetVal AS CHARACTER NO-UNDO.
  22. DEFINE VARIABLE cBuchtext1 AS CHARACTER NO-UNDO.
  23. DEFINE VARIABLE cBuchtext2 AS CHARACTER NO-UNDO.
  24. DEFINE VARIABLE D1Firma AS CHARACTER NO-UNDO.
  25. DEFINE BUFFER bZahlung FOR Zahlung .
  26. DEFINE BUFFER bAdresse FOR Adresse .
  27. DEFINE BUFFER bDebop FOR Debop .
  28. DEFINE BUFFER bDebza FOR Debza .
  29. DEFINE BUFFER bDebhi FOR Debhi .
  30. DEFINE BUFFER bDebst FOR Debst .
  31. DEFINE BUFFER bDebwu FOR Debwu .
  32. DEFINE BUFFER bTransNr FOR TransNr .
  33. DEFINE BUFFER bSteuer FOR Steuer .
  34. DEFINE BUFFER bSteuNr FOR SteuNr .
  35. DEFINE TEMP-TABLE tDebop NO-UNDO LIKE Debop
  36. FIELD SkMax_Frw AS DEC
  37. FIELD SkMax AS DEC
  38. FIELD ZaKonto AS CHAR.
  39. DEFINE VARIABLE htDebop AS HANDLE NO-UNDO.
  40. htDebop = TEMP-TABLE tDebop:DEFAULT-BUFFER-HANDLE.
  41. DEFINE TEMP-TABLE WFile
  42. FIELD Kto1 AS CHARACTER
  43. FIELD Kto2 AS CHARACTER
  44. FIELD Betrag AS DECIMAL
  45. FIELD Betrag_Frw AS DECIMAL
  46. FIELD MWST_Cd AS INTEGER
  47. FIELD Frw AS CHARACTER
  48. FIELD Kurs AS DECIMAL DECIMALS 8
  49. FIELD Faktor AS INTEGER
  50. FIELD KD_Fl AS LOG INIT FALSE.
  51. DEFINE TEMP-TABLE tZahInterf NO-UNDO LIKE Interf.
  52. { incl/tmwstcalc.i }
  53. /* _UIB-CODE-BLOCK-END */
  54. &ANALYZE-RESUME
  55. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  56. /* ******************** Preprocessor Definitions ******************** */
  57. &Scoped-define PROCEDURE-TYPE Procedure
  58. &Scoped-define DB-AWARE no
  59. /* _UIB-PREPROCESSOR-BLOCK-END */
  60. &ANALYZE-RESUME
  61. /* ************************ Function Prototypes ********************** */
  62. &IF DEFINED(EXCLUDE-calculateMwstFaktura) = 0 &THEN
  63. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculateMwstFaktura Procedure
  64. FUNCTION calculateMwstFaktura RETURNS LOGICAL
  65. ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstCalc, OUTPUT opcMessage AS CHARACTER ) FORWARD.
  66. /* _UIB-CODE-BLOCK-END */
  67. &ANALYZE-RESUME
  68. &ENDIF
  69. &IF DEFINED(EXCLUDE-calculateMwstZahlung) = 0 &THEN
  70. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculateMwstZahlung Procedure
  71. FUNCTION calculateMwstZahlung RETURNS LOGICAL
  72. ( INPUT TABLE FOR tMwstParam,
  73. OUTPUT TABLE FOR tMwstZahl,
  74. OUTPUT opcMessage AS CHARACTER) FORWARD.
  75. /* _UIB-CODE-BLOCK-END */
  76. &ANALYZE-RESUME
  77. &ENDIF
  78. &IF DEFINED(EXCLUDE-createTransNr) = 0 &THEN
  79. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createTransNr Procedure
  80. FUNCTION createTransNr RETURNS LOGICAL
  81. ( INPUT-OUTPUT ioTrNr1 AS INTEGER, INPUT-OUTPUT ioTrNr2 AS INTEGER,
  82. INPUT ipStFirma AS CHARACTER, INPUT ipnBetrag AS DECIMAL, INPUT ipHerk AS INTEGER ) FORWARD.
  83. /* _UIB-CODE-BLOCK-END */
  84. &ANALYZE-RESUME
  85. &ENDIF
  86. /* *********************** Procedure Settings ************************ */
  87. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  88. /* Settings for THIS-PROCEDURE
  89. Type: Procedure
  90. Allow:
  91. Frames: 0
  92. Add Fields to: Neither
  93. Other Settings: CODE-ONLY COMPILE
  94. */
  95. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  96. /* ************************* Create Window ************************** */
  97. &ANALYZE-SUSPEND _CREATE-WINDOW
  98. /* DESIGN Window definition (used by the UIB)
  99. CREATE WINDOW Procedure ASSIGN
  100. HEIGHT = 15
  101. WIDTH = 60.
  102. /* END WINDOW DEFINITION */
  103. */
  104. &ANALYZE-RESUME
  105. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  106. /* *************************** Main Block *************************** */
  107. /* _UIB-CODE-BLOCK-END */
  108. &ANALYZE-RESUME
  109. /* ********************** Internal Procedures *********************** */
  110. &IF DEFINED(EXCLUDE-LOESEN_TRANSNUMMER) = 0 &THEN
  111. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE LOESEN_TRANSNUMMER Procedure
  112. PROCEDURE LOESEN_TRANSNUMMER :
  113. /*------------------------------------------------------------------------------*/
  114. /* Purpose: Super Override */
  115. /* Parameters: */
  116. /* Notes: */
  117. /*------------------------------------------------------------------------------*/
  118. DEFINE INPUT-OUTPUT PARAMETER ipTrNr1 AS INTEGER NO-UNDO.
  119. DEFINE INPUT-OUTPUT PARAMETER ipTrNr2 AS INTEGER NO-UNDO.
  120. DEFINE INPUT PARAMETER ipHerk AS INTEGER NO-UNDO.
  121. DEFINE VARIABLE TrNr1 AS INTEGER NO-UNDO.
  122. DEFINE VARIABLE TrNr2 AS INTEGER NO-UNDO.
  123. TrNr1 = 1.
  124. TrNr2 = 1.
  125. REPEAT TRANSACTION ON ERROR UNDO, RETRY:
  126. IF RETRY THEN .
  127. IF ipTrNr1 = 0 THEN
  128. DO:
  129. FIND LAST TransNr NO-LOCK USE-INDEX TransNr-k1
  130. WHERE TransNr.Firma = '9999' NO-ERROR.
  131. IF AVAILABLE TransNr THEN TrNr1 = TransNr.TrNr1 + 1.
  132. END.
  133. ELSE
  134. DO:
  135. FIND LAST TransNr NO-LOCK USE-INDEX TransNr-k1
  136. WHERE TransNr.Firma = '9999'
  137. AND TransNr.TrNr1 = ipTrNr1 NO-ERROR.
  138. IF AVAILABLE TransNr THEN ASSIGN TrNr1 = TransNr.TrNr1
  139. TrNr2 = TransNr.TrNr2 + 1.
  140. END.
  141. CREATE TransNr.
  142. ASSIGN
  143. TransNr.Firma = '9999'
  144. TransNr.TrNr1 = TrNr1
  145. TransNr.TrNr2 = TrNr2
  146. TransNr.Herk = ipHerk
  147. TransNr.Erf_Dat = TODAY
  148. TransNr.Erf_Zeit = TIME
  149. TransNr.SaBe = DYNAMIC-FUNCTION ('getBenutzer':U).
  150. RELEASE TransNr.
  151. LEAVE.
  152. END.
  153. ipTrNr1 = TrNr1.
  154. ipTrNr2 = TrNr2.
  155. END PROCEDURE.
  156. /* _UIB-CODE-BLOCK-END */
  157. &ANALYZE-RESUME
  158. &ENDIF
  159. &IF DEFINED(EXCLUDE-WORKFILE_INTERFACE) = 0 &THEN
  160. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE WORKFILE_INTERFACE Procedure
  161. PROCEDURE WORKFILE_INTERFACE :
  162. /*------------------------------------------------------------------------------
  163. Purpose:
  164. Parameters: <none>
  165. Notes:
  166. ------------------------------------------------------------------------------*/
  167. DEFINE VARIABLE Tranr AS INTEGER NO-UNDO.
  168. FIND FIRST tZahInterf NO-LOCK.
  169. FOR EACH WFile:
  170. IF WFile.Betrag_Frw = 0 AND
  171. WFile.Betrag = 0 THEN NEXT.
  172. FIND LAST Interf NO-LOCK USE-INDEX Interf-k1
  173. WHERE Interf.Firma = tZahInterf.Firma
  174. AND Interf.TrNr1 = tZahInterf.TrNr1
  175. AND Interf.TrNr2 = tZahInterf.TrNr2 NO-ERROR.
  176. IF AVAILABLE Interf THEN Tranr = Interf.Trnr.
  177. ELSE Tranr = 0.
  178. X010:
  179. REPEAT:
  180. Tranr = Tranr + 1.
  181. X020:
  182. REPEAT ON ERROR UNDO, LEAVE.
  183. PAUSE 0 BEFORE-HIDE NO-MESSAGE.
  184. CREATE Interf.
  185. BUFFER-COPY tZahInterf TO Interf
  186. ASSIGN
  187. Interf.TrNr = Tranr
  188. Interf.Kto1 = WFile.Kto1
  189. Interf.Kto2 = WFile.Kto2
  190. Interf.FRW = WFile.Frw
  191. Interf.Faktor = WFile.Faktor
  192. Interf.Kurs = WFile.Kurs
  193. Interf.Verbucht = FALSE
  194. Interf.MWST_Cd = WFile.MWST_Cd
  195. Interf.KD_Fl = WFile.KD_Fl.
  196. IF NOT WFile.KD_Fl THEN
  197. DO:
  198. Interf.Betrag_Frw = WFile.Betrag_Frw.
  199. Interf.Betrag = WFile.Betrag.
  200. END.
  201. ELSE
  202. DO:
  203. Interf.Betrag_Frw = 0. /* Kursdifferenzen */
  204. Interf.Betrag = WFile.Betrag. /* --------------- */
  205. Interf.Buchtxt1 = 'KD ' + Interf.Buchtxt1.
  206. Interf.Buchtxt1 = TRIM(SUBSTRING(Interf.Buchtxt1,01,40)).
  207. END.
  208. DELETE WFile.
  209. HIDE MESSAGE NO-PAUSE.
  210. LEAVE X010.
  211. END. /* X020 */
  212. /* zur Sicherheit bei Insert-Fehlern (doppelte Tranr) */
  213. END.
  214. END.
  215. END PROCEDURE.
  216. /* _UIB-CODE-BLOCK-END */
  217. &ANALYZE-RESUME
  218. &ENDIF
  219. &IF DEFINED(EXCLUDE-ZAHLBERECHNUNG) = 0 &THEN
  220. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZAHLBERECHNUNG Procedure
  221. PROCEDURE ZAHLBERECHNUNG :
  222. /*------------------------------------------------------------------------------*/
  223. /* Purpose: Super Override */
  224. /* Parameters: */
  225. /* Notes: */
  226. /*------------------------------------------------------------------------------*/
  227. DEFINE INPUT-OUTPUT PARAMETER ipDebop AS HANDLE NO-UNDO.
  228. DEFINE VARIABLE Betrag AS DECIMAL DECIMALS 8 NO-UNDO.
  229. DEFINE VARIABLE Za AS DECIMAL DECIMALS 4 NO-UNDO.
  230. DEFINE VARIABLE Sk AS DECIMAL DECIMALS 4 NO-UNDO.
  231. DEFINE VARIABLE ZaFrw AS DECIMAL DECIMALS 4 NO-UNDO.
  232. DEFINE VARIABLE SkFrw AS DECIMAL DECIMALS 4 NO-UNDO.
  233. DEFINE VARIABLE Kurs AS DECIMAL DECIMALS 8 NO-UNDO.
  234. DEFINE VARIABLE cFrw AS CHARACTER NO-UNDO.
  235. DEFINE VARIABLE Faktor AS INTEGER NO-UNDO.
  236. DEFINE VARIABLE PluMin AS INTEGER NO-UNDO.
  237. DEFINE VARIABLE Kondi AS INTEGER NO-UNDO.
  238. DEFINE VARIABLE Dat1 AS DATE NO-UNDO.
  239. DEFINE VARIABLE Dat2 AS DATE NO-UNDO.
  240. DEFINE VARIABLE SkM AS DECIMAL DECIMALS 4 NO-UNDO.
  241. DEFINE VARIABLE SkMFrw AS DECIMAL DECIMALS 4 NO-UNDO.
  242. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO.
  243. DEFINE VARIABLE iRundcode AS INTEGER NO-UNDO.
  244. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  245. hFeld = ipDebop:BUFFER-FIELD('Firma') NO-ERROR.
  246. cFirma = hFeld:BUFFER-VALUE NO-ERROR.
  247. hFeld = ipDebop:BUFFER-FIELD('Kond') NO-ERROR.
  248. Kondi = INTEGER(hFeld:BUFFER-VALUE) NO-ERROR.
  249. hFeld = ipDebop:BUFFER-FIELD('Saldo') NO-ERROR.
  250. Za = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  251. hFeld = ipDebop:BUFFER-FIELD('Saldo_Frw') NO-ERROR.
  252. ZaFrw = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  253. Sk = 0.
  254. SkFrw = 0.
  255. SkM = 0.
  256. SkMFrw = 0.
  257. hFeld = ipDebop:BUFFER-FIELD('Kurs') NO-ERROR.
  258. Kurs = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  259. hFeld = ipDebop:BUFFER-FIELD('Faktor') NO-ERROR.
  260. Faktor= INTEGER(hFeld:BUFFER-VALUE) NO-ERROR.
  261. hFeld = ipDebop:BUFFER-FIELD('Frw') NO-ERROR.
  262. cFrw = hFeld:BUFFER-VALUE NO-ERROR.
  263. IF Faktor = 0 THEN Faktor = 1.
  264. Kurs = ABS(ZaFrw) / ABS(Za) * Faktor.
  265. iRundcode = (IF cFrw = 'CHF' THEN 1 ELSE 0).
  266. hFeld = ipDebop:BUFFER-FIELD('Fakbetr_Frw') NO-ERROR.
  267. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  268. IF Betrag < 0 THEN PluMin = -1.
  269. ELSE PluMin = +1.
  270. FIND Adresse NO-LOCK
  271. WHERE Adresse.Firma = cFirma
  272. AND Adresse.Knr = ipDebop::Knr NO-ERROR.
  273. FIND Kondi NO-LOCK USE-INDEX Kondi-k1
  274. WHERE Kondi.Sprcd = Adresse.Sprcd
  275. AND Kondi.Kond = Kond NO-ERROR.
  276. IF NOT AVAILABLE Kondi THEN
  277. DO:
  278. FIND FIRST Kondi NO-LOCK
  279. WHERE Kondi.Kond = Kond NO-ERROR.
  280. END.
  281. FIND SteuNr NO-LOCK USE-INDEX SteuNr-k1
  282. WHERE SteuNr.Firma = cFirma NO-ERROR.
  283. hFeld = ipDebop:BUFFER-FIELD('Skber_Frw') NO-ERROR.
  284. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  285. IF SteuNr.Sk_Tol_% <> 0
  286. THEN SkMFrw = (Betrag * SteuNr.Sk_Tol_% / 100 * PluMin)
  287. + SteuNr.Sk_Tol_Max.
  288. ELSE SkMFrw = SteuNr.Sk_Tol_Max.
  289. SkMFrw = SkMFrw * PluMin.
  290. DO WHILE TRUE:
  291. IF NOT AVAILABLE Kondi THEN LEAVE.
  292. IF Kondi.Tage[01] = 0 THEN LEAVE.
  293. hFeld = ipDebop:BUFFER-FIELD('Fakdat') NO-ERROR.
  294. Dat1 = DATE (hFeld:BUFFER-VALUE) NO-ERROR.
  295. hFeld = ipDebop:BUFFER-FIELD('Zahdat') NO-ERROR.
  296. Dat2 = DATE (hFeld:BUFFER-VALUE) NO-ERROR.
  297. Dat1 = Dat1 + Kondi.Tage[01].
  298. IF Dat2 <= Dat1 THEN
  299. DO:
  300. hFeld = ipDebop:BUFFER-FIELD('Skber_Frw') NO-ERROR.
  301. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  302. SkFrw = Betrag * Kondi.Skonto[01] / 100.
  303. Sk = SkFrw * Kurs / Faktor.
  304. RUN RUNDEN ( INPUT iRundcode, INPUT-OUTPUT Sk ).
  305. SkFrw = Sk * Faktor / Kurs.
  306. LEAVE.
  307. END.
  308. IF Kondi.Tage[02] = 0 THEN LEAVE.
  309. hFeld = ipDebop:BUFFER-FIELD('Fakdat') NO-ERROR.
  310. Dat1 = DATE (hFeld:BUFFER-VALUE) NO-ERROR.
  311. Dat1 = Dat1 + Kondi.Tage[02].
  312. IF Dat2 <= Dat1 THEN
  313. DO:
  314. hFeld = ipDebop:BUFFER-FIELD('Skber_Frw') NO-ERROR.
  315. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  316. SkFrw = Betrag * Kondi.Skonto[02] / 100.
  317. Sk = SkFrw * Kurs / Faktor.
  318. RUN RUNDEN ( INPUT iRundcode, INPUT-OUTPUT Sk ).
  319. SkFrw = Sk * Faktor / Kurs.
  320. LEAVE.
  321. END.
  322. LEAVE.
  323. END.
  324. /* Skontomaximum inklusive Toleranz */
  325. SkMFrw = SkMFrw + SkFrw.
  326. SkM = SkMFrw * Kurs / Faktor.
  327. hFeld = ipDebop:BUFFER-FIELD('SkMax_Frw') NO-ERROR.
  328. hFeld:BUFFER-VALUE = STRING(SkMFrw) NO-ERROR.
  329. hFeld = ipDebop:BUFFER-FIELD('SkMax') NO-ERROR.
  330. hFeld:BUFFER-VALUE = STRING(SkM) NO-ERROR.
  331. /* -------------------------------- */
  332. IF SkFrw <> 0 THEN
  333. DO:
  334. hFeld = ipDebop:BUFFER-FIELD('Skonto_Frw') NO-ERROR.
  335. Betrag = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  336. IF (Betrag * PluMin) >= (SkFrw * PluMin) THEN
  337. DO:
  338. SkFrw = 0.
  339. Sk = 0.
  340. END.
  341. ELSE
  342. DO:
  343. SkFrw = SkFrw - Betrag.
  344. Sk = SkFrw * Kurs / Faktor.
  345. RUN RUNDEN ( INPUT iRundcode, INPUT-OUTPUT Sk ).
  346. SkFrw = Sk * Faktor / Kurs.
  347. END.
  348. END.
  349. ZaFrw = ZaFrw - SkFrw.
  350. Za = Za - Sk.
  351. hFeld = ipDebop:BUFFER-FIELD('ZahBetr_Frw') NO-ERROR.
  352. hFeld:BUFFER-VALUE = ZaFrw.
  353. hFeld = ipDebop:BUFFER-FIELD('ZahBetr') NO-ERROR.
  354. hFeld:BUFFER-VALUE = Za.
  355. hFeld = ipDebop:BUFFER-FIELD('Skonto_Frw') NO-ERROR.
  356. hFeld:BUFFER-VALUE = SkFrw.
  357. hFeld = ipDebop:BUFFER-FIELD('Skonto') NO-ERROR.
  358. hFeld:BUFFER-VALUE = Sk.
  359. END PROCEDURE.
  360. /* _UIB-CODE-BLOCK-END */
  361. &ANALYZE-RESUME
  362. &ENDIF
  363. &IF DEFINED(EXCLUDE-ZAHLUNGEN_BUCHEN) = 0 &THEN
  364. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZAHLUNGEN_BUCHEN Procedure
  365. PROCEDURE ZAHLUNGEN_BUCHEN :
  366. /*------------------------------------------------------------------------------*/
  367. /* Purpose: Super Override */
  368. /* Parameters: */
  369. /* Notes: */
  370. /*------------------------------------------------------------------------------*/
  371. DEFINE INPUT PARAMETER ipcFirma AS CHARACTER NO-UNDO.
  372. DEFINE INPUT PARAMETER ipiZahArt AS INTEGER NO-UNDO.
  373. DEFINE VARIABLE cKtoSko AS CHARACTER NO-UNDO.
  374. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO.
  375. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO.
  376. DEFINE VARIABLE FBFirma AS CHARACTER NO-UNDO.
  377. DEFINE VARIABLE StFirma AS CHARACTER NO-UNDO.
  378. DEFINE VARIABLE nBetrag AS INTEGER NO-UNDO.
  379. DEFINE VARIABLE iFaknr AS INTEGER NO-UNDO.
  380. DEFINE VARIABLE cRetVal AS CHARACTER NO-UNDO.
  381. DEFINE VARIABLE cKte AS CHARACTER NO-UNDO.
  382. DEFINE VARIABLE hDebza AS HANDLE NO-UNDO.
  383. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  384. FIND bSteuer NO-LOCK
  385. WHERE bSteuer.Firma = ipcFirma NO-ERROR.
  386. ASSIGN
  387. AdFirma = bSteuer.AdFirma
  388. FBFirma = bSteuer.FBFirma
  389. StFirma = bSteuer.StFirma
  390. cFirma = bSteuer.Firma.
  391. FIND bSteuNr NO-LOCK
  392. WHERE bSteunr.Firma = ipcFirma NO-ERROR.
  393. FOR EACH bZahlung
  394. WHERE bZahlung.Firma = cFirma
  395. AND bZahlung.Zahl_Art = ipiZahArt
  396. AND bZahlung.Verbucht = FALSE :
  397. iFaknr = INTEGER(bZahlung.Faknr).
  398. FIND bDebop
  399. WHERE bDebop.Firma = bZahlung.Firma
  400. AND bDebop.Knr = bZahlung.Knr
  401. AND bDebop.Faknr = iFaknr NO-ERROR.
  402. IF NOT AVAILABLE bDebop THEN
  403. DO:
  404. cRetVal = SUBSTITUTE('Kein OP für Knr &1 und Faknr &2', bZahlung.Knr, bZahlung.Faknr).
  405. RETURN cRetVal.
  406. END.
  407. FIND bDebst
  408. WHERE bDebst.Firma = bDebop.Firma
  409. AND bDebst.Knr = bDebop.Knr.
  410. FIND FIRST tDebop NO-ERROR.
  411. IF NOT AVAILABLE tDebop THEN CREATE tDebop.
  412. ASSIGN
  413. tDebop.Firma = bZahlung.Firma
  414. tDebop.Knr = bZahlung.Knr
  415. tDebop.Faknr = iFaknr
  416. tDebop.Kurs = bZahlung.Kurs
  417. tDebop.Faktor = bZahlung.Faktor
  418. tDebop.Frw = bZahlung.Frw
  419. tDebop.Zahdat = bZahlung.Datum_1
  420. tDebop.Zahbetr_Frw = bZahlung.Betrag
  421. tDebop.Zahbetr = bZahlung.Betrag * bZahlung.Kurs / bZahlung.Faktor
  422. tDebop.Skonto_Frw = bZahlung.Skonto
  423. tDebop.Skonto = bZahlung.Skonto * bZahlung.Kurs / bZahlung.Faktor
  424. tDebop.Konto = bDebop.Konto
  425. tDebop.ZaKonto = bZahlung.Konto_S
  426. .
  427. RUN ZAHLUNG_BUCHEN ( htDebop, bZahlung.Herk ).
  428. bZahlung.Verbucht = TRUE.
  429. END.
  430. END PROCEDURE.
  431. /* _UIB-CODE-BLOCK-END */
  432. &ANALYZE-RESUME
  433. &ENDIF
  434. &IF DEFINED(EXCLUDE-ZAHLUNG_BUCHEN) = 0 &THEN
  435. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ZAHLUNG_BUCHEN Procedure
  436. PROCEDURE ZAHLUNG_BUCHEN :
  437. /*------------------------------------------------------------------------------*/
  438. /* Purpose: Super Override */
  439. /* Parameters: */
  440. /* Notes: */
  441. /*------------------------------------------------------------------------------*/
  442. DEFINE INPUT PARAMETER ipDebop AS HANDLE NO-UNDO.
  443. DEFINE INPUT PARAMETER ipHerk AS INTEGER NO-UNDO.
  444. DEFINE VARIABLE Firma AS CHARACTER NO-UNDO.
  445. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO.
  446. DEFINE VARIABLE FBFirma AS CHARACTER NO-UNDO.
  447. DEFINE VARIABLE Knr AS INTEGER NO-UNDO.
  448. DEFINE VARIABLE Faknr AS INTEGER NO-UNDO.
  449. DEFINE VARIABLE Tranr AS INTEGER NO-UNDO.
  450. DEFINE VARIABLE TrNr1 AS INTEGER NO-UNDO.
  451. DEFINE VARIABLE TrNr2 AS INTEGER NO-UNDO.
  452. DEFINE VARIABLE Datum AS DATE NO-UNDO.
  453. DEFINE VARIABLE DeKto AS CHARACTER NO-UNDO.
  454. DEFINE VARIABLE ZaKto AS CHARACTER NO-UNDO.
  455. DEFINE VARIABLE SkKto AS CHARACTER NO-UNDO.
  456. DEFINE VARIABLE KdKto AS CHARACTER NO-UNDO.
  457. DEFINE VARIABLE M1Kto AS CHARACTER NO-UNDO.
  458. DEFINE VARIABLE M2Kto AS CHARACTER NO-UNDO.
  459. DEFINE VARIABLE SMKto AS CHARACTER NO-UNDO.
  460. DEFINE VARIABLE Butxt1 AS CHARACTER NO-UNDO.
  461. DEFINE VARIABLE Butxt2 AS CHARACTER NO-UNDO.
  462. DEFINE VARIABLE cDebitorSammKto AS CHARACTER NO-UNDO.
  463. DEFINE VARIABLE cSkontoSammKto AS CHARACTER NO-UNDO.
  464. DEFINE VARIABLE cKursdiffSammKto AS CHARACTER NO-UNDO.
  465. DEFINE VARIABLE cMwstKtoSoll AS CHARACTER NO-UNDO.
  466. DEFINE VARIABLE cMwstKtoHaben AS CHARACTER NO-UNDO.
  467. DEFINE VARIABLE Za AS DECIMAL NO-UNDO.
  468. DEFINE VARIABLE Sk AS DECIMAL NO-UNDO.
  469. DEFINE VARIABLE ZaFrw AS DECIMAL NO-UNDO.
  470. DEFINE VARIABLE SkFrw AS DECIMAL NO-UNDO.
  471. DEFINE VARIABLE Kurs AS DECIMAL DECIMALS 8 NO-UNDO.
  472. DEFINE VARIABLE Faktor AS INTEGER NO-UNDO.
  473. DEFINE VARIABLE Frw AS CHARACTER NO-UNDO.
  474. DEFINE VARIABLE Betrag AS DECIMAL DECIMALS 4 NO-UNDO.
  475. DEFINE VARIABLE VTot AS DECIMAL EXTENT 12 NO-UNDO.
  476. DEFINE VARIABLE VZah AS DECIMAL EXTENT 12 NO-UNDO.
  477. DEFINE VARIABLE VSko AS DECIMAL EXTENT 12 NO-UNDO.
  478. DEFINE VARIABLE VZRes AS DECIMAL NO-UNDO.
  479. DEFINE VARIABLE VSRes AS DECIMAL NO-UNDO.
  480. DEFINE VARIABLE VMax AS INTEGER NO-UNDO.
  481. DEFINE VARIABLE VAntZ AS DECIMAL DECIMALS 4 NO-UNDO.
  482. DEFINE VARIABLE VAntS AS DECIMAL DECIMALS 4 NO-UNDO.
  483. DEFINE VARIABLE zz AS INTEGER NO-UNDO.
  484. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  485. DEFINE VARIABLE xKnr AS INTEGER NO-UNDO.
  486. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  487. hFeld = ipDebop:BUFFER-FIELD('Firma') NO-ERROR.
  488. Firma = hFeld:BUFFER-VALUE NO-ERROR.
  489. FIND Steuer NO-LOCK USE-INDEX Steuer-k1
  490. WHERE Steuer.Firma = Firma NO-ERROR.
  491. AdFirma = Steuer.AdFirma.
  492. FBFirma = Steuer.FBFirma.
  493. D1Firma = Steuer.Firma.
  494. FIND SteuNr NO-LOCK USE-INDEX SteuNr-k1
  495. WHERE SteuNr.Firma = Firma NO-ERROR.
  496. M1Kto = SteuNr.Konto_Wust_H.
  497. hFeld = ipDebop:BUFFER-FIELD('Knr') NO-ERROR.
  498. Knr = INTEGER(hFeld:BUFFER-VALUE) NO-ERROR.
  499. hFeld = ipDebop:BUFFER-FIELD('Faknr') NO-ERROR.
  500. Faknr = INTEGER(hFeld:BUFFER-VALUE) NO-ERROR.
  501. hFeld = ipDebop:BUFFER-FIELD('Zahdat') NO-ERROR.
  502. Datum = DATE (hFeld:BUFFER-VALUE) NO-ERROR.
  503. hFeld = ipDebop:BUFFER-FIELD('Zahbetr_Frw') NO-ERROR.
  504. ZaFrw = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  505. hFeld = ipDebop:BUFFER-FIELD('Zahbetr') NO-ERROR.
  506. Za = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  507. hFeld = ipDebop:BUFFER-FIELD('Skonto_Frw') NO-ERROR.
  508. SkFrw = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  509. hFeld = ipDebop:BUFFER-FIELD('Skonto') NO-ERROR.
  510. Sk = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  511. hFeld = ipDebop:BUFFER-FIELD('Kurs') NO-ERROR.
  512. Kurs = DECIMAL(hFeld:BUFFER-VALUE) NO-ERROR.
  513. hFeld = ipDebop:BUFFER-FIELD('Faktor') NO-ERROR.
  514. Faktor= INTEGER(hFeld:BUFFER-VALUE) NO-ERROR.
  515. hFeld = ipDebop:BUFFER-FIELD('Frw') NO-ERROR.
  516. Frw = hFeld:BUFFER-VALUE NO-ERROR.
  517. hFeld = ipDebop:BUFFER-FIELD('Konto') NO-ERROR.
  518. DeKto = hFeld:BUFFER-VALUE NO-ERROR.
  519. hFeld = ipDebop:BUFFER-FIELD('ZaKonto') NO-ERROR.
  520. ZaKto = hFeld:BUFFER-VALUE NO-ERROR.
  521. EMPTY TEMP-TABLE WFile.
  522. FIND Adresse USE-INDEX Adresse-k1
  523. WHERE Adresse.Firma = AdFirma
  524. AND Adresse.Knr = Knr NO-LOCK NO-ERROR.
  525. IF NOT AVAILABLE Adresse THEN RETURN 'ERROR'.
  526. IF Adresse.Firma1 <> '' THEN Butxt1 = Adresse.Firma1 + ', '.
  527. ELSE Butxt1 = Adresse.Name + ', '.
  528. IF Adresse.Lkz <> 'CH' THEN Butxt1 = Butxt1 + Adresse.Lkz + ' '.
  529. Butxt1 = Butxt1 + Adresse.Plz + ' ' + Adresse.Ort.
  530. Butxt2 = 'Debitorzahlung Rechnung ' + STRING(Faknr,'9999999').
  531. FIND Waehrung NO-LOCK USE-INDEX Waehrung-k1
  532. WHERE Waehrung.Firma = D1Firma
  533. AND Waehrung.FRW = Frw NO-ERROR.
  534. IF NOT AVAILABLE Waehrung THEN RETURN 'ERROR'.
  535. IF ipHerk >= 50 AND
  536. ipHerk <= 69 THEN
  537. DO:
  538. cDebitorSammKto = DeKto.
  539. IF cDebitorSammKto = '' THEN cDebitorSammKto = (IF Waehrung.DebSammKto = '' THEN SteuNr.Konto_Debit ELSE Waehrung.DebSammKto ).
  540. IF cDebitorSammKto = '' THEN cDebitorSammKto = 'Debitoren'.
  541. cSkontoSammKto = (IF Waehrung.SkontoSammKto = '' THEN SteuNr.Konto_Skonto ELSE Waehrung.SkontoSammKto).
  542. IF cSkontoSammKto = '' THEN cSkontoSammKto = 'Skonto'.
  543. cKursdiffSammKto = Waehrung.KursDiffKto.
  544. IF cKursdiffSammKto = '' THEN cKursdiffSammKto = 'Kursdiff'.
  545. END.
  546. REPEAT TRANSACTION:
  547. EMPTY TEMP-TABLE tZahInterf.
  548. FIND Debst USE-INDEX Debst-k1
  549. WHERE Debst.Firma = Firma
  550. AND Debst.Knr = Knr NO-ERROR.
  551. IF NOT AVAILABLE Debst THEN RETURN 'ERROR'.
  552. FIND Debop USE-INDEX Debop-k1
  553. WHERE Debop.Firma = Firma
  554. AND Debop.Knr = Knr
  555. AND Debop.Faknr = Faknr NO-ERROR.
  556. IF NOT AVAILABLE Debop THEN RETURN 'ERROR'.
  557. TrNr1 = Debop.TrNr1.
  558. RUN LOESEN_TRANSNUMMER ( INPUT-OUTPUT TrNr1, INPUT-OUTPUT TrNr2, INPUT ipHerk).
  559. Tranr = 1.
  560. FIND LAST Debza NO-LOCK USE-INDEX Debza-k1
  561. WHERE Debza.Firma = Firma
  562. AND Debza.Knr = Knr
  563. AND Debza.Faknr = Faknr NO-ERROR.
  564. IF AVAILABLE Debza THEN Tranr = Debza.Trnr + 1.
  565. CREATE Debza.
  566. ASSIGN
  567. Debza.Firma = Firma
  568. Debza.Knr = Knr
  569. Debza.Faknr = Faknr
  570. Debza.Trnr = Tranr
  571. Debza.Zahdat = Datum
  572. Debza.Zahbetr_Frw = ZaFrw
  573. Debza.Zahbetr = Za
  574. Debza.Skonto_Frw = SkFrw
  575. Debza.Skonto = Sk
  576. Debza.FRW = Frw
  577. Debza.Kurs = Kurs
  578. Debza.Faktor = Faktor
  579. Debza.TrNr1 = TrNr1
  580. Debza.TrNr2 = TrNr2
  581. Debza.Konto = ZaKto.
  582. /* Zahlbetrag */
  583. CREATE WFile.
  584. ASSIGN
  585. WFile.Kto1 = Debza.Konto
  586. WFile.Kto2 = cDebitorSammKto
  587. WFile.Betrag_Frw = Debza.Zahbetr_Frw
  588. WFile.Betrag = Debza.Zahbetr
  589. WFile.MWST_Cd = 0
  590. WFile.Frw = Debza.Frw
  591. WFile.Kurs = Debza.Kurs
  592. WFile.Faktor = Debza.Faktor
  593. WFile.KD_Fl = FALSE. /* Kursdifferenz-Flag */
  594. /* Skontobetrag */
  595. IF Debza.Skonto_Frw <> 0 THEN
  596. DO:
  597. CREATE WFile.
  598. ASSIGN
  599. WFile.Kto1 = cSkontoSammKto
  600. WFile.Kto2 = cDebitorSammKto
  601. WFile.Betrag_Frw = Debza.Skonto_Frw
  602. WFile.Betrag = Debza.Skonto
  603. WFile.MWST_Cd = 0
  604. WFile.Frw = Debza.Frw
  605. WFile.Kurs = Debza.Kurs
  606. WFile.Faktor = Debza.Faktor
  607. WFile.KD_Fl = FALSE. /* Kursdifferenz-Flag */
  608. END.
  609. /* Mehrwertsteuerverteilung */
  610. VMax = 0.
  611. FIND FIRST tMwstParam NO-ERROR.
  612. IF NOT AVAILABLE tMwstParam THEN CREATE tMwstParam.
  613. ASSIGN
  614. tMwstParam.Firma = Debop.Firma
  615. tMwstParam.Knr = Debop.Knr
  616. tMwstParam.Faknr = Debop.Faknr
  617. tMwstParam.Frw = Debop.Frw
  618. tMwstParam.Skonto = Sk
  619. tMwstParam.Zahlung = Za.
  620. DYNAMIC-FUNCTION ('calculateMwstZahlung':U, INPUT TABLE tMwstParam, OUTPUT TABLE tMwstZahl, OUTPUT cMessage).
  621. FOR EACH tMwstZahl USE-INDEX tMwstZahl-k1:
  622. zz = tMwstZahl.Mwst_Cd.
  623. ASSIGN
  624. Debza.Zahwpfl[zz] = tMwstZahl.Netto
  625. Debza.Zahwust[zz] = tMwstZahl.Mwst
  626. Debza.ZahSkon[zz] = tMwstZahl.Skonto.
  627. IF zz > VMax THEN VMax = zz.
  628. END.
  629. /* -------------------------- */
  630. CASE ipHerk.
  631. WHEN 61 THEN
  632. Debza.Kte = 'EZA'.
  633. WHEN 62 THEN
  634. Debza.Kte = 'BAR'.
  635. WHEN 63 THEN
  636. Debza.Kte = 'BES'.
  637. OTHERWISE
  638. Debza.Kte = 'ZAH'.
  639. END CASE.
  640. Debop.Zahdat = Debza.Zahdat.
  641. Debop.Saldo = Debop.Saldo - Za - Sk.
  642. Debop.Saldo_Frw = Debop.Saldo_Frw - ZaFrw - SkFrw.
  643. Debop.Skonto = Debop.Skonto + Sk.
  644. Debop.Skonto_Frw = Debop.Skonto_Frw + SkFrw.
  645. Debop.Zahbetr = Debop.Zahbetr + Za.
  646. Debop.Zahbetr_Frw = Debop.Zahbetr_Frw + ZaFrw.
  647. DO zz = 1 TO VMax:
  648. IF Debza.ZahWpfl[zz] = 0 THEN NEXT.
  649. ASSIGN
  650. Debop.ZahWpfl[zz] = Debop.ZahWpfl[zz] + Debza.ZahWpfl[zz]
  651. Debop.ZahWust[zz] = Debop.ZahWust[zz] + Debza.ZahWust[zz]
  652. Debop.ZahSkon[zz] = Debop.ZahSkon[zz] + Debza.ZahSkon[zz].
  653. END.
  654. Debst.Saldo = Debst.Saldo - Za - Sk .
  655. Debst.Saldo_Frw = Debst.Saldo_Frw - ZaFrw - SkFrw.
  656. FIND LAST Debhi NO-LOCK USE-INDEX Debhi-k1
  657. WHERE Debhi.Firma = Debza.Firma
  658. AND Debhi.Knr = Debza.Knr NO-ERROR.
  659. IF AVAILABLE Debhi THEN Tranr = Debhi.Trnr + 1.
  660. ELSE Tranr = 1.
  661. CREATE Debhi.
  662. ASSIGN
  663. Debhi.Firma = Debza.Firma
  664. Debhi.Knr = Debza.Knr
  665. Debhi.Trnr = Tranr
  666. Debhi.Datum = Debza.Zahdat
  667. Debhi.Faknr = Debza.Faknr
  668. Debhi.Kte = Debza.Kte
  669. Debhi.TrNr1 = Debza.TrNr1
  670. Debhi.TrNr2 = Debza.TrNr2
  671. Debhi.Soll = 0
  672. Debhi.Soll_Frw = 0
  673. Debhi.Haben = Debza.Zahbetr
  674. Debhi.Haben_Frw = Debza.Zahbetr_Frw
  675. Debhi.Skonto = Debza.Skonto
  676. Debhi.Skonto_Frw = Debza.Skonto_Frw
  677. Debhi.Transp = 0
  678. Debhi.Porto = 0
  679. Debhi.Verp = 0
  680. Debhi.Konto = Debza.Konto
  681. Debhi.FRW = Debza.Frw
  682. Debhi.Kurs = Debza.Kurs
  683. Debhi.Faktor = Debza.Faktor
  684. Debhi.Saldo = Debst.Saldo_Frw.
  685. IF NOT Debop.Wustabr THEN
  686. DO:
  687. FIND LAST Debwu NO-LOCK USE-INDEX Debwu-k1
  688. WHERE Debwu.Firma = Debza.Firma
  689. AND Debwu.Knr = Debza.Knr
  690. AND Debwu.Faknr = Debza.Faknr NO-ERROR.
  691. IF AVAILABLE Debwu THEN Tranr = Debwu.Trnr + 1.
  692. ELSE Tranr = 1.
  693. CREATE Debwu.
  694. ASSIGN
  695. Debwu.Firma = Debza.Firma
  696. Debwu.Knr = Debza.Knr
  697. Debwu.Faknr = Debza.Faknr
  698. Debwu.Trnr = Tranr
  699. Debwu.TrNr1 = Debza.TrNr1
  700. Debwu.TrNr2 = Debza.TrNr2
  701. Debwu.Datum = Debza.Zahdat
  702. Debwu.Betrag = Debza.Zahbetr
  703. Debwu.Betrag_Frw = Debza.Zahbetr_Frw
  704. Debwu.Konto = cMwstKtoSoll
  705. Debwu.Kte = Debza.Kte
  706. Debwu.FRW = Debza.Frw
  707. Debwu.Kurs = Debza.Kurs
  708. Debwu.Faktor = Debza.Faktor
  709. Debwu.Wustpfl = Debza.Zahwpfl
  710. Debwu.Wust = Debza.Zahwust
  711. Debwu.Skonto = Debza.ZahSkon
  712. .
  713. cMwstKtoHaben = SteuNr.Konto_Wust_H.
  714. IF cMwstKtoHaben = '' THEN cMwstKtoHaben = 'MwstHaben'.
  715. FOR EACH tMwstZahl USE-INDEX tMwstZahl-k1:
  716. zz = tMwstZahl.Mwst_Cd.
  717. cMwstKtoSoll = ''.
  718. FIND LAST MWSTAns NO-LOCK
  719. WHERE MWSTAns.MWST_Cd = zz
  720. AND MWSTAns.Datum <= Debop.Fakdat NO-ERROR.
  721. IF AVAILABLE MWSTAns THEN cMwstKtoSoll = MWSTAns.Konto.
  722. IF cMwstKtoSoll = '' THEN
  723. DO:
  724. FIND FIRST Wust NO-LOCK
  725. WHERE Wust.WuCd = zz NO-ERROR.
  726. IF AVAILABLE Wust THEN cMwstKtoSoll = Wust.Konto.
  727. END.
  728. IF cMwstKtoSoll = '' THEN
  729. DO:
  730. cMwstKtoSoll = SteuNr.Konto_Wust_S.
  731. END.
  732. IF cMwstKtoSoll = '' THEN cMwstKtoHaben = 'MwstSoll'.
  733. IF tMwstZahl.lInklusive THEN Betrag = tMwstZahl.Netto * tMwstZahl.Ansatz / (100 + tMwstZahl.Ansatz).
  734. ELSE Betrag = tMwstZahl.Mwst.
  735. CREATE WFile.
  736. ASSIGN
  737. WFile.Kto1 = cMwstKtoHaben
  738. WFile.Kto2 = cMwstKtoSoll
  739. WFile.Betrag_Frw = Betrag / Debza.Kurs * Debza.Faktor
  740. WFile.Betrag = Betrag
  741. WFile.MWST_Cd = zz
  742. WFile.Frw = Debza.Frw
  743. WFile.Kurs = Debza.Kurs
  744. WFile.Faktor = Debza.Faktor
  745. WFile.KD_Fl = FALSE. /* Kursdifferenz-Flag */
  746. IF zz > VMax THEN VMax = zz.
  747. END.
  748. END.
  749. /* ------ Kursdifferenzen ------------------------- */
  750. IF Debop.Frw <> Steuer.Fwc03 THEN
  751. DO:
  752. IF Debop.Saldo_Frw = 0 THEN
  753. ASSIGN
  754. Betrag = Debop.Saldo.
  755. ELSE
  756. DO:
  757. ASSIGN
  758. Betrag = ((ZaFrw + SkFrw) * Debop.Kurs / Debop.Fakt)
  759. - ((ZaFrw + SkFrw) * Debza.Kurs / Debza.Fakt).
  760. Betrag = DECIMAL(SUBSTRING(STRING(Betrag,'-999999999.9999'),01,13)).
  761. END.
  762. IF Betrag <> 0.00 THEN
  763. DO:
  764. CREATE WFile.
  765. ASSIGN
  766. WFile.Kto1 = cKursdiffSammKto
  767. WFile.Kto2 = cDebitorSammKto
  768. WFile.MWST_Cd = 0
  769. WFile.Frw = Steuer.Fwc03
  770. WFile.Kurs = 1.0
  771. WFile.Faktor = 1
  772. WFile.Betrag_Frw = Betrag
  773. WFile.Betrag = Betrag
  774. WFile.KD_Fl = TRUE.
  775. ASSIGN
  776. Debop.Zahbetr = Debop.Zahbetr + Betrag
  777. Debop.Saldo = Debop.Saldo - Betrag
  778. Debst.Saldo = Debst.Saldo - Betrag.
  779. FIND LAST Debhi USE-INDEX Debhi-k1
  780. WHERE Debhi.Firma = Firma
  781. AND Debhi.Knr = Knr NO-LOCK NO-ERROR.
  782. IF AVAILABLE Debhi THEN Tranr = Debhi.Trnr + 1.
  783. ELSE Tranr = 1.
  784. CREATE Debhi.
  785. ASSIGN
  786. Debhi.Firma = Debza.Firma
  787. Debhi.Knr = Debza.Knr
  788. Debhi.Trnr = Tranr
  789. Debhi.Datum = Debza.Zahdat
  790. Debhi.Faknr = Debza.Faknr
  791. Debhi.Kte = 'KDI'
  792. Debhi.TrNr1 = Debza.TrNr1
  793. Debhi.TrNr2 = Debza.TrNr2
  794. Debhi.Soll = 0
  795. Debhi.Soll_Frw = 0
  796. Debhi.Haben = Betrag
  797. Debhi.Haben_Frw = 0
  798. Debhi.Skonto = 0
  799. Debhi.Skonto_Frw = 0
  800. Debhi.Transp = 0
  801. Debhi.Porto = 0
  802. Debhi.Verp = 0
  803. Debhi.Konto = KdKto
  804. Debhi.FRW = Steuer.Fwc03
  805. Debhi.Kurs = 1.0
  806. Debhi.Faktor = 1
  807. Debhi.Saldo = Debst.Saldo_Frw.
  808. END.
  809. END.
  810. CREATE tZahInterf.
  811. ASSIGN
  812. tZahInterf.Firma = FBFirma
  813. tZahInterf.TrNr1 = TrNr1
  814. tZahInterf.TrNr2 = TrNr2
  815. tZahInterf.Buchtxt1 = Butxt1
  816. tZahInterf.Buchtxt2 = Butxt2
  817. tZahInterf.Herk = ipHerk
  818. tZahInterf.Datum = Datum
  819. tZahInterf.Faknr = STRING(Faknr,'9999999')
  820. tZahInterf.Knr = Knr
  821. tZahInterf.MWST_Nr = ''
  822. tZahInterf.HKFirma = Firma.
  823. RUN WORKFILE_INTERFACE.
  824. RELEASE Debst.
  825. RELEASE Debop.
  826. RELEASE Debhi.
  827. RELEASE Debza.
  828. RELEASE Debwu.
  829. LEAVE.
  830. END.
  831. END PROCEDURE.
  832. /* _UIB-CODE-BLOCK-END */
  833. &ANALYZE-RESUME
  834. &ENDIF
  835. /* ************************ Function Implementations ***************** */
  836. &IF DEFINED(EXCLUDE-calculateMwstFaktura) = 0 &THEN
  837. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculateMwstFaktura Procedure
  838. FUNCTION calculateMwstFaktura RETURNS LOGICAL
  839. ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstCalc, OUTPUT opcMessage AS CHARACTER ) :
  840. /*------------------------------------------------------------------------------
  841. Purpose:
  842. Notes:
  843. ------------------------------------------------------------------------------*/
  844. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  845. DEFINE VARIABLE nWW AS DECIMAL NO-UNDO INIT 0.00.
  846. DEFINE VARIABLE nProz AS DECIMAL NO-UNDO INIT 100.00.
  847. DEFINE VARIABLE nFakBetr AS DECIMAL NO-UNDO.
  848. DEFINE VARIABLE nTotNebenkosten AS DECIMAL NO-UNDO DECIMALS 2.
  849. DEFINE VARIABLE nRestNebenkosten AS DECIMAL NO-UNDO DECIMALS 2.
  850. DEFINE VARIABLE iFaktNebenkosten AS INTEGER NO-UNDO.
  851. DEFINE VARIABLE htMwstCalc AS HANDLE NO-UNDO.
  852. DEFINE VARIABLE iStdCd AS INTEGER NO-UNDO.
  853. DEFINE VARIABLE nStdAnsatz AS DECIMAL NO-UNDO.
  854. DEFINE VARIABLE nRundbetr AS DECIMAL NO-UNDO DECIMALS 4.
  855. DEFINE VARIABLE iRundcode AS INTEGER NO-UNDO INIT 1.
  856. DEFINE VARIABLE cFrw AS CHARACTER NO-UNDO.
  857. DEFINE VARIABLE nMwstBetr AS DECIMAL NO-UNDO.
  858. DEFINE BUFFER btMwstCalc FOR tMwstCalc.
  859. htMwstCalc = TEMP-TABLE tMwstCalc:DEFAULT-BUFFER-HANDLE.
  860. EMPTY TEMP-TABLE tMwstCalc.
  861. FIND FIRST tMwstParam.
  862. opcMessage = ''.
  863. nFakBetr = 0.00.
  864. nMwstBetr = 0.00.
  865. /* iRundcode = (IF tMwstParam.Frw = 'CHF' THEN 1 ELSE 0).*/
  866. iRundcode = 0.
  867. cFrw = tMwstParam.Frw.
  868. DO i1 = 1 TO 11:
  869. IF tMwstParam.MwstPfl[i1] = 0 THEN NEXT.
  870. FIND LAST MwstAns NO-LOCK
  871. WHERE MwstAns.Mwst_Cd = i1
  872. AND MwstAns.Datum <= tMwstParam.Datum NO-ERROR.
  873. CREATE tMwstCalc.
  874. ASSIGN
  875. tMwstCalc.Mwst_Cd = i1
  876. tMwstCalc.Faktor = (IF tMwstParam.MwstPfl[i1] >= 0 THEN 1 ELSE -1)
  877. tMwstCalc.Ansatz = MWSTAns.Ansatz
  878. tMwstCalc.lInklusive = MWSTAns.Incl.
  879. IF tMwstCalc.lInklusive THEN
  880. DO:
  881. ASSIGN
  882. tMwstCalc.Brutto = tMwstParam.MwstPfl[i1]
  883. nRundbetr = tMwstCalc.Brutto * tMwstCalc.Ansatz / (100 + tMwstCalc.Ansatz).
  884. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundbetr).
  885. tMwstCalc.Mwst = nRundbetr.
  886. tMwstCalc.Netto = tMwstCalc.Brutto - tMwstCalc.Mwst.
  887. END.
  888. ELSE
  889. DO:
  890. ASSIGN
  891. tMwstCalc.Netto = tMwstParam.MwstPfl[i1]
  892. nRundbetr = tMwstParam.MwstPfl[i1] * tMwstCalc.Ansatz / 100.
  893. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundbetr).
  894. tMwstCalc.Mwst = nRundbetr.
  895. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst.
  896. END.
  897. ASSIGN
  898. tMwstCalc.WW = tMwstCalc.Netto
  899. tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto)
  900. tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto )
  901. tMwstCalc.AbsMwst = ABS(tMwstCalc.Mwst )
  902. .
  903. ASSIGN
  904. tMwstCalc.BruttoOhne = tMwstCalc.Brutto
  905. tMwstCalc.NettoOhne = tMwstCalc.Netto
  906. tMwstCalc.MwstOhne = tMwstCalc.Mwst.
  907. nWW = nWW + ABS(tMwstCalc.WW).
  908. nFakBetr = nFakBetr + tMwstCalc.Brutto.
  909. nMwstBetr = nMwstBetr + (IF tMwstCalc.lInklusive THEN 0.00 ELSE tMwstCalc.Mwst).
  910. END.
  911. FIND FIRST tMwstCalc NO-ERROR.
  912. DO WHILE NOT AVAILABLE tMwstCalc: /* Nur Nebenkosten ? */
  913. IF tMwstParam.MwstPfl[12] = 0 THEN LEAVE. /* Keine Nebenkosten, Keine Beträge */
  914. /* Nebenkosten zum ersten Ansatz aus Wusttabelle */
  915. DO i1 = 1 TO 11:
  916. FIND Wust NO-LOCK
  917. WHERE Wust.CodeK = tMwstParam.MwstCdKd
  918. AND Wust.CodeA = i1 NO-ERROR.
  919. IF NOT AVAILABLE Wust THEN NEXT.
  920. FIND LAST MwstAns NO-LOCK
  921. WHERE MwstAns.Mwst_Cd = Wust.Wucd
  922. AND MwstAns.Datum <= tMwstParam.Datum NO-ERROR.
  923. IF NOT AVAILABLE MwstAns THEN NEXT.
  924. ASSIGN
  925. iStdCd = Wust.WuCd
  926. nStdAnsatz = MwstAns.Ansatz.
  927. LEAVE.
  928. END.
  929. /* Nur Kosten */
  930. CREATE tMwstCalc.
  931. ASSIGN
  932. tMwstCalc.Mwst_Cd = iStdCd
  933. tMwstCalc.Faktor = (IF tMwstParam.MwstPfl[12] >= 0 THEN 1 ELSE -1)
  934. tMwstCalc.Ansatz = nStdAnsatz
  935. tMwstCalc.Fakbetr = 0
  936. tMwstCalc.ProzAnt = 100.00
  937. tMwstCalc.VerpAnt = 0.00
  938. tMwstCalc.Brutto = 0.00
  939. .
  940. ASSIGN
  941. tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto)
  942. tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto )
  943. tMwstCalc.AbsMwst = ABS(tMwstCalc.Mwst )
  944. .
  945. LEAVE.
  946. END.
  947. DO WHILE tMwstParam.MwstPfl[12] <> 0: /* Nebenkosten zum verteilen */
  948. CREATE tMwstCalc.
  949. ASSIGN
  950. tMwstCalc.Mwst_Cd = 999
  951. tMwstCalc.Faktor = (IF tMwstParam.MwstPfl[12] >= 0 THEN 1 ELSE -1)
  952. tMwstCalc.Ansatz = 0.0
  953. tMwstCalc.Brutto = tMwstParam.MwstPfl[12]
  954. tMwstCalc.Netto = tMwstParam.MwstPfl[12]
  955. tMwstCalc.Mwst = 0
  956. tMwstCalc.AbsBrutto = ABS(tMwstCalc.Brutto)
  957. tMwstCalc.AbsNetto = ABS(tMwstCalc.Netto )
  958. tMwstCalc.AbsMwst = 0
  959. tMwstCalc.ProzAnt = 0.
  960. LEAVE.
  961. END.
  962. DO WHILE TRUE:
  963. FIND FIRST tMwstCalc NO-ERROR.
  964. IF NOT AVAILABLE tMwstCalc THEN LEAVE.
  965. FIND FIRST btMwstCalc
  966. WHERE btMwstCalc.Mwst_Cd = 999 NO-ERROR.
  967. IF NOT AVAILABLE btMwstCalc THEN LEAVE.
  968. /* Verteilung der Nebenkosten */
  969. nRestNebenkosten = btMwstCalc.Brutto.
  970. nTotNebenkosten = btMwstCalc.AbsBrutto.
  971. iFaktNebenkosten = btMwstCalc.Faktor.
  972. ASSIGN
  973. nFakBetr = 0.00
  974. nMwstBetr = 0.00.
  975. FOR EACH tMwstCalc
  976. WHERE tMwstCalc.Mwst_Cd < 999
  977. BREAK
  978. BY tMwstCalc.Mwst_Cd:
  979. IF LAST(tMwstCalc.Mwst_Cd) THEN
  980. DO:
  981. tMwstCalc.ProzAnt = nProz.
  982. tMwstCalc.VerpAnt = nRestNebenkosten.
  983. IF tMwstCalc.lInklusive THEN
  984. DO:
  985. tMwstCalc.Brutto = tMwstCalc.Brutto + nRestNebenkosten.
  986. tMwstCalc.Netto = tMwstCalc.Brutto * 100 / (100 + tMwstCalc.Ansatz).
  987. tMwstCalc.Mwst = tMwstCalc.Brutto - tMwstCalc.Netto.
  988. END.
  989. ELSE
  990. DO:
  991. tMwstCalc.Netto = tMwstCalc.Netto + nRestNebenkosten.
  992. nRundbetr = tMwstCalc.Netto * tMwstCalc.Ansatz / 100.
  993. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundBetr).
  994. tMwstCalc.Mwst = nRundbetr.
  995. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst.
  996. END.
  997. nFakBetr = nFakBetr + tMwstCalc.Brutto.
  998. nMwstBetr = nMwstBetr + (IF tMwstCalc.lInklusive THEN 0.00 ELSE tMwstCalc.Mwst).
  999. LEAVE.
  1000. END.
  1001. tMwstCalc.ProzAnt = tMwstCalc.AbsNetto * 100 / nWW.
  1002. tMwstCalc.VerpAnt = nTotNebenkosten * tMwstCalc.ProzAnt / 100 * iFaktNebenkosten.
  1003. IF tMwstCalc.lInklusive THEN
  1004. DO:
  1005. tMwstCalc.Brutto = tMwstCalc.Brutto + tMwstCalc.VerpAnt.
  1006. tMwstCalc.Netto = tMwstCalc.Brutto * 100 / (100 + tMwstCalc.Ansatz).
  1007. tMwstCalc.Mwst = tMwstCalc.Brutto - tMwstCalc.Netto.
  1008. END.
  1009. ELSE
  1010. DO:
  1011. tMwstCalc.Netto = tMwstCalc.Netto + tMwstCalc.VerpAnt.
  1012. nRundbetr = tMwstCalc.Netto * tMwstCalc.Ansatz / 100.
  1013. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundBetr).
  1014. tMwstCalc.Mwst = nRundbetr.
  1015. tMwstCalc.Brutto = tMwstCalc.Netto + tMwstCalc.Mwst.
  1016. END.
  1017. nProz = nProz - tMwstCalc.ProzAnt.
  1018. nRestNebenkosten = nRestNebenkosten - tMwstCalc.VerpAnt.
  1019. nFakBetr = nFakBetr + tMwstCalc.Brutto.
  1020. nMwstBetr = nMwstBetr + (IF tMwstCalc.lInklusive THEN 0.00 ELSE tMwstCalc.Mwst).
  1021. END.
  1022. LEAVE.
  1023. END.
  1024. iRundcode = 1.
  1025. nRundbetr = nFakbetr.
  1026. RUN RUNDEN ( iRundcode, INPUT-OUTPUT nRundbetr ).
  1027. nFakbetr = nRundbetr.
  1028. opcMessage = SUBSTITUTE('&1;&2', nFakbetr, nMwstBetr).
  1029. RETURN TRUE.
  1030. END FUNCTION.
  1031. /* _UIB-CODE-BLOCK-END */
  1032. &ANALYZE-RESUME
  1033. &ENDIF
  1034. &IF DEFINED(EXCLUDE-calculateMwstZahlung) = 0 &THEN
  1035. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculateMwstZahlung Procedure
  1036. FUNCTION calculateMwstZahlung RETURNS LOGICAL
  1037. ( INPUT TABLE FOR tMwstParam, OUTPUT TABLE FOR tMwstZahl, OUTPUT opcMessage AS CHARACTER ) :
  1038. /*------------------------------------------------------------------------------*/
  1039. /* Purpose: Super Override */
  1040. /* Parameters: */
  1041. /* Notes: */
  1042. /*------------------------------------------------------------------------------*/
  1043. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  1044. DEFINE VARIABLE nProzZahlung AS DECIMAL NO-UNDO.
  1045. DEFINE VARIABLE nProzSkonto AS DECIMAL NO-UNDO.
  1046. DEFINE BUFFER bDebop FOR Debop.
  1047. EMPTY TEMP-TABLE tMwstZahl.
  1048. FIND FIRST tMwstParam.
  1049. opcMessage = ''.
  1050. FIND bDebop NO-LOCK
  1051. WHERE bDebop.Firma = tMwstParam.Firma
  1052. AND bDebop.Knr = tMwstParam.Knr
  1053. AND bDebop.Faknr = tMwstParam.Faknr.
  1054. IF tMwstParam.Zahlung <> 0 THEN nProzZahlung = tMwstParam.Zahlung * 100 / bDebop.Fakbetr.
  1055. ELSE nProzZahlung = 0.00.
  1056. IF tMwstParam.Skonto <> 0 THEN nProzSkonto = tMwstParam.Skonto * 100 / bDebop.Fakbetr.
  1057. ELSE nProzSkonto = 0.00.
  1058. DO i1 = 1 TO 11:
  1059. IF bDebop.Fakwpfl[i1] = 0 THEN NEXT.
  1060. CREATE tMwstZahl.
  1061. ASSIGN
  1062. tMwstZahl.Mwst_Cd = i1
  1063. tMwstZahl.Ansatz = bDebop.Fakwpro[i1]
  1064. tMwstZahl.lInklusive = bDebop.Fakincl[i1]
  1065. tMwstZahl.ZahlBetrag = bDebop.FakWpfl[i1] * nProzZahlung / 100
  1066. tMwstZahl.SkonBetrag = bDebop.FakWpfl[i1] * nProzSkonto / 100
  1067. .
  1068. IF tMwstZahl.lInklusive THEN
  1069. DO:
  1070. ASSIGN
  1071. tMwstZahl.Brutto = tMwstZahl.ZahlBetrag
  1072. tMwstZahl.Mwst = 0.00
  1073. tMwstZahl.Netto = tMwstZahl.Brutto
  1074. tMwstZahl.Skonto = tMwstZahl.SkonBetrag.
  1075. END.
  1076. ELSE
  1077. DO:
  1078. ASSIGN
  1079. tMwstZahl.Mwst = tMwstZahl.ZahlBetrag * tMwstZahl.Ansatz / 100
  1080. tMwstZahl.Brutto = tMwstZahl.ZahlBetrag + tMwstZahl.Mwst
  1081. tMwstZahl.Netto = tMwstZahl.Brutto - tMwstZahl.Mwst
  1082. tMwstZahl.Skonto = tMwstZahl.SkonBetrag.
  1083. END.
  1084. END.
  1085. RETURN TRUE.
  1086. END FUNCTION.
  1087. /* _UIB-CODE-BLOCK-END */
  1088. &ANALYZE-RESUME
  1089. &ENDIF
  1090. &IF DEFINED(EXCLUDE-createTransNr) = 0 &THEN
  1091. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createTransNr Procedure
  1092. FUNCTION createTransNr RETURNS LOGICAL
  1093. ( INPUT-OUTPUT ioTrNr1 AS INTEGER, INPUT-OUTPUT ioTrNr2 AS INTEGER,
  1094. INPUT ipStFirma AS CHARACTER, INPUT ipnBetrag AS DECIMAL, INPUT ipHerk AS INTEGER ):
  1095. /*------------------------------------------------------------------------------
  1096. Purpose:
  1097. Notes:
  1098. ------------------------------------------------------------------------------*/
  1099. REPEAT TRANSACTION:
  1100. IF ioTrNr1 = 0 THEN
  1101. DO:
  1102. FIND LAST TransNr NO-LOCK
  1103. WHERE TransNr.Firma = ipStFirma NO-ERROR.
  1104. IF AVAILABLE TransNr THEN ioTrNr1 = TransNr.TrNr1 + 1.
  1105. ELSE ioTrNr1 = 1.
  1106. ioTrNr2 = 1.
  1107. END.
  1108. IF ioTrNr2 = 0 THEN
  1109. DO:
  1110. FIND LAST TransNr NO-LOCK
  1111. WHERE TransNr.Firma = ipStFirma
  1112. AND TransNr.TrNr1 = ioTrNr1 NO-ERROR.
  1113. IF AVAILABLE TransNr THEN ioTrNr2 = TransNr.TrNr2 + 1.
  1114. ELSE ioTrNr2 = 1.
  1115. END.
  1116. CREATE TransNr.
  1117. ASSIGN
  1118. TransNr.Firma = ipStFirma
  1119. TransNr.TrNr1 = ioTrnr1
  1120. TransNr.TrNr2 = ioTrnr2
  1121. TransNr.Herk = ipHerk
  1122. TransNr.Erf_Datum = TODAY
  1123. TransNr.Erf_Zeit = TIME
  1124. TransNr.SaBe = DYNAMIC-FUNCTION('getSysUser':U)
  1125. TransNr.Betrag = ipnBetrag.
  1126. RELEASE TransNr.
  1127. LEAVE.
  1128. END.
  1129. RETURN TRUE.
  1130. END FUNCTION.
  1131. /* _UIB-CODE-BLOCK-END */
  1132. &ANALYZE-RESUME
  1133. &ENDIF