&ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12 GUI ADM1 &ANALYZE-RESUME /* Connected Databases anadat PROGRESS */ &Scoped-define WINDOW-NAME CURRENT-WINDOW &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS F-Frame-Win /*------------------------------------------------------------------------ File: Description: from cntnrfrm.w - ADM SmartFrame Template Input Parameters: Output Parameters: ------------------------------------------------------------------------*/ /* This .W file was created with the Progress UIB. */ /*----------------------------------------------------------------------*/ /* 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 --- */ DEF VAR VVonDatum AS DATE FORMAT "99.99.9999" NO-UNDO. DEF VAR VBisDatum AS DATE FORMAT "99.99.9999" NO-UNDO. DEF VAR VKnr AS INT NO-UNDO. DEF VAR VAnschrift LIKE Adresse.Anschrift NO-UNDO. DEF VAR VZelle AS CHAR NO-UNDO. DEF VAR VTotal AS DEC EXTENT 10 NO-UNDO. DEF VAR VRabatt AS CHAR NO-UNDO. DEF VAR VTemp AS CHAR NO-UNDO. DEF VAR VAdresse AS CHAR FORMAT "x(10)" NO-UNDO. DEF VAR iLager AS INT NO-UNDO. DEF VAR excelAppl AS COM-HANDLE NO-UNDO. DEF VAR wordAppl AS COM-HANDLE NO-UNDO. DEF TEMP-TABLE TWork FIELD SummGrp AS INT FIELD MWST% AS DEC FIELD Menge AS DEC FIELD Liter AS DEC FIELD Betrag AS DEC FIELD Bonus AS DEC INDEX TWork-k1 IS UNIQUE PRIMARY SummGrp MWST%. DEF TEMP-TABLE TWord FIELD Knr AS INT FIELD SummGrp AS INT FIELD MWST% AS DEC FIELD Art AS INT FIELD Menge AS DEC FIELD Betrag AS DEC FIELD Bonus AS DEC. DEF BUFFER BBonusAbr FOR BonusAbr. DEF NEW SHARED VAR VBuchen AS DEC EXTENT 10. DEF NEW SHARED VAR VAnsatz AS DEC EXTENT 10. /* ---------- Globale Variablen ---------------------------------- */ { v8/globvar.i " " " " "SHARED" } { v8/debivar.i " " " " "SHARED" } { v8/artivar.i " " " " "SHARED" } { v8/contvar.i " " " " "SHARED" } { v8/listtitv.i "NEW" "SHARED" } /* _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 /* Name of designated FRAME-NAME and/or first browse and/or first query */ &Scoped-define FRAME-NAME F-Main &Scoped-define BROWSE-NAME Br_Bonus_1 /* Internal Tables (found by Frame, Query & Browse Queries) */ &Scoped-define INTERNAL-TABLES BonusAbr /* Definitions for BROWSE Br_Bonus_1 */ &Scoped-define FIELDS-IN-QUERY-Br_Bonus_1 BonusAbr.Knr VAdresse @ VAdresse ~ BonusAbr.Artnr BonusAbr.Inhalt BonusAbr.Jahr BonusAbr.Menge ~ BonusAbr.Volumen BonusAbr.Betrag BonusAbr.Bon_Art BonusAbr.Bon_Wert ~ BonusAbr.Bonus &Scoped-define ENABLED-FIELDS-IN-QUERY-Br_Bonus_1 &Scoped-define QUERY-STRING-Br_Bonus_1 FOR EACH BonusAbr ~ WHERE BonusAbr.Firma = GVFirma ~ AND BonusAbr.Bon_Sta = 0 NO-LOCK &Scoped-define OPEN-QUERY-Br_Bonus_1 OPEN QUERY Br_Bonus_1 FOR EACH BonusAbr ~ WHERE BonusAbr.Firma = GVFirma ~ AND BonusAbr.Bon_Sta = 0 NO-LOCK. &Scoped-define TABLES-IN-QUERY-Br_Bonus_1 BonusAbr &Scoped-define FIRST-TABLE-IN-QUERY-Br_Bonus_1 BonusAbr /* Definitions for FRAME F-Main */ &Scoped-define OPEN-BROWSERS-IN-QUERY-F-Main ~ ~{&OPEN-QUERY-Br_Bonus_1} /* Standard List Definitions */ &Scoped-Define ENABLED-OBJECTS RECT-22 Br_Bonus_1 T_Excel Btn_Start ~ F_Artikel T_Word T_Verbuchen &Scoped-Define DISPLAYED-OBJECTS T_Excel F_Artikel T_Word T_Verbuchen /* Custom List Definitions */ /* List-1,List-2,List-3,List-4,List-5,List-6 */ &Scoped-define List-6 T_Excel T_Word T_Verbuchen /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* *********************** Control Definitions ********************** */ /* Definitions of the field level widgets */ DEFINE BUTTON Btn_Start LABEL "&Start" SIZE 14 BY 1.24. DEFINE VARIABLE F_Artikel AS CHARACTER FORMAT "X(256)":U LABEL "Artikel" VIEW-AS FILL-IN NATIVE SIZE 44 BY 1 BGCOLOR 15 NO-UNDO. DEFINE RECTANGLE RECT-22 EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL SIZE 126 BY 14.71. DEFINE VARIABLE T_Excel AS LOGICAL INITIAL no LABEL "Excel" VIEW-AS TOGGLE-BOX SIZE 19.6 BY .81 NO-UNDO. DEFINE VARIABLE T_Verbuchen AS LOGICAL INITIAL no LABEL "Verbuchen" VIEW-AS TOGGLE-BOX SIZE 19.6 BY .81 NO-UNDO. DEFINE VARIABLE T_Word AS LOGICAL INITIAL no LABEL "Word" VIEW-AS TOGGLE-BOX SIZE 19.6 BY .81 NO-UNDO. /* Query definitions */ &ANALYZE-SUSPEND DEFINE QUERY Br_Bonus_1 FOR BonusAbr SCROLLING. &ANALYZE-RESUME /* Browse definitions */ DEFINE BROWSE Br_Bonus_1 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _DISPLAY-FIELDS Br_Bonus_1 F-Frame-Win _STRUCTURED QUERY Br_Bonus_1 DISPLAY BonusAbr.Knr FORMAT "z999999":U VAdresse @ VAdresse COLUMN-LABEL "Kunde" FORMAT "x(30)":U BonusAbr.Artnr FORMAT "z999999":U BonusAbr.Inhalt FORMAT "9999":U BonusAbr.Jahr FORMAT "z9999":U BonusAbr.Menge FORMAT "z,zzz,zz9-":U BonusAbr.Volumen FORMAT "z,zzz,zz9-":U BonusAbr.Betrag FORMAT "z,zzz,zz9-":U BonusAbr.Bon_Art COLUMN-LABEL "Art" FORMAT "9":U BonusAbr.Bon_Wert COLUMN-LABEL "Wert" FORMAT "zz9.9999-":U BonusAbr.Bonus FORMAT "zz,zz9.99-":U /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME WITH NO-ROW-MARKERS SEPARATORS SIZE 124 BY 10.95 BGCOLOR 15 . /* ************************ Frame Definitions *********************** */ DEFINE FRAME F-Main Br_Bonus_1 AT ROW 1.48 COL 3 T_Excel AT ROW 12.81 COL 67.8 Btn_Start AT ROW 13.38 COL 107.8 F_Artikel AT ROW 13.52 COL 10.2 COLON-ALIGNED NO-TAB-STOP T_Word AT ROW 13.62 COL 67.8 T_Verbuchen AT ROW 14.38 COL 67.8 RECT-22 AT ROW 1.24 COL 2 WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY SIDE-LABELS NO-UNDERLINE THREE-D AT COL 1 ROW 1 SIZE 127.8 BY 15.1. /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: SmartFrame Allow: Basic,Browse,DB-Fields,Query,Smart Other Settings: PERSISTENT-ONLY COMPILE */ /* 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 F-Frame-Win ASSIGN HEIGHT = 15.1 WIDTH = 127.8. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB F-Frame-Win /* ************************* Included-Libraries *********************** */ {src/adm/method/containr.i} /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* *********** Runtime Attributes and AppBuilder Settings *********** */ &ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES /* SETTINGS FOR WINDOW F-Frame-Win VISIBLE,,RUN-PERSISTENT */ /* SETTINGS FOR FRAME F-Main NOT-VISIBLE FRAME-NAME */ /* BROWSE-TAB Br_Bonus_1 RECT-22 F-Main */ ASSIGN F_Artikel:READ-ONLY IN FRAME F-Main = TRUE. /* SETTINGS FOR TOGGLE-BOX T_Excel IN FRAME F-Main 6 */ /* SETTINGS FOR TOGGLE-BOX T_Verbuchen IN FRAME F-Main 6 */ /* SETTINGS FOR TOGGLE-BOX T_Word IN FRAME F-Main 6 */ /* _RUN-TIME-ATTRIBUTES-END */ &ANALYZE-RESUME /* Setting information for Queries and Browse Widgets fields */ &ANALYZE-SUSPEND _QUERY-BLOCK BROWSE Br_Bonus_1 /* Query rebuild information for BROWSE Br_Bonus_1 _TblList = "AnaDat.BonusAbr" _Where[1] = "BonusAbr.Firma = GVFirma AND BonusAbr.Bon_Sta = 0" _FldNameList[1] > AnaDat.BonusAbr.Knr "BonusAbr.Knr" ? "z999999" "integer" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[2] > "_" "VAdresse @ VAdresse" "Kunde" "x(30)" ? ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[3] > AnaDat.BonusAbr.Artnr "BonusAbr.Artnr" ? "z999999" "integer" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[4] = AnaDat.BonusAbr.Inhalt _FldNameList[5] > AnaDat.BonusAbr.Jahr "BonusAbr.Jahr" ? "z9999" "integer" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[6] > AnaDat.BonusAbr.Menge "BonusAbr.Menge" ? "z,zzz,zz9-" "decimal" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[7] > AnaDat.BonusAbr.Volumen "BonusAbr.Volumen" ? "z,zzz,zz9-" "decimal" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[8] > AnaDat.BonusAbr.Betrag "BonusAbr.Betrag" ? "z,zzz,zz9-" "decimal" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[9] > AnaDat.BonusAbr.Bon_Art "BonusAbr.Bon_Art" "Art" ? "integer" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[10] > AnaDat.BonusAbr.Bon_Wert "BonusAbr.Bon_Wert" "Wert" ? "decimal" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[11] > AnaDat.BonusAbr.Bonus "BonusAbr.Bonus" ? "zz,zz9.99-" "decimal" ? ? ? ? ? ? no ? no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _Query is OPENED */ /* BROWSE Br_Bonus_1 */ &ANALYZE-RESUME &ANALYZE-SUSPEND _QUERY-BLOCK FRAME F-Main /* Query rebuild information for FRAME F-Main _Options = "" _Query is NOT OPENED */ /* FRAME F-Main */ &ANALYZE-RESUME /* ************************ Control Triggers ************************ */ &Scoped-define SELF-NAME F-Main &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL F-Main F-Frame-Win ON END-ERROR OF FRAME F-Main DO: RUN new-state ( INPUT 'ENDE, MAIN':U ). RETURN NO-APPLY. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL F-Main F-Frame-Win ON GO OF FRAME F-Main DO: RUN new-state ( INPUT 'ENDE, MAIN':U ). RETURN NO-APPLY. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define BROWSE-NAME Br_Bonus_1 &Scoped-define SELF-NAME Br_Bonus_1 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Br_Bonus_1 F-Frame-Win ON DELETE-CHARACTER OF Br_Bonus_1 IN FRAME F-Main DO: DO WITH FRAME {&FRAME-NAME}: Ja = DYNAMIC-FUNCTION('ANTWORT_NEIN':U, INPUT 1000 ) NO-ERROR. IF NOT ja THEN RETURN NO-APPLY. {&BROWSE-NAME}:FETCH-SELECTED-ROW(1). LVRecid = RECID(BonusAbr). {&BROWSE-NAME}:DELETE-CURRENT-ROW(). REPEAT TRANSACTION: FIND BonusAbr WHERE RECID(BonusAbr) = LVRecid. DELETE BonusAbr. LEAVE. END. END. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Br_Bonus_1 F-Frame-Win ON END-ERROR OF Br_Bonus_1 IN FRAME F-Main DO: RUN new-state ( INPUT 'ENDE, MAIN':U ). RETURN NO-APPLY. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Br_Bonus_1 F-Frame-Win ON ROW-DISPLAY OF Br_Bonus_1 IN FRAME F-Main DO: VAdresse = ''. IF NOT AVAILABLE BonusAbr THEN RETURN. FIND Adresse USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = BonusAbr.Knr NO-LOCK NO-ERROR. IF AVAILABLE Adresse THEN VAdresse = Adresse.Anzeig_Br. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Br_Bonus_1 F-Frame-Win ON VALUE-CHANGED OF Br_Bonus_1 IN FRAME F-Main DO: RUN ARTIKEL ( INPUT BonusAbr.Artnr, INPUT BonusAbr.Inhalt, INPUT BonusAbr.Jahr ). END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define SELF-NAME Btn_Start &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Start F-Frame-Win ON CHOOSE OF Btn_Start IN FRAME F-Main /* Start */ DO: DO WITH FRAME {&FRAME-NAME}: ASSIGN {&List-6}. i1 = Br_Bonus_1:NUM-SELECTED-ROWS. IF i1 = 0 THEN RETURN NO-APPLY. Br_Bonus_1:FETCH-SELECTED-ROW(1). VVonDatum = BonusAbr.VonDatum. VBisDatum = BonusAbr.BisDatum. VKnr = BonusAbr.Knr. LVKnr = BonusAbr.Knr. LVRecid = RECID(BonusAbr). IF T_Excel THEN RUN EXCEL. IF T_Word THEN RUN WORD. IF T_Verbuchen THEN RUN BUCHEN. END. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &UNDEFINE SELF-NAME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK F-Frame-Win /* *************************** Main Block *************************** */ SUBSCRIBE TO 'BONUSLAGER' ANYWHERE. &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 dispatch IN THIS-PROCEDURE ('initialize':U). &ENDIF /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-create-objects F-Frame-Win _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: ------------------------------------------------------------------------------*/ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-row-available F-Frame-Win _ADM-ROW-AVAILABLE PROCEDURE adm-row-available : /*------------------------------------------------------------------------------ Purpose: Dispatched to this procedure when the Record- Source has a new row available. This procedure tries to get the new row (or foriegn keys) from the Record-Source and process it. Parameters: ------------------------------------------------------------------------------*/ /* Define variables needed by this internal procedure. */ {src/adm/template/row-head.i} /* Process the newly available records (i.e. display fields, open queries, and/or pass records on to any RECORD-TARGETS). */ {src/adm/template/row-end.i} END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ARTIKEL F-Frame-Win PROCEDURE ARTIKEL : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipArtnr AS INT NO-UNDO. DEF INPUT PARAMETER ipInhalt AS INT NO-UNDO. DEF INPUT PARAMETER ipJahr AS INT NO-UNDO. FIND Artst USE-INDEX Artst-k1 WHERE Artst.Firma = GVFirma AND Artst.Artnr = ipArtnr AND Artst.Inhalt = ipInhalt AND Artst.Jahr = ipJahr NO-LOCK NO-ERROR. IF AVAILABLE Artst THEN F_Artikel:SCREEN-VALUE IN FRAME {&FRAME-NAME} = Artst.bez. ELSE F_Artikel:SCREEN-VALUE IN FRAME {&FRAME-NAME} = '??????????'. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BONUSLAGER F-Frame-Win PROCEDURE BONUSLAGER : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipLager AS INT NO-UNDO. iLager = ipLager. DO WITH FRAME {&FRAME-NAME}: APPLY 'ENTRY' TO BROWSE {&BROWSE-NAME}. RETURN NO-APPLY. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BUCHEN F-Frame-Win PROCEDURE BUCHEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ FOR EACH TWork: DELETE TWork. END. FOR EACH BBonusAbr USE-INDEX BonusAbr-k1 WHERE BBonusAbr.Firma = GVFirma AND BBonusAbr.Bon_Sta = 0 AND BBonusAbr.Knr = VKnr NO-LOCK: FIND TWork USE-INDEX TWork-k1 WHERE TWork.SummGrp = 999 AND TWork.MWST% = BBonusAbr.MWST-% NO-ERROR. IF NOT AVAILABLE TWork THEN DO: CREATE TWork. ASSIGN TWork.SummGrp = 999 TWork.MWST% = BBonusAbr.MWST-%. END. TWork.Menge = TWork.Menge + BBonusAbr.Menge. TWork.Liter = TWork.Liter + BBonusAbr.Volumen. TWork.Betrag = TWork.Betrag + BBonusAbr.Betrag. TWork.Bonus = TWork.Bonus + BBonusAbr.Bonus. END. VBuchen = 0. VAnsatz = 0. i5 = 0. VTotal = 0. FOR EACH TWork BREAK BY TWork.MWST%: i5 = i5 + 1. VBuchen[i5] = TWork.Bonus. VAnsatz[i5] = TWork.MWST%. VTotal[01] = VTotal[01] + (TWork.Bonus * (100 + TWork.MWST%) / 100). IF i5 = 4 THEN LEAVE. END. Rundbetr = VTotal[01]. Rundcode = 1. RUN RUNDEN ( INPUT 1, INPUT-OUTPUT Rundbetr ). VTotal[01] = Rundbetr. LVKnr = BonusAbr.Knr. LVRecid = RECID(BonusAbr). RUN "v8/d-bonusbuchen.w". IF KEYFUNCTION(LASTKEY) <> 'END-ERROR' THEN RUN OPEN_BonusAbr. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE CREATE_EXCEL F-Frame-Win PROCEDURE CREATE_EXCEL : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER VVorlage AS CHAR NO-UNDO. DEF INPUT PARAMETER VDatei AS CHAR NO-UNDO. DEF INPUT PARAMETER VMakro AS CHAR NO-UNDO. DEF VAR MyFile AS CHAR NO-UNDO. DO WHILE TRUE: excelAppl = ?. MyFile = SEARCH(VVorlage). IF MyFile = ? THEN DO: MESSAGE 'Vorlage ' VVorlage ' nicht gefunden' VIEW-AS ALERT-BOX. RETURN. END. VDatei = SESSION:TEMP-DIR + VDatei. IF SEARCH(VDatei) <> ? THEN DO: VDatei = SEARCH(VDatei). OS-DELETE VALUE(VDatei). END. OS-COPY VALUE(MyFile) VALUE(VDatei). CREATE 'Excel.Application' excelAppl. excelAppl:Visible = TRUE. excelAppl:Workbooks:Open(VDatei, True). LEAVE. END. RETURN. /* excelAppl:Application:Run('Bestell'). */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI F-Frame-Win _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 F-Main. 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 F-Frame-Win _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 T_Excel F_Artikel T_Word T_Verbuchen WITH FRAME F-Main. ENABLE RECT-22 Br_Bonus_1 T_Excel Btn_Start F_Artikel T_Word T_Verbuchen WITH FRAME F-Main. {&OPEN-BROWSERS-IN-QUERY-F-Main} END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE EXCEL F-Frame-Win PROCEDURE EXCEL : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR daten AS CHAR NO-UNDO. DEF VAR VDateiName AS CHAR NO-UNDO. DEF VAR io AS LOG NO-UNDO. DO WITH FRAME {&FRAME-NAME}: daten = 'Bonus.xls' + CHR(01) + 'BonusVorlage.xls' + CHR(01) + ''. RUN CREATEDATEI ( INPUT daten ). VDateiName = RETURN-VALUE. excelAppl = DYNAMIC-FUNCTION('CREATEEXCEL':U) NO-ERROR. IF excelAppl = ? THEN RETURN NO-APPLY. RUN OPENEXCEl ( INPUT excelAppl, INPUT VDateiName, INPUT '' , OUTPUT io ) NO-ERROR. FOR EACH TWork: DELETE TWork. END. i1 = 0. TiDruck = TRUE. VSeite = 0. VLine = 0. Zuszz = 0. FOR EACH BBonusAbr USE-INDEX BonusAbr-k1 WHERE BBonusAbr.Firma = GVFirma AND BBonusAbr.Bon_Sta = 0 AND BBonusAbr.Knr = VKnr NO-LOCK, FIRST Artst OF BBonusAbr NO-LOCK BREAK BY BBonusAbr.Knr BY BBonusAbr.SummGrp BY Artst.Wg_Grp BY Artst.Prod_Grp BY Artst.Art_Grp BY Artst.Artnr BY Artst.Inhalt BY Artst.Jahr : IF FIRST-OF ( BBonusAbr.Knr ) THEN DO: FIND Adresse USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = BBonusAbr.Knr NO-LOCK NO-ERROR. VAnschrift = ''. IF AVAILABLE Adresse THEN DO: DO ix = 1 TO 12: VAnschrift[ix] = Adresse.Anschrift[ix]. END. END. TiDruck = TRUE. END. i1 = (VLine + Zuszz - (VLine MOD 40)) / 40. IF i1 > (VSeite - 1) THEN TiDruck = TRUE. DO WHILE TiDruck: RUN TITEL. TiDruck = FALSE. END. Zuszz = 0. IF FIRST-OF ( BBonusAbr.SummGrp ) THEN DO: FIND FIRST BonSumm USE-INDEX BonSumm-k1 WHERE BonSumm.Firma = GVFirma AND BonSumm.Bon_Summ = BBonusAbr.SummGrp NO-LOCK. VZelle = 'A' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = BonSumm.Bez. excelAppl:ActiveCell:Font:Bold = TRUE. VLine = VLine + 1. IF BBonusAbr.Bon_Art = 1 THEN VRabatt = STRING(BBonusAbr.Bon_Wert,"z9.99-%"). ELSE VRabatt = STRING(BBonusAbr.Bon_Wert,"z9.99-Fr."). END. IF FIRST-OF ( Artst.Wg_Grp ) THEN DO: FIND WarenGrp USE-INDEX WarenGrp-k1 WHERE WarenGrp.Firma = GVFirma AND WarenGrp.Wgr = Artst.Wg_Grp NO-LOCK NO-ERROR. VZelle = 'B' + STRING(VLine). excelAppl:Range(VZelle):Select. IF AVAILABLE WarenGrp THEN excelAppl:ActiveCell:FormulaR1C1 = WarenGrp.Bez1. ELSE excelAppl:ActiveCell:FormulaR1C1 = '??????????'. excelAppl:ActiveCell:Font:Bold = TRUE. VLine = VLine + 1. END. FIND KGebinde USE-INDEX KGebinde-k1 WHERE KGebinde.Firma = Artst.Firma AND KGebinde.Geb_Cd = Artst.KGeb_Cd NO-LOCK NO-ERROR. VZelle = 'A' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(Artst.Artnr ,"999999") + "." + STRING(Artst.Inhalt ,"9999"). VZelle = 'B' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = Artst.Bez. IF Artst.Jahr > 1900 THEN DO: VZelle = 'C' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(Artst.Jahr ,"9999"). END. IF Artst.Alk_Gehalt > 0 THEN DO: VZelle = 'D' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(Artst.Alk_Gehalt,"z9.99%"). END. VZelle = 'E' + STRING(VLine). excelAppl:Range(VZelle):Select. IF AVAILABLE KGebinde THEN excelAppl:ActiveCell:FormulaR1C1 = KGebinde.KBez. ELSE excelAppl:ActiveCell:FormulaR1C1 = '??????????'. VZelle = 'F' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(BBonusAbr.Menge ,"->>>>>>>>9"). VZelle = 'G' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(BBonusAbr.Volumen ,"->>>>>>>>9"). VZelle = 'H' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(BBonusAbr.Betrag ,"->>>>>>>>9"). VZelle = 'I' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = VRabatt. VZelle = 'J' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(BBonusAbr.Bonus ,"->>>>9.99"). VLine = VLine + 1. FIND TWork USE-INDEX TWork-k1 WHERE TWork.SummGrp = BBonusAbr.SummGrp AND TWork.MWST% = BBonusAbr.MWST-% NO-ERROR. IF NOT AVAILABLE TWork THEN DO: CREATE TWork. ASSIGN TWork.SummGrp = BBonusAbr.SummGrp TWork.MWST% = BBonusAbr.MWST-%. END. TWork.Menge = TWork.Menge + BBonusAbr.Menge. TWork.Liter = TWork.Liter + BBonusAbr.Volumen. TWork.Betrag = TWork.Betrag + BBonusAbr.Betrag. TWork.Bonus = TWork.Bonus + BBonusAbr.Bonus. IF LAST-OF ( Artst.Wg_Grp ) THEN Zuszz = 3. IF NOT LAST-OF ( BBonusAbr.SummGrp ) THEN NEXT. VTotal = 0. FOR EACH TWork WHERE TWork.SummGrp = BBonusAbr.SummGrp NO-LOCK: VTotal[01] = VTotal[01] + TWork.Menge. VTotal[02] = VTotal[02] + TWork.Liter. VTotal[03] = VTotal[03] + TWork.Betrag. VTotal[04] = VTotal[04] + TWork.Bonus. END. VLine = VLine + 1. VZelle = 'F' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[01],"->>>>>>>>9"). VZelle = 'G' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[02],"->>>>>>>>9"). VZelle = 'H' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[03],"->>>>>>>>9"). VZelle = 'J' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[04],"->>>>9.99"). VZelle = 'F' + STRING(VLine) + ":J" + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:Font:Bold = TRUE. excelAppl:Rows(VLine):Select. excelAppl:Selection:Font:Bold = TRUE. VLine = VLine + 1. Zuszz = Zuszz + 5. END. VTotal = 0. Zuszz = 3. FOR EACH TWork NO-LOCK BREAK BY TWork.MWST%: VTotal[06] = VTotal[06] + TWork.Menge. VTotal[07] = VTotal[07] + TWork.Liter. VTotal[08] = VTotal[08] + TWork.Betrag. VTotal[09] = VTotal[09] + TWork.Bonus. IF FIRST-OF ( TWork.MWST% ) THEN Zuszz = Zuszz + 1. END. i1 = (VLine + Zuszz - (VLine MOD 40)) / 40. IF i1 > (VSeite - 1) THEN DO: TiDruck = TRUE. RUN TITEL. TiDruck = FALSE. END. ELSE VLine = VLine + 1. VZelle = 'B' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = 'Total Bonusbetrag'. VZelle = 'J' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[09],"->>>>9.99"). excelAppl:Rows(VLine):Select. excelAppl:Selection:Font:Bold = TRUE. VLine = VLine + 1. VBuchen = 0. VAnsatz = 0. i5 = 0. FOR EACH TWork BREAK BY TWork.MWST%: VTotal[01] = VTotal[01] + TWork.Menge. VTotal[02] = VTotal[02] + TWork.Liter. VTotal[03] = VTotal[03] + TWork.Betrag. VTotal[04] = VTotal[04] + TWork.Bonus. IF NOT LAST-OF ( TWork.MWST% ) THEN NEXT. Rundbetr = VTotal[04] * TWork.MWST% / 100. VTotal[09] = VTotal[09] + Rundbetr. i5 = i5 + 1. VBuchen[i5] = VTotal[04]. VAnsatz[i5] = TWork.MWST%. VZelle = 'E' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = 'MWST ' + STRING(TWork.MWST%,"z9.99%"). VZelle = 'H' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[04],"->>>>>>>>9"). VZelle = 'J' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(Rundbetr ,"->>>>9.99"). VLine = VLine + 1. VTotal[01] = 0. VTotal[02] = 0. VTotal[03] = 0. VTotal[04] = 0. VTotal[05] = 0. END. Rundbetr = VTotal[09]. Rundcode = 1. RUN "v8/runden.p". VTotal[09] = Rundbetr. VZelle = 'B' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = 'Bonusgutschrift inklusive Mehrwertsteuer'. VZelle = 'J' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell:FormulaR1C1 = STRING(VTotal[09],"->>>>9.99"). excelAppl:Rows(VLine):Select. excelAppl:Selection:Font:Bold = TRUE. VLine = VLine + 1. excelAppl:Application:Run('SeitenWechsel'). RELEASE OBJECT excelAppl. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE GETDATEINAME F-Frame-Win PROCEDURE GETDATEINAME : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF INPUT PARAMETER ipParam AS CHAR NO-UNDO. DEF VAR DateiName AS CHAR NO-UNDO. DEF VAR Pfad AS CHAR NO-UNDO. DEF VAR Laenge AS INT NO-UNDO. DEF VAR cString AS CHAR NO-UNDO. DEF VAR ix AS INT NO-UNDO. DEF VAR Ja AS LOG NO-UNDO. DateiName = ipParam. IF DateiName = '' THEN RETURN 'ERROR-PARAMETER'. DO WHILE TRUE: IF SEARCH(DateiName) <> ? THEN DO: DateiName = SEARCH(DateiName). FILE-INFO:FILE-NAME = DateiName. DateiName = FILE-INFO:FULL-PATHNAME. LEAVE. END. cString = ''. Laenge = LENGTH(DateiName). DO ix = Laenge TO 1 BY -1: IF SUBSTRING(DateiName,ix,01) = '/' THEN LEAVE. IF SUBSTRING(DateiName,ix,01) = '\' THEN LEAVE. cString = SUBSTRING(DateiName,ix,01) + cString. END. DateiName = 'Vorlagen\' + cString. IF SEARCH(DateiName) <> ? THEN DO: DateiName = SEARCH(DateiName). FILE-INFO:FILE-NAME = DateiName. DateiName = FILE-INFO:FULL-PATHNAME. LEAVE. END. DateiName = 'WordVorlagen\' + cString. IF SEARCH(DateiName) <> ? THEN DO: DateiName = SEARCH(DateiName). FILE-INFO:FILE-NAME = DateiName. DateiName = FILE-INFO:FULL-PATHNAME. LEAVE. END. DateiName = 'ExcelVorlagen\' + cString. IF SEARCH(DateiName) <> ? THEN DO: DateiName = SEARCH(DateiName). FILE-INFO:FILE-NAME = DateiName. DateiName = FILE-INFO:FULL-PATHNAME. LEAVE. END. RETURN 'ERROR-DateiName'. END. RETURN DateiName. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE local-view F-Frame-Win PROCEDURE local-view : /*------------------------------------------------------------------------------ Purpose: Override standard ADM method Notes: ------------------------------------------------------------------------------*/ RUN dispatch IN THIS-PROCEDURE ( INPUT 'view':U ) . RUN OPEN_BonusAbr. PUBLISH 'GETBONUSLAGER' ( OUTPUT iLager ). APPLY 'ENTRY' TO BROWSE Br_Bonus_1. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE OPEN_BonusAbr F-Frame-Win PROCEDURE OPEN_BonusAbr : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DO WITH FRAME {&FRAME-NAME}: IF NUM-RESULTS("{&BROWSE-NAME}":U) <> ? THEN CLOSE QUERY Br_Bonus_1. OPEN QUERY Br_Bonus_1 FOR EACH BonusAbr USE-INDEX BonusAbr-k1 WHERE BonusAbr.Firma = GVFirma AND BonusAbr.Bon_Sta = 0 NO-LOCK. IF NUM-RESULTS("{&BROWSE-NAME}":U) <> ? AND NUM-RESULTS("{&BROWSE-NAME}":U) > 0 THEN APPLY 'VALUE-CHANGED' TO BROWSE {&BROWSE-NAME}. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE send-records F-Frame-Win _ADM-SEND-RECORDS PROCEDURE send-records : /*------------------------------------------------------------------------------ Purpose: Send record ROWID's for all tables used by this file. Parameters: see template/snd-head.i ------------------------------------------------------------------------------*/ /* Define variables needed by this internal procedure. */ {src/adm/template/snd-head.i} /* For each requested table, put it's ROWID in the output list. */ {src/adm/template/snd-list.i "BonusAbr"} /* Deal with any unexpected table requests before closing. */ {src/adm/template/snd-end.i} END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE state-changed F-Frame-Win PROCEDURE state-changed : /* ----------------------------------------------------------- Purpose: Parameters: Notes: -------------------------------------------------------------*/ DEFINE INPUT PARAMETER p-issuer-hdl AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER p-state AS CHARACTER NO-UNDO. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE TEMP_FILE F-Frame-Win PROCEDURE TEMP_FILE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DO WHILE TRUE TRANSACTION: FIND Tabel USE-INDEX Tabel-k1 WHERE Tabel.Firma = GVFirma AND Tabel.RecArt = 'TEMPFILE' AND Tabel.CodeI = 0 AND Tabel.CodeC = 'EXCEL' AND Tabel.Sprcd = 1 NO-ERROR. IF NOT AVAILABLE Tabel THEN DO: CREATE Tabel. ASSIGN Tabel.Firma = GVFirma Tabel.RecArt = 'TEMPFILE' Tabel.CodeI = 0 Tabel.CodeC = 'EXCEL' Tabel.Sprcd = 1 Tabel.Bez1 = SESSION:TEMP-DIR. END. Tabel.Int_1 = Tabel.Int_1 + 1. VTemp = Tabel.Bez1 + 'Ge_MIS' + STRING(Tabel.Int_1) + '.tmp'. RELEASE Tabel. LEAVE. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE TITEL F-Frame-Win PROCEDURE TITEL : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ IF VSeite > 0 THEN DO: IF (VSeite * 40) < VLine THEN VLine = VSeite * 40. VLine = VLine + 1. VZelle = 'A' + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:Selection:VALUE = "&SW&". END. VSeite = VSeite + 1. VLine = VLine + 1. DO ix = 5 TO 11: VZelle = 'A' + TRIM(STRING(VLine)). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell = TRIM(VAnschrift[ix]). /* IF ix = 11 THEN DO: excelAppl:ActiveCell:Font:Bold = TRUE. END. */ VLine = VLine + 1. END. VZelle = 'C' + STRING(VLine - 3). excelAppl:Range(VZelle):Select. excelAppl:ActiveCell = 'Bonusabrechnung ' + STRING(BBonusAbr.VonDatum,"99.99.9999") + " - " + STRING(BBonusAbr.BisDatum,"99.99.9999"). excelAppl:ActiveCell:Font:Bold = TRUE. excelAppl:ActiveCell:Font:Size = 12. VLine = ((VSeite - 1) * 40) + 9. IF VSeite > 1 THEN DO: excelAppl:Range("A9:J9"):Select. excelAppl:Selection:Copy. VZelle = 'A' + STRING(VLine) + ":J" + STRING(VLine). excelAppl:Range(VZelle):Select. excelAppl:ActiveSheet:Paste. END. VLine = VLine + 1. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE WORD F-Frame-Win PROCEDURE WORD : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEF VAR DateiName AS CHAR NO-UNDO. DEF VAR Dokument AS CHAR NO-UNDO. DEF VAR Datendok AS CHAR NO-UNDO. DEF VAR Steuerdok AS CHAR NO-UNDO. DEF VAR cAnrede AS CHAR NO-UNDO. DEF VAR VArt AS INT NO-UNDO. DEF VAR BAnsatz AS DEC NO-UNDO. DEF VAR GTotal AS DEC NO-UNDO. DEF VAR cSteuerDaten AS CHAR NO-UNDO. DEF VAR cDok1 AS CHAR NO-UNDO. DEF VAR cDok2 AS CHAR NO-UNDO. DEF VAR AnzDok AS INT NO-UNDO. DEF VAR hDok AS COM-HANDLE NO-UNDO. DO WITH FRAME {&FRAME-NAME}: DateiName = 'BonusVorlage.dot'. RUN GETDATEINAME ( INPUT DateiName ). IF RETURN-VALUE BEGINS 'ERROR' THEN DO: MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX ERROR. RETURN. END. Dokument = RETURN-VALUE. DateiName = 'BonusVorlage_st.doc'. RUN GETDATEINAME ( INPUT DateiName ). IF RETURN-VALUE BEGINS 'ERROR' THEN DO: MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX ERROR. RETURN. END. Steuerdok = RETURN-VALUE. Datendok = SESSION:TEMP-DIR + 'Bonus_da.txt'. DateiName = Dokument. Dokument = SESSION:TEMP-DIR + 'Bonus.dot'. OS-COPY VALUE(DateiName) VALUE(Dokument). DateiName = Steuerdok. SteuerDok = SESSION:TEMP-DIR + 'Bonus_st.doc'. OS-COPY VALUE(DateiName) VALUE(SteuerDok). wordAppl = DYNAMIC-FUNCTION('CREATEWORD':U) NO-ERROR. wordAppl:VISIBLE = FALSE. WordAppl:Documents:OPEN(SteuerDok, TRUE ). WordAppl:Selection:WholeStory. WordAppl:Selection:COPY. WordAppl:ActiveDocument:CLOSE(FALSE). cSteuerDaten = CLIPBOARD:VALUE + CHR(10). wordAppl:VISIBLE = TRUE. FOR EACH TWork: DELETE TWork. END. FOR EACH BBonusAbr USE-INDEX BonusAbr-k1 WHERE BBonusAbr.Firma = GVFirma AND BBonusAbr.Bon_Sta = 0 AND BBonusAbr.Knr = VKnr NO-LOCK, FIRST Artst OF BBonusAbr NO-LOCK BREAK BY BBonusAbr.Knr BY BBonusAbr.SummGrp BY Artst.Wg_Grp BY Artst.Prod_Grp BY Artst.Art_Grp BY Artst.Artnr BY Artst.Inhalt BY Artst.Jahr : IF FIRST-OF ( BBonusAbr.Knr ) THEN DO: FIND Adresse USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = BBonusAbr.Knr NO-LOCK NO-ERROR. VAnschrift = ''. IF AVAILABLE Adresse THEN DO: DO ix = 1 TO 12: VAnschrift[ix] = Adresse.Anschrift[ix]. END. END. cAnrede = Adresse.BriefAnr. END. FIND TWork USE-INDEX TWork-k1 WHERE TWork.SummGrp = BBonusAbr.SummGrp AND TWork.MWST% = BBonusAbr.MWST-% NO-ERROR. IF NOT AVAILABLE TWork THEN DO: CREATE TWork. ASSIGN TWork.SummGrp = BBonusAbr.SummGrp TWork.MWST% = BBonusAbr.MWST-%. END. TWork.Menge = TWork.Menge + BBonusAbr.Menge. TWork.Liter = TWork.Liter + BBonusAbr.Volumen. TWork.Betrag = TWork.Betrag + BBonusAbr.Betrag. TWork.Bonus = TWork.Bonus + BBonusAbr.Bonus. END. OUTPUT TO VALUE(Datendok). PUT CONTROL cSteuerDaten. PUT CONTROL VAnschrift[01] ";" VAnschrift[02] ";" VAnschrift[03] ";" VAnschrift[04] ";" VAnschrift[05] ";" VAnschrift[06] ";" VAnschrift[07] ";" VAnschrift[08] ";" VAnschrift[09] ";" VAnschrift[10] ";" VAnschrift[11] ";" VAnschrift[12] ";" cAnrede ";" STRING(TODAY,'99.99.9999') ";" STRING(YEAR(VVonDatum),'9999') ";" STRING(VVonDatum,'99.99.9999') ";" STRING(VBisDatum,'99.99.9999') ";". VBuchen = 0. VAnsatz = 0. i5 = 0. GTotal = 0. FOR EACH TWork BREAK BY TWork.MWST%: IF FIRST-OF(TWork.MWST%) THEN DO: i5 = i5 + 1. VAnsatz[i5] = TWork.MWST%. END. VBuchen[i5] = VBuchen[i5] + TWork.Bonus. END. i5 = 0. FOR EACH TWork BREAK BY TWork.SummGrp: IF FIRST-OF(TWork.SummGrp) THEN DO: VTotal = 0. FIND FIRST BonusAbr USE-INDEX BonusAbr-k1 WHERE BonusAbr.Firma = GVFirma AND BonusAbr.Bon_Sta = 0 AND BonusAbr.Knr = VKnr AND BonusAbr.VonDatum = VVonDatum AND BonusAbr.SummGrp = TWork.SummGrp NO-LOCK. VArt = BonusAbr.Bon_Art. BAnsatz = BonusAbr.Bon_Wert. END. VTotal[01] = VTotal[01] + TWork.Menge. VTotal[02] = VTotal[02] + TWork.Betrag. VTotal[03] = VTotal[03] + TWork.Liter. VTotal[04] = VTotal[04] + TWork.Bonus. GTotal = GTotal + TWork.Bonus. IF NOT LAST-OF(TWork.SummGrp) THEN NEXT. i5 = i5 + 1. IF i5 > 10 THEN LEAVE. CASE VArt: WHEN 0 THEN DO: PUT CONTROL TRIM(STRING(VTotal[01],'->>>,>>>,>>>')) ";" ' Fl. à' ";" TRIM(STRING(BAnsatz,'->>>9.99 Fr.')) ";" TRIM(STRING(VTotal[04],'->>>,>>>,>>9.99 CHF')) ";". END. WHEN 1 THEN DO: PUT CONTROL TRIM(STRING(VTotal[02],'->>>,>>>,>>>')) ";" ' Fr. à' ";" TRIM(STRING(BAnsatz,'->>>9.99 %')) ";" TRIM(STRING(VTotal[04],'->>>,>>>,>>9.99 CHF')) ";". END. WHEN 2 THEN DO: PUT CONTROL TRIM(STRING(VTotal[03],'->>>,>>>,>>>')) ";" ' Liter à' ";" TRIM(STRING(BAnsatz,'->>>9.99 Fr.')) ";" TRIM(STRING(VTotal[04],'->>>,>>>,>>9.99 CHF')) ";". END. END CASE. END. DO i5 = i5 + 1 TO 10: PUT CONTROL ";;;;". END. DO ix = 1 TO 4: IF VBuchen[ix] = 0 THEN PUT CONTROL ";;". ELSE DO: Rundbetr = VBuchen[ix] * VAnsatz[ix] / 100. PUT CONTROL 'Mehrwertsteuer ' TRIM(STRING(VAnsatz[ix],'z9.99 %')) ";" TRIM(STRING(Rundbetr ,'->>>,>>9.99 CHF')) ";". GTotal = GTotal + Rundbetr. END. END. Rundcode = 1. Rundbetr = GTotal. RUN "v8/runden.p". GTotal = Rundbetr. PUT CONTROL STRING(GTotal,'->>>,>>>,>>9.99 CHF') CHR(10). OUTPUT CLOSE. wordAppl:Documents:Add (Dokument, FALSE). cDok1 = wordAppl:ActiveDocument:Name. wordAppl:ActiveDocument:MailMerge:OpenDataSource(DatenDok, False, False). wordAppl:ActiveDocument:MailMerge:Execute(TRUE). cDok2 = wordAppl:ActiveDocument:Name. AnzDok = WordAppl:Documents:Count(). DO ix = 1 TO AnzDok: hDok = wordAppl:Windows:ITEM(ix). IF NOT VALID-HANDLE(hDok) THEN NEXT. hDok:Activate(). IF wordAppl:ActiveDocument:Name <> cDok1 THEN NEXT. WordAppl:ActiveDocument:Close(FALSE). LEAVE. END. RELEASE OBJECT wordAppl. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME