&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 GUI ADM2 &ANALYZE-RESUME /* Connected Databases anadat PROGRESS */ &Scoped-define WINDOW-NAME CURRENT-WINDOW &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS bTableWin /*------------------------------------------------------------------------ File: adm2\src\browser.w Description: SmartDataBrowser Object 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 iStatus AS INTEGER NO-UNDO. DEFINE VARIABLE rBesko AS RECID NO-UNDO. DEFINE VARIABLE hBestellvorschlag AS HANDLE NO-UNDO. { incl/tmpbrowser.i } DEFINE TEMP-TABLE tKopf FIELD Zeile AS INTEGER FIELD Feld AS CHARACTER EXTENT 10. DEFINE TEMP-TABLE tParam FIELD iKnr AS INTEGER FIELD iBesnr AS INTEGER FIELD dLetztBest AS DATE FORMAT "99.99.9999" FIELD dBestandesdatum AS DATE FORMAT "99.99.9999" FIELD dReserviertdatum AS DATE FORMAT "99.99.9999" FIELD iIntervall AS INTEGER FIELD iLieferfrist AS INTEGER FIELD lBewegungen AS LOGICAL FIELD lUnter AS LOGICAL FIELD lVerbrauch AS LOGICAL FIELD dVon AS DATE FORMAT "99.99.9999" FIELD dBis AS DATE FIELD nMindProz AS DECIMAL FIELD nAufrunden AS DECIMAL FIELD dAktion AS DATE FIELD lOK AS LOGICAL FIELD iLager AS INTEGER . DEFINE VARIABLE htParam AS HANDLE NO-UNDO. htParam = TEMP-TABLE tParam:DEFAULT-BUFFER-HANDLE. DEFINE TEMP-TABLE tAdresse LIKE Adresse . DEFINE TEMP-TABLE tBesko LIKE Besko FIELD lOK AS LOGICAL. . DEFINE VARIABLE htBesko AS HANDLE NO-UNDO. htBesko = TEMP-TABLE tBesko:DEFAULT-BUFFER-HANDLE. DEFINE TEMP-TABLE tBesze LIKE Besze FIELD iBestellen AS INTEGER FIELD iBestand AS INTEGER FIELD iBestellt AS INTEGER FIELD iEingang AS INTEGER FIELD iMindest AS INTEGER FIELD iStatus AS INTEGER . DEFINE VARIABLE htBesze AS HANDLE NO-UNDO. htBesze = TEMP-TABLE tBesze:DEFAULT-BUFFER-HANDLE. { incl/ttbestellvorschlag.i } {src/adm2/widgetprto.i} /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK /* ******************** Preprocessor Definitions ******************** */ &Scoped-define PROCEDURE-TYPE SmartDataBrowser &Scoped-define DB-AWARE no &Scoped-define ADM-SUPPORTED-LINKS TableIO-Target,Data-Target,Update-Source /* Include file with RowObject temp-table definition */ &Scoped-define DATA-FIELD-DEFS "d-besko.i" /* Name of designated FRAME-NAME and/or first browse and/or first query */ &Scoped-define FRAME-NAME F-Main &Scoped-define BROWSE-NAME br_table /* Internal Tables (found by Frame, Query & Browse Queries) */ &Scoped-define INTERNAL-TABLES rowObject /* Definitions for BROWSE br_table */ &Scoped-define FIELDS-IN-QUERY-br_table rowObject.Besnr rowObject.Knr ~ rowObject.Lieferant rowObject.Best_Datum rowObject.Lief_Datum rowObject.FRW ~ rowObject.Best_Tot &Scoped-define ENABLED-FIELDS-IN-QUERY-br_table &Scoped-define QUERY-STRING-br_table FOR EACH rowObject NO-LOCK INDEXED-REPOSITION &Scoped-define OPEN-QUERY-br_table OPEN QUERY br_table FOR EACH rowObject NO-LOCK INDEXED-REPOSITION. &Scoped-define TABLES-IN-QUERY-br_table rowObject &Scoped-define FIRST-TABLE-IN-QUERY-br_table rowObject /* Definitions for FRAME F-Main */ /* Standard List Definitions */ &Scoped-Define ENABLED-OBJECTS RECT-1 br_table Btn_Excel Btn_Weiter ~ SLIDER-1 &Scoped-Define DISPLAYED-OBJECTS SLIDER-1 /* Custom List Definitions */ /* List-1,List-2,List-3,List-4,List-5,List-6 */ /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* ************************ Function Prototypes ********************** */ &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setZeilenfarbe bTableWin FUNCTION setZeilenfarbe RETURNS LOGICAL ( ipFarbe AS INTEGER ) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* *********************** Control Definitions ********************** */ /* Menu Definitions */ DEFINE MENU POPUP-MENU-br_table MENU-ITEM X_BESTELLVORSCHLAG LABEL "Bestellvorschlag" MENU-ITEM X_SOLLMINDEST LABEL "Soll und Mindestbestände". /* Definitions of the field level widgets */ DEFINE BUTTON Btn_Excel LABEL "Excel" SIZE 15 BY 1. DEFINE BUTTON Btn_Weiter LABEL "Weiter" SIZE 15 BY 1. DEFINE RECTANGLE RECT-1 EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL SIZE 154 BY 7.14. DEFINE VARIABLE SLIDER-1 AS INTEGER INITIAL 0 VIEW-AS SLIDER MIN-VALUE 0 MAX-VALUE 100 HORIZONTAL TIC-MARKS NONE SIZE 25 BY 1 NO-UNDO. /* Query definitions */ &ANALYZE-SUSPEND DEFINE TEMP-TABLE RowObject NO-UNDO {{&DATA-FIELD-DEFS}} {src/adm2/robjflds.i}. DEFINE QUERY br_table FOR rowObject SCROLLING. &ANALYZE-RESUME /* Browse definitions */ DEFINE BROWSE br_table &ANALYZE-SUSPEND _UIB-CODE-BLOCK _DISPLAY-FIELDS br_table bTableWin _STRUCTURED QUERY br_table NO-LOCK DISPLAY rowObject.Besnr FORMAT "999999":U WIDTH 7 rowObject.Knr FORMAT "999999":U WIDTH 7 rowObject.Lieferant FORMAT "x(80)":U rowObject.Best_Datum COLUMN-LABEL "Best.--Datum" FORMAT "99.99.9999":U WIDTH 12 rowObject.Lief_Datum COLUMN-LABEL "Lief.-Datum" FORMAT "99.99.9999":U WIDTH 12 rowObject.FRW FORMAT "x(03)":U WIDTH 6 rowObject.Best_Tot COLUMN-LABEL "Total" FORMAT "zzz,zzz,zz9.99-":U WIDTH 16 /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME WITH NO-ASSIGN NO-AUTO-VALIDATE NO-ROW-MARKERS SEPARATORS SIZE 152 BY 6.67. /* ************************ Frame Definitions *********************** */ DEFINE FRAME F-Main br_table AT ROW 1.48 COL 3 WIDGET-ID 200 Btn_Excel AT ROW 1.52 COL 165 WIDGET-ID 4 Btn_Weiter AT ROW 5.52 COL 165 WIDGET-ID 6 SLIDER-1 AT ROW 7 COL 162 NO-LABEL WIDGET-ID 8 NO-TAB-STOP RECT-1 AT ROW 1.24 COL 2 WIDGET-ID 2 WITH 1 DOWN KEEP-TAB-ORDER OVERLAY SIDE-LABELS NO-UNDERLINE THREE-D AT COL 1 ROW 1 SCROLLABLE WIDGET-ID 100. /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: SmartDataBrowser Data Source: "d-besko.w" Allow: Basic,Browse Frames: 1 Add Fields to: Neither 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 bTableWin ASSIGN HEIGHT = 7.62 WIDTH = 190. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB bTableWin /* ************************* Included-Libraries *********************** */ {src/adm2/browser.i} /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* *********** Runtime Attributes and AppBuilder Settings *********** */ &ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES /* SETTINGS FOR WINDOW bTableWin NOT-VISIBLE,,RUN-PERSISTENT */ /* SETTINGS FOR FRAME F-Main NOT-VISIBLE FRAME-NAME Size-to-Fit */ /* BROWSE-TAB br_table RECT-1 F-Main */ ASSIGN FRAME F-Main:SCROLLABLE = FALSE FRAME F-Main:HIDDEN = TRUE. ASSIGN br_table:POPUP-MENU IN FRAME F-Main = MENU POPUP-MENU-br_table:HANDLE. ASSIGN SLIDER-1:HIDDEN IN FRAME F-Main = TRUE. /* _RUN-TIME-ATTRIBUTES-END */ &ANALYZE-RESUME /* Setting information for Queries and Browse Widgets fields */ &ANALYZE-SUSPEND _QUERY-BLOCK BROWSE br_table /* Query rebuild information for BROWSE br_table _TblList = "rowObject" _Options = "NO-LOCK INDEXED-REPOSITION" _FldNameList[1] > _.rowObject.Besnr "rowObject.Besnr" ? ? "integer" ? ? ? ? ? ? no "?" no no "7" yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[2] > _.rowObject.Knr "rowObject.Knr" ? ? "integer" ? ? ? ? ? ? no "?" no no "7" yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[3] > _.rowObject.Lieferant "rowObject.Lieferant" ? ? "character" ? ? ? ? ? ? no "?" no no ? yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[4] > _.rowObject.Best_Datum "rowObject.Best_Datum" "Best.--Datum" ? "date" ? ? ? ? ? ? no "?" no no "12" yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[5] > _.rowObject.Lief_Datum "rowObject.Lief_Datum" "Lief.-Datum" ? "date" ? ? ? ? ? ? no "?" no no "12" yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[6] > _.rowObject.FRW "rowObject.FRW" ? ? "character" ? ? ? ? ? ? no "?" no no "6" yes no no "U" "" "" "" "" "" "" 0 no 0 no no _FldNameList[7] > _.rowObject.Best_Tot "rowObject.Best_Tot" "Total" ? "decimal" ? ? ? ? ? ? no ? no no "16" yes no no "U" "" "" "" "" "" "" 0 no 0 no no _Query is NOT OPENED */ /* BROWSE br_table */ &ANALYZE-RESUME &ANALYZE-SUSPEND _QUERY-BLOCK FRAME F-Main /* Query rebuild information for FRAME F-Main _Options = "NO-LOCK" _Query is NOT OPENED */ /* FRAME F-Main */ &ANALYZE-RESUME /* ************************ Control Triggers ************************ */ &Scoped-define BROWSE-NAME br_table &Scoped-define SELF-NAME br_table &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON CTRL-END OF br_table IN FRAME F-Main DO: APPLY "END":U TO BROWSE {&BROWSE-NAME}. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON CTRL-HOME OF br_table IN FRAME F-Main DO: APPLY "HOME":U TO BROWSE {&BROWSE-NAME}. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON DEFAULT-ACTION OF br_table IN FRAME F-Main DO: {src/adm2/brsdefault.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON END OF br_table IN FRAME F-Main DO: {src/adm2/brsend.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON HOME OF br_table IN FRAME F-Main DO: {src/adm2/brshome.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON LEFT-MOUSE-CLICK OF br_table IN FRAME F-Main DO: APPLY 'ENTRY' TO {&BROWSE-NAME}. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON LEFT-MOUSE-DBLCLICK OF br_table IN FRAME F-Main DO: IF NOT VALID-HANDLE( hFenster ) THEN RETURN NO-APPLY. RUN TOOLBAR IN hFenster ( INPUT 'UPDATE' ). RETURN NO-APPLY. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON OFF-END OF br_table IN FRAME F-Main DO: {src/adm2/brsoffnd.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON OFF-HOME OF br_table IN FRAME F-Main DO: {src/adm2/brsoffhm.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON RETURN OF br_table IN FRAME F-Main DO: RUN TOOLBAR IN hFenster ( 'UPDATE' ) NO-ERROR. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON ROW-ENTRY OF br_table IN FRAME F-Main DO: {src/adm2/brsentry.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON ROW-LEAVE OF br_table IN FRAME F-Main DO: {src/adm2/brsleave.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON SCROLL-NOTIFY OF br_table IN FRAME F-Main DO: {src/adm2/brsscrol.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON START-SEARCH OF br_table IN FRAME F-Main DO: { incl/brwstartsearch.i } END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL br_table bTableWin ON VALUE-CHANGED OF br_table IN FRAME F-Main DO: {src/adm2/brschnge.i} END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define SELF-NAME Btn_Excel &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Excel bTableWin ON CHOOSE OF Btn_Excel IN FRAME F-Main /* Excel */ DO: RUN DRUCKEN. APPLY 'ENTRY' TO BROWSE {&BROWSE-NAME}. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &Scoped-define SELF-NAME Btn_Weiter &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btn_Weiter bTableWin ON CHOOSE OF Btn_Weiter IN FRAME F-Main /* Weiter */ DO: DEFINE VARIABLE lOK AS LOGICAL NO-UNDO INIT FALSE. DEFINE VARIABLE dBuchdatum AS DATE NO-UNDO INIT TODAY. DEFINE VARIABLE nTotale AS DECIMAL NO-UNDO EXTENT 10. DEFINE VARIABLE nTotal AS DECIMAL NO-UNDO. DEFINE VARIABLE lKomplett AS LOGICAL NO-UNDO. DEFINE VARIABLE lEingelagert AS LOGICAL NO-UNDO. DEFINE VARIABLE iEingang AS INTEGER NO-UNDO. IF DYNAMIC-FUNCTION('getMutFlag':U, Progname ) THEN DO: APPLY 'U1'. RETURN NO-APPLY. END. DEFINE VARIABLE iRecid AS RECID NO-UNDO. iRecid = DYNAMIC-FUNCTION ('getCurrentRecid' IN hDaten) NO-ERROR. IF iRecid = ? OR iRecid = 0 THEN RETURN NO-APPLY. FIND Besko NO-LOCK WHERE RECID(Besko) = iRecid. EMPTY TEMP-TABLE tBesko. CREATE tBesko. BUFFER-COPY Besko TO tBesko. RELEASE Besko. IF tBesko.Best_Sta = 2 THEN DO: lKomplett = TRUE. lEingelagert = TRUE. iEingang = 0. FOR EACH BesEing NO-LOCK OF tBesko: IF BesEing.lVerfall AND BesEing.Verfall = ? THEN lKomplett = FALSE. IF BesEing.lLotnr AND BesEing.Lotnr = '' THEN lKomplett = FALSE. IF NOT BesEing.lEingelagert THEN lEingelagert = FALSE. iEingang = iEingang + BesEing.Eingang. END. IF NOT lKomplett THEN DO: DYNAMIC-FUNCTION ('fehlerMeldung':U, 1115, '' ) NO-ERROR. RETURN NO-APPLY. END. IF iEingang = 0 THEN DO: DYNAMIC-FUNCTION ('fehlerMeldung':U, 1123, '' ) NO-ERROR. RETURN NO-APPLY. END. lOK = TRUE. FOR EACH Besze NO-LOCK OF tBesko: IF Besze.Artnr = 0 THEN NEXT. IF Besze.MBest = 0 THEN NEXT. IF ABS(Besze.Eingang) < ABS(Besze.MBest) THEN DO: lOK = FALSE. LEAVE. END. END. IF NOT lOK THEN DO: lOK = DYNAMIC-FUNCTION ('antwort_nein':U, 1114 ) NO-ERROR. IF lOK = ? OR NOT lOK THEN RETURN NO-APPLY. END. lOk = TRUE. IF NOT lEingelagert THEN DO: lOk = DYNAMIC-FUNCTION ('antwort_nein':U, 1116 ) NO-ERROR. IF lOk = ? OR NOT lOk THEN RETURN NO-APPLY. END. lOK = FALSE. MESSAGE "Achtung, die Eingangsmengen werden als Lagereingang verbucht" SKIP "Unterlieferungen werden ausgeglichen " VIEW-AS ALERT-BOX INFORMATION BUTTONS OK-CANCEL UPDATE lOk. IF lOK = ? OR NOT lOk THEN RETURN NO-APPLY. DO WHILE TRUE: dBuchDatum = tBesko.Lief_Datum. RUN g-einlesen-datum.w ( 'Eingabe Bestelleingangsdatum', 'Eingangsdatum', INPUT-OUTPUT dBuchdatum ) NO-ERROR. IF dBuchdatum = ? THEN RETURN NO-APPLY. IF dBuchdatum < (TODAY - 60) OR dBuchdatum > (TODAY + 30) THEN NEXT. LEAVE. END. tBesko.Lief_Datum = dBuchdatum. REPEAT TRANSACTION ON ERROR UNDO, RETURN: FIND Besko WHERE RECID(Besko) = iRecid. Besko.Lief_Datum = dBuchdatum. RELEASE Besko. LEAVE. END. END. IF tBesko.Best_Sta = 3 THEN DO: lOK = TRUE. FOR EACH Besze NO-LOCK OF tBesko: IF Besze.Artnr = 0 THEN NEXT. IF Besze.Preis > 0 THEN NEXT. MESSAGE 'es gibt noch Artikel ohne Preis' VIEW-AS ALERT-BOX. LEAVE. END. DO WHILE TRUE: IF tBesko.Buch_Datum = ? THEN dBuchDatum = TODAY. ELSE dBuchdatum = tBesko.Buch_Datum. RUN g-einlesen-datum.w ( 'Eingabe Bestelleingangsdatum', 'Eingangsdatum', INPUT-OUTPUT dBuchdatum ) NO-ERROR. IF dBuchdatum = ? THEN RETURN NO-APPLY. IF dBuchdatum < (TODAY - 30) OR dBuchdatum > (TODAY + 30) THEN NEXT. LEAVE. END. tBesko.Buch_Datum = dBuchdatum. REPEAT TRANSACTION ON ERROR UNDO, RETURN: FIND Besko WHERE RECID(Besko) = iRecid. Besko.Buch_Datum = dBuchdatum. RELEASE Besko. LEAVE. END. tBesko.lOK = FALSE. RUN g-bestellung-verbuchen.w ( INPUT-OUTPUT htBesko ). FIND FIRST tBesko. IF tBesko.lOK THEN DO: tBesko.Best_Sta = 4. nTotal = DYNAMIC-FUNCTION ('calculateBeskoTotal':U, D1Firma, tBesko.Besnr, OUTPUT nTotale ). REPEAT TRANSACTION ON ERROR UNDO, RETURN: FIND Besko WHERE RECID(Besko) = iRecid. FOR EACH Besze OF Besko: Besze.Best_Sta = tBesko.Best_Sta. RELEASE Besze. END. ASSIGN Besko.Best_Tot = tBesko.Best_Tot Besko.Best_Sta = tBesko.Best_Sta. RELEASE Besko. LEAVE. END. END. DYNAMIC-FUNCTION ('openQuery':U IN hDaten ) NO-ERROR. APPLY 'U1'. RETURN NO-APPLY. END. FIND FIRST tBesko. DYNAMIC-FUNCTION ('changeBestellStatus':U, INPUT-OUTPUT htBesko ) NO-ERROR. FIND FIRST tBesko. nTotal = DYNAMIC-FUNCTION ('calculateBeskoTotal':U, D1Firma, tBesko.Besnr, OUTPUT nTotale ). DYNAMIC-FUNCTION ('openQuery':U IN hDaten ) NO-ERROR. APPLY 'U1'. END. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &UNDEFINE SELF-NAME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK bTableWin /* *************************** Main Block *************************** */ SUBSCRIBE TO 'BESTELLUNG_ERFASST' ANYWHERE. { incl/brwmainblock.i } { incl/brwinternproc.i } &IF DEFINED(UIB_IS_RUNNING) <> 0 &THEN RUN initializeObject. &ENDIF /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ********************** Internal Procedures *********************** */ &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESTELLUNG_ERFASSEN bTableWin PROCEDURE BESTELLUNG_ERFASSEN : /* ------------------------------------------------------------------------------ */ /* Purpose: */ /* Notes: */ /* ------------------------------------------------------------------------------ */ DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO. DEFINE VARIABLE iRecid AS RECID NO-UNDO. DEFINE VARIABLE nTotale AS DECIMAL NO-UNDO EXTENT 10. DEFINE VARIABLE iBesnr AS INTEGER NO-UNDO. DEFINE VARIABLE rBesko AS INTEGER NO-UNDO. DEFINE BUFFER bBesko FOR Besko. DEFINE BUFFER bArtst FOR Artst. FIND bBesko NO-LOCK WHERE RECID(bBesko) = rBesko. iBesnr = bBesko.Besnr. FIND FIRST tParam. FIND FIRST BesGebKo NO-LOCK WHERE BesGebKo.Firma = bBesko.Firma AND BesGebKo.Besnr = bBesko.Besnr NO-ERROR. IF NOT AVAILABLE BesGebKo THEN DYNAMIC-FUNCTION ('createBesGebKo':U, D1Firma, bBesko.Besnr). FOR EACH tVorschlag WHERE tVorschlag.Bestellung > 0, FIRST bArtst NO-LOCK USE-INDEX Artst-k1 WHERE bArtst.Firma = D1Firma AND bArtst.Artnr = tVorschlag.Artnr AND bArtst.Inhalt = tVorschlag.Inhalt AND bArtst.Jahr = tVorschlag.Jahr BY tVorschlag.Knr BY bArtst.Wg_Grp BY bArtst.Prod_Grp BY bArtst.Art_Grp BY bArtst.Suchbe BY bArtst.Artnr BY bArtst.Inhalt BY bArtst.Jahr : EMPTY TEMP-TABLE tBesze. CREATE tBesze. BUFFER-COPY tVorschlag TO tBesze. ASSIGN tBesze.Firma = D1Firma tBesze.Besnr = iBesnr tBesze.Pos = 0 tBesze.Frw = bBesko.Frw tBesze.Kurs = bBesko.Kurs tBesze.Faktor = bBesko.Faktor tBesze.Spesen = bBesko.Spesen tBesze.Rabatt = bBesko.Rabatt tBesze.ZusRab = bBesko.ZusRab tBesze.Best_Sta = bBesko.Best_Sta tBesze.Lager = bBesko.Lager tBesze.VGeb_Me = tVorschlag.VGeb_Me tBesze.KGeb_Me = tVorschlag.KGeb_Me tBesze.MBest = tVorschlag.Bestellung tBesze.iStatus = 0 . iRetVal = DYNAMIC-FUNCTION ( 'fillBesze':U, INPUT-OUTPUT htBesze ) NO-ERROR. IF iRetVal > 0 THEN DO: DYNAMIC-FUNCTION('fehlerMeldung':U, iRetVal, '' ) NO-ERROR. NEXT. END. FIND FIRST tBesze. ASSIGN tBesze.KGeb_Me = tVorschlag.Bestellung tBesze.MBest = tVorschlag.Bestellung tBesze.MRuek = tVorschlag.Bestellung tBesze.Rueckstand = tVorschlag.Rueckstand . CREATE Besze. BUFFER-COPY tBesze TO Besze. iRecid = RECID(Besze). RELEASE Besze. DYNAMIC-FUNCTION ('calculateBeszeNetto':U, '', 0, 0, iRecid ). END. DYNAMIC-FUNCTION ('calculateBeskoTotal':U, Firma, iBesnr, OUTPUT nTotale ) NO-ERROR. /* OUTPUT TO 'C:\Entwicklung\Temp\Besze.csv' NO-MAP NO-CONVERT. */ /* FOR EACH Besze WHERE Besze.Firma = D1Firma AND Besze.Besnr = iBesnr:*/ /* EXPORT DELIMITER ';' Besze. */ /* END. */ /* OUTPUT CLOSE. */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESTELLUNG_ERFASST bTableWin PROCEDURE BESTELLUNG_ERFASST : /* ------------------------------------------------------------------------------ */ /* Purpose: */ /* Notes: */ /* ------------------------------------------------------------------------------ */ DEFINE INPUT PARAMETER ipiBesnr AS INTEGER NO-UNDO. DEFINE VARIABLE nTotale AS DECIMAL NO-UNDO EXTENT 10. DEFINE VARIABLE cRowid AS CHARACTER NO-UNDO. DEFINE BUFFER bBesko FOR Besko. FIND bBesko NO-LOCK WHERE bBesko.Firma = D1Firma AND bBesko.Besnr = ipiBesnr NO-ERROR. IF NOT AVAILABLE bBesko THEN RETURN. cRowid = STRING(ROWID(bBesko)). DYNAMIC-FUNCTION ('calculateBeskoTotal':U, bBesko.Firma, bBesko.Besnr, OUTPUT nTotale ) NO-ERROR. DYNAMIC-FUNCTION ('openQuery':U IN hDaten) NO-ERROR. DYNAMIC-FUNCTION ('fetchRowIdent':U IN hDaten, cRowid, ?) NO-ERROR. DYNAMIC-FUNCTION ('refreshRowident':U IN hDaten, cRowid) NO-ERROR. APPLY 'U1'. RETURN NO-APPLY. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESTELLVORSCHLAG bTableWin PROCEDURE BESTELLVORSCHLAG : /* ------------------------------------------------------------------------------ */ /* Purpose: */ /* Notes: */ /* ------------------------------------------------------------------------------ */ DEFINE VARIABLE dLetzteBestellung AS DATE NO-UNDO. DEFINE VARIABLE dBestandesdatum AS DATE NO-UNDO. DEFINE VARIABLE dReserviertdatum AS DATE NO-UNDO. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE VARIABLE iDiffTage AS INTEGER NO-UNDO. DEFINE BUFFER bBesko FOR Besko. rBesko = DYNAMIC-FUNCTION ('getCurrentRecid':U IN hDaten) NO-ERROR. IF rBesko = ? OR rBesko = 0 THEN RETURN NO-APPLY. FIND bBesko NO-LOCK WHERE RECID(bBesko) = rBesko. FIND Adresse NO-LOCK WHERE Adresse.Firma = AdFirma AND Adresse.Knr = bBesko.Knr. FIND Liefst NO-LOCK WHERE Liefst.Firma = D1Firma AND Liefst.Knr = bBesko.Knr. EMPTY TEMP-TABLE tParam. CREATE tParam. ASSIGN tParam.iKnr = bBesko.Knr tParam.iBesnr = bBesko.Besnr tParam.lOK = FALSE tParam.iLager = bBesko.Lager . lRetVal = DYNAMIC-FUNCTION ('getBeskoParameter':U, Progname, INPUT-OUTPUT htParam ) NO-ERROR. FIND FIRST tParam. ASSIGN tParam.iLager = bBesko.Lager iDiffTage = TODAY - tParam.dAktion . FIND LAST Besko NO-LOCK USE-INDEX Besko-k3 WHERE Besko.Firma = bBesko.Firma AND Besko.Knr = bBesko.Knr AND Besko.Best_Datum < TODAY NO-ERROR. ASSIGN dLetzteBestellung = (IF AVAILABLE Besko THEN Besko.Best_Datum ELSE tParam.dLetztBest) dBestandesdatum = tParam.dBestandesdatum dReserviertdatum = tParam.dReserviertdatum. IF dLetzteBestellung = ? THEN dLetzteBestellung = TODAY - Liefst.Bestell_Intervall - Liefst.Lieferzeit. IF dBestandesdatum = ? THEN dBestandesdatum = TODAY + Liefst.Bestell_Intervall + Liefst.Lieferzeit. IF dReserviertdatum = ? THEN dReserviertdatum = dBestandesdatum + Liefst.Bestell_Intervall + Liefst.Lieferzeit. ASSIGN tParam.dLetztBest = dLetzteBestellung tParam.dVon = tParam.dVon + iDiffTage tParam.dBis = tParam.dBis + iDiffTage tParam.iIntervall = (IF tParam.iIntervall = 0 THEN Liefst.Bestell_Intervall ELSE tParam.iIntervall ) tParam.iLieferfrist = (IF tParam.iLieferfrist = 0 THEN Liefst.Lieferzeit ELSE tParam.iLieferfrist) tParam.dBestandesdatum = dBestandesdatum + iDiffTage tParam.dReserviertdatum = dReserviertDatum + iDiffTage . IF dReserviertDatum = ? THEN dReserviertDatum = dBestandesdatum. RELEASE bBesko. RUN 'g-bestellvorschlag-daten.w' ( INPUT-OUTPUT htParam ). IF NOT tParam.lOK THEN RETURN. DYNAMIC-FUNCTION ('setBeskoParameter':U, Progname, INPUT-OUTPUT htParam ) NO-ERROR. RUN BESTELLVORSCHLAG_ERSTELLEN. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE BESTELLVORSCHLAG_ERSTELLEN bTableWin PROCEDURE BESTELLVORSCHLAG_ERSTELLEN : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE nEffBestand AS INTEGER NO-UNDO. DEFINE VARIABLE iTotAnz AS INTEGER NO-UNDO. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO. DEFINE VARIABLE lVGebinde AS LOGICAL NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE iLetztAufnr AS INTEGER NO-UNDO. DEFINE VARIABLE nDatum AS DATE NO-UNDO. DEFINE VARIABLE dRueckDatum AS DATE NO-UNDO. DEFINE VARIABLE iRest AS INTEGER NO-UNDO. DEFINE VARIABLE JJ AS INTEGER NO-UNDO. DEFINE VARIABLE MM AS INTEGER NO-UNDO. DEFINE VARIABLE TT AS INTEGER NO-UNDO. DEFINE VARIABLE iGGeb_Me AS INTEGER NO-UNDO. DEFINE VARIABLE iVGeb_Me AS INTEGER NO-UNDO. DEFINE VARIABLE iKGeb_Me AS INTEGER NO-UNDO. DEFINE VARIABLE lMinMaxMenge AS LOGICAL NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE iFuellMenge AS INTEGER NO-UNDO. DEFINE VARIABLE dvonVorJahr AS DATE NO-UNDO. DEFINE VARIABLE iPerioden AS INTEGER NO-UNDO. DEFINE VARIABLE dVorAktiv AS DATE NO-UNDO. /* Vorjahreshalbjaahr AKtive Periode (Winter/Sommer) */ DEFINE VARIABLE dVorVerg AS DATE NO-UNDO. /* Abgelaufene Periode (Winter/Sommer) */ DEFINE VARIABLE dVorEnd AS DATE NO-UNDO. DEFINE VARIABLE dVonDatum AS DATE NO-UNDO. DEFINE BUFFER bArtLief FOR ArtLief . DEFINE BUFFER bArtst FOR Artst . DEFINE BUFFER bArtLager FOR ArtLager. DEFINE BUFFER bBesko FOR Besko . DEFINE BUFFER bBesze FOR Besze . FIND Steuer NO-LOCK WHERE Steuer.Firma = D1Firma. lVGebinde = (IF Steuer.St09 = 1 THEN TRUE ELSE FALSE). RELEASE Steuer. FIND SteuNr NO-LOCK WHERE SteuNr.Firma = D1Firma. iLetztAufnr = SteuNr.Nr1 - 1000. FIND FIRST tParam. EMPTY TEMP-TABLE tVorschlag. FIND bBesko NO-LOCK WHERE RECID(bBesko) = rBesko. dvonVorjahr = bBesko.Best_Datum - 365. iPerioden = tParam.iIntervall + tParam.iLieferfrist. IF MONTH(bBesko.Best_Datum) >= 10 OR MONTH(bBesko.Best_Datum) <= 03 THEN DO: IF MONTH(bBesko.Best_Datum) >= 10 THEN JJ = YEAR(bBesko.Best_Datum) - 1. ELSE JJ = YEAR(bBesko.Best_Datum) - 2. dVorAktiv = DATE(10,01,JJ). dVorVerg = DATE(04,01,JJ + 1). dVorEnd = DATE(09,30,JJ + 1). END. ELSE DO: JJ = YEAR(bBesko.Best_Datum) - 1. dVorAktiv = DATE(04,01,JJ). dVorVerg = DATE(10,01,JJ). dVorEnd = DATE(03,31,JJ + 1). END. dvonDatum = (IF dvonVorjahr < dvorAktiv THEN dvonVorjahr ELSE dvorAktiv). IF tParam.lBewegungen THEN DO: IF tParam.dVon = ? THEN tParam.dVon = TODAY - 90. IF tParam.dBis = ? THEN tParam.dBis = TODAY. END. SESSION:SET-WAIT-STATE ('GENERAL'). iTotAnz = 0. FOR EACH bArtLief NO-LOCK WHERE bArtLief.Firma = D1Firma AND bArtLief.Knr = tParam.iKnr: iTotAnz = iTotAnz + 1. END. SLIDER-1:HIDDEN IN FRAME {&FRAME-NAME} = FALSE. iAnzahl = 0. FOR EACH bArtLief NO-LOCK WHERE bArtLief.Firma = D1Firma AND bArtLief.Knr = tParam.iKnr AND bArtLief.Haupt = TRUE, FIRST bArtst NO-LOCK WHERE bArtst.Firma = bArtLief.Firma AND bArtst.Artnr = bArtLief.Artnr AND bArtst.Inhalt = bArtLief.Inhalt AND bArtst.Jahr = bArtLief.Jahr AND bArtst.Aktiv = TRUE AND bArtst.Ausverk < 9 AND NOT bArtst.Leih_Art, FIRST bArtLager NO-LOCK WHERE bArtLager.Firma = bArtLief.Firma AND bArtLager.Artnr = bArtLief.Artnr AND bArtLager.Inhalt = bArtLief.Inhalt AND bArtLager.Jahr = bArtLief.Jahr AND bArtLager.Lager = bBesko.Lager, FIRST ArtBez NO-LOCK WHERE ArtBez.Firma = bArtLief.Firma AND ArtBez.Artnr = bArtLief.Artnr AND ArtBez.Inhalt = bArtLief.Inhalt AND ArtBez.Jahr = bArtLief.Jahr : /* ------------------------------------------------------------------ */ /* Letzter Eingang des Artikels */ /* ------------------------------------------------------------------ */ FIND FIRST Artbw NO-LOCK USE-INDEX Artbw-k7 WHERE Artbw.Firma = D1Firma AND Artbw.Artnr = bArtLief.Artnr AND Artbw.Inhalt = bArtLief.Inhalt AND Artbw.Jahr = bArtLief.Jahr AND Artbw.Tr_Art = 11 NO-ERROR. IF AVAILABLE Artbw THEN nDatum = Artbw.Datum. ELSE nDatum = TODAY - iPerioden. dRueckDatum = nDatum. RELEASE GGebinde. RELEASE VGebinde. IF bArtst.GGeb_Cd <> '' THEN DO: FIND GGebinde NO-LOCK WHERE GGebinde.Firma = bArtst.Firma AND GGebinde.Geb_Cd = bArtst.GGeb_Cd NO-ERROR. END. IF bArtst.VGeb_Cd <> '' THEN DO: FIND VGebinde NO-LOCK WHERE VGebinde.Firma = bArtst.Firma AND VGebinde.Geb_Cd = bArtst.VGeb_Cd NO-ERROR. END. IF bArtst.KGeb_Cd <> '' THEN DO: FIND KGebinde NO-LOCK WHERE KGebinde.Firma = bArtst.Firma AND KGebinde.Geb_Cd = bArtst.KGeb_Cd NO-ERROR. END. CREATE tVorschlag. ASSIGN tVorschlag.Besnr = bBesko.Besnr tVorschlag.Typ = 0 tVorschlag.Lager = bBesko.Lager tVorschlag.Knr = bArtLief.Knr tVorschlag.Artnr = bArtst.Artnr tVorschlag.Inhalt = bArtst.Inhalt tVorschlag.Jahr = bArtst.Jahr tVorschlag.Artikel = TRIM(ArtBez.Bez1 + ' ' + ArtBez.Bez2) tVorschlag.lBeschaff = (IF bArtst.Ausverk = 8 THEN TRUE ELSE FALSE) tVorschlag.Bestand = bArtLager.Bestand tVorschlag.Bestellt = bArtLager.Bestellt tVorschlag.lBewegungen = FALSE tVorschlag.lMindBestMenge = (IF bArtLief.Min_KGebinde > 0 THEN TRUE ELSE FALSE) tVorschlag.Mind_Berechnet = (IF bArtLief.Min_KGebinde > 0 THEN bArtLief.Min_KGebinde ELSE 0) tVorschlag.Mind_Bestand = bArtLager.Mind_Bestand tVorschlag.Meld_Bestand = bArtLager.Meld_Bestand tVorschlag.Soll_Bestand = bArtLager.Soll_Bestand tVorschlag.Mind_Bestellung = bArtLief.Min_KGebinde tVorschlag.LagerOrt = bArtLager.Ort tVorschlag.GGeb_Inhalt = (IF AVAILABLE GGebinde THEN GGebinde.Inhalt ELSE 1) tVorschlag.VGeb_Inhalt = (IF AVAILABLE VGebinde THEN VGebinde.Inhalt ELSE 1) tVorschlag.KGeb_Inhalt = (IF AVAILABLE KGebinde THEN KGebinde.Inhalt ELSE 1) tVorschlag.cArtikel = TRIM(Artbez.Bez1 + ' ' + ArtBez.Bez2) tVorschlag.GGeb_Text = (IF AVAILABLE GGebinde THEN GGebinde.KBez ELSE '') tVorschlag.VGeb_Text = (IF AVAILABLE VGebinde THEN VGebinde.KBez ELSE '') tVorschlag.KGeb_Text = (IF AVAILABLE KGebinde THEN KGebinde.KBez ELSE '') tVorschlag.GGeb_Cd = bArtst.GGeb_Cd tVorschlag.VGeb_Cd = bArtst.VGeb_Cd tVorschlag.KGeb_Cd = bArtst.KGeb_Cd . IF lVGebinde AND AVAILABLE VGebinde AND VGebinde.Inhalt > 0 THEN DO: ASSIGN tVorschlag.Mind_Bestand = tVorschlag.Mind_Bestand * VGebinde.Inhalt tVorschlag.Soll_Bestand = tVorschlag.Soll_Bestand * VGebinde.Inhalt tVorschlag.Meld_Bestand = tVorschlag.Meld_Bestand * VGebinde.Inhalt. END. /* ------------------------------------------------------------------ */ /* Rückstände aus offenen und verbuchten Aufträgen */ /* ------------------------------------------------------------------ */ FOR EACH Aufze NO-LOCK USE-INDEX Aufze-k2 WHERE Aufze.Firma = D1Firma AND Aufze.Artnr = tVorschlag.Artnr AND Aufze.Inhalt = tVorschlag.Inhalt AND Aufze.Jahr = tVorschlag.Jahr AND Aufze.Lager = tVorschlag.Lager AND Aufze.Lag_Buch = TRUE : tVorschlag.Rueckstand = tVorschlag.Rueckstand + Aufze.MRuek. END. FOR EACH Savze NO-LOCK USE-INDEX Savze-k3 WHERE Savze.Firma = bBesko.Firma AND SavZe.Artnr = tVorschlag.Artnr AND SavZe.Inhalt = tVorschlag.Inhalt AND SavZe.Jahr = tVorschlag.Jahr AND SavZe.Aufnr > iLetztAufnr AND Savze.Lager = tVorschlag.Lager AND SavZe.MRuek > 0 AND SavZe.Lag_Buch = TRUE, FIRST Savko NO-LOCK WHERE Savko.Firma = Savze.Firma AND Savko.Aufnr = Savze.Aufnr AND Savko.Lief_Datum > dRueckDatum : tVorschlag.Rueckstand = tVorschlag.Rueckstand + Savze.MRuek. END. iAnzahl = iAnzahl + 1. SLIDER-1:SCREEN-VALUE = STRING(iAnzahl * 100 / iTotAnz). END. SLIDER-1:HIDDEN IN FRAME {&FRAME-NAME} = FALSE. iTotAnz = iAnzahl. iAnzahl = 0. /* ------------------------------------------------------------------ */ /* Verbräuche rechnen Vorjahr bis zum Reserviert-Datum */ /* ------------------------------------------------------------------ */ VORSCHLAG010: FOR EACH tVorschlag WHILE tParam.lVerbrauch: FOR EACH Artbw NO-LOCK WHERE Artbw.Firma = D1Firma AND Artbw.Artnr = tVorschlag.Artnr AND Artbw.Inhalt = tVorschlag.Inhalt AND Artbw.Jahr = tVorschlag.Jahr AND Artbw.Datum > dvonDatum AND Artbw.Datum <= tParam.dReserviertdatum AND Artbw.Tr_Art < 10 AND Artbw.Lager = tVorschlag.Lager AND Artbw.Lag_Buch = TRUE : /* ------------------------------------------------------------------ */ /* Es hat Bewegungen gegeben im Datumsbereich */ /* ------------------------------------------------------------------ */ IF tParam.lBewegungen THEN DO: IF Artbw.Datum >= tParam.dVon AND Artbw.Datum <= tParam.dBis AND Artbw.Menge > 0 THEN tVorschlag.lBewegungen = TRUE. END. /* ---------------------------------------------------------------------- */ /* Die letzten 12 Mt, aufgeteilt auch in die letzten 6, und die 6 davor */ /* ---------------------------------------------------------------------- */ IF Artbw.Datum >= dvonVorjahr AND Artbw.Datum <= bBesko.Best_Datum THEN tVorschlag.Verbrauch_12Mt = tVorschlag.Verbrauch_12Mt + Artbw.Menge. IF Artbw.Datum >= dvonVorjahr + 183 AND Artbw.Datum <= bBesko.Best_Datum THEN tVorschlag.Verbrauch_0106 = tVorschlag.Verbrauch_0106 + Artbw.Menge. IF Artbw.Datum >= dvonVorjahr AND Artbw.Datum <= dVonVorjahr + 183 THEN tVorschlag.Verbrauch_0712 = tVorschlag.Verbrauch_0712 + Artbw.Menge. /* ------------------------------------------------------------------ */ /* Vorjahres-Bestellperioden */ /* ------------------------------------------------------------------ */ DO WHILE TRUE: IF Artbw.Datum < dvonVorjahr THEN LEAVE. IF Artbw.Datum <= (dvonVorjahr + (iPerioden * 1)) THEN DO: tVorschlag.Verbrauch_VjPer1 = tVorschlag.Verbrauch_VjPer1 + Artbw.Menge. LEAVE. END. IF Artbw.Datum <= (dvonVorjahr + (iPerioden * 2)) THEN DO: tVorschlag.Verbrauch_VjPer2 = tVorschlag.Verbrauch_VjPer2 + Artbw.Menge. LEAVE. END. IF Artbw.Datum <= (dvonVorjahr + (iPerioden * 3)) THEN DO: tVorschlag.Verbrauch_VjPer3 = tVorschlag.Verbrauch_VjPer3 + Artbw.Menge. LEAVE. END. LEAVE. END. /* ------------------------------------------------------------------ */ /* Verbrauch in letzter Bestellperiode (Intervall + Lieferfrist) */ /* ------------------------------------------------------------------ */ IF Artbw.Datum >= (bBesko.Best_Datum - (iPerioden * 2)) AND Artbw.Datum <= bBesko.Best_Datum THEN DO: tVorschlag.Verbrauch_Letzt = tVorschlag.Verbrauch_Letzt + Artbw.Menge. END. /* ------------------------------------------------------------------ */ /* Saison (Winter (Mt. 10 - 03) / Sommer (Mt. 04 - 09) */ /* ------------------------------------------------------------------ */ DO WHILE TRUE: IF Artbw.Datum < dVorAKtiv THEN LEAVE. IF Artbw.Datum > dVorEnd THEN LEAVE. IF Artbw.Datum <= dVorVerg THEN tVorschlag.Verbrauch_Aktiv = tVorschlag.Verbrauch_Aktiv + Artbw.Menge. ELSE tVorschlag.Verbrauch_Verg = tVorschlag.Verbrauch_Verg + Artbw.Menge. LEAVE. END. /* ------------------------------------------------------------------ */ /* Vormonats-Umsatz-Zahlen 1-3 */ /* ------------------------------------------------------------------ */ DO WHILE TRUE: IF Artbw.Datum >= bBesko.Best_Datum - 90 AND Artbw.Datum < bBesko.Best_Datum - 60 THEN DO: tVorschlag.Verbrauch_VorMt3 = tVorschlag.Verbrauch_VorMt3 + Artbw.Menge. LEAVE. END. IF Artbw.Datum >= bBesko.Best_Datum - 60 AND Artbw.Datum < bBesko.Best_Datum - 30 THEN DO: tVorschlag.Verbrauch_VorMt2 = tVorschlag.Verbrauch_VorMt2 + Artbw.Menge. LEAVE. END. IF Artbw.Datum >= bBesko.Best_Datum - 30 AND Artbw.Datum < bBesko.Best_Datum - 00 THEN DO: tVorschlag.Verbrauch_VorMt1 = tVorschlag.Verbrauch_VorMt1 + Artbw.Menge. LEAVE. END. IF Artbw.Fak_Dat = ? THEN DO: IF Artbw.Datum > bBesko.Best_Datum AND Artbw.Datum > dBestandesdatum THEN DO: tVorschlag.Tagesbestand = tVorschlag.TagesBestand + Artbw.Menge. END. IF Artbw.Datum > dBestandesDatum AND Artbw.Datum <= dReserviertdatum THEN DO: tVorschlag.Reserviert = tVorschlag.Reserviert + Artbw.Menge. END. END. LEAVE. END. END. tVorschlag.TagesBestand = tVorschlag.TagesBestand + tVorschlag.Bestand. iAnzahl = iAnzahl + 1. SLIDER-1:SCREEN-VALUE = STRING(iAnzahl * 100 / iTotAnz). END. iAnzahl = 0. VORSCHLAG020: FOR EACH tVorschlag WHERE tVorschlag.Typ = 0: iAnzahl = iAnzahl + 1. SLIDER-1:SCREEN-VALUE = STRING(iAnzahl * 100 / iTotAnz). /* ------------------------------------------------------------------ */ /* Beschaffungsartikel anhand der Rückstandsmenge */ /* ------------------------------------------------------------------ */ IF tVorschlag.lBeschaff THEN DO: FIND bArtst NO-LOCK WHERE bArtst.Firma = D1Firma AND bArtst.Artnr = tVorschlag.Artnr AND bArtst.Inhalt = tVorschlag.Inhalt AND bArtst.Jahr = tVorschlag.Jahr. /* ------------------------------------------------------------------ */ /* Beschaffungsartikel mit Lagerführung */ /* ------------------------------------------------------------------ */ IF bArtst.Lager THEN DO: ASSIGN tVorschlag.Vorschlag_Me = - tVorschlag.Bestand + tVorschlag.Rueckstand tVorschlag.Bestellung = - tVorschlag.Bestand + tVorschlag.Rueckstand. IF tVorschlag.Vorschlag_Me < 0 THEN ASSIGN tVorschlag.Vorschlag_Me = 0 tVorschlag.Bestellung = tVorschlag.Vorschlag_Me. ASSIGN tVorschlag.lBewegungen = TRUE tVorschlag.Typ = 1. NEXT. END. /* ------------------------------------------------------------------ */ /* Beschaffungsartikel ohne Lagerführung */ /* ------------------------------------------------------------------ */ ASSIGN tVorschlag.Vorschlag_Me = tVorschlag.Rueckstand tVorschlag.Bestellung = tVorschlag.Rueckstand tVorschlag.lBewegungen = TRUE tVorschlag.Typ = 1. NEXT. END. IF tParam.lBewegungen AND NOT tVorschlag.lBewegungen AND NOT tVorschlag.lBeschaff THEN DO: DELETE tVorschlag. NEXT VORSCHLAG020. END. nEffbestand = tVorschlag.TagesBestand + tVorschlag.Bestellt. IF tVorschlag.Meld_Bestand > 0 AND tVorschlag.Meld_Bestand > nEffBestand THEN tVorschlag.Typ = 3. IF tVorschlag.Mind_Bestand > 0 AND tVorschlag.Mind_Bestand > nEffBestand THEN tVorschlag.Typ = 2. DO WHILE tVorschlag.Soll_Bestand > 0: IF nEffBestand >= tVorschlag.Soll_Bestand THEN LEAVE. ASSIGN tVorschlag.Vorschlag_Me = tVorschlag.Soll_Bestand - nEffBestand tVorschlag.Bestellung = tVorschlag.Soll_Bestand - nEffBestand. NEXT VORSCHLAG020. END. DO WHILE tVorschlag.Mind_Bestand > 0: IF nEffBestand >= tVorschlag.Mind_Bestand THEN LEAVE. ASSIGN tVorschlag.Vorschlag_Me = tVorschlag.Mind_Bestand + tVorschlag.Verbrauch_Letzt - nEffBestand tVorschlag.Bestellung = tVorschlag.Vorschlag_Me. NEXT VORSCHLAG020. END. IF nEffBestand < tVorschlag.Rueckstand THEN DO: ASSIGN tVorschlag.Vorschlag_Me = tVorschlag.Rueckstand - nEffBestand tVorschlag.Bestellung = tVorschlag.Vorschlag_Me. NEXT VORSCHLAG020. END. IF nEffBestand > tVorschlag.Verbrauch_VorMt1 AND nEffBestand > tVorschlag.Verbrauch_VjPer1 THEN NEXT. tVorschlag.Vorschlag_Me = tVorschlag.Verbrauch_Letzt - nEffBestand. IF tVorschlag.Vorschlag_Me < 0 THEN tVorschlag.Vorschlag_Me = 0. tVorschlag.Bestellung = tVorschlag.Vorschlag_Me. END. iTotAnz = 0. iAnzahl = 0. lMinMaxMenge = TRUE. /* Mindest- (TRUE) oder Max-Bestellmenge */ cString = DYNAMIC-FUNCTION ('getFehlwert':U, Firma, 'MINMAXBESTMENGE' ) NO-ERROR. IF cString BEGINS 'n' THEN lMinMaxMenge = FALSE. FOR EACH tVorschlag: /* FIND bArtLief NO-LOCK */ /* WHERE bArtLief.Firma = D1Firma */ /* AND bArtLief.Artnr = tVorschlag.Artnr */ /* AND bArtLief.Inhalt = tVorschlag.Inhalt*/ /* AND bArtLief.Jahr = tVorschlag.Jahr */ /* AND bArtLief.Knr = tVorschlag.Knr. */ DO WHILE TRUE: IF NOT tVorschlag.lMindBestMenge THEN LEAVE. IF lMinMaxMenge THEN LEAVE. IF tVorschlag.Vorschlag_Me = 0 THEN LEAVE. IF nEffBestand > tVorschlag.Vorschlag_Me THEN DO: tVorschlag.Vorschlag_Me = 0. tVorschlag.Bestellung = 0. LEAVE. END. IF nEffBestand >= tVorschlag.Mind_Berechnet THEN DO: tVorschlag.Vorschlag_Me = 0. tVorschlag.Bestellung = 0. LEAVE. END. IF nEffBestand > tVorschlag.Verbrauch_Letzt THEN DO: tVorschlag.Vorschlag_Me = 0. tVorschlag.Bestellung = 0. LEAVE. END. iFuellMenge = tVorschlag.Mind_Berechnet - nEffBestand. IF iFuellMenge <= 0 THEN DO: tVorschlag.Vorschlag_Me = 0. tVorschlag.Bestellung = 0. LEAVE. END. tVorschlag.Vorschlag_Me = iFuellMenge. tVorschlag.Bestellung = iFuellMenge. LEAVE. END. DYNAMIC-FUNCTION ('calculateGebindeAusMenge':U, Firma, tVorschlag.Artnr, tVorschlag.Inhalt, tVorschlag.Jahr, tVorschlag.Vorschlag_Me, OUTPUT iGGeb_Me, OUTPUT iVGeb_Me, OUTPUT iKGeb_Me) NO-ERROR. IF iVGeb_Me <> 0 THEN iKGeb_Me = iVGeb_Me * tVorschlag.VGeb_Inhalt. ELSE DO: IF iKGeb_Me > 0 THEN ASSIGN iVGeb_Me = 1 iKGeb_Me = iVGeb_Me * tVorschlag.VGeb_Inhalt. END. ASSIGN tVorschlag.GGeb_Me = iGGeb_Me tVorschlag.VGeb_Me = iVGeb_Me tVorschlag.KGeb_Me = iKGeb_Me tVorschlag.Vorschlag_Me = iKGeb_Me tVorschlag.Bestellung = iKGeb_Me. /* IF tVorschlag.KGeb_Me > 0 AND */ /* tVorschlag.VGeb_Me < bArtLief.Min_VGebinde THEN */ /* DO: */ /* ASSIGN */ /* tVorschlag.VGeb_Me = bArtLief.Min_VGebinde */ /* tVorschlag.KGeb_Me = tVorschlag.VGeb_Me * tVorschlag.VGeb_Inhalt*/ /* tVorschlag.Vorschlag_Me = tVorschlag.KGeb_Me */ /* tVorschlag.Bestellung = tVorschlag.KGeb_Me. */ /* END. */ IF tParam.nAufrunden > 0 THEN DO: ii = (iVGeb_Me * 100) / tVorschlag.GGeb_Inhalt. IF ii >= tParam.nAufrunden THEN DO: iGGeb_Me = iGGeb_Me + 1. iVGeb_Me = iGGeb_Me * tVorschlag.GGeb_Inhalt. END. iKGeb_Me = iVGeb_Me * tVorschlag.VGeb_Inhalt. ASSIGN tVorschlag.GGeb_Me = iGGeb_Me tVorschlag.VGeb_Me = iVGeb_Me tVorschlag.KGeb_Me = iKGeb_Me tVorschlag.Bestellung = iKGeb_Me tVorschlag.Vorschlag_Me = iKGeb_Me. END. iTotAnz = iTotAnz + 1. EMPTY TEMP-TABLE tBesze. CREATE tBesze. ASSIGN tBesze.Firma = D1Firma tBesze.Besnr = tVorschlag.Besnr tBesze.iStatus = 0 tBesze.Artnr = tVorschlag.Artnr tBesze.Inhalt = tVorschlag.Inhalt tBesze.Jahr = tVorschlag.Jahr . DYNAMIC-FUNCTION ('fillBesze':U, INPUT-OUTPUT htBesze) NO-ERROR. IF ERROR-STATUS:ERROR THEN NEXT. ASSIGN tBesze.GGeb_Me = tVorschlag.GGeb_Me tBesze.VGeb_Me = tVorschlag.VGeb_Me tBesze.KGeb_Me = tVorschlag.KGeb_Me tBesze.MBest = tVorschlag.KGeb_Me tBesze.Verbrauch = tVorschlag.Verbrauch_Letzt . DYNAMIC-FUNCTION ('calculatetBeszeNetto':U, INPUT-OUTPUT htBesze ) NO-ERROR. tVorschlag.nNetto = tBesze.Netto. END. FIND FIRST tVorschlag NO-ERROR. IF NOT AVAILABLE tVorschlag THEN DO: DYNAMIC-FUNCTION('fehlerMeldung':U, 1111, '' ) NO-ERROR. RETURN NO-APPLY. END. SLIDER-1:HIDDEN IN FRAME {&FRAME-NAME} = TRUE. SESSION:SET-WAIT-STATE (''). /* OUTPUT TO 'C:\Entwicklung\Temp\tVorschlag.csv' NO-MAP NO-CONVERT.*/ /* FOR EACH tVorschlag: */ /* EXPORT DELIMITER ';' tVorschlag. */ /* END. */ /* OUTPUT CLOSE. */ IF VALID-HANDLE(hBestellvorschlag) THEN RUN OPENQUERY IN hBestellvorschlag. ELSE DO: RUN 'w-bestellvorschlag.w' PERSISTENT SET hBestellvorschlag ( INPUT htVorschlag ) NO-ERROR. RUN initializeObject IN hBestellvorschlag. RUN OPENQUERY IN hBestellvorschlag. END. /* RUN EXCEL. */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE destroyObject bTableWin PROCEDURE destroyObject : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE hBrowser AS HANDLE NO-UNDO. hBrowser = {&BROWSE-NAME}:HANDLE IN FRAME {&FRAME-NAME}. DYNAMIC-FUNCTION('setBrowserDaten':U, INPUT hBrowser, INPUT Sektion ) NO-ERROR. IF VALID-HANDLE(hBestellvorschlag) THEN RUN ENDE IN hBestellvorschlag. RUN SUPER. /* Code placed here will execute AFTER standard behavior. */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI bTableWin _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 DRUCKEN bTableWin PROCEDURE DRUCKEN : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ IF cInstallation BEGINS 'Huber' THEN RUN DRUCKEN_HUBER. ELSE RUN DRUCKEN_STANDARD. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_HUBER bTableWin PROCEDURE DRUCKEN_HUBER : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE excelAppl AS COMPONENT-HANDLE. DEFINE VARIABLE VVorlage AS CHARACTER INIT "BestellformHuber.xlsm". DEFINE VARIABLE VDateiName AS CHARACTER INIT "BestellformHuber.xlsm". DEFINE VARIABLE VDatenDatei AS CHARACTER INIT "BestellformHuber.csv". DEFINE VARIABLE MyName AS CHARACTER NO-UNDO. DEFINE VARIABLE Zelle AS CHARACTER NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE cZeile AS CHARACTER NO-UNDO. DEFINE VARIABLE io AS LOG NO-UNDO. DEFINE VARIABLE cArtnr AS CHARACTER NO-UNDO. DEFINE VARIABLE cJahr AS CHARACTER NO-UNDO. DEFINE VARIABLE cAlk AS CHARACTER NO-UNDO. DEFINE VARIABLE cGGeb AS CHARACTER NO-UNDO. DEFINE VARIABLE cVGeb AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE i2 AS INTEGER NO-UNDO. DEFINE VARIABLE iRecid AS RECID NO-UNDO. DEFINE BUFFER bBesze FOR Besze. iRecid = DYNAMIC-FUNCTION('getCurrentRecid':U IN hDaten ) NO-ERROR. IF iRecid = ? OR iRecid = 0 THEN DO: APPLY 'U1'. RETURN NO-APPLY. END. FIND Besko NO-LOCK WHERE RECID(Besko) = iRecid. CString = VDateiName + CHR(01) + VVorlage. RUN CREATEDATEI ( INPUT cString ). IF RETURN-VALUE BEGINS 'ERROR' THEN RETURN NO-APPLY. VDateiName = RETURN-VALUE. excelAppl = DYNAMIC-FUNCTION('CREATEEXCEL':U) NO-ERROR. IF NOT VALID-HANDLE(excelAppl) THEN DO: MESSAGE 'Die Applikation Excel konnte nicht gestartet werden ! ' VIEW-AS ALERT-BOX ERROR. RETURN NO-APPLY. END. EMPTY TEMP-TABLE tKopf. DO ix = 1 TO 19: CREATE tKopf. ASSIGN tKopf.Zeile = ix. END. EMPTY TEMP-TABLE tAdresse. CREATE tAdresse. FIND Adresse NO-LOCK USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = Besko.Knr NO-ERROR. IF AVAILABLE Adresse THEN DO: BUFFER-COPY Adresse TO tAdresse. FIND FIRST Ansprech NO-LOCK WHERE Ansprech.Firma = Adresse.Firma AND Ansprech.Knr = Adresse.Knr AND Ansprech.Bestellung = TRUE NO-ERROR. IF AVAILABLE Ansprech THEN BUFFER-COPY Ansprech TO tAdresse. END. FIND Krest NO-LOCK WHERE Krest.Firma = D1Firma AND Krest.Knr = Besko.Knr NO-ERROR. i1 = 0. DO ix = 4 TO 12: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = tAdresse.Anschrift[ix]. END. IF tAdresse.Tel-1 <> '' THEN DO: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = 'Tel.: ' + tAdresse.Tel-1. END. IF tAdresse.Tel-3 <> '' THEN DO: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = 'Fax.: ' + tAdresse.Tel-3. END. IF tAdresse.Mail <> '' THEN DO: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = 'Mail: ' + tAdresse.Mail . END. ix = 1. FIND Steuer USE-INDEX Steuer-k1 WHERE Steuer.Firma = D1Firma NO-LOCK. IF Steuer.Firma1 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Firma1. END. IF Steuer.Firma2 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Firma2. END. IF Steuer.Strasse <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Strasse. END. IF Steuer.Ort <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Ort. END. IF Steuer.Tel-1 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = 'Tel.:'. tKopf.Feld[03] = Steuer.Tel-1. END. IF Steuer.Fax-1 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = 'Fax :'. tKopf.Feld[03] = Steuer.Fax-1. END. IF AVAILABLE Krest THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. ASSIGN tKopf.Feld[02] = 'Knr:' tKopf.Feld[03] = STRING(Krest.Kred_Knr,'999999') . END. FIND FIRST tKopf WHERE tKopf.Zeile = 3. tKopf.Feld[05] = (IF Besko.Abgeholt THEN 'ABHOLUNG' ELSE ''). FIND FIRST tKopf WHERE tKopf.Zeile = 14. tKopf.Feld[01] = 'Bestellung ' + STRING(Besko.Besnr,'999999'). tKopf.Feld[05] = Steuer.Ort + ', ' + STRING(TODAY,'99.99.9999'). FIND FIRST tKopf WHERE tKopf.Zeile = 17. ASSIGN tKopf.Feld[02] = 'Artikel' tKopf.Feld[03] = 'Artikel' tKopf.Feld[04] = 'Vol%' tKopf.Feld[05] = 'JG' tKopf.Feld[06] = 'Gebinde' tKopf.Feld[07] = 'Paletten' tKopf.Feld[08] = 'Kisten' tKopf.Feld[09] = 'Flaschen'. FIND FIRST tKopf WHERE tKopf.Zeile = 18. ASSIGN tKopf.Feld[02] = 'Nummer' tKopf.Feld[03] = '' tKopf.Feld[04] = '' tKopf.Feld[05] = '' tKopf.Feld[06] = '' tKopf.Feld[07] = '' tKopf.Feld[08] = 'Karton' tKopf.Feld[09] = 'Dosen'. VDatenDatei = SESSION:TEMP-DIR + VDatenDatei. OUTPUT TO VALUE(VDatenDatei). FOR EACH tKopf BY Zeile: PUT CONTROL tKopf.Feld[01] '£' tKopf.Feld[02] '£' tKopf.Feld[03] '£' tKopf.Feld[04] '£' tKopf.Feld[05] '£' tKopf.Feld[06] '£' tKopf.Feld[07] '£' tKopf.Feld[08] '£' tKopf.Feld[09] CHR(10). END. i2 = 0. DO ix = 1 TO NUM-ENTRIES (Besko.Kopf, CHR(10)): cString = ENTRY(ix, Besko.Kopf, CHR(10)). IF LENGTH(cString) > 80 THEN DO: cZeile = cString. cString = ''. DO i1 = 1 TO NUM-ENTRIES(cZeile, ' '): IF LENGTH(cString) + LENGTH(ENTRY(i1, cZeile, ' ')) > 80 THEN DO: PUT CONTROL TRIM(cString) CHR(10). cString = ''. END. cString = cString + ' ' + ENTRY(i1, cZeile, ' '). END. END. PUT CONTROL '££' TRIM(cString) CHR(10). i2 = i2 + 1. END. IF i2 > 0 THEN PUT CONTROL '£' CHR(10). IF Besko.Abholtext <> '' THEN DO: cString = REPLACE(Besko.Abholtext, CHR(10), CHR(11)). cString = REPLACE(cString, CHR(13), ''). PUT CONTROL '££' cString '£' CHR(10) '£' CHR(10). END. FOR EACH bBesze USE-INDEX Besze-k1 WHERE bBesze.Firma = D1Firma AND bBesze.Besnr = Besko.Besnr : IF bBesze.MBest = 0 AND bBesze.MGeli = 0 THEN DO: DELETE bBesze. RELEASE bBesze. NEXT. END. FIND Artst OF bBesze NO-LOCK NO-ERROR. FIND KGebinde NO-LOCK USE-INDEX KGebinde-k1 WHERE KGebinde.Firma = D1Firma AND KGebinde.Geb_Cd = bBesze.KGeb_Cd NO-ERROR. FIND VGebinde NO-LOCK USE-INDEX VGebinde-k1 WHERE VGebinde.Firma = D1Firma AND VGebinde.Geb_Cd = bBesze.VGeb_Cd NO-ERROR. FIND GGebinde NO-LOCK USE-INDEX GGebinde-k1 WHERE GGebinde.Firma = D1Firma AND GGebinde.Geb_Cd = bBesze.GGeb_Cd NO-ERROR. cArtnr = ''. cJahr = ''. cAlk = ''. cGGeb = ''. cVGeb = ''. IF bBesze.S_Artnr <> '' THEN cArtnr = bBesze.S_Artnr. ELSE cArtnr = STRING(bBesze.Artnr,"999999"). /* + "." */ /* + STRING(bBesze.Inhalt,"9999") */ /* + "." */ /* + STRING(bBesze.Jahr ,"9999").*/ IF bBesze.Jahr > 99 THEN DO: cJahr = STRING(bBesze.Jahr,"9999"). END. IF Artst.Alk_Gehalt <> 0 THEN DO: cAlk = STRING(Artst.Alk_Gehalt,">9.99") + '%'. END. IF bBesze.GGeb_Me <> 0 THEN cGGeb = TRIM(STRING(bBesze.GGeb_Me,'->>>>>9')). IF bBesze.VGeb_Me <> 0 THEN cVGeb = TRIM(STRING(bBesze.VGeb_Me,'->>>>>9')). PUT CONTROL '£' cArtnr '£' bBesze.Bez1 '£' cAlk '£' cJahr '£' KGebinde.KBez '£' cGGeb '£' cVGeb '£' TRIM(STRING(bBesze.KGeb_Me,'->>>>>9')) CHR(10). IF bBesze.Bez2 <> '' THEN DO: PUT CONTROL '££' bBesze.Bez2 '£££' CHR(10). END. PUT CONTROL '£' CHR(10). RELEASE bBesze. END. IF Besko.Lief_Datum <> ? THEN DO: PUT CONTROL '£' CHR(10) '£' CHR(10) 'Liefererung am:' '££' DYNAMIC-FUNCTION('GETWOCHENTAG', INPUT Besko.Lief_Datum) ', ' STRING(Besko.Lief_Datum,'99.99.9999') ', ' Besko.Lieferzeit CHR(10). END. PUT CONTROL '£' CHR(10). i2 = 0. DO ix = 1 TO NUM-ENTRIES (Besko.Schluss, CHR(10)): cString = ENTRY(ix, Besko.Schluss, CHR(10)). IF LENGTH(cString) > 80 THEN DO: cZeile = cString. cString = ''. DO i1 = 1 TO NUM-ENTRIES(cZeile, ' '): IF LENGTH(cString) + LENGTH(ENTRY(i1, cZeile, ' ')) > 80 THEN DO: PUT CONTROL TRIM(cString) CHR(10). cString = ''. END. cString = cString + ' ' + ENTRY(i1, cZeile, ' '). END. END. PUT CONTROL TRIM(cString) CHR(10). i2 = i2 + 1. END. IF i2 > 0 THEN PUT CONTROL '£' CHR(10). OUTPUT CLOSE. RELEASE Besko. RELEASE bBesze. RELEASE Artst. RUN OPENEXCEL ( INPUT excelAppl, INPUT VDateiName, INPUT '', OUTPUT io ). IF NOT io THEN DO: RUN FEHLER ( INPUT 1040 ). RETURN NO-APPLY. END. Zelle = 'A1'. excelAppl:Range(Zelle):SELECT. excelAppl:Selection:FormulaR1C1 = 'TEXT;' + VDatenDatei. excelAppl:Application:RUN ( 'DateiEinfügen' ). Zelle = 'A1'. excelAppl:Range(Zelle):SELECT. excelAppl:Selection:ColumnWidth = 0.3. DYNAMIC-FUNCTION('RELEASEEXCEL':U, INPUT excelAppl ) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_STANDARD bTableWin PROCEDURE DRUCKEN_STANDARD : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE excelAppl AS COMPONENT-HANDLE. DEFINE VARIABLE VVorlage AS CHARACTER INIT "Bestellform.xls". DEFINE VARIABLE VDateiName AS CHARACTER INIT "Bestellform.xls". DEFINE VARIABLE VDatenDatei AS CHARACTER INIT "Bestellform.csv". DEFINE VARIABLE MyName AS CHARACTER NO-UNDO. DEFINE VARIABLE Zelle AS CHARACTER NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE cZeile AS CHARACTER NO-UNDO. DEFINE VARIABLE io AS LOG NO-UNDO. DEFINE VARIABLE cArtnr AS CHARACTER NO-UNDO. DEFINE VARIABLE cJahr AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE i2 AS INTEGER NO-UNDO. DEFINE VARIABLE iRecid AS RECID NO-UNDO. DEFINE BUFFER bBesze FOR Besze. iRecid = DYNAMIC-FUNCTION('getCurrentRecid':U IN hDaten ) NO-ERROR. IF iRecid = ? OR iRecid = 0 THEN DO: APPLY 'U1'. RETURN NO-APPLY. END. FIND Besko NO-LOCK WHERE RECID(Besko) = iRecid. CString = VDateiName + CHR(01) + VVorlage. RUN CREATEDATEI ( INPUT cString ). IF RETURN-VALUE BEGINS 'ERROR' THEN RETURN NO-APPLY. VDateiName = RETURN-VALUE. excelAppl = DYNAMIC-FUNCTION('CREATEEXCEL':U) NO-ERROR. IF NOT VALID-HANDLE(excelAppl) THEN DO: MESSAGE 'Die Applikation Excel konnte nicht gestartet werden ! ' VIEW-AS ALERT-BOX ERROR. RETURN NO-APPLY. END. FOR EACH tKopf: DELETE tKopf. END. DO ix = 1 TO 19: CREATE tKopf. ASSIGN tKopf.Zeile = ix. END. FIND Adresse NO-LOCK USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = Besko.Knr NO-ERROR. FIND Krest NO-LOCK WHERE Krest.Firma = D1Firma AND Krest.Knr = Besko.Knr NO-ERROR. i1 = 0. DO ix = 4 TO 12: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = Adresse.Anschrift[ix]. END. IF Adresse.Tel-1 <> '' THEN DO: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = 'Tel.: ' + Adresse.Tel-1. END. IF Adresse.Tel-3 <> '' THEN DO: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = 'Fax.: ' + Adresse.Tel-3. END. IF Adresse.Mail <> '' THEN DO: i1 = i1 + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[05] = 'Mail: ' + Adresse.Mail . END. ix = 1. FIND Steuer USE-INDEX Steuer-k1 WHERE Steuer.Firma = D1Firma NO-LOCK. IF Steuer.Firma1 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Firma1. END. IF Steuer.Firma2 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Firma2. END. IF Steuer.Strasse <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Strasse. END. IF Steuer.Ort <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = Steuer.Ort. END. IF Steuer.Tel-1 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = 'Tel.:'. tKopf.Feld[03] = Steuer.Tel-1. END. IF Steuer.Fax-1 <> '' THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = ix. tKopf.Feld[02] = 'Fax :'. tKopf.Feld[03] = Steuer.Fax-1. END. IF AVAILABLE Krest THEN DO: ix = ix + 1. FIND FIRST tKopf WHERE tKopf.Zeile = i1. ASSIGN tKopf.Feld[02] = 'Knr:' tKopf.Feld[03] = Krest.Kred_Knr . END. FIND FIRST tKopf WHERE tKopf.Zeile = 14. tKopf.Feld[01] = 'Bestellung ' + STRING(Besko.Besnr,'999999'). tKopf.Feld[05] = Steuer.Ort + ', ' + STRING(TODAY,'99.99.9999'). FIND FIRST tKopf WHERE tKopf.Zeile = 17. ASSIGN tKopf.Feld[02] = 'Pos' tKopf.Feld[03] = 'Artikelnummer' tKopf.Feld[04] = 'Artikel' tKopf.Feld[05] = 'Gebinde' tKopf.Feld[06] = 'Gebinde' tKopf.Feld[07] = 'Gebinde'. FIND FIRST tKopf WHERE tKopf.Zeile = 18. ASSIGN tKopf.Feld[03] = 'Jahrg./Alk-%' tKopf.Feld[05] = 'Menge' tKopf.Feld[06] = 'Menge' tKopf.Feld[07] = 'Menge'. VDatenDatei = SESSION:TEMP-DIR + VDatenDatei. OUTPUT TO VALUE(VDatenDatei). FOR EACH tKopf BY Zeile: PUT CONTROL tKopf.Feld[01] '£' tKopf.Feld[02] '£' tKopf.Feld[03] '£' tKopf.Feld[04] '£' tKopf.Feld[05] '£' tKopf.Feld[06] '£' tKopf.Feld[07] CHR(10). END. i2 = 0. DO ix = 1 TO NUM-ENTRIES (Besko.Kopf, CHR(10)): cString = ENTRY(ix, Besko.Kopf, CHR(10)). IF LENGTH(cString) > 80 THEN DO: cZeile = cString. cString = ''. DO i1 = 1 TO NUM-ENTRIES(cZeile, ' '): IF LENGTH(cString) + LENGTH(ENTRY(i1, cZeile, ' ')) > 80 THEN DO: PUT CONTROL TRIM(cString) CHR(10). cString = ''. END. cString = cString + ' ' + ENTRY(i1, cZeile, ' '). END. END. PUT CONTROL TRIM(cString) CHR(10). i2 = i2 + 1. END. IF i2 > 0 THEN PUT CONTROL '£' CHR(10). FOR EACH bBesze USE-INDEX Besze-k1 WHERE bBesze.Firma = D1Firma AND bBesze.Besnr = Besko.Besnr : IF bBesze.MBest = 0 AND bBesze.MGeli = 0 THEN DO: DELETE bBesze. RELEASE bBesze. NEXT. END. FIND Artst OF bBesze NO-LOCK NO-ERROR. FIND KGebinde NO-LOCK USE-INDEX KGebinde-k1 WHERE KGebinde.Firma = D1Firma AND KGebinde.Geb_Cd = bBesze.KGeb_Cd NO-ERROR. FIND VGebinde NO-LOCK USE-INDEX VGebinde-k1 WHERE VGebinde.Firma = D1Firma AND VGebinde.Geb_Cd = bBesze.VGeb_Cd NO-ERROR. FIND GGebinde NO-LOCK USE-INDEX GGebinde-k1 WHERE GGebinde.Firma = D1Firma AND GGebinde.Geb_Cd = bBesze.GGeb_Cd NO-ERROR. cArtnr = ''. cJahr = ''. IF bBesze.S_Artnr <> '' THEN cArtnr = bBesze.S_Artnr. ELSE cArtnr = STRING(bBesze.Artnr,"999999") + "." + STRING(bBesze.Inhalt,"9999") + "." + STRING(bBesze.Jahr ,"9999"). IF bBesze.Jahr > 99 THEN DO: cJahr = STRING(bBesze.Jahr,"9999"). END. IF Artst.Alk_Gehalt <> 0 THEN DO: IF cJahr <> '' THEN cJahr = cJahr + ' / '. cJahr = cJahr + STRING(Artst.Alk_Gehalt,">9.99") + '%'. END. PUT CONTROL '£' STRING(bBesze.Pos,">>>9") '£' cArtnr '£' bBesze.Bez1 '£' GGebinde.KBez '£' VGebinde.KBez '£' KGebinde.KBez CHR(10). PUT CONTROL '££' cJahr '£' bBesze.Bez2 '£' STRING(bBesze.GGeb_Me,"->>>,>>9") '£' STRING(bBesze.VGeb_Me,"->>>,>>9") '£' STRING(bBesze.KGeb_Me,"->>>,>>9") CHR(10) '£' CHR(10). RELEASE bBesze. END. IF Besko.Lief_Datum <> ? THEN DO: PUT CONTROL '£' CHR(10) '£' CHR(10) 'Liefererung am:' '£££' DYNAMIC-FUNCTION('GETWOCHENTAG', INPUT Besko.Lief_Datum) ', ' STRING(Besko.Lief_Datum,'99.99.9999') ', ' Besko.Lieferzeit CHR(10). END. PUT CONTROL '£' CHR(10). i2 = 0. DO ix = 1 TO NUM-ENTRIES (Besko.Schluss, CHR(10)): cString = ENTRY(ix, Besko.Schluss, CHR(10)). IF LENGTH(cString) > 80 THEN DO: cZeile = cString. cString = ''. DO i1 = 1 TO NUM-ENTRIES(cZeile, ' '): IF LENGTH(cString) + LENGTH(ENTRY(i1, cZeile, ' ')) > 80 THEN DO: PUT CONTROL TRIM(cString) CHR(10). cString = ''. END. cString = cString + ' ' + ENTRY(i1, cZeile, ' '). END. END. PUT CONTROL TRIM(cString) CHR(10). i2 = i2 + 1. END. IF i2 > 0 THEN PUT CONTROL '£' CHR(10). OUTPUT CLOSE. RELEASE Besko. RELEASE bBesze. RUN OPENEXCEL ( INPUT excelAppl, INPUT VDateiName, INPUT '', OUTPUT io ). IF NOT io THEN DO: RUN FEHLER ( INPUT 1040 ). RETURN NO-APPLY. END. Zelle = 'A1'. excelAppl:Range(Zelle):SELECT. excelAppl:Selection:FormulaR1C1 = 'TEXT;' + VDatenDatei. excelAppl:Application:RUN ( 'DateiEinfügen' ). Zelle = 'A1'. excelAppl:Range(Zelle):SELECT. excelAppl:Selection:ColumnWidth = 0.3. DYNAMIC-FUNCTION('RELEASEEXCEL':U, INPUT excelAppl ) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ENTRY_BROWSE bTableWin PROCEDURE ENTRY_BROWSE : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ APPLY 'ENTRY' TO {&BROWSE-NAME} IN FRAME {&FRAME-NAME}. RETURN NO-APPLY. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE EXCEL bTableWin PROCEDURE EXCEL : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE OK AS LOG NO-UNDO. DEFINE VARIABLE excelAppl AS COMPONENT-HANDLE NO-UNDO. DEFINE VARIABLE Vorlage AS CHARACTER NO-UNDO. DEFINE VARIABLE Dokument AS CHARACTER NO-UNDO. DEFINE VARIABLE Daten AS CHARACTER NO-UNDO. DEFINE VARIABLE Zelle AS CHARACTER NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE xWgr AS CHARACTER NO-UNDO. DEFINE VARIABLE xPgr AS CHARACTER NO-UNDO. DEFINE VARIABLE xAgr AS CHARACTER NO-UNDO. DEFINE VARIABLE Stern AS CHARACTER NO-UNDO. DEFINE VARIABLE FwSprcd AS INTEGER NO-UNDO INIT 1. DEFINE VARIABLE iVG AS DECIMAL NO-UNDO. DEFINE VARIABLE iGG AS DECIMAL NO-UNDO. DEFINE VARIABLE minVG AS DECIMAL NO-UNDO. DEFINE VARIABLE minGG AS DECIMAL NO-UNDO. DEFINE VARIABLE maxVG AS DECIMAL NO-UNDO. DEFINE VARIABLE maxGG AS DECIMAL NO-UNDO. DEFINE VARIABLE lWgr AS LOGICAL NO-UNDO INIT TRUE . DEFINE VARIABLE lPgr AS LOGICAL NO-UNDO INIT FALSE. DEFINE VARIABLE lAgr AS LOGICAL NO-UNDO INIT FALSE. DEFINE VARIABLE lVGebinde AS LOGICAL NO-UNDO. DEFINE VARIABLE cAlk AS CHARACTER NO-UNDO. DEFINE BUFFER bArtst FOR Artst. DEFINE BUFFER bArtLager FOR ArtLager. FIND Steuer NO-LOCK WHERE Steuer.Firma = D1Firma. lVGebinde = (IF Steuer.St09 = 1 THEN TRUE ELSE FALSE). RELEASE Steuer. Vorlage = 'Bestellvorschlag.xls'. Dokument = Vorlage + CHR(01) + Vorlage. Daten = 'Bestellvorschlag.csv'. excelAppl = DYNAMIC-FUNCTION('CREATEEXCEL':U) NO-ERROR. IF NOT VALID-HANDLE(excelAppl) THEN DO: RUN FEHLER ( INPUT 1035 ). RETURN NO-APPLY. END. DO WHILE TRUE: RUN CREATEDATEI ( INPUT Dokument ). IF NOT RETURN-VALUE BEGINS 'ERROR-' THEN LEAVE. CASE RETURN-VALUE: WHEN 'ERROR-PARAMETER' THEN DO: RUN FEHLER ( INPUT 1036 ). RETURN NO-APPLY. END. WHEN 'ERROR-LOESCHEN' THEN DO: RUN FEHLER ( INPUT 1037 ). RETURN NO-APPLY. END. WHEN 'ERROR-VORLAGE' THEN DO: RUN FEHLER ( INPUT 1038 ). RETURN NO-APPLY. END. OTHERWISE DO: MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX ERROR. RETURN NO-APPLY. END. END CASE. LEAVE. END. Dokument = RETURN-VALUE. DO WHILE TRUE: RUN CREATEDATEI ( INPUT Daten ). IF NOT RETURN-VALUE BEGINS 'ERROR-' THEN LEAVE. CASE RETURN-VALUE: WHEN 'ERROR-PARAMETER' THEN DO: RUN FEHLER ( INPUT 1036 ). RETURN NO-APPLY. END. WHEN 'ERROR-LOESCHEN' THEN DO: RUN FEHLER ( INPUT 1037 ). RETURN NO-APPLY. END. WHEN 'ERROR-VORLAGE' THEN DO: RUN FEHLER ( INPUT 1038 ). RETURN NO-APPLY. END. OTHERWISE DO: MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX ERROR. RETURN NO-APPLY. END. END CASE. LEAVE. END. Daten = RETURN-VALUE. OUTPUT TO VALUE(Daten). FIND Steuer NO-LOCK USE-INDEX Steuer-k1 WHERE Steuer.Firma = D1Firma NO-ERROR. PUT CONTROL '£' CHR(10) '£' CHR(10) '£' CHR(10) '£' CHR(10) '£Artnr£Bezeichnung£Jahr£ST£Inhalt£KGeb' '£Bestand£Bestellt£Mindest£Mindest£Maximal£Maximal£*' '££Verbrauch££Lager£Rück-£Bestellung' CHR(10). PUT CONTROL '£Inhalt££' 'Alk%'. /* ELSE PUT CONTROL 'Kat'. */ PUT CONTROL '££in cl££££VGeb£GGeb£VGeb£GGeb£*' '£KGeb£VGeb£GGeb£Ort£stände£' CHR(10) '£' CHR(10). FOR EACH tVorschlag, FIRST bArtst USE-INDEX Artst-k1 WHERE bArtst.Firma = D1Firma AND bArtst.Artnr = tVorschlag.Artnr AND bArtst.Inhalt = tVorschlag.Inhalt AND bArtst.Jahr = tVorschlag.Jahr NO-LOCK, FIRST bArtLager NO-LOCK WHERE bArtLager.Firma = D1Firma AND bArtLager.Artnr = tVorschlag.Artnr AND bArtLager.Inhalt = tVorschlag.Inhalt AND bArtLager.Jahr = tVorschlag.Jahr AND bArtLager.Lager = tVorschlag.Lager BREAK BY tVorschlag.Knr BY bArtst.Wg_Grp BY bArtst.Prod_Grp BY bArtst.Art_Grp BY bArtst.Suchbe BY bArtst.Artnr BY bArtst.Inhalt BY bArtst.Jahr : IF FIRST-OF ( tVorschlag.Knr ) THEN DO: FIND Adresse USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = tVorschlag.Knr NO-LOCK NO-ERROR. PUT CONTROL STRING(Adresse.Knr,'999999 ') Adresse.Anzeig_Br CHR(10) '£' CHR(10). END. DO WHILE TRUE: IF FIRST-OF ( bArtst.Wg_Grp ) AND lWgr THEN DO: RUN FIND_WARENGRP ( INPUT bArtst.Wg_Grp, OUTPUT cString ). IF cString <> '?' AND cString <> '' THEN xWgr = ENTRY(2, cString, CHR(01)). ELSE xWgr = FILL('?', 10). PUT CONTROL xWgr CHR(10). END. IF FIRST-OF ( bArtst.Prod_Grp ) AND lPgr THEN DO: RUN FIND_PRODGRP ( INPUT bArtst.Wg_Grp , INPUT bArtst.Prod_Grp, OUTPUT cString ). IF cString <> '?' AND cString <> '' THEN xPgr = ENTRY(2, cString, CHR(01)). ELSE xPgr = FILL('?', 10). PUT CONTROL xPgr CHR(10). END. IF FIRST-OF ( bArtst.Art_Grp ) AND lAgr THEN DO: RUN FIND_ARTIKGRP( INPUT bArtst.Wg_Grp , INPUT bArtst.Prod_Grp, INPUT bArtst.Art_Grp , OUTPUT cString ). IF cString <> '?' AND cString <> '' THEN xAgr = ENTRY(2, cString, CHR(01)). ELSE xAgr = FILL('?', 10). PUT CONTROL xAgr CHR(10). END. LEAVE. END. IF (tVorschlag.Bestand + tVorschlag.Bestellt) <= tVorschlag.Mind_Bestand THEN Stern = '*'. ELSE Stern = ''. IF bArtst.Alk_Gehalt <> 0 THEN cAlk = STRING(bArtst.Alk_Gehalt,">9.99") + '%'. ELSE cAlk = ''. FIND Artbez USE-INDEX Artbez-k1 WHERE Artbez.Firma = bArtst.Firma AND Artbez.Artnr = bArtst.Artnr AND Artbez.Inhalt = bArtst.Inhalt AND Artbez.Jahr = bArtst.Jahr AND Artbez.Sprcd = FwSprcd NO-LOCK NO-ERROR. IF NOT AVAILABLE Artbez THEN DO: FIND FIRST Artbez OF bArtst NO-LOCK NO-ERROR. END. FIND KGebinde USE-INDEX KGebinde-k1 WHERE KGebinde.Firma = bArtst.Firma AND KGebinde.Geb_Cd = bArtst.KGeb_Cd NO-LOCK NO-ERROR. FIND VGebinde USE-INDEX VGebinde-k1 WHERE VGebinde.Firma = bArtst.Firma AND VGebinde.Geb_Cd = bArtst.VGeb_Cd NO-LOCK NO-ERROR. FIND GGebinde USE-INDEX GGebinde-k1 WHERE GGebinde.Firma = bArtst.Firma AND GGebinde.Geb_Cd = bArtst.GGeb_Cd NO-LOCK NO-ERROR. IF tParam.lVerbrauch THEN DO: iVG = tVorschlag.Verbrauch / VGebinde.Inhalt NO-ERROR. iGG = iVG / GGebinde.Inhalt. END. IF NOT lVGebinde THEN DO: minVG = IF VGebinde.Inhalt > 0 THEN bArtLager.Mind_Bestand / VGebinde.Inhalt ELSE 1. maxVG = IF VGebinde.Inhalt > 0 THEN bArtLager.Soll_Bestand / VGebinde.Inhalt ELSE 1. END. ELSE DO: minVG = IF bArtLager.Mind_Bestand > 0 THEN bArtLager.Mind_Bestand ELSE 0. maxVG = IF bArtLager.Soll_Bestand > 0 THEN bArtLager.Soll_Bestand ELSE 0. END. minGG = IF GGebinde.Inhalt > 0 THEN minVG / GGebinde.Inhalt ELSE 0. maxGG = IF GGebinde.Inhalt > 0 THEN maxVG / VGebinde.Inhalt ELSE 0. PUT CONTROL '£' STRING(bArtst.Artnr ,'999999 ') STRING(bArtst.Inhalt ,'9999') '£' ArtBez.Bez1 '£'. IF bArtst.Jahr > 0 THEN PUT CONTROL STRING(bArtst.Jahr,'zzzz') '£'. ELSE DO: PUT CONTROL cAlk '£'. cAlk = ''. END. CASE bArtst.Ausverk: WHEN 0 THEN PUT CONTROL 'Vo£'. WHEN 1 THEN PUT CONTROL 'No£'. WHEN 8 THEN PUT CONTROL 'Be£'. OTHERWISE PUT CONTROL '?£'. END CASE. PUT CONTROL STRING(KGebinde.Inhalt ,'zzzz') '£' KGebinde.KBez '£' STRING(tVorschlag.Bestand ,'->>>>>>>9') '£' STRING(tVorschlag.Bestellt ,'->>>>>') '£' /* STRING(tVorschlag.Mind_Bestand,'->>>>>>') '£' */ STRING(minVG ,'->>>>>>') '£' STRING(minGG ,'-zzz9.9') '£' STRING(maxVG ,'-zzzzzz') '£' STRING(maxGG ,'-zzz9.9') '£' Stern. IF tParam.lVerbrauch THEN DO: PUT CONTROL '£' TRIM(STRING(tVorschlag.Verbrauch,'->>>>>>>>>')) '£'. IF VGebinde.Inhalt > 1 THEN PUT CONTROL TRIM(STRING(iVG,'->>>>>9.99')). PUT CONTROL '£'. IF GGebinde.Inhalt > 1 THEN PUT CONTROL TRIM(STRING(iGG,'->>>>>9.99')). END. ELSE DO: PUT CONTROL '£££'. END. PUT CONTROL '£' tVorschlag.LagerOrt '£' TRIM(STRING(tVorschlag.Rueckstand,'->>>>>>9')) '£' TRIM(STRING(tVorschlag.Bestellung,'->>>>>>9')) CHR(10). IF ArtBez.Bez2 <> '' OR cAlk <> '' THEN DO: PUT CONTROL '££' ArtBez.Bez2 '£' cAlk CHR(10). END. DO WHILE TRUE: IF (LAST-OF ( bArtst.Art_Grp ) AND lAgr ) OR (LAST-OF ( bArtst.Prod_Grp ) AND lPgr ) OR (LAST-OF ( bArtst.Wg_Grp ) AND lWgr ) THEN PUT CONTROL '£' CHR(10). LEAVE. END. IF LAST-OF ( tVorschlag.Knr ) THEN PUT CONTROL '£' CHR(10). END. OUTPUT CLOSE. RUN OPENEXCEL ( INPUT excelAppl, INPUT Dokument, INPUT '', OUTPUT ok ). IF NOT ok THEN DO: RUN FEHLER ( INPUT 1040 ). RETURN NO-APPLY. END. Zelle = 'A1'. excelAppl:Range(Zelle):SELECT. excelAppl:Selection:FormulaR1C1 = 'TEXT;' + Daten. excelAppl:Application:RUN ( 'DateiEinfügen' ). RUN EXCEL_KOPF ( INPUT excelAppl ). Zelle = 'A1'. excelAppl:Range(Zelle):SELECT. excelAppl:Selection:ColumnWidth = 0.3. DYNAMIC-FUNCTION('RELEASEEXCEL':U, INPUT excelAppl ) NO-ERROR. SESSION:SET-WAIT-STATE(''). MESSAGE 'Soll der Bestellvorschlag als Bestellung erfasst werden? ' VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO UPDATE OK. IF NOT OK THEN RETURN. RUN BESTELLUNG_ERFASSEN. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE EXCEL_KOPF bTableWin PROCEDURE EXCEL_KOPF : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER eh AS COMPONENT-HANDLE NO-UNDO. DEFINE VARIABLE Zelle AS CHARACTER NO-UNDO. FIND Steuer USE-INDEX Steuer-k1 WHERE Steuer.Firma = D1Firma NO-LOCK NO-ERROR. Zelle = 'B1'. eh:Range(Zelle):SELECT. eh:SELECTION:VALUE = Steuer.Firma1. Zelle = 'G1'. eh:Range(Zelle):SELECT. eh:SELECTION:VALUE = 'Bestellvorschlag'. Zelle = 'T1'. eh:Range(Zelle):SELECT. eh:SELECTION:VALUE = 'Datum : ' + STRING(TODAY,'99.99.9999'). Zelle = 'B2'. eh:Range(Zelle):SELECT. eh:SELECTION:VALUE = Steuer.Ort. Zelle = 'G2'. eh:Range(Zelle):SELECT. eh:SELECTION:VALUE = ''. Zelle = 'T2'. eh:Range(Zelle):SELECT. eh:SELECTION:VALUE = 'Zeit : ' + STRING(TIME,'HH:MM:SS'). IF NOT tParam.lVerbrauch THEN DO: Zelle = 'O:Q'. eh:COLUMNS(Zelle):Select. eh:Selection:EntireColumn:HIDDEN = TRUE . END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initializeObject bTableWin PROCEDURE initializeObject : { incl/brwinitialize.i } END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE SOLLMINDEST bTableWin PROCEDURE SOLLMINDEST : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE iDiffTage AS INTEGER NO-UNDO. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE BUFFER bBesko FOR Besko. rBesko = DYNAMIC-FUNCTION ('getCurrentRecid':U IN hDaten) NO-ERROR. IF rBesko = ? OR rBesko = 0 THEN RETURN NO-APPLY. FIND bBesko NO-LOCK WHERE RECID(bBesko) = rBesko. EMPTY TEMP-TABLE tParam. CREATE tParam. ASSIGN tParam.iKnr = bBesko.Knr tParam.iBesnr = bBesko.Besnr tParam.dVon = TODAY - 30 tParam.dbis = TODAY tParam.lOK = FALSE tParam.iLager = bBesko.Lager. RELEASE bBesko. lRetVal = DYNAMIC-FUNCTION ('getBeskoParameter':U, Progname, INPUT-OUTPUT htParam ) NO-ERROR. IF tParam.dAktion <> ? THEN DO: iDiffTage = TODAY - tParam.dAktion. /* ASSIGN */ /* tParam.dvon = (IF tParam.dvon <> ? THEN tParam.dvon + iDiffTage ELSE TODAY - 30)*/ /* tParam.dBis = (IF tParam.dbis <> ? THEN tParam.dbis + iDiffTage ELSE TODAY - 30)*/ /* tParam.dLieferdatum = (IF tParam.dLieferdatum <> ? THEN tParam.dbis + iDiffTage ELSE TODAY - 30)*/ . END. RUN 'g-sollmindest-daten.w' ( INPUT-OUTPUT htParam ). IF NOT tParam.lOK THEN RETURN. lRetVal = DYNAMIC-FUNCTION ('setBeskoParameter':U, Progname, INPUT-OUTPUT htParam ) NO-ERROR. RUN SOLLMINDEST_RECHNEN. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE SOLLMINDEST_RECHNEN bTableWin PROCEDURE SOLLMINDEST_RECHNEN : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE iGGeb AS INTEGER NO-UNDO. DEFINE VARIABLE iVGeb AS INTEGER NO-UNDO. DEFINE VARIABLE iKGeb AS INTEGER NO-UNDO. DEFINE VARIABLE lVGebinde AS LOGICAL NO-UNDO. DEFINE VARIABLE iPos AS INTEGER NO-UNDO INIT 0. DEFINE VARIABLE iRest AS INTEGER NO-UNDO. DEFINE VARIABLE nProz AS DECIMAL NO-UNDO. DEFINE BUFFER bSteuer FOR Steuer. FIND FIRST tParam. FIND bSteuer NO-LOCK WHERE bSteuer.Firma = D1Firma. lVGebinde = (IF bSteuer.St09 = 1 THEN TRUE ELSE FALSE ). RELEASE bSteuer. EMPTY TEMP-TABLE tBesze. FOR EACH ArtLief NO-LOCK WHERE ArtLief.Firma = D1Firma AND ArtLief.Knr = tParam.iKnr, FIRST Artst NO-LOCK WHERE Artst.Firma = ArtLief.Firma AND Artst.Artnr = ArtLief.Artnr AND Artst.Inhalt = ArtLief.Inhalt AND Artst.Jahr = ArtLief.Jahr AND Artst.Ausverk < 8 AND Artst.Aktiv AND Artst.Lager AND NOT Artst.Leih_Art : iPos = iPos + 5. CREATE tBesze. ASSIGN tBesze.Firma = D1Firma tBesze.Besnr = tParam.iBesnr tBesze.Pos = iPos tBesze.Artnr = Artst.Artnr tBesze.Inhalt = Artst.Inhalt tBesze.Jahr = Artst.Jahr tBesze.GGeb_Cd = Artst.GGeb_Cd tBesze.VGeb_Cd = Artst.VGeb_Cd tBesze.KGeb_Cd = Artst.KGeb_Cd tBesze.iBestand = Artst.Bestand . END. FOR EACH tBesze: FOR EACH Artbw NO-LOCK WHERE Artbw.Firma = tBesze.Firma AND Artbw.Artnr = tBesze.Artnr AND Artbw.Inhalt = tBesze.Inhalt AND Artbw.Jahr = tBesze.Jahr AND Artbw.Datum >= tParam.dvon AND Artbw.Datum <= tParam.dbis AND Artbw.Tr_Art < 10 AND Artbw.Lag_Buch = TRUE. tBesze.Verbrauch = tBesze.Verbrauch + Artbw.Menge. RELEASE Artbw. END. END. FOR EACH tBesze: IF tBesze.Verbrauch < 1 THEN DO: tBesze.Verbrauch = 0. tBesze.Eingang = 0. NEXT. END. FIND GGebinde NO-LOCK WHERE GGebinde.Firma = tBesze.Firma AND GGebinde.Geb_Cd = tBesze.GGeb_Cd NO-ERROR. iGGeb = (IF AVAILABLE GGebinde THEN GGebinde.Inhalt ELSE 0). FIND VGebinde NO-LOCK WHERE VGebinde.Firma = tBesze.Firma AND VGebinde.Geb_Cd = tBesze.VGeb_Cd NO-ERROR. iVGeb = (IF AVAILABLE VGebinde THEN VGebinde.Inhalt ELSE 0). FIND KGebinde NO-LOCK WHERE KGebinde.Firma = tBesze.Firma AND KGebinde.Geb_Cd = tBesze.KGeb_Cd NO-ERROR. iKGeb = (IF AVAILABLE KGebinde THEN KGebinde.Inhalt ELSE 0). tBesze.KGeb_Me = tBesze.Verbrauch. IF iVGeb > 0 THEN tBesze.VGeb_Me = INTEGER((tBesze.Verbrauch + (tBesze.Verbrauch MOD iVGeb)) / iVGeb). IF iGGeb > 0 THEN DO: iRest = tBesze.VGeb_Me MOD iGGeb. nProz = iRest * 100 / iGGeb. tBesze.GGeb_Me = INTEGER((tBesze.VGeb_Me - (tBesze.VGeb_Me MOD iGGeb)) / iGGeb). IF tParam.nAufrunden > 0 AND nProz >= tParam.nAufrunden THEN tBesze.GGeb_Me + 1. IF tBesze.GGeb_Me > 0 THEN tBesze.VGeb_Me = tBesze.GGeb_Me * iGGeb. END. ASSIGN tBesze.KGeb_Me = (IF tBesze.VGeb_Me > 0 THEN tBesze.VGeb_Me * iVGeb ELSE tBesze.Verbrauch) tBesze.MBest = tBesze.KGeb_Me tBesze.MGeli = INTEGER((IF tParam.nMindProz = 0 THEN 0 ELSE tBesze.VGeb_Me * tParam.nMindProz / 100 * iVGeb)). END. FOR EACH tBesze: FIND ArtLager WHERE ArtLager.Firma = tBesze.Firma AND ArtLager.Artnr = tBesze.Artnr AND ArtLager.Inhalt = tBesze.Inhalt AND ArtLager.Jahr = tBesze.Jahr AND ArtLager.Lager = tBesze.Lager. ASSIGN ArtLager.Mind_Bestand = (IF lVGebinde THEN tBesze.MGeli / iVGeb ELSE tBesze.MGeli) ArtLager.Soll_Bestand = (IF lVGebinde THEN tBesze.MBest / iVGeb ELSE tBesze.MBest). END. RELEASE Besko. RELEASE Besze. RELEASE GGebinde. RELEASE VGebinde. RELEASE KGebinde. MESSAGE 'Berechnung beendet' VIEW-AS ALERT-BOX INFORMATION. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE viewObject bTableWin PROCEDURE viewObject : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE iBesnr AS INTEGER NO-UNDO. DEFINE VARIABLE cRowid AS CHARACTER NO-UNDO. DEFINE BUFFER bBesko FOR Besko. iStatus = DYNAMIC-FUNCTION ('getStatus':U IN hFenster ) NO-ERROR. PUBLISH 'GET_CURRENT_BESKO' ( OUTPUT rBesko, OUTPUT iBesnr ). RUN SUPER. DYNAMIC-FUNCTION ('openQuery':U IN hDaten) NO-ERROR. IF rBesko = ? OR rBesko = 0 THEN RETURN. FIND bBesko WHERE RECID(bBesko) = rBesko. cRowid = STRING (ROWID(bBesko)). DYNAMIC-FUNCTION ('fetchRowIdent':U IN hDaten, cRowid, ?) NO-ERROR. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME /* ************************ Function Implementations ***************** */ &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setZeilenfarbe bTableWin FUNCTION setZeilenfarbe RETURNS LOGICAL ( ipFarbe AS INTEGER ) : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ { incl/brwsetzeilenfarbe.i } END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME