&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 GUI ADM2 &ANALYZE-RESUME &Scoped-define WINDOW-NAME CURRENT-WINDOW {adecomm/appserv.i} &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS fFrameWin /*------------------------------------------------------------------------ File: Description: from cntnrfrm.w - ADM2 SmartFrame Template Input Parameters: Output Parameters: ------------------------------------------------------------------------*/ /* This .W file was created with the Progress AppBuilder. */ /*----------------------------------------------------------------------*/ /* Create an unnamed pool to store all the widgets created by this procedure. This is a good default which assures that this procedure's triggers and internal procedures will execute in this procedure's storage, and that proper cleanup will occur on deletion of the procedure. */ CREATE WIDGET-POOL. /* *************************** Definitions ************************** */ /* Parameters Definitions --- */ /* Local Variable Definitions --- */ DEFINE VARIABLE SAktiv AS LOG NO-UNDO INIT FALSE. DEFINE VARIABLE FMut AS LOG NO-UNDO INIT FALSE. DEFINE VARIABLE ProgName AS CHARACTER NO-UNDO. DEFINE VARIABLE Firma AS CHARACTER NO-UNDO. DEFINE VARIABLE D1Firma AS CHARACTER NO-UNDO. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE FBFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE GlobFir AS CHARACTER NO-UNDO. DEFINE VARIABLE GlobFil AS CHARACTER INIT '0000' NO-UNDO. DEFINE VARIABLE GlobKon AS CHARACTER INIT '9999' NO-UNDO. DEFINE VARIABLE BasFrw AS CHARACTER NO-UNDO. DEFINE VARIABLE lFirst AS LOGICAL NO-UNDO. DEFINE TEMP-TABLE tDateien FIELD cxmlDatei AS CHARACTER . DEFINE TEMP-TABLE tVESRZahl NO-UNDO LIKE VESRZahl. DEFINE TEMP-TABLE zDebop NO-UNDO LIKE Debop FIELD SkMax_Frw AS DECIMAL FIELD SkMax AS DECIMAL FIELD ZaKonto AS CHARACTER. { incl/ttcamt054_esr.i } {src/adm2/widgetprto.i} /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK /* ******************** Preprocessor Definitions ******************** */ &Scoped-define PROCEDURE-TYPE SmartFrame &Scoped-define DB-AWARE no &Scoped-define ADM-CONTAINER FRAME &Scoped-define ADM-SUPPORTED-LINKS Data-Target,Data-Source,Page-Target,Update-Source,Update-Target /* Name of designated FRAME-NAME and/or first browse and/or first query */ &Scoped-define FRAME-NAME fMain /* Standard List Definitions */ &Scoped-Define ENABLED-OBJECTS RECT-8 F_Dateiname Btn_Suchen CB_Zahkonto ~ R_Datum Btn_Start Btn_Verbuchen T_ISO20022 &Scoped-Define DISPLAYED-OBJECTS F_Dateiname CB_Zahkonto R_Datum T_ISO20022 /* Custom List Definitions */ /* List-1,List-2,List-3,List-4,List-5,List-6 */ &Scoped-define List-6 F_Dateiname R_Datum T_ISO20022 /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* *********************** Control Definitions ********************** */ /* Definitions of handles for SmartObjects */ DEFINE VARIABLE h_b-vesrzahl AS HANDLE NO-UNDO. DEFINE VARIABLE h_d-vesrzahl AS HANDLE NO-UNDO. /* Definitions of the field level widgets */ DEFINE BUTTON Btn_Start LABEL "einlesen Datei" SIZE 20 BY 1. DEFINE BUTTON Btn_Suchen IMAGE-UP FILE "grafik/select.bmp":U IMAGE-DOWN FILE "grafik/select.bmp":U IMAGE-INSENSITIVE FILE "grafik/select.bmp":U LABEL "S" SIZE 4.2 BY 1. DEFINE BUTTON Btn_Verbuchen LABEL "verbuchen" SIZE 20 BY 1. DEFINE VARIABLE CB_Zahkonto AS CHARACTER FORMAT "X(256)":U LABEL "FIBU-Konto" VIEW-AS COMBO-BOX INNER-LINES 5 LIST-ITEM-PAIRS "Item 1","Item 1" DROP-DOWN-LIST SIZE 50 BY 1 BGCOLOR 15 NO-UNDO. DEFINE VARIABLE F_Dateiname AS CHARACTER FORMAT "X(256)":U LABEL "BESR-Datei" VIEW-AS FILL-IN NATIVE SIZE 50 BY 1 BGCOLOR 15 NO-UNDO. DEFINE VARIABLE R_Datum AS INTEGER INITIAL 3 VIEW-AS RADIO-SET VERTICAL RADIO-BUTTONS "Einzahlungsdatum", 1, "Verarbeitungsdatum", 2, "Gutschriftsdatum", 3 SIZE 50 BY 2.52 BGCOLOR 15 NO-UNDO. DEFINE RECTANGLE RECT-8 EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL SIZE 170 BY 18.1. DEFINE VARIABLE T_ISO20022 AS LOGICAL INITIAL YES LABEL "ISO 20022" VIEW-AS TOGGLE-BOX SIZE 20 BY 1 NO-UNDO. /* ************************ Frame Definitions *********************** */ DEFINE FRAME fMain F_Dateiname AT ROW 1.52 COL 18 COLON-ALIGNED WIDGET-ID 2 Btn_Suchen AT ROW 1.52 COL 72 WIDGET-ID 18 CB_Zahkonto AT ROW 2.52 COL 18 COLON-ALIGNED WIDGET-ID 6 R_Datum AT ROW 4 COL 20 NO-LABEL WIDGET-ID 8 Btn_Start AT ROW 4 COL 85 WIDGET-ID 12 Btn_Verbuchen AT ROW 5.52 COL 85 WIDGET-ID 14 T_ISO20022 AT ROW 7 COL 20 WIDGET-ID 20 RECT-8 AT ROW 1.24 COL 2 WIDGET-ID 16 WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY SIDE-LABELS NO-UNDERLINE THREE-D AT COL 1 ROW 1 SIZE 172 BY 18.52 DEFAULT-BUTTON Btn_Start WIDGET-ID 100. /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: SmartFrame Allow: Basic,Browse,DB-Fields,Query,Smart Container Links: Data-Target,Data-Source,Page-Target,Update-Source,Update-Target Other Settings: PERSISTENT-ONLY COMPILE APPSERVER */ /* This procedure should always be RUN PERSISTENT. Report the error, */ /* then cleanup and return. */ IF NOT THIS-PROCEDURE:PERSISTENT THEN DO: MESSAGE "{&FILE-NAME} should only be RUN PERSISTENT.":U VIEW-AS ALERT-BOX ERROR BUTTONS OK. RETURN. END. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS /* ************************* Create Window ************************** */ &ANALYZE-SUSPEND _CREATE-WINDOW /* DESIGN Window definition (used by the UIB) CREATE WINDOW fFrameWin ASSIGN HEIGHT = 18.52 WIDTH = 173.4. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB fFrameWin /* ************************* Included-Libraries *********************** */ {src/adm2/containr.i} /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* *********** Runtime Attributes and AppBuilder Settings *********** */ &ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES /* SETTINGS FOR WINDOW fFrameWin VISIBLE,,RUN-PERSISTENT */ /* SETTINGS FOR FRAME fMain NOT-VISIBLE FRAME-NAME */ ASSIGN FRAME fMain:HIDDEN = TRUE. /* SETTINGS FOR FILL-IN F_Dateiname IN FRAME fMain 6 */ /* SETTINGS FOR RADIO-SET R_Datum IN FRAME fMain 6 */ /* SETTINGS FOR TOGGLE-BOX T_ISO20022 IN FRAME fMain 6 */ /* _RUN-TIME-ATTRIBUTES-END */ &ANALYZE-RESUME /* Setting information for Queries and Browse Widgets fields */ &ANALYZE-SUSPEND _QUERY-BLOCK FRAME fMain /* Query rebuild information for FRAME fMain _Options = "" _Query is NOT OPENED */ /* FRAME fMain */ &ANALYZE-RESUME /* ************************ Control Triggers ************************ */ &Scoped-define SELF-NAME Btn_Start &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Start fFrameWin ON CHOOSE OF Btn_Start IN FRAME fMain /* einlesen Datei */ DO: RUN BESR_EINLESEN. RETURN NO-APPLY. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define SELF-NAME Btn_Suchen &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Suchen fFrameWin ON CHOOSE OF Btn_Suchen IN FRAME fMain /* S */ DO: DEFINE VARIABLE lJa AS LOG NO-UNDO. DO WITH FRAME {&FRAME-NAME}: ASSIGN {&List-6}. SYSTEM-DIALOG GET-FILE F_Dateiname TITLE "Auswahl der BESR-Datei ..." FILTERS "Alle Dateien (*.*)" "*.*" MUST-EXIST USE-FILENAME UPDATE lJa. IF NOT lJa THEN RETURN NO-APPLY. DISPLAY {&List-6}. APPLY 'ENTRY' TO F_Dateiname. RETURN NO-APPLY. END. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define SELF-NAME Btn_Verbuchen &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Verbuchen fFrameWin ON CHOOSE OF Btn_Verbuchen IN FRAME fMain /* verbuchen */ DO: RUN VERBUCHEN. APPLY 'ENTRY' TO F_Dateiname. RETURN NO-APPLY. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &UNDEFINE SELF-NAME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK fFrameWin /* *************************** Main Block *************************** */ sAktiv = DYNAMIC-FUNCTION('getSuperaktiv':U) NO-ERROR. IF sAktiv THEN DO: Firma = DYNAMIC-FUNCTION('getMandat':U ) NO-ERROR. D1Firma = DYNAMIC-FUNCTION('getMandant':U ) NO-ERROR. AdFirma = DYNAMIC-FUNCTION('getADMandant':U ) NO-ERROR. FBFirma = DYNAMIC-FUNCTION('getFBMandant':U ) NO-ERROR. GlobFir = D1Firma. END. IF FBFirma = '' THEN FBFirma = '9999'. &IF DEFINED(UIB_IS_RUNNING) <> 0 &THEN /* Now enable the interface if in test mode - otherwise this happens when the object is explicitly initialized from its container. */ RUN initializeObject. &ENDIF /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-create-objects fFrameWin _ADM-CREATE-OBJECTS PROCEDURE adm-create-objects : /*------------------------------------------------------------------------------ Purpose: Create handles for all SmartObjects used in this procedure. After SmartObjects are initialized, then SmartLinks are added. Parameters: ------------------------------------------------------------------------------*/ DEFINE VARIABLE currentPage AS INTEGER NO-UNDO. ASSIGN currentPage = getCurrentPage(). CASE currentPage: WHEN 0 THEN DO: RUN constructObject ( INPUT 'd-vesrzahl.wDB-AWARE':U , INPUT FRAME fMain:HANDLE , INPUT 'AppServiceASInfoASUsePrompt?CacheDuration0CheckCurrentChangedyesDestroyStatelessyesDisconnectAppServernoServerOperatingModeNONEShareDatanoUpdateFromSourcenoForeignFieldsObjectNamed-vesrzahlOpenOnInityesPromptColumns(NONE)PromptOnDeletenoRowsToBatch200RebuildOnReposyesToggleDataTargetsyes':U , OUTPUT h_d-vesrzahl ). RUN repositionObject IN h_d-vesrzahl ( 8.14 , 9.80 ) NO-ERROR. /* Size in AB: ( 3.91 , 32.80 ) */ RUN constructObject ( INPUT 'b-vesrzahl.w':U , INPUT FRAME fMain:HANDLE , INPUT 'ScrollRemotenoNumDown0CalcWidthnoMaxWidth80FetchOnReposToEndyesUseSortIndicatoryesSearchFieldDataSourceNames?UpdateTargetNames?LogicalObjectNameHideOnInitnoDisableOnInitnoObjectLayout':U , OUTPUT h_b-vesrzahl ). RUN repositionObject IN h_b-vesrzahl ( 8.38 , 3.00 ) NO-ERROR. RUN resizeObject IN h_b-vesrzahl ( 10.71 , 167.00 ) NO-ERROR. /* Links to SmartDataBrowser h_b-vesrzahl. */ RUN addLink ( h_d-vesrzahl , 'Data':U , h_b-vesrzahl ). /* Adjust the tab order of the smart objects. */ RUN adjustTabOrder ( h_b-vesrzahl , T_ISO20022:HANDLE IN FRAME fMain , 'AFTER':U ). END. /* Page 0 */ END CASE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESRDATEI_FUELLEN fFrameWin PROCEDURE BESRDATEI_FUELLEN : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cZeile AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE iTT AS INTEGER NO-UNDO. DEFINE VARIABLE iMM AS INTEGER NO-UNDO. DEFINE VARIABLE iJJ AS INTEGER NO-UNDO. DEFINE VARIABLE iTrArt AS INTEGER NO-UNDO. DEFINE VARIABLE iAnz AS INTEGER NO-UNDO. FOR EACH VESRZahl: DELETE VESRZahl. END. INPUT FROM 'VESR.V11' NO-MAP NO-CONVERT. B020: REPEAT TRANSACTION ON STOP UNDO, LEAVE: IMPORT cZeile. FIND LAST VESRZahl NO-LOCK NO-ERROR. IF AVAILABLE VESRZahl THEN ix = VESRZahl.Trnr + 1. ELSE ix = 1. iTrArt = INTEGER(SUBSTRING(cZeile,001,03)). IF iTrArt >= 900 THEN DO: CREATE VESRZahl. ASSIGN VESRZahl.Trnr = ix VESRZahl.Tr_Art = iTrArt VESRZahl.Tn_Nr = INTEGER(SUBSTRING(cZeile,004,09)) VESRZahl.Referenz = SUBSTRING(cZeile,013,27) VESRZahl.Betrag = INTEGER(SUBSTRING(cZeile,040,12)) / 100 VESRZahl.Aufg_Ref = SUBSTRING(cZeile,054,10) VESRZahl.Taxen_01 = INTEGER(SUBSTRING(cZeile,070,09)) / 100 VESRZahl.Taxen_02 = INTEGER(SUBSTRING(cZeile,079,09)) / 100. iJJ = INTEGER(SUBSTRING(cZeile,064,02)). iMM = INTEGER(SUBSTRING(cZeile,066,02)). iTT = INTEGER(SUBSTRING(cZeile,068,02)). IF iJJ > 50 THEN iJJ = iJJ + 1900. ELSE iJJ = iJJ + 2000. VESRZahl.Aufg_Dat = DATE(iMM,iTT,iJJ). IF iTrArt = 995 THEN DO: VESRZahl.Betrag = VESRZahl.Betrag * -1. VESRZahl.Taxen_01 = VESRZahl.Taxen_01 * -1. END. NEXT. END. CREATE VESRZahl. ASSIGN VESRZahl.Trnr = ix VESRZahl.Tr_Art = iTrArt VESRZahl.Tn_Nr = INTEGER(SUBSTRING(cZeile,004,09)) VESRZahl.Referenz = SUBSTRING(cZeile,013,27) VESRZahl.Betrag = INTEGER(SUBSTRING(cZeile,040,10)) / 100 VESRZahl.Aufg_Ref = SUBSTRING(cZeile,050,10) VESRZahl.Mi_Fi_Nr = SUBSTRING(cZeile,078,09) VESRZahl.Rj_Cd = SUBSTRING(cZeile,087,01) VESRZahl.Taxen_02 = INTEGER(SUBSTRING(cZeile,097,04)) / 100. iJJ = INTEGER(SUBSTRING(cZeile,060,02)). iMM = INTEGER(SUBSTRING(cZeile,062,02)). iTT = INTEGER(SUBSTRING(cZeile,064,02)). IF iJJ > 50 THEN iJJ = iJJ + 1900. ELSE iJJ = iJJ + 2000. VESRZahl.Aufg_Dat = DATE(iMM,iTT,iJJ). iJJ = INTEGER(SUBSTRING(cZeile,066,02)). iMM = INTEGER(SUBSTRING(cZeile,068,02)). iTT = INTEGER(SUBSTRING(cZeile,070,02)). IF iJJ > 50 THEN iJJ = iJJ + 1900. ELSE iJJ = iJJ + 2000. VESRZahl.Verb_Dat = DATE(iMM,iTT,iJJ). iJJ = INTEGER(SUBSTRING(cZeile,072,02)). iMM = INTEGER(SUBSTRING(cZeile,074,02)). iTT = INTEGER(SUBSTRING(cZeile,076,02)). IF iJJ > 50 THEN iJJ = iJJ + 1900. ELSE iJJ = iJJ + 2000. VESRZahl.Guts_Dat = DATE(iMM,iTT,iJJ). IF iTrArt = 005 OR iTrArt = 015 OR iTrArt = 105 OR iTrArt = 115 THEN DO: VESRZahl.Betrag = VESRZahl.Betrag * -1. VESRZahl.Taxen_02 = VESRZahl.Taxen_02 * -1. END. iAnz = iAnz + 1. END. INPUT CLOSE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESRDATEI_ISO20022_FUELLEN fFrameWin PROCEDURE BESRDATEI_ISO20022_FUELLEN : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cZeile AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE iTT AS INTEGER NO-UNDO. DEFINE VARIABLE iMM AS INTEGER NO-UNDO. DEFINE VARIABLE iJJ AS INTEGER NO-UNDO. DEFINE VARIABLE iTrArt AS INTEGER NO-UNDO. DEFINE VARIABLE iAnz AS INTEGER NO-UNDO. DEFINE VARIABLE iTotBetr AS DECIMAL NO-UNDO. DEFINE VARIABLE iTotTax AS DECIMAL NO-UNDO. DEFINE VARIABLE iTeilnrNr AS INTEGER NO-UNDO. IF lFirst THEN DO: FOR EACH VESRZahl: DELETE VESRZahl. END. lFirst = FALSE. END. FOR EACH tSubHeader: ASSIGN iAnz = 0 iTotBetr = 0 iTotTax = 0. FOR EACH tZahlung WHERE tZahlung.iSeq = tSubHeader.iSeq: FIND LAST VESRZahl NO-LOCK NO-ERROR. IF AVAILABLE VESRZahl THEN ix = VESRZahl.Trnr + 1. ELSE ix = 1. iTrArt = 1. IF iTrArt >= 900 THEN DO: CREATE VESRZahl. ASSIGN VESRZahl.Trnr = ix VESRZahl.Tr_Art = iTrArt VESRZahl.Tn_Nr = INTEGER(SUBSTRING(cZeile,004,09)) VESRZahl.Referenz = SUBSTRING(cZeile,013,27) VESRZahl.Betrag = INTEGER(SUBSTRING(cZeile,040,12)) / 100 VESRZahl.Aufg_Ref = SUBSTRING(cZeile,054,10) VESRZahl.Taxen_01 = INTEGER(SUBSTRING(cZeile,070,09)) / 100 VESRZahl.Taxen_02 = INTEGER(SUBSTRING(cZeile,079,09)) / 100. iJJ = INTEGER(SUBSTRING(cZeile,064,02)). iMM = INTEGER(SUBSTRING(cZeile,066,02)). iTT = INTEGER(SUBSTRING(cZeile,068,02)). IF iJJ > 50 THEN iJJ = iJJ + 1900. ELSE iJJ = iJJ + 2000. VESRZahl.Aufg_Dat = DATE(iMM,iTT,iJJ). IF iTrArt = 995 THEN DO: VESRZahl.Betrag = VESRZahl.Betrag * -1. VESRZahl.Taxen_01 = VESRZahl.Taxen_01 * -1. END. NEXT. END. CREATE VESRZahl. ASSIGN VESRZahl.Trnr = ix VESRZahl.Tr_Art = iTrArt VESRZahl.Tn_Nr = iTeilnrNr VESRZahl.Referenz = tZahlung.Referenz VESRZahl.Betrag = tZahlung.Betrag VESRZahl.Aufg_Ref = tZahlung.AufRef VESRZahl.Mi_Fi_Nr = tZahlung.ServiceRef VESRZahl.Rj_Cd = '' VESRZahl.Taxen_02 = DECIMAL(tZahlung.Taxen). iJJ = INTEGER(SUBSTRING(tSubHeader.Buchdat,001,04)). iMM = INTEGER(SUBSTRING(tSubHeader.Buchdat,006,02)). iTT = INTEGER(SUBSTRING(tSubHeader.Buchdat,009,02)). VESRZahl.Aufg_Dat = DATE(iMM,iTT,iJJ). VESRZahl.Verb_Dat = DATE(iMM,iTT,iJJ). iJJ = INTEGER(SUBSTRING(tSubHeader.Valuta,001,04)). iMM = INTEGER(SUBSTRING(tSubHeader.Valuta,006,02)). iTT = INTEGER(SUBSTRING(tSubHeader.Valuta,009,02)). VESRZahl.Guts_Dat = DATE(iMM,iTT,iJJ). IF tZahlung.lStorno THEN DO: VESRZahl.Betrag = VESRZahl.Betrag * -1. VESRZahl.Taxen_02 = VESRZahl.Taxen_02 * -1. END. iAnz = iAnz + 1. END. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESR_EINLESEN fFrameWin PROCEDURE BESR_EINLESEN : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cDateiName AS CHARACTER NO-UNDO. DEFINE VARIABLE cKonto AS CHARACTER NO-UNDO. DEFINE VARIABLE cISO AS CHARACTER NO-UNDO. DEFINE VARIABLE cEndung AS CHARACTER NO-UNDO. DEFINE VARIABLE lMultiFile AS LOGICAL NO-UNDO. DEFINE VARIABLE cZipProgramm AS CHARACTER NO-UNDO. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO. DEFINE VARIABLE cPfad AS CHARACTER NO-UNDO. DEFINE VARIABLE cPfadArchiv AS CHARACTER NO-UNDO. DEFINE VARIABLE cPfadDaten AS CHARACTER NO-UNDO. DEFINE VARIABLE cPfadDatenNeu AS CHARACTER NO-UNDO. DEFINE VARIABLE cListenName AS CHARACTER NO-UNDO. DO WITH FRAME {&FRAME-NAME}: ASSIGN {&List-6}. cKonto = CB_Zahkonto:SCREEN-VALUE NO-ERROR. cDateiName = SEARCH(F_DateiName) NO-ERROR. FILE-INFO:FILE-NAME = cDateiName. cDateiName = FILE-INFO:FULL-PATHNAME. cDateiName = REPLACE(cDateiName, '/', '\'). IF cDateiName = ? OR cDateiName = '' THEN DO: MESSAGE 'BESR-Dateiname ist ungültig/nicht vorhanden' VIEW-AS ALERT-BOX. APPLY 'ENTRY' TO F_Dateiname. RETURN NO-APPLY. END. cISO = STRING(T_ISO20022). PUT-KEY-VALUE SECTION 'BESR' KEY 'Dateiname' VALUE cDateiname NO-ERROR. PUT-KEY-VALUE SECTION 'BESR' KEY 'Konto' VALUE cKonto NO-ERROR. PUT-KEY-VALUE SECTION 'BESR' KEY 'ISO' VALUE cISO NO-ERROR. END. IF T_ISO20022 THEN DO: lFirst = TRUE. EMPTY TEMP-TABLE tDateien. cEndung = SUBSTRING(cDateiName, R-INDEX(cDateiName, '.')). IF cEndung = '.zip' THEN DO: cZipProgramm = DYNAMIC-FUNCTION ('getFehlwert':U, D1Firma, 'BESRZIPCMD':U). IF cZipProgramm = ? THEN DO: MESSAGE 'Der Fehlwert "BESRZIPCMD" fehlt in der Fehlwertverwaltung ' VIEW-AS ALERT-BOX. RETURN 'ERROR'. END. cZipProgramm = REPLACE(cZipProgramm, '/', '\'). iIndex = R-INDEX(cZipProgramm, '\'). cPfad = (IF iIndex = 0 THEN '.\' ELSE SUBSTRING(cZipProgramm, 01, iIndex)). cPfadDaten = cPfad + STRING(YEAR(TODAY),'9999') + STRING(MONTH(TODAY),'99') + STRING(DAY(TODAY),'99'). cPfadArchiv = cPfad + 'Archive\'. cPfadDatenNeu = cPfadDaten. FILE-INFO:FILE-NAME = cPfadDatenNeu NO-ERROR. iIndex = 0. DO WHILE FILE-INFO:FULL-PATHNAME <> '' AND FILE-INFO:FULL-PATHNAME <> ?: iIndex = iIndex + 1. cPfadDatenNeu = cPfadDaten + '-' + STRING(iIndex,'99'). FILE-INFO:FILE-NAME = cPfadDatenNeu. END. cPfadDaten = cPfadDatenNeu. cZipProgramm = cZipProgramm + ' ' + cPfadDaten + ' ' + cDateiName. OS-COMMAND SILENT VALUE(cZipProgramm). lMultiFile = TRUE. cListenName = cPfadDaten + '\Liste.txt'. INPUT FROM value(cListenName) NO-MAP NO-CONVERT. REPEAT TRANSACTION ON STOP UNDO, LEAVE: CREATE tDateien. IMPORT UNFORMATTED tDateien. END. INPUT CLOSE. END. ELSE DO: /* iIndex = R-INDEX(cDateiName, '\'). */ /* cDateiName = (IF iIndex = 0 THEN cDateiName ELSE SUBSTRING(cDateiName, iIndex + 1)).*/ CREATE tDateien. ASSIGN tDateien.cxmlDatei = cDateiName. END. FOR EACH tDateien: cDateiName = (IF cPfadDaten = '' THEN tDateien.cxmlDatei ELSE cPfadDaten + '\' + tDateien.cxmlDatei). EMPTY TEMP-TABLE tHeader . EMPTY TEMP-TABLE tSubHeader . EMPTY TEMP-TABLE tZahlung . RUN read_camt054_esr.p ( cDateiName, INPUT-OUTPUT htHeader, INPUT-OUTPUT htSubHeader, INPUT-OUTPUT htZahlung ) NO-ERROR. RUN BESRDATEI_ISO20022_FUELLEN. END. END. ELSE DO: RUN DATEI_FORMATIEREN ( cDateiname ). RUN BESRDATEI_FUELLEN. END. DYNAMIC-FUNCTION('openQuery':U IN h_d-vesrzahl ) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DATEI_FORMATIEREN fFrameWin PROCEDURE DATEI_FORMATIEREN : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipDateiname AS CHARACTER NO-UNDO. DEFINE VARIABLE iAnz AS INTEGER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE cZeile AS CHARACTER NO-UNDO. INPUT FROM VALUE(ipDateiname) NO-MAP NO-CONVERT. OUTPUT TO 'VESR.V11' NO-MAP NO-CONVERT. A010: REPEAT TRANSACTION ON STOP UNDO, LEAVE ON ERROR UNDO, LEAVE: cZeile = ''. ix = 0. DO WHILE TRUE: READKEY. IF INTEGER(LASTKEY) < 0 THEN LEAVE A010. IF INTEGER(LASTKEY) = 13 OR INTEGER(LASTKEY) = 10 THEN DO: IF ix > 0 THEN DO: PUT CONTROL CHR(34) cZeile CHR(34) CHR(10). iAnz = iAnz + 1. NEXT A010. END. NEXT. END. cZeile = cZeile + CHR(LASTKEY). ix = ix + 1. IF ix = 128 THEN DO: PUT CONTROL CHR(34) cZeile CHR(34) CHR(10). iAnz = iAnz + 1. NEXT A010. END. END. END. IF ix > 0 THEN DO: PUT CONTROL CHR(34) cZeile CHR(34) CHR(10). iAnz = iAnz + 1. END. OUTPUT CLOSE. INPUT CLOSE. MESSAGE 'Anzahl eingelesenen Datensätze = ' iAnz. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI fFrameWin _DEFAULT-DISABLE PROCEDURE disable_UI : /*------------------------------------------------------------------------------ Purpose: DISABLE the User Interface Parameters: Notes: Here we clean-up the user-interface by deleting dynamic widgets we have created and/or hide frames. This procedure is usually called when we are ready to "clean-up" after running. ------------------------------------------------------------------------------*/ /* Hide all frames. */ HIDE FRAME fMain. IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE enable_UI fFrameWin _DEFAULT-ENABLE PROCEDURE enable_UI : /*------------------------------------------------------------------------------ Purpose: ENABLE the User Interface Parameters: Notes: Here we display/view/enable the widgets in the user-interface. In addition, OPEN all queries associated with each FRAME and BROWSE. These statements here are based on the "Other Settings" section of the widget Property Sheets. ------------------------------------------------------------------------------*/ DISPLAY F_Dateiname CB_Zahkonto R_Datum T_ISO20022 WITH FRAME fMain. ENABLE RECT-8 F_Dateiname Btn_Suchen CB_Zahkonto R_Datum Btn_Start Btn_Verbuchen T_ISO20022 WITH FRAME fMain. {&OPEN-BROWSERS-IN-QUERY-fMain} END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initializeObject fFrameWin PROCEDURE initializeObject : /*------------------------------------------------------------------------------*/ /* Purpose: Super Override */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cDateiname AS CHARACTER NO-UNDO. DEFINE VARIABLE cKonto AS CHARACTER NO-UNDO. DEFINE VARIABLE cISO AS CHARACTER NO-UNDO. GET-KEY-VALUE SECTION 'BESR' KEY 'Dateiname' VALUE cDateiname. IF cDateiName = ? THEN cDateiname = ''. GET-KEY-VALUE SECTION 'BESR' KEY 'Konto' VALUE cKonto. IF cKonto = ? THEN cKonto = ''. GET-KEY-VALUE SECTION 'BESR' KEY 'ISO' VALUE cISO. IF cISO = ? THEN cISO = ''. IF cISO = '' THEN cISO = 'no'. DO WITH FRAME {&FRAME-NAME}: IF sAktiv THEN DO: RUN COMBO_ZAHLUNGSART (INPUT CB_ZAHKONTO:HANDLE) NO-ERROR. CB_Zahkonto:SCREEN-VALUE = cKonto NO-ERROR. END. F_Dateiname = cDateiname. T_ISO20022 = (IF cISO BEGINS 'n' THEN FALSE ELSE TRUE). END. BasFrw = DYNAMIC-FUNCTION('getFwFRW':U) NO-ERROR. RUN SUPER. /* Code placed here will execute AFTER standard behavior. */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE RECHNEN fFrameWin PROCEDURE RECHNEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT-OUTPUT PARAMETER ipBuffer AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER ipArt AS INTEGER NO-UNDO. DEFINE VARIABLE ZaFrw AS DECIMAL NO-UNDO. DEFINE VARIABLE Za AS DECIMAL NO-UNDO. DEFINE VARIABLE SkFrw AS DECIMAL NO-UNDO. DEFINE VARIABLE Sk AS DECIMAL NO-UNDO. DEFINE VARIABLE Saldo AS DECIMAL NO-UNDO. DEFINE VARIABLE SaldoBW AS DECIMAL NO-UNDO. DEFINE VARIABLE Skonto AS DECIMAL NO-UNDO. DEFINE VARIABLE SkontoBW AS DECIMAL NO-UNDO. DEFINE VARIABLE Kurs AS DECIMAL DECIMALS 8 NO-UNDO. DEFINE VARIABLE Faktor AS INTEGER NO-UNDO. DEFINE VARIABLE PluMin AS INTEGER NO-UNDO. IF ipBuffer::Fakbetr_FRW < 0 THEN PluMin = -1. ELSE PluMin = +1. ZaFrw = ipBuffer::Zahbetr_Frw. Za = ipBuffer::Zahbetr . SkFrw = ipBuffer::Skonto_Frw . Sk = ipBuffer::Skonto . Kurs = ipBuffer::Kurs . Faktor = IF ipBuffer::Faktor > 0 THEN ipBuffer::Faktor ELSE 1. IF Faktor = ? THEN Faktor = 1. IF ZaFrw = 0 AND SkFrw = 0 AND Za = 0 AND Sk = 0 THEN RETURN. CASE ipArt: WHEN 1 THEN Za = ZaFrw * Kurs / Faktor. WHEN 2 THEN Za = ZaFrw * Kurs / Faktor. WHEN 3 THEN ZaFrw = Za * Faktor / Kurs . WHEN 4 THEN Sk = SkFrw * Kurs / Faktor. END. Saldo = ipBuffer::Saldo_Frw - ZaFrw. Skonto = SkFrw. Saldo = Saldo - Skonto. SaldoBw = ipBuffer::Saldo - Za. SkontoBw = Sk. SaldoBw = SaldoBw - SkontoBw. IF Saldo = 0 THEN DO: IF ipBuffer::Frw = BasFrw THEN DO: IF SaldoBW <> 0 THEN Za = Za + SaldoBW. END. END. DO WHILE TRUE: IF Saldo = 0 THEN LEAVE. IF ipArt = 4 THEN LEAVE. Skonto = SkFrw + Saldo. IF (Skonto * PluMin) > (ipBuffer::SkMax_Frw * PluMin) THEN DO: IF SkFrw >= ipBuffer::SkMax_Frw THEN LEAVE. SkFrw = ipBuffer::SkMax_Frw. Sk = SkFrw * Kurs / Faktor. END. ELSE DO: SkFrw = SkFrw + Saldo. Sk = SkFrw * Kurs / Faktor. END. LEAVE. END. ipBuffer::Zahbetr_Frw = STRING(ZaFrw). ipBuffer::Kurs = STRING(Kurs). ipBuffer::Zahbetr = STRING(Za). ipBuffer::Skonto_Frw = STRING(SkFrw). ipBuffer::Skonto = STRING(Sk). END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VERBUCHEN fFrameWin PROCEDURE VERBUCHEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cKonto AS CHARACTER NO-UNDO. DEFINE VARIABLE nTotBetr AS DECIMAL NO-UNDO. DEFINE VARIABLE nTotZahl AS DECIMAL NO-UNDO. DEFINE VARIABLE nBetrag AS DECIMAL NO-UNDO. DEFINE VARIABLE nSkonto AS DECIMAL NO-UNDO. DEFINE VARIABLE iKnr AS INTEGER NO-UNDO. DEFINE VARIABLE iFaknr AS INTEGER NO-UNDO. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO. EMPTY TEMP-TABLE zDebop. EMPTY TEMP-TABLE tVESRZahl. DO WITH FRAME {&FRAME-NAME}: ASSIGN {&List-6}. cKonto = CB_Zahkonto:SCREEN-VALUE NO-ERROR. IF cKonto = ? OR cKonto = '' THEN DO: MESSAGE 'Konto wählen' VIEW-AS ALERT-BOX. APPLY 'ENTRY' TO CB_Zahkonto. RETURN NO-APPLY. END. END. nTotBetr = 0. nTotZahl = 0. FOR EACH VESRZahl: IF VESRZahl.Tr_Art >= 900 THEN DO: nTotBetr = nTotBetr + VESRZahl.Betrag. NEXT. END. CREATE tVESRZahl. BUFFER-COPY VESRZahl TO tVESRZahl. END. CREATE zDebop. hBuffer = TEMP-TABLE zDebop:DEFAULT-BUFFER-HANDLE. FOR EACH tVESRZahl: iFaknr = INTEGER(SUBSTRING(tVESRZahl.Referenz,15,06)). iKnr = INTEGER(SUBSTRING(tVESRZahl.Referenz,21,06)). nBetrag = tVESRZahl.Betrag. nSkonto = 0. FIND Debop NO-LOCK WHERE Debop.Firma = D1Firma AND Debop.Knr = iKnr AND Debop.Faknr = iFaknr NO-ERROR. IF NOT AVAILABLE Debop THEN NEXT. IF nBetrag > Debop.Saldo_Frw THEN NEXT. FIND FIRST zDebop. BUFFER-COPY Debop TO zDebop. CASE R_Datum: WHEN 1 THEN zDebop.Zahdat = tVESRZahl.Aufg_Dat. WHEN 2 THEN zDebop.Zahdat = tVESRZahl.Verb_Dat. WHEN 3 THEN zDebop.Zahdat = tVESRZahl.Guts_Dat. END CASE. RUN ZAHLBERECHNUNG ( INPUT-OUTPUT hBuffer ). IF nBetrag > zDebop.ZahBetr_Frw THEN NEXT. IF nBetrag > zDebop.Saldo_Frw THEN NEXT. ASSIGN zDebop.ZahBetr_Frw = nBetrag zDebop.ZaKonto = cKonto. RUN RECHNEN ( INPUT-OUTPUT hBuffer, 1 ). RUN ZAHLUNG_BUCHEN ( INPUT hBuffer, 63 ). nTotZahl = nTotZahl + zDebop.Zahbetr_Frw. DELETE tVESRZahl. END. MESSAGE 'Totalbetrag aus BESR = ' nTotBetr SKIP 'Totalbetrag aus Verbuchung = ' nTotZahl VIEW-AS ALERT-BOX. FOR EACH VESRZahl: FIND tVESRZahl OF VESRZahl NO-ERROR. IF AVAILABLE tVESRZahl THEN NEXT. DELETE VESRZahl. END. DYNAMIC-FUNCTION('openQuery':U IN h_d-vesrzahl) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME