drucken-mahnung-pdf.p 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942
  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 INPUT PARAMETER ipParam AS CHARACTER NO-UNDO.
  17. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO.
  18. DEFINE VARIABLE ivKnr AS INTEGER NO-UNDO.
  19. DEFINE VARIABLE ibKnr AS INTEGER NO-UNDO.
  20. DEFINE VARIABLE ivStufe AS INTEGER NO-UNDO.
  21. DEFINE VARIABLE ibStufe AS INTEGER NO-UNDO.
  22. DEFINE VARIABLE dDatum AS DATE NO-UNDO.
  23. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO.
  24. DEFINE VARIABLE iSeite AS INTEGER NO-UNDO.
  25. DEFINE VARIABLE iStartPos AS INTEGER INIT 1050 NO-UNDO.
  26. DEFINE VARIABLE iKnr AS INTEGER NO-UNDO.
  27. DEFINE VARIABLE iSprcd AS INTEGER NO-UNDO.
  28. DEFINE VARIABLE cSeite AS CHARACTER NO-UNDO.
  29. DEFINE VARIABLE iTage AS INTEGER NO-UNDO.
  30. DEFINE VARIABLE iTind AS INTEGER NO-UNDO.
  31. DEFINE VARIABLE cStern AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE nTotal AS DECIMAL EXTENT 10 NO-UNDO.
  33. DEFINE VARIABLE nZinsProz AS DECIMAL NO-UNDO.
  34. DEFINE VARIABLE nZinsMin AS DECIMAL NO-UNDO.
  35. DEFINE VARIABLE nZinsBetr AS DECIMAL NO-UNDO.
  36. DEFINE VARIABLE nSaldo AS DECIMAL NO-UNDO.
  37. DEFINE VARIABLE lGleicheStufe AS LOGICAL NO-UNDO.
  38. DEFINE VARIABLE cvpr_DokTitel AS CHARACTER NO-UNDO.
  39. DEFINE VARIABLE cvpr_Dokument AS CHARACTER NO-UNDO.
  40. DEFINE VARIABLE cPDF_Dokument AS CHARACTER NO-UNDO.
  41. DEFINE VARIABLE iSubZeile AS INTEGER NO-UNDO.
  42. DEFINE VARIABLE iArtZeile AS INTEGER NO-UNDO.
  43. DEFINE VARIABLE iVPagePos AS INTEGER NO-UNDO.
  44. DEFINE VARIABLE cTexte AS CHARACTER EXTENT 10 NO-UNDO.
  45. DEFINE VARIABLE lok AS LOG INIT FALSE NO-UNDO.
  46. DEFINE VARIABLE iPageLimitter AS INTEGER NO-UNDO.
  47. DEFINE VARIABLE cDateiVpr AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cDateiPDF AS CHARACTER NO-UNDO.
  49. DEFINE TEMP-TABLE tDokument
  50. FIELD cGruppe AS CHARACTER
  51. FIELD iZeile AS INTEGER
  52. FIELD iSubZeile AS INTEGER
  53. FIELD cFeld AS CHARACTER
  54. FIELD cInhalt AS CHARACTER
  55. FIELD lDelete AS LOG INIT TRUE
  56. INDEX tDokument-k1 IS PRIMARY
  57. cGruppe
  58. iZeile
  59. cFeld.
  60. DEFINE BUFFER btDokument FOR tDokument.
  61. DEFINE TEMP-TABLE tTexte NO-UNDO
  62. FIELD iSprcd AS INTEGER
  63. FIELD iStufe AS INTEGER
  64. FIELD iArt AS INTEGER
  65. FIELD cInhalt AS CHARACTER
  66. .
  67. DEFINE TEMP-TABLE tMahnung LIKE Mahnung.
  68. DEFINE BUFFER bDebop FOR Debop .
  69. DEFINE BUFFER bAdresse FOR Adresse.
  70. DEFINE BUFFER bMahnung FOR Mahnung.
  71. /* _UIB-CODE-BLOCK-END */
  72. &ANALYZE-RESUME
  73. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  74. /* ******************** Preprocessor Definitions ******************** */
  75. &Scoped-define PROCEDURE-TYPE Procedure
  76. &Scoped-define DB-AWARE no
  77. /* _UIB-PREPROCESSOR-BLOCK-END */
  78. &ANALYZE-RESUME
  79. /* ************************ Function Prototypes ********************** */
  80. &IF DEFINED(EXCLUDE-calcBlock) = 0 &THEN
  81. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calcBlock Procedure
  82. FUNCTION calcBlock RETURNS INTEGER
  83. ( ipGruppe AS CHARACTER ) FORWARD.
  84. /* _UIB-CODE-BLOCK-END */
  85. &ANALYZE-RESUME
  86. &ENDIF
  87. &IF DEFINED(EXCLUDE-getParameter) = 0 &THEN
  88. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getParameter Procedure
  89. FUNCTION getParameter RETURNS LOGICAL
  90. ( /* parameter-definitions */ ) FORWARD.
  91. /* _UIB-CODE-BLOCK-END */
  92. &ANALYZE-RESUME
  93. &ENDIF
  94. &IF DEFINED(EXCLUDE-getSaldoMahnung) = 0 &THEN
  95. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getSaldoMahnung Procedure
  96. FUNCTION getSaldoMahnung RETURNS DECIMAL
  97. ( ipKnr AS INTEGER, ipMahStu AS INTEGER, ipFaknr AS INTEGER, ipPassant AS LOG ) FORWARD.
  98. /* _UIB-CODE-BLOCK-END */
  99. &ANALYZE-RESUME
  100. &ENDIF
  101. &IF DEFINED(EXCLUDE-getText) = 0 &THEN
  102. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getText Procedure
  103. FUNCTION getText RETURNS CHARACTER
  104. ( ipSprcd AS INTEGER, ipStufe AS INTEGER, ipArt AS INTEGER, ipEntry AS INTEGER ) FORWARD.
  105. /* _UIB-CODE-BLOCK-END */
  106. &ANALYZE-RESUME
  107. &ENDIF
  108. &IF DEFINED(EXCLUDE-putDokument) = 0 &THEN
  109. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD putDokument Procedure
  110. FUNCTION putDokument RETURNS LOGICAL
  111. (ipGruppe AS CHARACTER,
  112. ipBlock AS LOG,
  113. ipNeuPos AS LOG,
  114. ipAbstand AS INTEGER ) FORWARD.
  115. /* _UIB-CODE-BLOCK-END */
  116. &ANALYZE-RESUME
  117. &ENDIF
  118. /* *********************** Procedure Settings ************************ */
  119. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  120. /* Settings for THIS-PROCEDURE
  121. Type: Procedure
  122. Allow:
  123. Frames: 0
  124. Add Fields to: Neither
  125. Other Settings: CODE-ONLY COMPILE
  126. */
  127. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  128. /* ************************* Create Window ************************** */
  129. &ANALYZE-SUSPEND _CREATE-WINDOW
  130. /* DESIGN Window definition (used by the UIB)
  131. CREATE WINDOW Procedure ASSIGN
  132. HEIGHT = 15
  133. WIDTH = 60.
  134. /* END WINDOW DEFINITION */
  135. */
  136. &ANALYZE-RESUME
  137. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  138. /* *************************** Main Block *************************** */
  139. DEFINE VARIABLE cText AS CHARACTER NO-UNDO.
  140. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  141. DEFINE VARIABLE nBetrag AS DECIMAL NO-UNDO.
  142. DYNAMIC-FUNCTION('getParameter':U) NO-ERROR.
  143. { viper/vpr.i INIT }
  144. { viper/vpr.i START }
  145. RUN VIPER_INIT.
  146. EMPTY TEMP-TABLE tMahnung.
  147. FOR EACH bMahnung NO-LOCK
  148. WHERE bMahnung.Firma = cFirma
  149. AND bMahnung.Knr >= ivKnr
  150. AND bMahnung.Knr <= ibKnr
  151. AND bMahnung.MahStu >= ivStufe
  152. AND bMahnung.MahStu <= ibStufe:
  153. CREATE tMahnung.
  154. BUFFER-COPY bMahnung
  155. TO tMahnung.
  156. IF lGleicheStufe THEN tMahnung.MahStu = 0.
  157. END.
  158. FOR EACH tMahnung NO-LOCK,
  159. FIRST bAdresse NO-LOCK
  160. WHERE bAdresse.Firma = AdFirma
  161. AND bAdresse.Knr = tMahnung.Knr
  162. BREAK BY tMahnung.Knr
  163. BY tMahnung.MahStu
  164. BY tMahnung.Faknr :
  165. IF FIRST-OF ( tMahnung.MahStu ) OR
  166. tMahnung.Passant THEN
  167. DO:
  168. nSaldo = DYNAMIC-FUNCTION('getSaldoMahnung':U, tMahnung.Knr, tMahnung.MahStu, tMahnung.Faknr, tMahnung.Passant) NO-ERROR.
  169. iSeite = 0.
  170. RUN VIPER_FILL_DOKUMENT.
  171. RUN VIPER_NEUE_SEITE.
  172. nTotal = 0.
  173. iArtZeile = 0.
  174. nZinsBetr = 0.
  175. iSubZeile = 1.
  176. EMPTY TEMP-TABLE tDokument.
  177. END.
  178. iTage = TODAY - tMahnung.Faellig.
  179. iTind = 1.
  180. cStern = ''.
  181. IF iTage >= 001 THEN ASSIGN iTind = 2
  182. cStern = cStern + '*'.
  183. IF iTage >= 031 THEN ASSIGN iTind = 3
  184. cStern = cStern + '*'.
  185. IF iTage >= 061 THEN ASSIGN iTind = 4
  186. cStern = cStern + '*'.
  187. IF iTage >= 091 THEN ASSIGN iTind = 5
  188. cStern = cStern + '*'.
  189. nTotal[iTind] = nTotal[iTind] + tMahnung.Saldo.
  190. nTotal[08] = nTotal[08] + tMahnung.Saldo.
  191. nTotal[06] = nTotal[06]
  192. + (IF iTind > 1 THEN tMahnung.Saldo ELSE 0.00).
  193. IF iTage >= 061 AND
  194. nZinsProz <> 0 AND
  195. tMahnung.Saldo > 0 THEN
  196. DO:
  197. nBetrag = tMahnung.Saldo * nZinsProz / 100 * (iTage - 60) / 360.
  198. RUN RUNDEN ( 1, INPUT-OUTPUT nBetrag ).
  199. nZinsBetr = nZinsBetr + nBetrag.
  200. nTotal[08] = nTotal[08] + nBetrag.
  201. END.
  202. iArtZeile = iArtZeile + 1.
  203. RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Faknr' , TRIM(STRING(tMahnung.Faknr ,'>999999')) ).
  204. RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Fakdatum', TRIM(STRING(tMahnung.Fakdat ,'99.99.9999')) ).
  205. RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Faellig' , TRIM(STRING(tMahnung.Faellig,'99.99.9999')) ).
  206. RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Betrag' , TRIM(STRING(tMahnung.Fakbetr,'->>>,>>>,>>9.99')) ).
  207. IF tMahnung.Zahbetr <> 0 THEN RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Bezahlt' , TRIM(STRING(tMahnung.Zahbetr,'->>>,>>>,>>9.99')) ).
  208. RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Saldo' , TRIM(STRING(tMahnung.Saldo ,'->>>,>>>,>>9.99')) ).
  209. RUN VIPER_CREATE_DOKUMENT ( 'Daten', iArtZeile, iSubZeile, 'Daten_Stern' , cStern ).
  210. IF NOT LAST-OF ( tMahnung.MahStu ) AND
  211. NOT tMahnung.Passant THEN NEXT.
  212. DYNAMIC-FUNCTION('putDokument':U, 'Daten', FALSE, TRUE, 50).
  213. cText = DYNAMIC-FUNCTION('getText':U , bAdresse.Sprcd, tMahnung.MahStu, 4, 0 ) NO-ERROR.
  214. IF cText <> '' THEN
  215. DO:
  216. RUN vpr_Asc2RTF (cText, '', OUTPUT cText ).
  217. RUN VIPER_CREATE_DOKUMENT ( 'Schlusstext', iArtZeile, iSubZeile, 'Schluss_Text', cText ).
  218. END.
  219. iArtZeile = 0.
  220. iSubZeile = 1.
  221. IF (nTotal[04] + nTotal[05]) > nZinsMin THEN nTotal[07] = nZinsBetr.
  222. DO ii = 1 TO 8:
  223. IF nTotal[ii] = 0 THEN NEXT.
  224. iArtZeile = iArtZeile + 1.
  225. cText = DYNAMIC-FUNCTION ( 'getText':U , bAdresse.Sprcd, tMahnung.MahStu, 5, ii ) NO-ERROR.
  226. RUN VIPER_CREATE_DOKUMENT ( 'Rekapitulation', iArtZeile, iSubZeile, 'Rekap_Text' , cText ).
  227. RUN VIPER_CREATE_DOKUMENT ( 'Rekapitulation', iArtZeile, iSubZeile, 'Rekap_Saldo' , TRIM(STRING(nTotal[ii],'->>>,>>>,>>9.99')) ).
  228. cStern = ''.
  229. IF ii > 1 AND
  230. ii < 6 THEN cStern = FILL('*', (ii - 1)).
  231. RUN VIPER_CREATE_DOKUMENT ( 'Rekapitulation', iArtZeile, iSubZeile, 'Rekap_Stern' , cStern ).
  232. END.
  233. ii = DYNAMIC-FUNCTION('calcBlock':U, '') NO-ERROR.
  234. ii = ii + vpr_getPageVPos().
  235. IF ii >= iPageLimitter THEN
  236. DO:
  237. RUN VIPER_NEUE_SEITE.
  238. END.
  239. DYNAMIC-FUNCTION('putDokument':U, 'Rekapitulation', FALSE, TRUE , 50).
  240. DYNAMIC-FUNCTION('putDokument':U, 'Schlusstext' , FALSE, TRUE , 50).
  241. IF NOT LAST ( tMahnung.Knr ) THEN RUN vpr_newPage.
  242. END.
  243. RUN vpr_EndDoc.
  244. /*
  245. RUN vpr_PrintDoc (0, 0).
  246. */
  247. cDateiVpr = SUBSTITUTE('&1Mahnungen_&2_&3_.vpr',
  248. SESSION:TEMP-DIR,
  249. REPLACE(STRING(TODAY,'99.99.9999'), '.', ''),
  250. REPLACE(STRING(TIME ,'HH:MM:SS') , ':', '') ).
  251. RUN vpr_saveDoc ( cDateiVpr ).
  252. cDateiPDF = REPLACE(cDateiVpr, '.vpr', '.pdf').
  253. RUN vpr_printPDF ( 0, 0, INPUT-OUTPUT cDateiPDF ).
  254. { viper/vpr.i STOP }
  255. DEFINE VARIABLE o-i AS i NO-UNDO.
  256. RUN shellExecuteA (0,
  257. "open",
  258. cDateiPDF,
  259. "",
  260. "",
  261. 0,
  262. OUTPUT o-i).
  263. PROCEDURE ShellExecuteA EXTERNAL "shell32.dll" :
  264. DEFINE INPUT PARAMETER lphwnd AS LONG.
  265. DEFINE INPUT PARAMETER lpOperation AS CHARACTER.
  266. DEFINE INPUT PARAMETER lpFile AS CHARACTER.
  267. DEFINE INPUT PARAMETER lpParameters AS CHARACTER.
  268. DEFINE INPUT PARAMETER lpDirectory AS CHARACTER.
  269. DEFINE INPUT PARAMETER nShowCmd AS LONG.
  270. DEFINE RETURN PARAMETER hInstance AS LONG.
  271. END PROCEDURE.
  272. /* _UIB-CODE-BLOCK-END */
  273. &ANALYZE-RESUME
  274. /* ********************** Internal Procedures *********************** */
  275. &IF DEFINED(EXCLUDE-VIPER_CREATE_DOKUMENT) = 0 &THEN
  276. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_CREATE_DOKUMENT Procedure
  277. PROCEDURE VIPER_CREATE_DOKUMENT :
  278. /*------------------------------------------------------------------------------
  279. Purpose:
  280. Parameters: <none>
  281. Notes:
  282. ------------------------------------------------------------------------------*/
  283. DEFINE INPUT PARAMETER ipGruppe AS CHARACTER NO-UNDO.
  284. DEFINE INPUT PARAMETER ipZeile AS INTEGER NO-UNDO.
  285. DEFINE INPUT PARAMETER ipSubZeile AS INTEGER NO-UNDO.
  286. DEFINE INPUT PARAMETER ipFeld AS CHARACTER NO-UNDO.
  287. DEFINE INPUT PARAMETER ipInhalt AS CHARACTER NO-UNDO.
  288. CREATE tDokument.
  289. ASSIGN
  290. tDokument.cGruppe = ipGruppe
  291. tDokument.iZeile = ipZeile
  292. tDokument.iSubZeile = ipSubZeile
  293. tDokument.cFeld = ipFeld
  294. tDokument.cInhalt = ipInhalt.
  295. END PROCEDURE.
  296. /* _UIB-CODE-BLOCK-END */
  297. &ANALYZE-RESUME
  298. &ENDIF
  299. &IF DEFINED(EXCLUDE-VIPER_FILL_DOKUMENT) = 0 &THEN
  300. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_FILL_DOKUMENT Procedure
  301. PROCEDURE VIPER_FILL_DOKUMENT :
  302. /*------------------------------------------------------------------------------
  303. Purpose:
  304. Parameters: <none>
  305. Notes:
  306. ------------------------------------------------------------------------------*/
  307. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  308. DEFINE VARIABLE cText AS CHARACTER NO-UNDO.
  309. DEFINE VARIABLE cBetrag AS CHARACTER NO-UNDO.
  310. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  311. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  312. DEFINE VARIABLE iStufe AS INTEGER NO-UNDO.
  313. DEFINE VARIABLE cAdr AS CHARACTER EXTENT 12 NO-UNDO.
  314. iSprcd = bAdresse.Sprcd.
  315. iStufe = tMahnung.MahStu.
  316. /* Firmen-Anschrift */
  317. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 0, 1 ) NO-ERROR.
  318. RUN vpr_setCellText ( 'Firma_Name-1' , 'FirmenKopf', cText ).
  319. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 0, 2 ) NO-ERROR.
  320. RUN vpr_setCellText ( 'Firma_Name-2' , 'FirmenKopf', cText ).
  321. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 0, 3 ) NO-ERROR.
  322. RUN vpr_setCellText ( 'Firma_Strasse', 'FirmenKopf', cText ).
  323. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 0, 4 ) NO-ERROR.
  324. RUN vpr_setCellText ( 'Firma_Ort' , 'FirmenKopf', cText ).
  325. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 0, 5 ) NO-ERROR.
  326. RUN vpr_setCellText ( 'Firma_Tel' , 'FirmenKopf', cText ).
  327. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 0, 6 ) NO-ERROR.
  328. RUN vpr_setCellText ( 'Firma_Fax' , 'FirmenKopf', cText ).
  329. /* Adresse */
  330. DO WHILE TRUE:
  331. IF tMahnung.Passant THEN
  332. DO:
  333. FIND Passant NO-LOCK
  334. WHERE Passant.Firma = cFirma
  335. AND Passant.Knr = tMahnung.Knr
  336. AND Passant.Faknr = tMahnung.Faknr NO-ERROR.
  337. IF AVAILABLE Passant THEN
  338. DO:
  339. i2 = 11.
  340. DO i1 = 5 TO 1 BY -1:
  341. IF Passant.Adr[i1] = '' THEN NEXT.
  342. cAdr[i2] = Passant.Adr[i1].
  343. i2 = i2 - 1.
  344. END.
  345. LEAVE.
  346. END.
  347. END.
  348. DO i1 = 1 TO 12:
  349. cAdr[i1] = bAdresse.Anschrift[i1].
  350. END.
  351. LEAVE.
  352. END.
  353. DO i1 = 1 TO 12:
  354. cString = SUBSTITUTE('Adresse-&1', TRIM(STRING(i1,'>9')) ).
  355. RUN vpr_setCellText (cString , 'Adresse', cAdr[i1] ).
  356. END.
  357. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 1, 1 ) NO-ERROR. /* Ort */
  358. cText = cText + ' ' + STRING(TODAY,'99.99.9999').
  359. RUN vpr_setCellText ('Ort_Datum' , 'Adresse', cText ).
  360. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 1, 2 ) NO-ERROR. /* Kundennummer */
  361. RUN vpr_setCellText ('Knr_Text', 'Adresse', cText ).
  362. RUN vpr_setCellText ('Knr_Nr' , 'Adresse', TRIM(STRING(tMahnung.Knr,'>999999')) ).
  363. /* Kopf */
  364. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 1, 3 ) NO-ERROR. /* Titel */
  365. cText = REPLACE (cText, ',', ';').
  366. ii = NUM-ENTRIES(cText, ';').
  367. IF ii = 1 THEN RUN vpr_setCellText ('Kopf_Titel', 'Kopf', cText ).
  368. ELSE
  369. DO:
  370. IF nSaldo < 0 THEN cText = ENTRY(2, cText, ';').
  371. ELSE cText = ENTRY(1, ctext, ';').
  372. RUN vpr_setCellText ('Kopf_Titel', 'Kopf', cText ).
  373. END.
  374. /* Kopftext */
  375. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 2, 0 ) NO-ERROR. /* Kopftext */
  376. ii = NUM-ENTRIES(cText, ';').
  377. IF ii = 1 THEN RUN vpr_setCellText ('Kopf_Text', 'Kopf', cText ).
  378. ELSE
  379. DO:
  380. IF nSaldo < 0 THEN cText = ENTRY(2, cText, ';').
  381. ELSE cText = ENTRY(1, ctext, ';').
  382. /* RUN vpr_setCellText ('Kopf_Titel', 'Kopf', cText ).*/
  383. END.
  384. RUN vpr_Asc2RTF(cText, '', OUTPUT cText ).
  385. RUN vpr_setCellText ('Kopf_Text', 'Kopf', cText ).
  386. /* Ueberschrift Detail */
  387. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 1 ) NO-ERROR. /* Berücksichtig */
  388. cText = cText + ' ' + STRING(dDatum,'99.99.9999').
  389. RUN vpr_setCellText ('Ueberschrift_Zahlungen_Bis', 'Ueberschrift', cText ).
  390. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 2 ) NO-ERROR. /* Seite */
  391. cSeite = cText.
  392. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 3 ) NO-ERROR. /* Faknr */
  393. RUN vpr_setCellText ('Ueber_Faknr_Text' , 'Ueberschrift', cText ).
  394. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 4 ) NO-ERROR. /* Fakdat */
  395. RUN vpr_setCellText ('Ueber_Fakdatum_Text', 'Ueberschrift', cText ).
  396. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 5 ) NO-ERROR. /* Faellig */
  397. RUN vpr_setCellText ('Ueber_Faellig_Text' , 'Ueberschrift', cText ).
  398. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 6 ) NO-ERROR. /* Betrag */
  399. RUN vpr_setCellText ('Ueber_Betrag_Text' , 'Ueberschrift', cText ).
  400. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 7 ) NO-ERROR. /* Bezahlt */
  401. RUN vpr_setCellText ('Ueber_Bezahlt_Text' , 'Ueberschrift', cText ).
  402. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 3, 8 ) NO-ERROR. /* Saldo */
  403. RUN vpr_setCellText ('Ueber_Saldo_Text' , 'Ueberschrift', cText ).
  404. /* Schlusstext */
  405. cText = DYNAMIC-FUNCTION('getText':U , iSprcd, iStufe, 4, 0 ) NO-ERROR. /* Kopftext */
  406. RUN vpr_Asc2RTF(cText, '', OUTPUT cText ).
  407. RUN vpr_setCellText ('Schluss_Text', 'Schlusstext', cText ).
  408. END PROCEDURE.
  409. /* _UIB-CODE-BLOCK-END */
  410. &ANALYZE-RESUME
  411. &ENDIF
  412. &IF DEFINED(EXCLUDE-VIPER_INIT) = 0 &THEN
  413. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_INIT Procedure
  414. PROCEDURE VIPER_INIT :
  415. /*------------------------------------------------------------------------------
  416. Purpose:
  417. Parameters: <none>
  418. Notes:
  419. ------------------------------------------------------------------------------*/
  420. DEFINE VARIABLE cDocname AS CHARACTER NO-UNDO.
  421. DEFINE VARIABLE cInstall AS CHARACTER NO-UNDO.
  422. DEFINE VARIABLE cParam AS CHARACTER NO-UNDO.
  423. cInstall = DYNAMIC-FUNCTION('getInstallation':U) NO-ERROR.
  424. cDocName = SUBSTITUTE('Mahnung').
  425. iPageLimitter = 2700.
  426. cvpr_DokTitel = cDocname.
  427. cvpr_Dokument = SUBSTITUTE('&1/&2/&3.vfr', 'viper', cInstall, cDocname).
  428. RUN vpr_LoadVFR (cvpr_Dokument).
  429. RUN vpr_ActivateReport (cvpr_DokTitel).
  430. RUN vpr_SelectPrinter (SESSION:PRINTER-NAME).
  431. cParam = 'duplex=1,copies=1'.
  432. RUN vpr_SetPrinterAttrib(cParam).
  433. RUN vpr_ResetDoc.
  434. RUN vpr_SetPrinterAttrib("Papersize=A4").
  435. RUN vpr_SetPreviewMode ('Direct').
  436. RUN vpr_setDocTitle (cvpr_DokTitel).
  437. RUN vpr_SetDelimiter (CHR(01)).
  438. RUN vpr_InitGroups ("").
  439. RUN vpr_InitGraphObj.
  440. END PROCEDURE.
  441. /* _UIB-CODE-BLOCK-END */
  442. &ANALYZE-RESUME
  443. &ENDIF
  444. &IF DEFINED(EXCLUDE-VIPER_NEUE_SEITE) = 0 &THEN
  445. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_NEUE_SEITE Procedure
  446. PROCEDURE VIPER_NEUE_SEITE :
  447. /*------------------------------------------------------------------------------
  448. Purpose:
  449. Parameters: <none>
  450. Notes:
  451. ------------------------------------------------------------------------------*/
  452. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  453. iSeite = iSeite + 1.
  454. IF iSeite > 1 THEN
  455. DO:
  456. RUN vpr_newPage.
  457. RUN vpr_InitGroups("").
  458. END.
  459. RUN vpr_initGraphObj.
  460. /* Seite */
  461. cString = cSeite + STRING(iSeite,'zz9').
  462. RUN vpr_setCellText ( 'Ueberschrift_Seite', 'Ueberschrift', cString ).
  463. RUN vpr_FlushGroup('Firmenkopf').
  464. IF iSeite = 1 THEN
  465. DO:
  466. RUN vpr_FlushGroup('Adresse').
  467. RUN vpr_FlushGroup('Kopf').
  468. END.
  469. IF iSeite > 1 THEN iVPagePos = vpr_getPageVPos() + 200.
  470. ELSE iVPagePos = vpr_getPageVPos() + 050.
  471. RUN vpr_SetGroupVPos( 'Ueberschrift', iVPagePos ).
  472. RUN vpr_FlushGroup('Ueberschrift').
  473. iVPagePos = vpr_getPageVPos().
  474. RUN vpr_FlushGroup('Fusstext').
  475. RUN vpr_setPageVPos(iVPagePos).
  476. END PROCEDURE.
  477. /* _UIB-CODE-BLOCK-END */
  478. &ANALYZE-RESUME
  479. &ENDIF
  480. /* ************************ Function Implementations ***************** */
  481. &IF DEFINED(EXCLUDE-calcBlock) = 0 &THEN
  482. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calcBlock Procedure
  483. FUNCTION calcBlock RETURNS INTEGER
  484. ( ipGruppe AS CHARACTER ) :
  485. /*------------------------------------------------------------------------------
  486. Purpose:
  487. Notes:
  488. ------------------------------------------------------------------------------*/
  489. DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO.
  490. DEFINE VARIABLE cWerte AS CHARACTER NO-UNDO.
  491. DEFINE VARIABLE iSpace AS INTEGER INIT 0 NO-UNDO.
  492. DEFINE VARIABLE iGrpHo AS INTEGER INIT 0 NO-UNDO.
  493. DEFINE VARIABLE iAnzGrp AS INTEGER INIT 0 NO-UNDO.
  494. FOR EACH tDokument
  495. WHERE tDokument.cGruppe BEGINS ipGruppe
  496. BREAK BY tDokument.cGruppe
  497. BY tDokument.iZeile
  498. BY tDokument.iSubZeile:
  499. IF FIRST-OF ( tDokument.cGruppe ) THEN
  500. DO:
  501. iAnzGrp = iAnzGrp + 1.
  502. END.
  503. IF FIRST-OF ( tDokument.iSubZeile ) THEN
  504. DO:
  505. cZellen = ''.
  506. cWerte = ''.
  507. END.
  508. cWerte = cWerte
  509. + (IF cWerte = '' THEN '' ELSE CHR(01))
  510. + tDokument.cInhalt.
  511. cZellen = cZellen
  512. + (IF cZellen = '' THEN '' ELSE ',')
  513. + tDokument.cFeld.
  514. IF NOT LAST-OF ( tDokument.iSubZeile ) THEN NEXT.
  515. RUN vpr_setGroupText (tDokument.cGruppe, cZellen, cWerte).
  516. iGrpHo = vpr_getGroupHeight ( tDokument.cGruppe ).
  517. iSpace = iSpace + iGrpHo.
  518. END.
  519. iSpace = iSpace + (iAnzGrp * 40).
  520. RETURN iSpace.
  521. END FUNCTION.
  522. /* _UIB-CODE-BLOCK-END */
  523. &ANALYZE-RESUME
  524. &ENDIF
  525. &IF DEFINED(EXCLUDE-getParameter) = 0 &THEN
  526. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getParameter Procedure
  527. FUNCTION getParameter RETURNS LOGICAL
  528. ( /* parameter-definitions */ ) :
  529. /*------------------------------------------------------------------------------
  530. Purpose:
  531. Notes:
  532. ------------------------------------------------------------------------------*/
  533. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  534. DEFINE VARIABLE iArt AS INTEGER NO-UNDO.
  535. DEFINE VARIABLE iStufe AS INTEGER NO-UNDO.
  536. DO ii = 1 TO NUM-ENTRIES(ipParam, CHR(01)):
  537. CASE ii:
  538. WHEN 01 THEN
  539. cFirma = ENTRY(ii, ipParam, CHR(01)) .
  540. WHEN 02 THEN
  541. ivKnr = INTEGER(ENTRY(ii, ipParam, CHR(01))).
  542. WHEN 03 THEN
  543. ibKnr = INTEGER(ENTRY(ii, ipParam, CHR(01))).
  544. WHEN 04 THEN
  545. ivStufe = INTEGER(ENTRY(ii, ipParam, CHR(01))).
  546. WHEN 05 THEN
  547. ibStufe = INTEGER(ENTRY(ii, ipParam, CHR(01))).
  548. WHEN 06 THEN
  549. dDatum = DATE (ENTRY(ii, ipParam, CHR(01))).
  550. WHEN 07 THEN
  551. lGleicheStufe = (IF ENTRY(ii, ipParam, CHR(01)) BEGINS 'n' THEN FALSE ELSE TRUE).
  552. END CASE.
  553. END.
  554. FIND Steuer NO-LOCK
  555. WHERE Steuer.Firma = cFirma NO-ERROR.
  556. AdFirma = Steuer.AdFirma.
  557. nZinsProz = Steuer.Fwi07.
  558. nZinsMin = Steuer.Fwi08.
  559. EMPTY TEMP-TABLE tTexte.
  560. FOR EACH TabTexte NO-LOCK
  561. WHERE TabTexte.Firma = cFirma
  562. AND TabTexte.TextArt BEGINS 'MAHN':
  563. ASSIGN
  564. iStufe = INTEGER(SUBSTRING(TabTexte.TextArt,05,02))
  565. iArt = INTEGER(SUBSTRING(TabTexte.TextArt,07,02)).
  566. CREATE tTexte.
  567. ASSIGN
  568. tTexte.iSprcd = TabTexte.Sprcd
  569. tTexte.iStufe = iStufe
  570. tTexte.iArt = iArt
  571. tTexte.cInhalt = TabTexte.Inhalt.
  572. END.
  573. END FUNCTION.
  574. /* _UIB-CODE-BLOCK-END */
  575. &ANALYZE-RESUME
  576. &ENDIF
  577. &IF DEFINED(EXCLUDE-getSaldoMahnung) = 0 &THEN
  578. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getSaldoMahnung Procedure
  579. FUNCTION getSaldoMahnung RETURNS DECIMAL
  580. ( ipKnr AS INTEGER, ipMahStu AS INTEGER, ipFaknr AS INTEGER, ipPassant AS LOG ) :
  581. /*------------------------------------------------------------------------------
  582. Purpose:
  583. Notes:
  584. ------------------------------------------------------------------------------*/
  585. DEFINE VARIABLE nBetrag AS DECIMAL NO-UNDO.
  586. DEFINE BUFFER tMahnung FOR Mahnung.
  587. nBetrag = 0.
  588. FOR EACH tMahnung NO-LOCK
  589. WHERE tMahnung.Firma = cFirma
  590. AND tMahnung.Knr = ipKnr
  591. AND tMahnung.MahStu = ipMahStu
  592. AND ((NOT ipPassant)
  593. OR (ipPassant
  594. AND tMahnung.Faknr = ipFaknr))
  595. :
  596. nBetrag = nBetrag + tMahnung.Saldo.
  597. END.
  598. RETURN nBetrag.
  599. END FUNCTION.
  600. /* _UIB-CODE-BLOCK-END */
  601. &ANALYZE-RESUME
  602. &ENDIF
  603. &IF DEFINED(EXCLUDE-getText) = 0 &THEN
  604. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getText Procedure
  605. FUNCTION getText RETURNS CHARACTER
  606. ( ipSprcd AS INTEGER, ipStufe AS INTEGER, ipArt AS INTEGER, ipEntry AS INTEGER ) :
  607. /*------------------------------------------------------------------------------
  608. Purpose:
  609. Notes:
  610. ------------------------------------------------------------------------------*/
  611. DEFINE VARIABLE cText AS CHARACTER INIT '' NO-UNDO.
  612. FIND FIRST tTexte NO-LOCK
  613. WHERE tTexte.iSprcd = ipSprcd
  614. AND tTexte.iStufe = ipStufe
  615. AND tTexte.iArt = ipArt NO-ERROR.
  616. IF NOT AVAILABLE tTexte THEN
  617. DO:
  618. FIND FIRST tTexte NO-LOCK
  619. WHERE tTexte.iSprcd = 1
  620. AND tTexte.iStufe = ipStufe
  621. AND tTexte.iArt = ipArt NO-ERROR.
  622. END.
  623. IF NOT AVAILABLE tTexte THEN RETURN cText.
  624. IF ipEntry = 0 THEN
  625. DO:
  626. cText = tTexte.cInhalt.
  627. RETURN cText.
  628. END.
  629. IF ipEntry > NUM-ENTRIES(tTexte.cInhalt, CHR(10)) THEN RETURN cText.
  630. DO WHILE TRUE:
  631. IF ipArt <> 1 THEN LEAVE.
  632. IF ipEntry <> 3 THEN LEAVE.
  633. cText = ENTRY(ipEntry, tTexte.cInhalt, CHR(10)).
  634. IF NUM-ENTRIES(cText, ';') < 2 THEN LEAVE.
  635. IF nSaldo < 0 THEN cText = ENTRY(2, cText, ';').
  636. ELSE cText = ENTRY(1, cText, ';').
  637. RETURN cText.
  638. END.
  639. cText = ENTRY(ipEntry, tTexte.cInhalt, CHR(10)).
  640. RETURN cText.
  641. END FUNCTION.
  642. /* _UIB-CODE-BLOCK-END */
  643. &ANALYZE-RESUME
  644. &ENDIF
  645. &IF DEFINED(EXCLUDE-putDokument) = 0 &THEN
  646. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION putDokument Procedure
  647. FUNCTION putDokument RETURNS LOGICAL
  648. (ipGruppe AS CHARACTER,
  649. ipBlock AS LOG,
  650. ipNeuPos AS LOG,
  651. ipAbstand AS INTEGER ):
  652. /*------------------------------------------------------------------------------
  653. Purpose:
  654. Notes:
  655. ------------------------------------------------------------------------------*/
  656. DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO.
  657. DEFINE VARIABLE cWerte AS CHARACTER NO-UNDO.
  658. DEFINE VARIABLE iSpace AS INTEGER NO-UNDO.
  659. DEFINE VARIABLE iGrpHo AS INTEGER NO-UNDO.
  660. DEFINE VARIABLE lNeuStart AS LOG INIT FALSE NO-UNDO.
  661. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  662. iSpace = vpr_getPageVPos().
  663. iVPagePos = vpr_getPageVPos().
  664. IF ipBlock THEN
  665. DO:
  666. FOR EACH tDokument
  667. WHERE tDokument.cGruppe = ipGruppe
  668. BREAK BY tDokument.cGruppe
  669. BY tDokument.iZeile
  670. BY tDokument.iSubZeile:
  671. IF FIRST-OF ( tDokument.iSubZeile ) THEN
  672. DO:
  673. cZellen = ''.
  674. cWerte = ''.
  675. END.
  676. cWerte = cWerte
  677. + (IF cWerte = '' THEN '' ELSE CHR(01) )
  678. + tDokument.cInhalt.
  679. cZellen = cZellen
  680. + (IF cZellen = '' THEN '' ELSE ',' )
  681. + tDokument.cFeld.
  682. IF NOT LAST-OF ( tDokument.iSubZeile ) THEN NEXT.
  683. RUN vpr_setGroupText (ipGruppe, cZellen, cWerte).
  684. iGrpHo = vpr_getGroupHeight ( ipGruppe ).
  685. iSpace = iSpace + iGrpHo.
  686. END.
  687. IF iSpace > iPageLimitter THEN RUN VIPER_NEUE_SEITE.
  688. iSpace = vpr_getPageVPos().
  689. iVPagePos = vpr_getPageVPos().
  690. ipNeuPos = TRUE.
  691. END.
  692. DO WHILE TRUE:
  693. lNeuStart = FALSE.
  694. FOR EACH btDokument
  695. WHERE btDokument.cGruppe = ipGruppe
  696. BREAK BY btDokument.cGruppe
  697. BY btDokument.iZeile
  698. BY btDokument.iSubZeile:
  699. IF FIRST-OF ( btDokument.iSubZeile ) THEN
  700. DO:
  701. cZellen = ''.
  702. cWerte = ''.
  703. iSpace = vpr_getPageVPos().
  704. iVPagePos = vpr_getPageVPos().
  705. END.
  706. cWerte = cWerte
  707. + (IF cWerte = '' THEN '' ELSE CHR(01))
  708. + btDokument.cInhalt.
  709. cZellen = cZellen
  710. + (IF cZellen = '' THEN '' ELSE ',')
  711. + btDokument.cFeld.
  712. IF NOT LAST-OF ( btDokument.iSubZeile ) THEN NEXT.
  713. RUN vpr_setGroupText (ipGruppe, cZellen, cWerte).
  714. iGrpHo = vpr_getGroupHeight ( ipGruppe ).
  715. iSpace = iSpace + iGrpHo.
  716. IF iSpace > iPageLimitter AND
  717. INDEX (ipGruppe, 'Footer') = 0 AND
  718. INDEX (ipGruppe, 'ItemCo') = 0 THEN
  719. DO:
  720. RUN VIPER_NEUE_SEITE.
  721. iSpace = vpr_getPageVPos().
  722. iVPagePos = vpr_getPageVPos().
  723. ipNeuPos = TRUE.
  724. lNeuStart = TRUE.
  725. LEAVE.
  726. END.
  727. IF ipNeuPos THEN
  728. DO:
  729. iVPagePos = iVPagePos + ipAbstand.
  730. RUN vpr_setGroupVPos ( ipGruppe, iVPagePos ).
  731. ipNeuPos = FALSE.
  732. END.
  733. RUN vpr_FlushGroup (ipGruppe).
  734. FOR EACH tDokument
  735. WHERE tDokument.cGruppe = btDokument.cGruppe
  736. AND tDokument.iZeile = btDokument.iZeile
  737. AND tDokument.iSubZeile = btDokument.iSubZeile
  738. AND tDokument.lDelete = TRUE:
  739. DELETE tDokument.
  740. END.
  741. iSpace = vpr_getPageVPos().
  742. iVPagePos = vpr_getPageVPos().
  743. END.
  744. IF NOT lNeuStart THEN LEAVE.
  745. END.
  746. RETURN TRUE.
  747. END FUNCTION.
  748. /* _UIB-CODE-BLOCK-END */
  749. &ANALYZE-RESUME
  750. &ENDIF