SESAMSQL.p 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678
  1. &ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 - ADM2
  2. &ANALYZE-RESUME
  3. {adecomm/appserv.i}
  4. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
  5. /*------------------------------------------------------------------------
  6. File :
  7. Purpose :
  8. Syntax :
  9. Description :
  10. Author(s) :
  11. Created :
  12. Notes :
  13. ----------------------------------------------------------------------*/
  14. /* This .W file was created with the Progress AppBuilder. */
  15. /*----------------------------------------------------------------------*/
  16. /* *************************** Definitions ************************** */
  17. DEFINE VARIABLE ObjRecordSet AS COMPONENT-HANDLE NO-UNDO.
  18. DEFINE VARIABLE ObjConnection AS COMPONENT-HANDLE NO-UNDO.
  19. DEFINE VARIABLE ObjCommand AS COMPONENT-HANDLE NO-UNDO.
  20. DEFINE VARIABLE ODBC-DSN AS CHARACTER NO-UNDO.
  21. DEFINE VARIABLE ODBC-SERVER AS CHARACTER NO-UNDO.
  22. DEFINE VARIABLE ODBC-USERID AS CHARACTER NO-UNDO.
  23. DEFINE VARIABLE ODBC-PASSWD AS CHARACTER NO-UNDO.
  24. DEFINE VARIABLE ODBC-QUERY AS CHARACTER NO-UNDO.
  25. DEFINE VARIABLE ODBC-STATUS AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE ODBC-RECCOUNT AS INTEGER NO-UNDO.
  27. DEFINE VARIABLE ODBC-NULL AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE ODBC-CURSOR AS INTEGER NO-UNDO.
  29. DEFINE VARIABLE fEnde AS LOG NO-UNDO.
  30. DEFINE VARIABLE cTempName AS CHARACTER NO-UNDO.
  31. DEFINE VARIABLE cTempDir AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE cJournal AS CHARACTER NO-UNDO.
  33. DEFINE VARIABLE WebString AS CHARACTER NO-UNDO.
  34. DEFINE VARIABLE AllesOK AS LOG NO-UNDO.
  35. DEFINE VARIABLE Sprcd AS INTEGER NO-UNDO.
  36. DEFINE VARIABLE LVAdx AS CHARACTER NO-UNDO EXTENT 15.
  37. DEFINE VARIABLE LVAdy AS CHARACTER NO-UNDO EXTENT 15.
  38. DEFINE VARIABLE cOrt AS CHARACTER NO-UNDO.
  39. DEFINE VARIABLE Firma AS CHARACTER NO-UNDO INIT '9999'.
  40. DEFINE VARIABLE GVFirma AS CHARACTER NO-UNDO INIT '9999'.
  41. DEFINE VARIABLE ja AS LOG NO-UNDO.
  42. DEFINE VARIABLE CrLf AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  44. DEFINE VARIABLE iAnzOp AS INTEGER NO-UNDO.
  45. DEFINE VARIABLE nTotBetr AS DECIMAL NO-UNDO.
  46. DEFINE VARIABLE lAnmeldung AS LOGICAL NO-UNDO INIT FALSE.
  47. DEFINE VARIABLE cBenutzer AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cPasswort AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cMandant AS CHARACTER NO-UNDO.
  50. DEFINE STREAM LogStream.
  51. DEFINE STREAM Logfile.
  52. DEFINE TEMP-TABLE tMwstBetr
  53. FIELD SammelKonto AS CHARACTER
  54. FIELD MwstCd AS INTEGER
  55. FIELD MwstPfl AS DECIMAL DECIMALS 2
  56. FIELD MwstBet AS DECIMAL DECIMALS 2
  57. FIELD MwstAns AS DECIMAL DECIMALS 2.
  58. DEFINE TEMP-TABLE tDebop
  59. FIELD DocType AS INTEGER
  60. FIELD OpId AS CHARACTER
  61. FIELD KndNr AS INTEGER
  62. FIELD SammelKonto AS CHARACTER
  63. FIELD OpText AS CHARACTER
  64. FIELD OpDate AS DATE
  65. FIELD ZabTyp AS CHARACTER
  66. FIELD SortId AS CHARACTER
  67. FIELD Firma AS CHARACTER
  68. FIELD Zusatz1 AS CHARACTER
  69. FIELD Strasse AS CHARACTER
  70. FIELD Plz AS CHARACTER
  71. FIELD Ort AS CHARACTER
  72. FIELD Telefon1 AS CHARACTER
  73. FIELD Telefon4 AS CHARACTER
  74. FIELD EsrNr AS CHARACTER
  75. FIELD Sprache AS CHARACTER
  76. FIELD iStatus AS INTEGER
  77. INDEX tDebop-k1 IS PRIMARY
  78. OpId
  79. .
  80. DEFINE TEMP-TABLE TZaKo
  81. FIELD ZabTyp AS CHARACTER
  82. FIELD ZabTyp2 AS CHARACTER.
  83. DEFINE TEMP-TABLE TDetail
  84. FIELD DocKey AS INTEGER
  85. FIELD DocLine AS INTEGER
  86. FIELD SammelKonto AS CHARACTER
  87. FIELD cText AS CHARACTER
  88. FIELD MwstTyp AS CHARACTER
  89. FIELD Betrag AS DECIMAL DECIMALS 2
  90. FIELD BetragMwst AS DECIMAL DECIMALS 2
  91. FIELD BetragFW AS DECIMAL DECIMALS 2
  92. FIELD BuchTyp AS CHARACTER
  93. FIELD Kostenstelle AS CHARACTER
  94. FIELD cCode AS CHARACTER
  95. FIELD iStatus AS INTEGER.
  96. DEFINE TEMP-TABLE tOpSaldo
  97. FIELD OpId AS CHARACTER
  98. FIELD PkNr AS INTEGER
  99. FIELD Betrag AS DECIMAL
  100. FIELD BetragFW AS DECIMAL
  101. INDEX Kunde IS PRIMARY
  102. PkNr
  103. INDEX Faknr
  104. OpId.
  105. DEFINE TEMP-TABLE TBeleg
  106. FIELD OpID AS CHARACTER
  107. FIELD KndNr AS INTEGER
  108. FIELD DocKey AS INTEGER
  109. INDEX Faknr IS PRIMARY
  110. OpId
  111. .
  112. DEFINE TEMP-TABLE TBelegDetail
  113. FIELD DocKey AS INTEGER
  114. FIELD DocLine AS INTEGER
  115. INDEX DokNr IS PRIMARY
  116. DocKey.
  117. DEFINE TEMP-TABLE xDetail
  118. FIELD DocKey AS INTEGER
  119. FIELD DocLine AS INTEGER
  120. FIELD Konto AS CHARACTER
  121. FIELD cText AS CHARACTER
  122. FIELD MwstTyp AS CHARACTER
  123. FIELD Betrag AS DECIMAL DECIMALS 2
  124. FIELD BetragMwst AS DECIMAL DECIMALS 2
  125. FIELD BetragFW AS DECIMAL DECIMALS 2
  126. FIELD BuchTyp AS CHARACTER
  127. FIELD Kostenstelle AS CHARACTER
  128. FIELD cCode AS CHARACTER
  129. FIELD iStatus AS INTEGER.
  130. DEFINE TEMP-TABLE xOpSaldo LIKE tOpSaldo.
  131. { funktionen.i }
  132. { ttsendmail.i }
  133. { properties.i }
  134. /* _UIB-CODE-BLOCK-END */
  135. &ANALYZE-RESUME
  136. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  137. /* ******************** Preprocessor Definitions ******************** */
  138. &Scoped-define PROCEDURE-TYPE Procedure
  139. &Scoped-define DB-AWARE no
  140. /* _UIB-PREPROCESSOR-BLOCK-END */
  141. &ANALYZE-RESUME
  142. /* ************************ Function Prototypes ********************** */
  143. &IF DEFINED(EXCLUDE-cancelSQLTransaction) = 0 &THEN
  144. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD cancelSQLTransaction Procedure
  145. FUNCTION cancelSQLTransaction RETURNS LOGICAL
  146. ( /* parameter-definitions */ ) FORWARD.
  147. /* _UIB-CODE-BLOCK-END */
  148. &ANALYZE-RESUME
  149. &ENDIF
  150. &IF DEFINED(EXCLUDE-CloseConnection) = 0 &THEN
  151. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD CloseConnection Procedure
  152. FUNCTION CloseConnection RETURNS LOGICAL
  153. ( /* parameter-definitions */ ) FORWARD.
  154. /* _UIB-CODE-BLOCK-END */
  155. &ANALYZE-RESUME
  156. &ENDIF
  157. &IF DEFINED(EXCLUDE-closeSQLTransaction) = 0 &THEN
  158. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD closeSQLTransaction Procedure
  159. FUNCTION closeSQLTransaction RETURNS LOGICAL
  160. ( /* parameter-definitions */ ) FORWARD.
  161. /* _UIB-CODE-BLOCK-END */
  162. &ANALYZE-RESUME
  163. &ENDIF
  164. &IF DEFINED(EXCLUDE-CreateConnection) = 0 &THEN
  165. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD CreateConnection Procedure
  166. FUNCTION CreateConnection RETURNS LOGICAL
  167. ( /* parameter-definitions */ ) FORWARD.
  168. /* _UIB-CODE-BLOCK-END */
  169. &ANALYZE-RESUME
  170. &ENDIF
  171. &IF DEFINED(EXCLUDE-CreateSetDaten) = 0 &THEN
  172. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD CreateSetDaten Procedure
  173. FUNCTION CreateSetDaten RETURNS CHARACTER
  174. ( iphBuffer AS HANDLE, ipArt AS INTEGER ) FORWARD.
  175. /* _UIB-CODE-BLOCK-END */
  176. &ANALYZE-RESUME
  177. &ENDIF
  178. &IF DEFINED(EXCLUDE-getLogName) = 0 &THEN
  179. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLogName Procedure
  180. FUNCTION getLogName RETURNS CHARACTER
  181. ( /* parameter-definitions */ ) FORWARD.
  182. /* _UIB-CODE-BLOCK-END */
  183. &ANALYZE-RESUME
  184. &ENDIF
  185. &IF DEFINED(EXCLUDE-lesenBeleg) = 0 &THEN
  186. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD lesenBeleg Procedure
  187. FUNCTION lesenBeleg RETURNS INTEGER
  188. ( /* parameter-definitions */ ) FORWARD.
  189. /* _UIB-CODE-BLOCK-END */
  190. &ANALYZE-RESUME
  191. &ENDIF
  192. &IF DEFINED(EXCLUDE-lesenBelegDetail) = 0 &THEN
  193. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD lesenBelegDetail Procedure
  194. FUNCTION lesenBelegDetail RETURNS INTEGER
  195. ( /* parameter-definitions */ ) FORWARD.
  196. /* _UIB-CODE-BLOCK-END */
  197. &ANALYZE-RESUME
  198. &ENDIF
  199. &IF DEFINED(EXCLUDE-lesenOpSaldo) = 0 &THEN
  200. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD lesenOpSaldo Procedure
  201. FUNCTION lesenOpSaldo RETURNS INTEGER
  202. ( /* parameter-definitions */ ) FORWARD.
  203. /* _UIB-CODE-BLOCK-END */
  204. &ANALYZE-RESUME
  205. &ENDIF
  206. &IF DEFINED(EXCLUDE-SendMail) = 0 &THEN
  207. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD SendMail Procedure
  208. FUNCTION SendMail RETURNS LOGICAL
  209. ( ) FORWARD.
  210. /* _UIB-CODE-BLOCK-END */
  211. &ANALYZE-RESUME
  212. &ENDIF
  213. &IF DEFINED(EXCLUDE-startSQLTransaction) = 0 &THEN
  214. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD startSQLTransaction Procedure
  215. FUNCTION startSQLTransaction RETURNS LOGICAL
  216. ( /* parameter-definitions */ ) FORWARD.
  217. /* _UIB-CODE-BLOCK-END */
  218. &ANALYZE-RESUME
  219. &ENDIF
  220. &IF DEFINED(EXCLUDE-updateBeleg) = 0 &THEN
  221. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD updateBeleg Procedure
  222. FUNCTION updateBeleg RETURNS LOGICAL
  223. ( ipTHandle AS HANDLE, ipArt AS INTEGER ) FORWARD.
  224. /* _UIB-CODE-BLOCK-END */
  225. &ANALYZE-RESUME
  226. &ENDIF
  227. &IF DEFINED(EXCLUDE-updateBelegDetail) = 0 &THEN
  228. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD updateBelegDetail Procedure
  229. FUNCTION updateBelegDetail RETURNS LOGICAL
  230. ( ipTHandle AS HANDLE, ipArt AS INTEGER ) FORWARD.
  231. /* _UIB-CODE-BLOCK-END */
  232. &ANALYZE-RESUME
  233. &ENDIF
  234. &IF DEFINED(EXCLUDE-writeLogFile) = 0 &THEN
  235. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD writeLogFile Procedure
  236. FUNCTION writeLogFile RETURNS LOGICAL
  237. ( ipMessage AS CHARACTER ) FORWARD.
  238. /* _UIB-CODE-BLOCK-END */
  239. &ANALYZE-RESUME
  240. &ENDIF
  241. /* *********************** Procedure Settings ************************ */
  242. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  243. /* Settings for THIS-PROCEDURE
  244. Type: Procedure
  245. Allow:
  246. Frames: 0
  247. Add Fields to: Neither
  248. Other Settings: CODE-ONLY COMPILE APPSERVER
  249. */
  250. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  251. /* ************************* Create Window ************************** */
  252. &ANALYZE-SUSPEND _CREATE-WINDOW
  253. /* DESIGN Window definition (used by the UIB)
  254. CREATE WINDOW Procedure ASSIGN
  255. HEIGHT = 27.48
  256. WIDTH = 132.8.
  257. /* END WINDOW DEFINITION */
  258. */
  259. &ANALYZE-RESUME
  260. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  261. /* *************************** Main Block *************************** */
  262. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  263. RUN ANMELDEN.
  264. IF NOT lAnmeldung THEN QUIT.
  265. LEAVE.
  266. END.
  267. cTempName = DYNAMIC-FUNCTION('getLogName':U) NO-ERROR.
  268. cJournal = REPLACE(cTempName, '.log', '.csv').
  269. GET-KEY-VALUE SECTION 'Grundeinstellungen'
  270. KEY 'SESAM_SQL_LOG'
  271. VALUE cTempDir.
  272. IF cTempDir = ? THEN cTempDir = SESSION:TEMP-DIRECTORY.
  273. IF cTempDir = '' THEN cTempDir = SESSION:TEMP-DIRECTORY.
  274. cMessage = 'Start Datentransfer Ge_MIS <-> SAGE '.
  275. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  276. IF TIME > 21600 THEN
  277. DO: /* Test auf zweimalige Ausführung nur nach 06:00 Uhr */
  278. FIND Steuer NO-LOCK
  279. WHERE Steuer.Firma = cMandant.
  280. IF Steuer.Fwi30 = 1 THEN
  281. DO:
  282. cMessage = 'Es ist bereits ein Task am Arbeiten '.
  283. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  284. QUIT.
  285. END.
  286. END.
  287. ja = DYNAMIC-FUNCTION('CreateConnection':U) NO-ERROR.
  288. IF NOT ja THEN QUIT.
  289. REPEAT TRANSACTION:
  290. FIND Steuer
  291. WHERE Steuer.Firma = cMandant.
  292. Steuer.Fwi30 = 1.
  293. RELEASE Steuer.
  294. LEAVE.
  295. END.
  296. RUN FUELLEN_OP.
  297. RUN LESEN_OFFENESALDI.
  298. DYNAMIC-FUNCTION('CloseConnection':U) NO-ERROR.
  299. cMessage = 'Ende Datentransfer Ge_MIS <-> SAGE ' + CHR(10).
  300. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  301. DYNAMIC-FUNCTION ('sendMail':U) NO-ERROR.
  302. REPEAT TRANSACTION:
  303. FIND Steuer
  304. WHERE Steuer.Firma = cMandant.
  305. Steuer.Fwi30 = 0.
  306. RELEASE Steuer.
  307. LEAVE.
  308. END.
  309. QUIT.
  310. /* _UIB-CODE-BLOCK-END */
  311. &ANALYZE-RESUME
  312. /* ********************** Internal Procedures *********************** */
  313. &IF DEFINED(EXCLUDE-ANMELDEN) = 0 &THEN
  314. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ANMELDEN Procedure
  315. PROCEDURE ANMELDEN:
  316. /*------------------------------------------------------------------------------*/
  317. /* Purpose: */
  318. /* Parameters: <none> */
  319. /* Notes: */
  320. /*------------------------------------------------------------------------------*/
  321. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  322. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  323. DO WHILE TRUE:
  324. ASSIGN
  325. cBenutzer = ''
  326. cPasswort = ''
  327. cMandant = ''.
  328. DO ix = 1 TO NUM-ENTRIES(SESSION:PARAMETER, ';'):
  329. CASE ix:
  330. WHEN 1 THEN
  331. cBenutzer = ENTRY(ix, SESSION:PARAMETER, ';') NO-ERROR.
  332. WHEN 2 THEN
  333. cPasswort = ENTRY(ix, SESSION:PARAMETER, ';') NO-ERROR.
  334. WHEN 3 THEN
  335. cMandant = ENTRY(ix, SESSION:PARAMETER, ';') NO-ERROR.
  336. END CASE.
  337. END.
  338. FIND FIRST Benutzer NO-LOCK USE-INDEX Benutzer-k1
  339. WHERE Benutzer.Benutzer = cBenutzer
  340. AND Benutzer.Kennwort = cPasswort NO-ERROR.
  341. IF NOT AVAILABLE Benutzer THEN
  342. DO:
  343. LEAVE.
  344. END.
  345. FIND Mandant NO-LOCK USE-INDEX Mandant-k1
  346. WHERE Mandant.Firma = cMandant NO-ERROR.
  347. IF NOT AVAILABLE Mandant THEN
  348. DO:
  349. LEAVE.
  350. END.
  351. cString = cBenutzer + CHR(01) + cPasswort + CHR(01) + cMandant.
  352. RUN ANMELDUNG ( INPUT cString ).
  353. RUN AUFTRAGFUNKTIONENINIT.
  354. lAnmeldung = TRUE.
  355. LEAVE.
  356. END.
  357. END PROCEDURE.
  358. /* _UIB-CODE-BLOCK-END */
  359. &ANALYZE-RESUME
  360. &ENDIF
  361. &IF DEFINED(EXCLUDE-FUELLEN_OP) = 0 &THEN
  362. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE FUELLEN_OP Procedure
  363. PROCEDURE FUELLEN_OP :
  364. /*------------------------------------------------------------------------------
  365. Purpose:
  366. Parameters: <none>
  367. Notes:
  368. ------------------------------------------------------------------------------*/
  369. DEFINE VARIABLE htDebop AS HANDLE NO-UNDO.
  370. DEFINE VARIABLE htDetail AS HANDLE NO-UNDO.
  371. DEFINE VARIABLE xx AS INTEGER NO-UNDO.
  372. DEFINE VARIABLE cOrt AS CHARACTER NO-UNDO.
  373. DEFINE VARIABLE dFakBetr AS DECIMAL DECIMALS 2 NO-UNDO.
  374. DEFINE VARIABLE BuchBetr AS DECIMAL DECIMALS 2 NO-UNDO.
  375. DEFINE VARIABLE Ansatz AS DECIMAL NO-UNDO.
  376. DEFINE VARIABLE Inkl AS LOG NO-UNDO.
  377. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  378. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  379. DEFINE VARIABLE iDocKey AS INTEGER NO-UNDO.
  380. DEFINE VARIABLE cAdresse AS CHARACTER NO-UNDO.
  381. DEFINE VARIABLE dMwst AS DECIMAL NO-UNDO.
  382. DEFINE VARIABLE lErst AS LOG NO-UNDO.
  383. DEFINE VARIABLE lMwstAdd AS LOG NO-UNDO.
  384. DEFINE VARIABLE nDiff AS DECIMAL DECIMALS 2 NO-UNDO.
  385. DEFINE VARIABLE cExport AS CHARACTER NO-UNDO.
  386. DEFINE VARIABLE iMwstCd AS INTEGER NO-UNDO.
  387. EMPTY TEMP-TABLE tDebop .
  388. EMPTY TEMP-TABLE tDetail .
  389. EMPTY TEMP-TABLE xDetail .
  390. EMPTY TEMP-TABLE xOpSaldo.
  391. htDebop = BUFFER tDebop :HANDLE.
  392. htDetail = BUFFER xDetail:HANDLE.
  393. CREATE xDetail.
  394. FIND Steuer WHERE Steuer.Firma = cMandant NO-LOCK.
  395. cMessage = ' Einlesen Daten aus SESAM gestartet'.
  396. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  397. xx = DYNAMIC-FUNCTION('lesenOpSaldo':U) NO-ERROR.
  398. cMessage = SUBSTITUTE(' Anzahl eingelesene verarbeitete Rechnungen aus SESAM -> &1 ', xx).
  399. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  400. xx = DYNAMIC-FUNCTION('lesenBeleg':U) NO-ERROR.
  401. cMessage = SUBSTITUTE(' Anzahl eingelesene Belege aus SESAM -> &1 ', xx).
  402. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  403. xx = DYNAMIC-FUNCTION('lesenBelegDetail':U) NO-ERROR.
  404. cMessage = SUBSTITUTE(' Anzahl eingelesene Beleg-Details aus SESAM -> &1 ', xx).
  405. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  406. cMessage = ' Einlesen Daten aus SESAM beendet'.
  407. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  408. cMessage = ' '.
  409. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  410. cExport = SUBSTITUTE('&1Beleg.csv', cTempDir).
  411. OUTPUT TO VALUE(cExport) NO-MAP NO-CONVERT.
  412. FOR EACH tBeleg:
  413. EXPORT DELIMITER ';' tBeleg.
  414. END.
  415. OUTPUT CLOSE.
  416. cExport = SUBSTITUTE('&1BelegDetail.csv', cTempDir).
  417. OUTPUT TO VALUE(cExport) NO-MAP NO-CONVERT.
  418. FOR EACH tBelegDetail:
  419. EXPORT DELIMITER ';' tBelegDetail.
  420. END.
  421. OUTPUT CLOSE.
  422. xx = 0.
  423. FOR EACH Debop NO-LOCK
  424. WHERE Debop.Firma = cMandant
  425. AND Debop.Faknr >= 30000
  426. AND ((Debop.Fakbetr <> 0 AND
  427. Debop.Saldo <> 0.0)
  428. OR (Debop.Fakbetr = 0)) ,
  429. FIRST Adresse NO-LOCK
  430. WHERE Adresse.Firma = Debop.Firma
  431. AND Adresse.Knr = Debop.Knr :
  432. FIND FIRST tBeleg NO-LOCK
  433. WHERE tBeleg.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>')) NO-ERROR.
  434. IF AVAILABLE tBeleg THEN NEXT.
  435. IF Debop.Fakbetr = 0 THEN
  436. DO:
  437. dMwst = 0.
  438. DO ii = 1 TO 10:
  439. dMwst = dMwst + Debop.FakWpfl[ii].
  440. END.
  441. IF dMwst = 0 THEN NEXT.
  442. END.
  443. FIND Orte OF Adresse NO-LOCK NO-ERROR.
  444. IF Adresse.Ort <> '' THEN cOrt = Adresse.Ort.
  445. ELSE IF AVAILABLE Orte THEN cOrt = Orte.Ort.
  446. ELSE cOrt = '??????????'.
  447. FIND Sprache OF Adresse NO-LOCK NO-ERROR.
  448. IF Adresse.Firma1 <> '' THEN cAdresse = TRIM(Adresse.Firma1).
  449. ELSE cAdresse = TRIM(Adresse.Name + ' ' + Adresse.Vorname).
  450. cAdresse = TRIM(SUBSTRING(cAdresse,01,30)).
  451. CREATE tDebop.
  452. ASSIGN
  453. tDebop.DocTyp = 0
  454. tDebop.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>'))
  455. tDebop.KndNr = Debop.Knr
  456. tDebop.SammelKonto = Debop.Konto
  457. tDebop.OpDate = Debop.Fakdat
  458. tDebop.ZabTyp = STRING(Debop.Kond,'99')
  459. tDebop.Firma = cAdresse
  460. tDebop.SortId = TRIM(SUBSTRING(Adresse.Suchbe ,01,10))
  461. tDebop.Zusatz1 = TRIM(SUBSTRING(Adresse.Zusatz1,01,30))
  462. tDebop.Strasse = TRIM(SUBSTRING(Adresse.Strasse,01,30))
  463. tDebop.Plz = TRIM(SUBSTRING(Adresse.Plz ,01,06))
  464. tDebop.Ort = TRIM(SUBSTRING(cOrt ,01,24))
  465. tDebop.Telefon1 = TRIM(SUBSTRING(Adresse.Tel-1 ,01,20))
  466. tDebop.Telefon4 = TRIM(SUBSTRING(Adresse.Tel-3 ,01,20))
  467. tDebop.EsrNr = ''
  468. tDebop.Sprache = (IF AVAILABLE Sprache THEN SUBSTRING(Sprache.Bez,01,01) ELSE 'D')
  469. tDebop.iStatus = 9.
  470. .
  471. IF tDebop.Firma = ''
  472. THEN tDebop.Firma = TRIM(SUBSTRING((Adresse.NAME + ' ' + Adresse.Vorname),01,30)).
  473. dFakBetr = Debop.FakBetr.
  474. EMPTY TEMP-TABLE tMwstBetr.
  475. FOR EACH Interf NO-LOCK
  476. WHERE Interf.Firma = Steuer.Fwc09
  477. AND Interf.TrNr1 = Debop.TrNr1
  478. AND Interf.TrNr2 = Debop.TrNr2
  479. AND Interf.Herk >= 50
  480. AND Interf.Herk <= 59
  481. AND Interf.MWSt_Art = 0
  482. BREAK BY Interf.Firma
  483. BY Interf.TrNr1
  484. BY Interf.TrNr2
  485. BY Interf.Trnr :
  486. FIND FIRST tMwstBetr
  487. WHERE tMwstbetr.SammelKonto = Interf.Kto2
  488. AND tMwstbetr.MwstCd = Interf.Mwst_Cd NO-ERROR.
  489. IF NOT AVAILABLE tMwstBetr THEN
  490. DO:
  491. CREATE tMwstBetr.
  492. ASSIGN
  493. tMwstBetr.SammelKonto = Interf.Kto2
  494. tMwstBetr.MwstCd = Interf.Mwst_Cd
  495. tMwstBetr.MwstAns = Debop.Fakwpro[Interf.Mwst_Cd].
  496. END.
  497. ASSIGN
  498. tMwstBetr.MwstPfl = tMwstBetr.MwstPfl + Interf.Betrag.
  499. IF NOT LAST-OF ( Interf.TrNr2 ) THEN NEXT.
  500. BuchBetr = 0.
  501. lMwstAdd = FALSE.
  502. FOR EACH tMwstBetr
  503. BREAK BY tMwstBetr.MwstCd:
  504. IF FIRST-OF ( tMwstBetr.MwstCd ) THEN BuchBetr = 0.
  505. BuchBetr = BuchBetr + tMwstBetr.MwstPfl.
  506. IF NOT LAST-OF ( tMwstBetr.MwstCd ) THEN NEXT.
  507. ii = tMwstBetr.MwstCd.
  508. IF ABS(Debop.FakWpfl[ii] - BuchBetr) < ABS(Debop.FakWpfl[ii] * 0.01) THEN
  509. DO.
  510. lMwstAdd = TRUE.
  511. LEAVE.
  512. END.
  513. END.
  514. /* lMwstAdd = TRUE --> Beim Betrag muss die Mwst dazugerechnet werden */
  515. /* In der Schnittstelle werden nur Inklusiv-Beträge übermittelt */
  516. IF lMwstAdd THEN
  517. DO:
  518. FOR EACH tMwstBetr :
  519. tMwstBetr.MwstPfl = tMwstBetr.MwstPfl * (100 + tMwstBetr.MwstAns) / 100.
  520. END.
  521. END.
  522. /* Different zwischen Fakbetr und einzelnen Buchungen errechnen */
  523. /* Differenz auf dem Konto mit dem grössten Betrag ausgleichen */
  524. Buchbetr = 0.
  525. FOR EACH tMwstBetr:
  526. tMwstBetr.MwstPfl = DECIMAL(STRING(tMwstBetr.MwstPfl,'999999999.99-')).
  527. BuchBetr = BuchBetr + tMwstBetr.MwstPfl.
  528. END.
  529. Buchbetr = DECIMAL(STRING(Buchbetr,'999999999.99-')).
  530. nDiff = dFakBetr - Buchbetr.
  531. FOR FIRST tMwstBetr
  532. BY tMwstBetr.MwstPfl DESCENDING:
  533. tMwstBetr.MwstPfl = tMwstBetr.MwstPfl + nDiff.
  534. END.
  535. ii = 0.
  536. FOR EACH tMwstBetr
  537. BY tMwstBetr.SammelKonto
  538. BY tMwstBetr.MwstCd:
  539. iMwstCd = (IF tMwstBetr.MwstCd < 5 OR
  540. tMwstBetr.MwstCd > 6 THEN tMwstBetr.MwstCd ELSE 13).
  541. ii = ii + 1.
  542. CREATE tDetail.
  543. ASSIGN
  544. tDetail.DocKey = Debop.Faknr
  545. tDetail.DocLine = ii
  546. tDetail.SammelKonto = tMwstBetr.SammelKonto
  547. tDetail.cText = ''
  548. tDetail.MwstTyp = STRING(iMWStCd,'99')
  549. tDetail.Betrag = tMwstBetr.MwstPfl
  550. tDetail.BetragMwst = 0
  551. tDetail.BetragFW = 0
  552. tDetail.BuchTyp = ''
  553. tDetail.Kostenstelle = ''
  554. tDetail.cCode = ''
  555. tDetail.iStatus = 9.
  556. END.
  557. END.
  558. xx = xx + 1.
  559. END.
  560. cMessage = SUBSTITUTE(' Anzahl beruecksichtigte Rechnungen aus Ge_MIS -> &1', xx).
  561. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  562. iAnzOp = 0.
  563. nTotBetr = 0.00.
  564. xx = 0.
  565. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR.
  566. FOR EACH tDebop:
  567. FIND FIRST tBeleg WHERE tBeleg.OpId = tDebop.OpID NO-ERROR.
  568. IF AVAILABLE tBeleg THEN NEXT.
  569. ja = DYNAMIC-FUNCTION('updateBeleg':U, INPUT htDebop, INPUT 1) NO-ERROR.
  570. tDebop.iStatus = (IF ja THEN 1 ELSE 0).
  571. IF tDebop.iStatus < 9 THEN
  572. DO:
  573. CREATE xOpSaldo.
  574. ASSIGN
  575. xOpSaldo.OpId = tDebop.OpId
  576. xOpSaldo.PkNr = tDebop.KndNr.
  577. END.
  578. xx = xx + 1.
  579. IF xx MOD 100 = 0 THEN
  580. DO:
  581. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR.
  582. cMessage = SUBSTITUTE(' -> bereits eingefuegte Belege -> &1', xx).
  583. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  584. ii = ETIME(TRUE).
  585. DO WHILE ETIME < 1000:
  586. END.
  587. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR.
  588. END.
  589. FIND Debop NO-LOCK
  590. WHERE Debop.Firma = cMandant
  591. AND Debop.Knr = tDebop.KndNr
  592. AND Debop.Faknr = INTEGER(tDebop.OpId) NO-ERROR.
  593. CREATE tOpSaldo.
  594. ASSIGN
  595. tOpSaldo.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>'))
  596. tOpSaldo.PkNr = Debop.Knr
  597. tOpSaldo.Betrag = Debop.Saldo
  598. tOpSaldo.BetragFW = Debop.Saldo NO-ERROR.
  599. IF tDebop.iStatus = 1 THEN
  600. ASSIGN
  601. iAnzOp = iAnzOp + 1
  602. nTotBetr = nTotBetr + Debop.Fakbetr.
  603. END.
  604. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR.
  605. cMessage = SUBSTITUTE(' Anzahl eingefügte Belege -> &1', xx).
  606. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  607. ii = ETIME(TRUE).
  608. DO WHILE ETIME < 1000:
  609. END.
  610. xx = DYNAMIC-FUNCTION('lesenBeleg':U) NO-ERROR.
  611. cMessage = SUBSTITUTE(' Anzahl eingelesene Belege aus SESAM nach Belegverbuchen -> &1', xx).
  612. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  613. xx = 0.
  614. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR.
  615. FOR EACH tDetail:
  616. FIND FIRST tBeleg WHERE tBeleg.OpId = TRIM(STRING(tDetail.DocKey,'>>>>>>>>')) NO-ERROR.
  617. IF NOT AVAILABLE tBeleg THEN NEXT.
  618. iDocKey = tBeleg.DocKey.
  619. FIND FIRST tBelegDetail
  620. WHERE tBelegDetail.DocKey = iDocKey
  621. AND tBelegDetail.DocLine = tDetail.DocLine NO-ERROR.
  622. IF AVAILABLE tBelegDetail THEN NEXT.
  623. FIND FIRST xDetail.
  624. BUFFER-COPY tDetail EXCEPT DocKey SammelKonto TO xDetail
  625. ASSIGN
  626. xDetail.DocKey = iDocKey
  627. xDetail.Konto = tDetail.SammelKonto.
  628. /*
  629. tDetail.DocKey = cDocKey.
  630. IF tDetail.DocKey = ? THEN NEXT.
  631. IF tDetail.DocKey = 0 THEN NEXT.
  632. ja = DYNAMIC-FUNCTION('ifBelegDetail':U,
  633. INPUT tDetail.DocKey,
  634. INPUT tDetail.DocLine) NO-ERROR.
  635. IF ja = ? THEN NEXT.
  636. IF ja = TRUE THEN NEXT.
  637. */
  638. DYNAMIC-FUNCTION('updateBelegDetail':U, INPUT htDetail, INPUT 1) NO-ERROR.
  639. tDetail.iStatus = (IF ja THEN 1 ELSE 0).
  640. xx = xx + 1.
  641. IF xx MOD 100 = 0 THEN
  642. DO:
  643. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR.
  644. cMessage = SUBSTITUTE(' -> bereits eingefuegte BelegDetail -> &1', xx).
  645. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  646. ii = ETIME(TRUE).
  647. DO WHILE ETIME < 500:
  648. END.
  649. DYNAMIC-FUNCTION('startSQLTransaction':U) NO-ERROR.
  650. END.
  651. END.
  652. DYNAMIC-FUNCTION('closeSQLTransaction':U) NO-ERROR.
  653. cMessage = SUBSTITUTE(' Anzahl eingefuegte BelegDetail -> &1', xx).
  654. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  655. OUTPUT TO VALUE(cJournal) NO-MAP NO-CONVERT.
  656. FOR EACH tDebop:
  657. PUT CONTROL tDebop.OpId
  658. ';'
  659. tDebop.KndNr
  660. ';'
  661. tDebop.Firma
  662. ';'
  663. tDebop.Zusatz
  664. ';'
  665. tDebop.Ort
  666. ';'
  667. tDebop.iStatus
  668. ';'
  669. tDebop.SammelKonto
  670. ';'.
  671. lErst = TRUE.
  672. FIND FIRST tBeleg WHERE tBeleg.OpId = tDebop.OpId.
  673. FOR EACH tDetail WHERE tDetail.DocKey = INTEGER(tDebop.OpID):
  674. IF NOT lErst THEN PUT CONTROL ';;;;;;;'.
  675. PUT CONTROL tDetail.SammelKonto
  676. ';'
  677. tDetail.cText
  678. ';'
  679. tDetail.MwstTyp
  680. ';'
  681. TRIM(STRING(tDetail.BetragMwst,'->>>>>>>>9.99'))
  682. ';'
  683. TRIM(STRING(tDetail.Betrag ,'->>>>>>>>9.99'))
  684. ';'
  685. tDetail.BuchTyp
  686. ';'
  687. tDetail.iStatus
  688. CHR(10).
  689. lErst = FALSE.
  690. END.
  691. END.
  692. OUTPUT CLOSE.
  693. END PROCEDURE.
  694. /* _UIB-CODE-BLOCK-END */
  695. &ANALYZE-RESUME
  696. &ENDIF
  697. &IF DEFINED(EXCLUDE-LESEN_OFFENESALDI) = 0 &THEN
  698. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE LESEN_OFFENESALDI Procedure
  699. PROCEDURE LESEN_OFFENESALDI :
  700. /*------------------------------------------------------------------------------
  701. Purpose:
  702. Parameters: <none>
  703. Notes:
  704. ------------------------------------------------------------------------------*/
  705. DEFINE VARIABLE Saldo AS DECIMAL NO-UNDO.
  706. DEFINE VARIABLE Diff AS DECIMAL NO-UNDO.
  707. DEFINE VARIABLE cExport AS CHARACTER NO-UNDO.
  708. DEFINE BUFFER BDebst FOR Debst.
  709. cExport = SUBSTITUTE('&1tOpSaldo.csv', cTempDir).
  710. OUTPUT TO VALUE(cExport) NO-MAP NO-CONVERT.
  711. FOR EACH tOpSaldo:
  712. EXPORT DELIMITER ';' tOpSaldo.
  713. END.
  714. OUTPUT CLOSE.
  715. FIND FIRST tOpSaldo NO-LOCK NO-ERROR.
  716. IF NOT AVAILABLE tOpSaldo THEN RETURN.
  717. FOR EACH Debst NO-LOCK:
  718. Saldo = 0.
  719. FOR EACH Debop USE-INDEX Debop-k1
  720. WHERE Debop.Firma = Debst.Firma
  721. AND Debop.Knr = Debst.Knr:
  722. FIND FIRST xOpSaldo NO-LOCK USE-INDEX Faknr
  723. WHERE xOpSaldo.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>')) NO-ERROR.
  724. IF AVAILABLE xOpSaldo THEN NEXT.
  725. FIND FIRST tOpSaldo NO-LOCK USE-INDEX Faknr
  726. WHERE tOpSaldo.OpId = TRIM(STRING(Debop.Faknr,'>>>>>>>>'))
  727. AND tOpSaldo.PkNr = Debst.Knr NO-ERROR.
  728. IF AVAILABLE tOpSaldo THEN Diff = Debop.Saldo - tOpSaldo.Betrag.
  729. ELSE Diff = (IF Debop.Fakdat < (TODAY - 7) THEN Debop.Saldo ELSE 0).
  730. IF Diff <> 0 THEN
  731. DO:
  732. Debop.ZahBetr = Debop.ZahBetr + Diff.
  733. Debop.Saldo = Debop.Fakbetr - Debop.Zahbetr - Debop.Skonto.
  734. Debop.Zahdat = TODAY.
  735. END.
  736. Saldo = Saldo + Debop.Saldo.
  737. IF Debop.Saldo <> 0 THEN NEXT.
  738. IF Debop.FakDat > (TODAY - 360) THEN NEXT.
  739. /*
  740. DELETE Debop.
  741. */
  742. END.
  743. IF Saldo = Debst.Saldo THEN NEXT.
  744. FIND BDebst WHERE RECID(BDebst) = RECID(Debst)
  745. EXCLUSIVE-LOCK NO-WAIT NO-ERROR.
  746. IF NOT AVAILABLE BDebst THEN NEXT.
  747. BDebst.Saldo = Saldo.
  748. RELEASE BDebst.
  749. END.
  750. END PROCEDURE.
  751. /* _UIB-CODE-BLOCK-END */
  752. &ANALYZE-RESUME
  753. &ENDIF
  754. &IF DEFINED(EXCLUDE-RUNDEN) = 0 &THEN
  755. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE RUNDEN Procedure
  756. PROCEDURE RUNDEN :
  757. /*------------------------------------------------------------------------------
  758. Purpose:
  759. Parameters: <none>
  760. Notes:
  761. ------------------------------------------------------------------------------*/
  762. DEFINE INPUT PARAMETER Rundcode AS INTEGER NO-UNDO.
  763. DEFINE INPUT-OUTPUT PARAMETER Rundbetr AS DECIMAL DECIMALS 4 NO-UNDO.
  764. DEFINE VARIABLE VBetr AS DECIMAL DECIMALS 4 NO-UNDO.
  765. DEFINE VARIABLE VOp AS DECIMAL INIT 0.2 NO-UNDO.
  766. DEFINE VARIABLE XPChar AS CHARACTER NO-UNDO.
  767. DO TRANSACTION:
  768. VBetr = Rundbetr.
  769. IF Rundcode = 1 THEN
  770. DO:
  771. VBetr = ROUND((VBetr / 100 * VOp), 4) / VOp * 100.
  772. END.
  773. IF Rundcode = 2 THEN
  774. DO:
  775. VBetr = ROUND((VBetr / 100), 3) * 100.
  776. END.
  777. IF Rundcode = 3 THEN
  778. DO:
  779. VBetr = VBetr + 0.0499.
  780. VBetr = ROUND((VBetr / 100), 3) * 100.
  781. END.
  782. IF Rundcode = 4 THEN
  783. DO:
  784. VBetr = VBetr - 0.0500.
  785. VBetr = ROUND((VBetr / 100), 3) * 100.
  786. END.
  787. IF Rundcode = 5 THEN
  788. DO:
  789. VBetr = ROUND((VBetr / 100), 2) * 100.
  790. END.
  791. IF Rundcode = 6 THEN
  792. DO:
  793. VBetr = VBetr + 0.4999.
  794. VBetr = ROUND((VBetr / 100), 2) * 100.
  795. END.
  796. IF Rundcode = 7 THEN
  797. DO:
  798. VBetr = VBetr - 0.5000.
  799. VBetr = ROUND((VBetr / 100), 2) * 100.
  800. END.
  801. IF Rundcode = 8 THEN
  802. DO:
  803. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  804. END.
  805. IF Rundcode = 9 THEN
  806. DO:
  807. VBetr = VBetr + 4.9999.
  808. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  809. END.
  810. IF Rundcode = 10 THEN
  811. DO:
  812. VBetr = VBetr - 5.0000.
  813. VBetr = ROUND((VBetr / 1000), 2) * 1000.
  814. END.
  815. IF Rundcode = 99 THEN
  816. DO:
  817. XPChar = STRING(VBetr,"-99999999.999").
  818. VBetr = DECIMAL(SUBSTRING(XPChar,01,12)).
  819. IF SUBSTRING(XPChar,13,01) > "4" THEN VBetr = VBetr + 0.01.
  820. END.
  821. Rundbetr = VBetr.
  822. END.
  823. END PROCEDURE.
  824. /* _UIB-CODE-BLOCK-END */
  825. &ANALYZE-RESUME
  826. &ENDIF
  827. /* ************************ Function Implementations ***************** */
  828. &IF DEFINED(EXCLUDE-cancelSQLTransaction) = 0 &THEN
  829. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION cancelSQLTransaction Procedure
  830. FUNCTION cancelSQLTransaction RETURNS LOGICAL
  831. ( /* parameter-definitions */ ) :
  832. /*------------------------------------------------------------------------------
  833. Purpose:
  834. Notes:
  835. ------------------------------------------------------------------------------*/
  836. ODBC-QUERY = 'ROLLBACK'.
  837. ASSIGN
  838. ObjCommand:CommandText = ODBC-QUERY
  839. ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ).
  840. END FUNCTION.
  841. /* _UIB-CODE-BLOCK-END */
  842. &ANALYZE-RESUME
  843. &ENDIF
  844. &IF DEFINED(EXCLUDE-CloseConnection) = 0 &THEN
  845. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION CloseConnection Procedure
  846. FUNCTION CloseConnection RETURNS LOGICAL
  847. ( /* parameter-definitions */ ) :
  848. /*------------------------------------------------------------------------------
  849. Purpose:
  850. Notes:
  851. ------------------------------------------------------------------------------*/
  852. ObjConnection:Close NO-ERROR.
  853. RELEASE OBJECT ObjConnection NO-ERROR.
  854. RELEASE OBJECT ObjCommand NO-ERROR.
  855. RELEASE OBJECT ObjRecordSet NO-ERROR.
  856. RETURN TRUE.
  857. END FUNCTION.
  858. /* _UIB-CODE-BLOCK-END */
  859. &ANALYZE-RESUME
  860. &ENDIF
  861. &IF DEFINED(EXCLUDE-closeSQLTransaction) = 0 &THEN
  862. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION closeSQLTransaction Procedure
  863. FUNCTION closeSQLTransaction RETURNS LOGICAL
  864. ( /* parameter-definitions */ ) :
  865. /*------------------------------------------------------------------------------
  866. Purpose:
  867. Notes:
  868. ------------------------------------------------------------------------------*/
  869. ODBC-QUERY = 'COMMIT'.
  870. ASSIGN
  871. ObjCommand:CommandText = ODBC-QUERY
  872. ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ).
  873. END FUNCTION.
  874. /* _UIB-CODE-BLOCK-END */
  875. &ANALYZE-RESUME
  876. &ENDIF
  877. &IF DEFINED(EXCLUDE-CreateConnection) = 0 &THEN
  878. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION CreateConnection Procedure
  879. FUNCTION CreateConnection RETURNS LOGICAL
  880. ( /* parameter-definitions */ ) :
  881. /*------------------------------------------------------------------------------
  882. Purpose:
  883. Notes:
  884. ------------------------------------------------------------------------------*/
  885. DEFINE VARIABLE cConnCommand AS CHARACTER NO-UNDO.
  886. DEFINE VARIABLE cDSN AS CHARACTER NO-UNDO.
  887. DEFINE VARIABLE cServer AS CHARACTER NO-UNDO.
  888. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  889. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  890. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  891. DEFINE VARIABLE cBenutzer AS CHARACTER NO-UNDO.
  892. DEFINE VARIABLE cPassword AS CHARACTER NO-UNDO.
  893. CREATE "ADODB.Connection" ObjConnection NO-ERROR.
  894. CREATE "ADODB.RecordSet" ObjRecordSet NO-ERROR.
  895. CREATE "ADODB.Command" ObjCommand NO-ERROR.
  896. GET-KEY-VALUE SECTION 'Grundeinstellungen'
  897. KEY 'SQLServer'
  898. VALUE cServer.
  899. IF cServer = ? THEN RETURN FALSE.
  900. IF cServer = '' THEN RETURN FALSE.
  901. GET-KEY-VALUE SECTION 'Grundeinstellungen'
  902. KEY 'SQLDSN'
  903. VALUE cDSN.
  904. IF cDSN = ? THEN RETURN FALSE.
  905. IF cDSN = '' THEN RETURN FALSE.
  906. GET-KEY-VALUE SECTION 'Grundeinstellungen'
  907. KEY 'SQLDSNUser'
  908. VALUE cBenutzer.
  909. IF cBenutzer = ? THEN RETURN FALSE.
  910. IF cBenutzer = '' THEN RETURN FALSE.
  911. GET-KEY-VALUE SECTION 'Grundeinstellungen'
  912. KEY 'SQLDSNPwd'
  913. VALUE cPassword.
  914. IF cPassword = ? THEN RETURN FALSE.
  915. IF cPassword = '' THEN RETURN FALSE.
  916. ASSIGN
  917. ODBC-STATUS = ''
  918. ODBC-NULL = ''
  919. ODBC-DSN = cDSN
  920. ODBC-SERVER = cServer
  921. ODBC-USERID = cBenutzer
  922. ODBC-PASSWD = cPassword
  923. ODBC-QUERY = ''.
  924. cConnCommand = 'data source='
  925. + ODBC-DSN
  926. + ';server='
  927. + ODBC-SERVER
  928. .
  929. ObjConnection:Open ( cConnCommand, ODBC-USERID, ODBC-PASSWD, 0 ) NO-ERROR.
  930. IF ( ERROR-STATUS:NUM-MESSAGES > 0 ) THEN
  931. DO:
  932. ii = ERROR-STATUS:NUM-MESSAGES.
  933. ODBC-STATUS = "Error: keine Verbindung zu Datenserver "
  934. + cConnCommand.
  935. cMessage = ODBC-STATUS.
  936. DO ix = 1 TO ii:
  937. cMessage = cMessage
  938. + CHR(10)
  939. + ERROR-STATUS:GET-MESSAGE(ix).
  940. END.
  941. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  942. RETURN FALSE.
  943. END.
  944. ASSIGN
  945. ObjCommand:ActiveConnection = ObjConnection
  946. ObjCommand:CommandType = 1 /* adCmdText */
  947. ObjConnection:CursorLocation = 3 /* adUseClient */
  948. ObjRecordSet:CursorType = 3 /* adOpenStatic */.
  949. cMessage = 'Start SESAM SQL mit Connection ' + cConnCommand.
  950. DYNAMIC-FUNCTION('writeLogFile':U, cMessage) NO-ERROR.
  951. RETURN TRUE.
  952. END FUNCTION.
  953. /* _UIB-CODE-BLOCK-END */
  954. &ANALYZE-RESUME
  955. &ENDIF
  956. &IF DEFINED(EXCLUDE-CreateSetDaten) = 0 &THEN
  957. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION CreateSetDaten Procedure
  958. FUNCTION CreateSetDaten RETURNS CHARACTER
  959. ( iphBuffer AS HANDLE, ipArt AS INTEGER ) :
  960. /*------------------------------------------------------------------------------
  961. Purpose:
  962. Notes:
  963. ------------------------------------------------------------------------------*/
  964. DEFINE VARIABLE cSet AS CHARACTER NO-UNDO.
  965. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  966. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  967. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  968. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  969. DEFINE VARIABLE cFelder AS CHARACTER NO-UNDO.
  970. DEFINE VARIABLE cInhalte AS CHARACTER NO-UNDO.
  971. DEFINE VARIABLE xFeld AS CHARACTER NO-UNDO.
  972. DEFINE VARIABLE xInhalt AS CHARACTER NO-UNDO.
  973. cSet = ''.
  974. cFelder = ''.
  975. cInhalte = ''.
  976. DO ii = 1 TO iphBuffer:NUM-FIELDS:
  977. hFeld = iphBuffer:BUFFER-FIELD(ii).
  978. IF hFeld:BUFFER-VALUE(0) = ? THEN NEXT.
  979. cFeld = hFeld:NAME.
  980. IF cFeld = 'cCode' THEN cFeld = 'Code'. /* ProgressSchlüsselFeld */
  981. IF cFeld = 'cText' THEN cFeld = 'Text'. /* ProgressSchlüsselFeld */
  982. IF cFeld = 'iStatus' THEN NEXT. /* Kein SQL-Feld */
  983. DO WHILE TRUE:
  984. IF hFeld:BUFFER-VALUE(0) <> ? AND
  985. hFeld:BUFFER-VALUE(0) <> '?' THEN LEAVE.
  986. CASE hFeld:DATA-TYPE:
  987. WHEN 'INTEGER' THEN
  988. hFeld:BUFFER-VALUE(0) = '0'.
  989. WHEN 'DECIMAL' THEN
  990. hFeld:BUFFER-VALUE(0) = '0.0'.
  991. WHEN 'DATE' THEN
  992. hFeld:BUFFER-VALUE(0) = ''.
  993. WHEN 'LOGICAL' THEN
  994. hFeld:BUFFER-VALUE(0) = STRING(FALSE).
  995. OTHERWISE
  996. hFeld:BUFFER-VALUE(0) = ''.
  997. END CASE.
  998. LEAVE.
  999. END.
  1000. xFeld = "[" + TRIM(cFeld) + "]".
  1001. xInhalt = TRIM(hFeld:BUFFER-VALUE(0)).
  1002. xInhalt = REPLACE(xInhalt, "'", '"').
  1003. xInhalt = "'" + xInhalt + "'".
  1004. cInhalte = cInhalte + "," + xInhalt.
  1005. cFelder = cFelder + "," + xFeld.
  1006. END.
  1007. cInhalte = SUBSTRING(cInhalte,02).
  1008. cFelder = SUBSTRING(cFelder ,02).
  1009. CASE ipArt:
  1010. WHEN 1 THEN
  1011. DO:
  1012. cSet = '('
  1013. + cFelder
  1014. + ') VALUES ('
  1015. + cInhalte
  1016. + ')'.
  1017. END.
  1018. WHEN 0 THEN
  1019. DO:
  1020. cSet = 'SET '.
  1021. DO ii = 1 TO NUM-ENTRIES(cFelder, ','):
  1022. cSet = cSet + ENTRY(ii, cFelder, ',')
  1023. + ' = '
  1024. + ENTRY(ii, cInhalte, ',').
  1025. IF ii < NUM-ENTRIES(cFelder, ',') THEN cSet = cSet + ', '.
  1026. END.
  1027. END.
  1028. END CASE.
  1029. RETURN cSet.
  1030. END FUNCTION.
  1031. /* _UIB-CODE-BLOCK-END */
  1032. &ANALYZE-RESUME
  1033. &ENDIF
  1034. &IF DEFINED(EXCLUDE-getLogName) = 0 &THEN
  1035. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLogName Procedure
  1036. FUNCTION getLogName RETURNS CHARACTER
  1037. ( /* parameter-definitions */ ) :
  1038. /*------------------------------------------------------------------------------
  1039. Purpose:
  1040. Notes:
  1041. ------------------------------------------------------------------------------*/
  1042. DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.
  1043. GET-KEY-VALUE SECTION 'GrundEinstellungen'
  1044. KEY 'SESAM_SQL_LOG'
  1045. VALUE cPath.
  1046. IF cPath = '' OR
  1047. cPath = ? THEN cPath = SESSION:TEMP-DIRECTORY.
  1048. IF SUBSTRING(cPath, LENGTH(cPath), 01) <> '/' AND
  1049. SUBSTRING(cPath, LENGTH(cPath), 01) <> '\' THEN cPath = cPath + '\'.
  1050. cPath = cPath
  1051. + 'SESAMSQL-'
  1052. + REPLACE(STRING(TODAY,'99.99.9999'), '.', '')
  1053. + REPLACE(STRING(TIME ,'HH:MM:SS') , ':', '') + '.Log'.
  1054. RETURN cPath.
  1055. END FUNCTION.
  1056. /* _UIB-CODE-BLOCK-END */
  1057. &ANALYZE-RESUME
  1058. &ENDIF
  1059. &IF DEFINED(EXCLUDE-lesenBeleg) = 0 &THEN
  1060. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION lesenBeleg Procedure
  1061. FUNCTION lesenBeleg RETURNS INTEGER
  1062. ( /* parameter-definitions */ ) :
  1063. /*------------------------------------------------------------------------------
  1064. Purpose:
  1065. Notes:
  1066. ------------------------------------------------------------------------------*/
  1067. EMPTY TEMP-TABLE tBeleg.
  1068. ODBC-QUERY = 'SELECT [OpId],[KndNr],[DocKey] FROM [g.connect].[dbo].[Beleg]'.
  1069. ASSIGN
  1070. ObjCommand:CommandText = ODBC-QUERY
  1071. ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 )
  1072. ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR.
  1073. DO WHILE TRUE:
  1074. IF ODBC-RECCOUNT = 0 THEN LEAVE.
  1075. IF ODBC-RECCOUNT = ? THEN LEAVE.
  1076. ODBC-CURSOR = 0.
  1077. ObjRecordSet:MoveFirst NO-ERROR.
  1078. DO WHILE ODBC-CURSOR < ODBC-RECCOUNT:
  1079. CREATE tBeleg.
  1080. ASSIGN
  1081. tBeleg.Opid = ObjRecordSet:FIELDS("OpId") :VALUE
  1082. tBeleg.KndNr = ObjRecordSet:FIELDS("KndNr") :VALUE.
  1083. tBeleg.DocKey = ObjRecordSet:FIELDS("DocKey"):VALUE.
  1084. ASSIGN
  1085. ODBC-CURSOR = ODBC-CURSOR + 1.
  1086. ObjRecordSet:MoveNext NO-ERROR.
  1087. END.
  1088. LEAVE.
  1089. END.
  1090. RETURN ODBC-RECCOUNT.
  1091. END FUNCTION.
  1092. /* _UIB-CODE-BLOCK-END */
  1093. &ANALYZE-RESUME
  1094. &ENDIF
  1095. &IF DEFINED(EXCLUDE-lesenBelegDetail) = 0 &THEN
  1096. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION lesenBelegDetail Procedure
  1097. FUNCTION lesenBelegDetail RETURNS INTEGER
  1098. ( /* parameter-definitions */ ) :
  1099. /*------------------------------------------------------------------------------
  1100. Purpose:
  1101. Notes:
  1102. ------------------------------------------------------------------------------*/
  1103. EMPTY TEMP-TABLE TBelegDetail.
  1104. ODBC-QUERY = 'SELECT [DocKey],[DocLine] FROM [g.connect].[dbo].[BelegDetail]'.
  1105. ASSIGN
  1106. ObjCommand:CommandText = ODBC-QUERY
  1107. ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 )
  1108. ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR.
  1109. DO WHILE TRUE:
  1110. IF ODBC-RECCOUNT = 0 THEN LEAVE.
  1111. IF ODBC-RECCOUNT = ? THEN LEAVE.
  1112. ODBC-CURSOR = 0.
  1113. ObjRecordSet:MoveFirst NO-ERROR.
  1114. DO WHILE ODBC-CURSOR < ODBC-RECCOUNT:
  1115. CREATE TBelegDetail.
  1116. ASSIGN
  1117. TBelegDetail.DocKey = ObjRecordSet:FIELDS("DocKey") :VALUE
  1118. TBelegDetail.DocLine = ObjRecordSet:FIELDS("DocLine"):VALUE.
  1119. ASSIGN
  1120. ODBC-CURSOR = ODBC-CURSOR + 1.
  1121. ObjRecordSet:MoveNext NO-ERROR.
  1122. END.
  1123. LEAVE.
  1124. END.
  1125. RETURN ODBC-RECCOUNT.
  1126. END FUNCTION.
  1127. /* _UIB-CODE-BLOCK-END */
  1128. &ANALYZE-RESUME
  1129. &ENDIF
  1130. &IF DEFINED(EXCLUDE-lesenOpSaldo) = 0 &THEN
  1131. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION lesenOpSaldo Procedure
  1132. FUNCTION lesenOpSaldo RETURNS INTEGER
  1133. ( /* parameter-definitions */ ) :
  1134. /*------------------------------------------------------------------------------
  1135. Purpose:
  1136. Notes:
  1137. ------------------------------------------------------------------------------*/
  1138. EMPTY TEMP-TABLE tOpSaldo.
  1139. /*
  1140. FOR EACH xOpSaldo:
  1141. CREATE tOpSaldo.
  1142. BUFFER-COPY xOpSaldo TO tOpSaldo.
  1143. END.
  1144. */
  1145. ODBC-QUERY = "SELECT * FROM [g.connect].[dbo].[OPListe] WHERE OpId > '300000' ".
  1146. ASSIGN
  1147. ObjCommand:CommandText = ODBC-QUERY
  1148. ObjRecordSet = ObjCommand:EXECUTE ( OUTPUT ODBC-NULL, "", 32 )
  1149. ODBC-RECCOUNT = ObjRecordSet:RecordCount NO-ERROR.
  1150. DO WHILE TRUE:
  1151. IF ODBC-RECCOUNT = 0 THEN LEAVE.
  1152. IF ODBC-RECCOUNT = ? THEN LEAVE.
  1153. ODBC-CURSOR = 0.
  1154. ObjRecordSet:MoveFirst NO-ERROR.
  1155. DO WHILE ODBC-CURSOR < ODBC-RECCOUNT:
  1156. CREATE tOpSaldo.
  1157. ASSIGN
  1158. tOpSaldo.Opid = ObjRecordSet:FIELDS("OpId") :VALUE
  1159. tOpSaldo.PkNr = ObjRecordSet:FIELDS("PkNr") :VALUE
  1160. tOpSaldo.Betrag = ObjRecordSet:FIELDS("Betrag") :VALUE
  1161. tOpSaldo.BetragFW = ObjRecordSet:FIELDS("BetragFW"):VALUE.
  1162. ASSIGN
  1163. ODBC-CURSOR = ODBC-CURSOR + 1.
  1164. ObjRecordSet:MoveNext NO-ERROR.
  1165. END.
  1166. LEAVE.
  1167. END.
  1168. RETURN ODBC-RECCOUNT.
  1169. END FUNCTION.
  1170. /* _UIB-CODE-BLOCK-END */
  1171. &ANALYZE-RESUME
  1172. &ENDIF
  1173. &IF DEFINED(EXCLUDE-SendMail) = 0 &THEN
  1174. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION SendMail Procedure
  1175. FUNCTION SendMail RETURNS LOGICAL
  1176. ( ):
  1177. /*------------------------------------------------------------------------------
  1178. Purpose:
  1179. Notes:
  1180. ------------------------------------------------------------------------------*/
  1181. DEFINE VARIABLE cBody AS CHARACTER INIT '' NO-UNDO.
  1182. cBody = 'Protokoll der SAGE-Schnittstellenverbuchung'
  1183. + '</br>' + '</br>'
  1184. + SUBSTITUTE('Anzahl OP aus Ge_MIS --> &1 ', STRING(iAnzOp,'zzz,zz9') )
  1185. + '</br>'
  1186. + SUBSTITUTE('Gesamtbetrag aus Ge_MIS --> &1 ', STRING(nTotBetr,'z,zzz,zz9.99-') )
  1187. + '</br>' + '</br>'.
  1188. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1189. CREATE ASMutation.
  1190. ASSIGN
  1191. ASMutation.asmutation_id = NEXT-VALUE(asmutation_id)
  1192. ASMutation.MutArt = 'MAIL'
  1193. ASMutation.Aktiv = TRUE
  1194. ASMutation.cStatus = ''
  1195. ASMutation.Datum = TODAY
  1196. ASMutation.Firma = cMandant
  1197. ASMutation.cFeld_1 = SUBSTITUTE('TO:&1;CC:&2', cMailToSage, 'wr@adprime.ch')
  1198. ASMutation.cFeld_2 = SUBSTITUTE('Ge_MIS - SAGE vom &1 um &2', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS') )
  1199. ASMutation.cFeld_3 = cBody
  1200. ASMutation.cKey_1 = ''
  1201. ASMutation.cKey_2 = ''.
  1202. RELEASE ASMutation.
  1203. LEAVE.
  1204. END.
  1205. RUN 'SendMailStart.p'.
  1206. RETURN TRUE.
  1207. END FUNCTION.
  1208. /* _UIB-CODE-BLOCK-END */
  1209. &ANALYZE-RESUME
  1210. &ENDIF
  1211. &IF DEFINED(EXCLUDE-startSQLTransaction) = 0 &THEN
  1212. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION startSQLTransaction Procedure
  1213. FUNCTION startSQLTransaction RETURNS LOGICAL
  1214. ( /* parameter-definitions */ ) :
  1215. /*------------------------------------------------------------------------------
  1216. Purpose:
  1217. Notes:
  1218. ------------------------------------------------------------------------------*/
  1219. ODBC-QUERY = 'BEGIN TRANSACTION'.
  1220. ASSIGN
  1221. ObjCommand:CommandText = ODBC-QUERY
  1222. ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 ).
  1223. END FUNCTION.
  1224. /* _UIB-CODE-BLOCK-END */
  1225. &ANALYZE-RESUME
  1226. &ENDIF
  1227. &IF DEFINED(EXCLUDE-updateBeleg) = 0 &THEN
  1228. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION updateBeleg Procedure
  1229. FUNCTION updateBeleg RETURNS LOGICAL
  1230. ( ipTHandle AS HANDLE, ipArt AS INTEGER ) :
  1231. /*------------------------------------------------------------------------------
  1232. Purpose:
  1233. Notes:
  1234. ------------------------------------------------------------------------------*/
  1235. DEFINE VARIABLE cSet AS CHARACTER NO-UNDO.
  1236. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1237. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  1238. cSet = DYNAMIC-FUNCTION('CreateSetDaten':U, INPUT ipTHandle, INPUT ipArt) NO-ERROR.
  1239. hFeld = ipTHandle:BUFFER-FIELD('OpId').
  1240. cFeld = hFeld:BUFFER-VALUE(0).
  1241. IF ipArt = 1 THEN
  1242. DO: /* INSERT */
  1243. ODBC-QUERY = "INSERT INTO [g.connect].[dbo].[Beleg] "
  1244. + cSet.
  1245. END.
  1246. IF ipArt = 0 THEN
  1247. DO: /* UPDATE */
  1248. ODBC-QUERY = "UPDATE [g.connect].[dbo].[Beleg] "
  1249. + cSet
  1250. + " WHERE OpId = '"
  1251. + cFeld
  1252. + "' ".
  1253. END.
  1254. ASSIGN
  1255. ObjCommand:CommandText = ODBC-QUERY
  1256. ObjRecordSet = ObjCommand:EXECUTE(OUTPUT ODBC-NULL, "", 32)
  1257. NO-ERROR.
  1258. IF ODBC-NULL <> '1' THEN
  1259. DO:
  1260. OUTPUT TO VALUE(cTempName) NO-MAP NO-CONVERT APPEND.
  1261. PUT CONTROL 'Fehler ' ODBC-NULL ' bei ' ODBC-QUERY CHR(10).
  1262. OUTPUT CLOSE.
  1263. RETURN FALSE.
  1264. END.
  1265. RETURN TRUE.
  1266. END FUNCTION.
  1267. /* _UIB-CODE-BLOCK-END */
  1268. &ANALYZE-RESUME
  1269. &ENDIF
  1270. &IF DEFINED(EXCLUDE-updateBelegDetail) = 0 &THEN
  1271. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION updateBelegDetail Procedure
  1272. FUNCTION updateBelegDetail RETURNS LOGICAL
  1273. ( ipTHandle AS HANDLE, ipArt AS INTEGER ) :
  1274. /*------------------------------------------------------------------------------
  1275. Purpose:
  1276. Notes:
  1277. ------------------------------------------------------------------------------*/
  1278. DEFINE VARIABLE cSet AS CHARACTER NO-UNDO.
  1279. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1280. DEFINE VARIABLE cFaknr AS CHARACTER NO-UNDO.
  1281. DEFINE VARIABLE cIndex AS CHARACTER NO-UNDO.
  1282. cSet = DYNAMIC-FUNCTION('CreateSetDaten':U, INPUT ipTHandle, INPUT ipArt) NO-ERROR.
  1283. hFeld = ipTHandle:BUFFER-FIELD('DocKey').
  1284. cFaknr = hFeld:BUFFER-VALUE(0).
  1285. hFeld = ipTHandle:BUFFER-FIELD('DocLine').
  1286. cIndex = hFeld:BUFFER-VALUE(0).
  1287. IF ipArt = 1 THEN
  1288. DO: /* INSERT */
  1289. ODBC-QUERY = "INSERT INTO [g.connect].[dbo].[BelegDetail] "
  1290. + cSet.
  1291. END.
  1292. IF ipArt = 0 THEN
  1293. DO: /* UPDATE */
  1294. ODBC-QUERY = "UPDATE [g.connect].[dbo].[BelegDetail] "
  1295. + cSet
  1296. + " WHERE DocKey = '"
  1297. + cFaknr
  1298. + "' "
  1299. + "AND DocLine = '"
  1300. + cIndex
  1301. + "'".
  1302. END.
  1303. ASSIGN
  1304. ObjCommand:CommandText = ODBC-QUERY
  1305. ObjRecordSet = ObjCommand:EXECUTE( OUTPUT ODBC-NULL, "", 32 )
  1306. NO-ERROR.
  1307. IF ODBC-NULL <> '1' THEN
  1308. DO:
  1309. OUTPUT TO VALUE(cTempName) NO-MAP NO-CONVERT APPEND.
  1310. PUT CONTROL 'Fehler ' ODBC-NULL ' bei ' ODBC-QUERY CHR(10).
  1311. OUTPUT CLOSE.
  1312. RETURN FALSE.
  1313. END.
  1314. RETURN TRUE.
  1315. END FUNCTION.
  1316. /* _UIB-CODE-BLOCK-END */
  1317. &ANALYZE-RESUME
  1318. &ENDIF
  1319. &IF DEFINED(EXCLUDE-writeLogFile) = 0 &THEN
  1320. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION writeLogFile Procedure
  1321. FUNCTION writeLogFile RETURNS LOGICAL
  1322. ( ipMessage AS CHARACTER ) :
  1323. /*------------------------------------------------------------------------------
  1324. Purpose:
  1325. Notes:
  1326. ------------------------------------------------------------------------------*/
  1327. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1328. cString = SUBSTITUTE('&1 &2 -> &3', STRING(TODAY,'99.99.9999'), STRING(TIME,'HH:MM:SS'), ipMessage).
  1329. OUTPUT STREAM LogStream TO VALUE(cTempName) APPEND.
  1330. PUT STREAM LogStream CONTROL cString CHR(10).
  1331. OUTPUT STREAM LogStream CLOSE.
  1332. RETURN TRUE.
  1333. END FUNCTION.
  1334. /* _UIB-CODE-BLOCK-END */
  1335. &ANALYZE-RESUME
  1336. &ENDIF