/*------------------------------------------------------------------------ File : Palettenschein.p Purpose : Syntax : Description : Author(s) : walter.riechsteiner Created : Mon May 31 14:11:18 CEST 2021 Notes : ----------------------------------------------------------------------*/ /* This .W file was created with the Progress AppBuilder. */ /*----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ BLOCK-LEVEL ON ERROR UNDO, THROW. DEFINE VARIABLE sAktiv AS LOGICAL NO-UNDO INIT FALSE. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO FORMAT "x(04)". DEFINE VARIABLE Firma AS CHARACTER NO-UNDO FORMAT "x(04)". DEFINE VARIABLE Progname AS CHARACTER NO-UNDO. DEFINE VARIABLE cLogName AS CHARACTER NO-UNDO. DEFINE VARIABLE lBatch AS LOGICAL NO-UNDO INIT TRUE. DEFINE VARIABLE cUser AS CHARACTER NO-UNDO. DEFINE VARIABLE iRuestArt AS INTEGER NO-UNDO. DEFINE VARIABLE cRuester AS CHARACTER NO-UNDO. DEFINE VARIABLE iPlatz AS INTEGER NO-UNDO. DEFINE VARIABLE iAufnr AS INTEGER NO-UNDO. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO. DEFINE VARIABLE iSeite AS INTEGER NO-UNDO. DEFINE VARIABLE iZeile AS INTEGER NO-UNDO. DEFINE VARIABLE dDatum AS DATE NO-UNDO. DEFINE VARIABLE lOpen AS LOGICAL NO-UNDO. DEFINE VARIABLE cZeile AS CHARACTER NO-UNDO. DEFINE VARIABLE cKopf AS CHARACTER NO-UNDO EXTENT 50. DEFINE VARIABLE FormText AS CHARACTER NO-UNDO EXTENT 30. DEFINE VARIABLE cDruckProgramm AS CHARACTER NO-UNDO. DEFINE VARIABLE cDateiName AS CHARACTER NO-UNDO. DEFINE VARIABLE cDrucker AS CHARACTER NO-UNDO. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO. { properties.i } { incl/ttdruckparam.i } DEFINE STREAM out_Stream. DEFINE BUFFER bAufko FOR Aufko . DEFINE BUFFER bAufze FOR Aufze . DEFINE BUFFER bTabel FOR Tabel . DEFINE BUFFER bArtst FOR Artst . DEFINE BUFFER bSchrift FOR Schrift . DEFINE BUFFER bDrucker FOR Drucker . DEFINE BUFFER bSteuer FOR Steuer . DEFINE BUFFER bDebst FOR Debst . DEFINE BUFFER bAdresse FOR Adresse . DEFINE BUFFER bLotLager FOR LotLager . DEFINE BUFFER bHoReLager FOR HoReLager. DEFINE TEMP-TABLE tDrucker NO-UNDO FIELD Drucker AS CHARACTER. DEFINE TEMP-TABLE tSchrift NO-UNDO LIKE Schrift FIELD iPlatz AS INTEGER FIELD Schacht AS INTEGER FIELD Anzahl AS INTEGER FIELD iRecid AS RECID INDEX tSchrift-k1 IS PRIMARY iPlatz Schname Schbild. DEFINE TEMP-TABLE tAufze NO-UNDO LIKE Aufze FIELD Platz AS INTEGER FIELD Lagort AS CHARACTER INDEX tAufze-k1 IS PRIMARY Platz Lagort Artnr. DEFINE TEMP-TABLE zAufze LIKE tAufze. DEFINE TEMP-TABLE tRueck NO-UNDO LIKE tAufze INDEX tRueck-k1 IS PRIMARY Platz Lagort Artnr. DEFINE TEMP-TABLE tTabTexte FIELD cRecArt AS CHARACTER FIELD iZeile AS INTEGER FIELD cFeld1 AS CHARACTER FIELD cFeld2 AS CHARACTER FIELD cFeld3 AS CHARACTER FIELD iFeld1 AS INTEGER FIELD iFeld2 AS INTEGER FIELD iFeld3 AS INTEGER INDEX tTabTexte-k1 IS PRIMARY cRecArt iZeile. /* ******************** Preprocessor Definitions ******************** */ /* ************************ Function Prototypes ********************** */ FUNCTION getLogfileName RETURNS CHARACTER ( ) FORWARD. FUNCTION putStream RETURNS LOGICAL (ipAttrib AS CHARACTER, ipAnzZeilen AS INTEGER, INPUT-OUTPUT ipZeile AS CHARACTER) FORWARD. /* *************************** Main Block *************************** */ DEFINE VARIABLE cPrinters AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE kRecid AS RECID NO-UNDO. DEFINE VARIABLE tRecid AS RECID NO-UNDO. DEFINE VARIABLE cRetValue AS CHARACTER NO-UNDO. DEFINE VARIABLE iCodeI AS INTEGER NO-UNDO INIT -1. DEFINE BUFFER dTabel FOR Tabel. SAktiv = DYNAMIC-FUNCTION('getSuperaktiv':U) NO-ERROR. IF SAktiv = ? THEN SAktiv = FALSE. IF SAktiv THEN DO: AdFirma = DYNAMIC-FUNCTION('getAdMandant':U) NO-ERROR. Firma = DYNAMIC-FUNCTION('getMandant':U) NO-ERROR. Progname = DYNAMIC-FUNCTION('makeProgname':U, INPUT THIS-PROCEDURE ) NO-ERROR. cUser = DYNAMIC-FUNCTION('getBenutzer') NO-ERROR. cLogName = DYNAMIC-FUNCTION('getLogFileName':U) NO-ERROR. lBatch = DYNAMIC-FUNCTION('getBatch':U) NO-ERROR. END. EMPTY TEMP-TABLE tDrucker. EMPTY TEMP-TABLE tSchrift. cPrinters = SESSION:GET-PRINTERS(). DO ix = 1 TO NUM-ENTRIES(cPrinters, ','): CREATE tDrucker. ASSIGN tDrucker.Drucker = ENTRY(ix, cPrinters, ','). END. FIND bSteuer NO-LOCK WHERE bSteuer.Firma = Firma. TABELLE: DO WHILE TRUE: TABTRANS: REPEAT TRANSACTION ON ERROR UNDO, LEAVE: FIND FIRST bTabel NO-LOCK WHERE bTabel.Firma = Firma AND bTabel.RecArt = 'wsPALETT' AND bTabel.CodeI > iCodeI AND bTabel.Bez1 = '' AND bTabel.Int_2 = 2 NO-ERROR. IF NOT AVAILABLE bTabel THEN LEAVE TABELLE. tRecid = RECID(bTabel). iCodeI = bTabel.CodeI. iPlatz = bTabel.Dec_1. iRuestArt = bTabel.Int_3. iAufnr = bTabel.Int_1. cRuester = bTabel.Bez2. FIND bTabel EXCLUSIVE-LOCK WHERE RECID(bTabel) = tRecid NO-WAIT NO-ERROR. IF NOT AVAILABLE bTabel AND LOCKED bTabel THEN DO: RELEASE bTabel. FIND Tabel NO-LOCK WHERE RECID(Tabel) = tRecid NO-ERROR. IF NOT AVAILABLE Tabel THEN NEXT. cMessage = SUBSTITUTE('Tabel LOCKED RecArt &1, CodeI &2, Aufnr &3, Int_2 &4, Drucker &5', Tabel.RecArt, Tabel.CodeI, Tabel.Int_1, Tabel.Int_2, cPrinters). RUN writeLogfile.p ( ProgName, cLogName, cMessage ) NO-ERROR. RELEASE Tabel. LEAVE TABTRANS. END. IF NOT AVAILABLE bTabel THEN LEAVE TABTRANS. bTabel.Bez1 = 'A'. FIND bAufko NO-LOCK WHERE bAufko.Firma = bTabel.Firma AND bAufko.Aufnr = iAufnr NO-ERROR. IF NOT AVAILABLE bAufko THEN DO: DELETE bTabel. RELEASE bTabel. LEAVE TABTRANS. END. kRecid = RECID(bAufko). cRetValue = ''. DO WHILE TRUE: RUN FUELLEN_tAufze. FIND FIRST tAufze WHERE tAufze.Artnr > 0 NO-ERROR. IF NOT AVAILABLE tAufze THEN DO: DELETE bTabel. RELEASE bTabel. LEAVE TABTRANS. END. RUN writeLogfile.p ( ProgName, cLogName, '' ) NO-ERROR. cMessage = SUBSTITUTE('Palettenschein &1 in Batch = &3 mit &2 gestartet', iAufnr, cPrinters, lBatch). RUN writeLogfile.p ( ProgName, cLogName, cMessage ) NO-ERROR. FIND bAufko NO-LOCK WHERE RECID(bAufko) = kRecid. RUN PALETTENSCHEIN. cRetValue = RETURN-VALUE. cMessage = SUBSTITUTE('Palettenschein &1 beendet mit Return-Value = &2', iAufnr, cRetValue). RUN writeLogfile.p ( ProgName, cLogName, cMessage ) NO-ERROR. LEAVE. END. IF cRetValue <> '' THEN DO: bTabel.Bez1 = 'F'. RELEASE bTabel. LEAVE TABTRANS. END. IF AVAILABLE bTabel THEN DO: FIND Aufko EXCLUSIVE-LOCK WHERE RECID(Aufko) = kRecid NO-WAIT NO-ERROR. IF AVAILABLE Aufko THEN Aufko.Gedruckt = TRUE. RELEASE Aufko. DELETE bTabel. RELEASE bTabel. END. LEAVE. END. END. /* ********************** Internal Procedures *********************** */ PROCEDURE BAR-CODE-39 : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipWert AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER ipCodeArt AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER opBarCode AS CHARACTER NO-UNDO. DEFINE VARIABLE clr AS LOG INIT TRUE NO-UNDO. DEFINE VARIABLE wk AS CHARACTER NO-UNDO. DEFINE VARIABLE drw AS CHARACTER NO-UNDO. DEFINE VARIABLE cDir AS CHARACTER NO-UNDO. DEFINE VARIABLE k AS CHARACTER NO-UNDO. DEFINE VARIABLE att AS CHARACTER NO-UNDO. DEFINE VARIABLE kod AS CHARACTER NO-UNDO INIT "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ.Ø *$/+%". att = "100100001001100001101100000000110001100110000001110000000100101100100100" + "001100100000110100100001001001001001101001000000011001100011000001011000" + "000001101100001100001001100000011100100000011001000011101000010000010011" + "100010010001010010000000111100000110001000110000010110110000001011000001" + "111000000010010001110010000011010000010000101110000100011000100010010100" + "010101000010100010010001010000101010". DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE j AS INTEGER NO-UNDO. DEFINE VARIABLE l AS INTEGER NO-UNDO. DEFINE VARIABLE brd AS INTEGER NO-UNDO. DEFINE VARIABLE jst AS INTEGER NO-UNDO. ASSIGN i = (IF SUBSTRING (ipCodeArt, 1, 1) = "P" THEN 1 ELSE 2) opBarCode = "~E&f0S~E*c100G" drw = SUBSTRING("ab" , i, 1) + SUBSTRING(ipCodeArt, 6) + SUBSTRING("ba" , i, 1) + "P" cDir = SUBSTRING("XY", i, 1) k = "*" + ipWert + "*" . DO i = 1 TO LENGTH(k): ASSIGN j = INDEX(kod, SUBSTRING (k, i, 1)) * 9 - 8 wk = SUBSTRING (att, j, 9) + "0" . DO l = 1 TO 10: ASSIGN brd = IF SUBSTRING(wk,l,1) = "0" THEN 2 ELSE 4 opBarCode = opBarCode + (IF clr THEN "~E*c" + SUBSTRING (ipCodeArt, brd, 2) + drw ELSE "~E*p+" + STRING(INTEGER(SUBSTRING(ipCodeArt, brd, 2)) + jst) + cDir) jst = INTEGER (SUBSTRING (ipCodeArt, brd, 2)) clr = NOT clr. END. /* of looping 1 to 10 */ END. /* of going through string 'k' */ ASSIGN opBarCode = opBarCode + "~E&f1S" wk = "". END PROCEDURE. PROCEDURE DRUCKAUSGABE: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE iAnzKopien AS INTEGER NO-UNDO. DEFINE VARIABLE sRecid AS RECID NO-UNDO. DEFINE VARIABLE iSize AS INTEGER NO-UNDO. DEFINE VARIABLE iKopie AS INTEGER NO-UNDO. DEFINE VARIABLE iSchacht AS INTEGER NO-UNDO. DEFINE VARIABLE cString AS CHARACTER INIT '' NO-UNDO. FIND FIRST tSchrift NO-LOCK WHERE tSchrift.iPlatz = iPlatz NO-ERROR. IF NOT AVAILABLE tSchrift THEN FIND FIRST tSchrift. sRecid = tSchrift.iRecid. iAnzKopien = tSchrift.Anzahl. iSchacht = tSchrift.Schacht. RUN writeLogfile.p ( ProgName, cLogName, SUBSTITUTE('Druckausgabe -> Platz: &1, Drucker: &2, Schrift: &3', tSchrift.iPlatz, tSchrift.Schname, tSchrift.Schbild) ) NO-ERROR. IF iAnzKopien = 0 THEN iAnzKopien = 1. DO iKopie = 1 TO iAnzKopien: iSize = DYNAMIC-FUNCTION('putDateiToPrinter':U, cDateiName , sRecid , tSchrift.Schacht , 240 , /* Blockgrösse */ 'ibm850' , iAnzKopien ). /* Anzahl Kopien */ IF iSize = 0 THEN DO: cString = 'Druckvorgang gescheitert !!! '. RUN writeLogfile.p ( ProgName, cLogName, cString ) NO-ERROR. IF lBatch THEN RETURN ERROR. RETURN cString. END. IF iKopie < iAnzKopien THEN DO: ETIME(TRUE). DO WHILE ETIME(FALSE) < 200: END. END. END. OS-DELETE VALUE(cDateiName) NO-ERROR. END PROCEDURE. PROCEDURE FUELLEN_tAufze: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE minPos AS INTEGER NO-UNDO. DEFINE VARIABLE maxPos AS INTEGER NO-UNDO. DEFINE VARIABLE jPlatz AS INTEGER NO-UNDO. DEFINE VARIABLE cLagOrt AS CHARACTER NO-UNDO. DEFINE VARIABLE lArtikel AS LOG NO-UNDO. EMPTY TEMP-TABLE tAufze. EMPTY TEMP-TABLE tRueck. ASSIGN minPos = 0 maxPos = 9999. /* -------------------------------------- */ /* Kommentar zu Beginn eines Auftrages */ /* -------------------------------------- */ lArtikel = FALSE. FOR EACH Aufze NO-LOCK USE-INDEX Aufze-k1 WHERE Aufze.Firma = Firma AND Aufze.Aufnr = bAufko.Aufnr AND Aufze.Pos > minPos: IF Aufze.Artnr > 0 THEN DO: lArtikel = TRUE. LEAVE. END. minPos = Aufze.Pos. CREATE tAufze. BUFFER-COPY Aufze TO tAufze ASSIGN tAufze.Platz = iPlatz tAufze.LagOrt = ''. END. /* ---------------------------------------------- */ /* Kommentar am Ende eines Auftrages */ /* ebenfalls an den Anfang des Auftrages schieben */ /* ---------------------------------------------- */ IF lArtikel THEN DO: FOR EACH Aufze NO-LOCK WHERE Aufze.Firma = Firma AND Aufze.Aufnr = bAufko.Aufnr BY Aufze.Pos DESCENDING: IF Aufze.Artnr > 0 THEN LEAVE. maxPos = Aufze.Pos. CREATE tAufze. BUFFER-COPY Aufze TO tAufze ASSIGN tAufze.Platz = iPlatz tAufze.LagOrt = 'zz'. END. END. /* ------------------------------------------------------ */ /* Artikelzeilen dem Ruestsektor und Lagerplatz zuteilen */ /* ------------------------------------------------------ */ FOR EACH Aufze NO-LOCK WHERE Aufze.Firma = Firma AND Aufze.Aufnr = bAufko.Aufnr AND Aufze.Pos > minPos AND Aufze.Pos < MaxPos: IF Aufze.Artnr > 0 THEN DO: FIND FIRST RuestAuf NO-LOCK WHERE RuestAuf.Firma = Aufze.Firma AND RuestAuf.Aufnr = Aufze.Aufnr AND RuestAuf.Pos = Aufze.Pos NO-ERROR. IF NOT AVAILABLE RuestAuf THEN NEXT. IF RuestAuf.Platz <> iPlatz THEN NEXT. END. CREATE tAufze. BUFFER-COPY Aufze TO tAufze ASSIGN tAufze.Platz = RuestAuf.Platz tAufze.LagOrt = RuestAuf.Lagerort. IF tAufze.MRuek > 0 THEN DO: CREATE tRueck. BUFFER-COPY tAufze TO tRueck. END. END. END PROCEDURE. PROCEDURE GET_DRUCKERDATEN : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipPlatz AS INTEGER NO-UNDO. DEFINE INPUT PARAMETER ipDrucker AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER ipSchrift AS CHARACTER NO-UNDO. DEFINE VARIABLE lJa AS LOG INIT TRUE NO-UNDO. DEFINE VARIABLE lError AS LOG INIT TRUE NO-UNDO. DO WHILE TRUE: FIND FIRST tDrucker NO-LOCK WHERE tDrucker.Drucker = ipDrucker NO-ERROR. IF AVAILABLE tDrucker THEN LEAVE. cMessage = SUBSTITUTE('Der gewünschte Drucker &1 ist nicht verfügbar ', ipDrucker). RETURN cMessage. END. RUN CHECKPRINTER ( ipDrucker, OUTPUT lError ) NO-ERROR. IF lError THEN RETURN SUBSTITUTE('Drucker &1 konnte nicht angewählt werden', ipDrucker). DO WHILE TRUE: FIND FIRST Schrift NO-LOCK WHERE Schrift.SchName = ipDrucker AND Schrift.SchBild = ipSchrift NO-ERROR. IF AVAILABLE Schrift THEN LEAVE. FIND FIRST Schrift NO-LOCK WHERE Schrift.SchName = SESSION:PRINTER-NAME AND Schrift.SchBild = ipSchrift NO-ERROR. IF AVAILABLE Schrift THEN LEAVE. cMessage = 'Es konnte keine Schrift für den gewählten Drucker ermittelt werden'. RETURN cMessage. END. CREATE tSchrift. BUFFER-COPY Schrift TO tSchrift ASSIGN tSchrift.iPlatz = ipPlatz tSchrift.SchName = SESSION:PRINTER-NAME tSchrift.iRecid = RECID(Schrift). FIND bDrucker NO-LOCK WHERE bDrucker.Drucker = tSchrift.SchDru. RETURN ''. END PROCEDURE. PROCEDURE LIBILD: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipDokArt AS CHARACTER NO-UNDO. DEFINE VARIABLE cProgName AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. cProgName = bSteuer.Fwc10 + ":" + ipDokArt. FormText = "". FOR EACH LiBild USE-INDEX LiBild-k1 WHERE LiBild.Sprcd = 1 AND LiBild.Prog = cProgName AND LiBild.Tenr > 0 NO-LOCK ix = 1 TO 40: FormText[ix] = LiBild.Litext. END. END PROCEDURE. PROCEDURE NEUE_SEITE : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cLeerZeile AS CHARACTER NO-UNDO. IF iSeite > 0 THEN DO: PUT STREAM out_Stream CONTROL CHR(12). END. FIND FIRST tSchrift NO-LOCK WHERE tSchrift.iPlatz = iPlatz. cLeerZeile = FILL(CHR(10), tSchrift.Schzzbeg). IF cLeerZeile <> '' THEN PUT STREAM out_Stream cLeerZeile. iZeile = tSchrift.Schzzbeg. iSeite = iSeite + 1. END PROCEDURE. PROCEDURE PALETTENSCHEIN: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cDokArt AS CHARACTER NO-UNDO. DEFINE VARIABLE hbAufko AS HANDLE NO-UNDO. DEFINE VARIABLE htTabTexte AS HANDLE NO-UNDO. DEFINE VARIABLE nFakBetr AS DECIMAL NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE i2 AS INTEGER NO-UNDO. DEFINE VARIABLE xPlatz AS INTEGER NO-UNDO. DEFINE VARIABLE nTotale AS DECIMAL EXTENT 15 NO-UNDO. DEFINE VARIABLE cRetVal AS CHARACTER NO-UNDO. FIND FIRST tAufze NO-LOCK WHERE tAufze.Artnr > 0 NO-ERROR. IF NOT AVAILABLE tAufze THEN RETURN ''. cRetVal = DYNAMIC-FUNCTION('calculateAuftragsTotal':U, tAufze.Firma, tAufze.Aufnr, OUTPUT nTotale) NO-ERROR. cMessage = SUBSTITUTE('Palettenschein &1 Platz &2 gestartet', tAufze.Aufnr, iPlatz). RUN writeLogFile.p ( Progname, cLogName, cMessage) NO-ERROR. cDokArt = 'PALETTEN'. iSeite = 0. iZeile = 0. cDrucker = ''. lOpen = FALSE. cZeile = ''. dDatum = bAufko.Lief_Datum. RUN LIBILD ( cDokArt ). hbAufko = BUFFER bAufko:HANDLE. htTabTexte = TEMP-TABLE tTabTexte:DEFAULT-BUFFER-HANDLE. RUN CREATE_TABTEXTE ( INPUT hbAufko, INPUT-OUTPUT htTabTexte ). EMPTY TEMP-TABLE tSchrift. FOR EACH RuestDaten NO-LOCK WHERE RuestDaten.Firma = bAufko.Firma AND RuestDaten.RuestArt = iRuestArt AND RuestDaten.Platz > 0 AND Ruestdaten.PA_Doku = TRUE: xPlatz = RuestDaten.Platz. RUN GET_DRUCKERDATEN ( xPlatz, RuestDaten.PA_Drucker, RuestDaten.PA_Schrift ). IF ERROR-STATUS:ERROR THEN RETURN 'ERROR'. FIND FIRST tSchrift WHERE tSchrift.iPlatz = xPlatz. ASSIGN tSchrift.Schzztot = RuestDaten.PA_TotZZ tSchrift.Schzzbeg = RuestDaten.PA_KopfZZ tSchrift.Schzzend = RuestDaten.PA_FussZZ tSchrift.Schacht = RuestDaten.PA_Schacht tSchrift.Anzahl = iAnzahl. END. FIND FIRST tSchrift NO-LOCK WHERE tSchrift.iPlatz = iPlatz. IF tSchrift.Schzzbeg = 0 THEN tSchrift.Schzzbeg = 1. IF tSchrift.Schzzend = 0 THEN tSchrift.Schzzend = 3. IF tSchrift.Schzztot = 0 THEN tSchrift.Schzztot = 66. FIND bDrucker NO-LOCK WHERE bDrucker.Drucker = tSchrift.SchDru. FIND bAdresse NO-LOCK USE-INDEX Adresse-k1 WHERE bAdresse.Firma = AdFirma AND bAdresse.Knr = bAufko.Knr NO-ERROR. EMPTY TEMP-TABLE zAufze. CREATE zAufze. FOR EACH tAufze NO-LOCK WHERE tAufze.Platz = iPlatz BREAK BY tAufze.Platz BY tAufze.Lagort BY tAufze.Pos : DO WHILE TRUE: IF NOT FIRST-OF ( tAufze.Platz ) THEN LEAVE. cDrucker = tSchrift.Schname. cDateiName = SESSION:TEMP-DIR + 'PalettPapier' + STRING(TIME,'999999') + STRING(RANDOM(1, 999999),'999999') + '.txt'. OUTPUT STREAM out_Stream TO VALUE(cDateiName) NO-MAP NO-CONVERT. lOpen = TRUE. LEAVE. END. IF iSeite = 0 THEN RUN PALETTENSCHEIN_KOPF ( iPlatz ). IF (tSchrift.Schzztot - iZeile - 2) <= tSchrift.Schzzend THEN DO: RUN PALETTENSCHEIN_KOPF ( iPlatz ). END. IF tAufze.MGeli <> 0 THEN DO: FIND FIRST zAufze. BUFFER-COPY tAufze TO zAufze. RUN PALETTENSCHEIN_ARTIKELZEILE. END. IF NOT LAST-OF ( tAufze.Platz ) THEN NEXT. cZeile = FILL('=', 100). DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. DO WHILE TRUE: FIND FIRST tRueck NO-LOCK WHERE tRueck.Platz = iPlatz NO-ERROR. IF NOT AVAILABLE tRueck THEN LEAVE. IF NOT lOpen THEN DO: cDrucker = tSchrift.Schname. cDateiName = SESSION:TEMP-DIR + 'PalettPapier' + STRING(TIME,'999999') + STRING(RANDOM(1, 999999),'999999') + '.txt'. OUTPUT STREAM out_Stream TO VALUE(cDateiName) NO-MAP NO-CONVERT. lOpen = TRUE. RUN PALETTENSCHEIN_KOPF ( iPlatz ). END. ELSE DO: DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. FOR EACH tRueck NO-LOCK WHERE tRueck.Platz = iPlatz BREAK BY tRueck.Platz BY tRueck.Lagort BY tRueck.Pos : IF (tSchrift.Schzztot - iZeile - 6) <= tSchrift.Schzzend THEN DO: RUN PALETTENSCHEIN_KOPF ( iPlatz ). END. IF FIRST-OF ( tRueck.Platz ) THEN DO: cZeile = FILL('=', 100). SUBSTRING(cZeile,30) = ' Rückstände/Teillieferungen '. DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. RUN PALETTENSCHEIN_RUECKSTAND ( RECID(tRueck) ). END. DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. LEAVE. END. IF lOpen THEN DO: SUBSTRING(cZeile,008) = 'Gerüstet durch : ' + cRuester. DYNAMIC-FUNCTION('putStream':U, 'N', 3, INPUT-OUTPUT cZeile) NO-ERROR. END. DO WHILE TRUE: IF NOT lOpen THEN LEAVE. FIND FIRST RuestAuf NO-LOCK WHERE RuestAuf.Firma = Firma AND RuestAuf.Aufnr = bAufko.Aufnr AND RuestAuf.Platz <> iPlatz NO-ERROR. IF NOT AVAILABLE RuestAuf THEN LEAVE. SUBSTRING(cZeile,10) = 'Weitere Rüstplätze'. DYNAMIC-FUNCTION('putStream':U, 'F', 1, INPUT-OUTPUT cZeile) NO-ERROR. FOR EACH RuestAuf NO-LOCK WHERE RuestAuf.Firma = Firma AND RuestAuf.Aufnr = bAufko.Aufnr AND RuestAuf.Platz <> iPlatz BREAK BY RuestAuf.Platz: IF NOT FIRST-OF ( RuestAuf.Platz ) THEN NEXT. FIND RuestPlatz NO-LOCK WHERE RuestPlatz.Firma = RuestAuf.Firma AND RuestPlatz.RuestArt = iRuestArt AND RuestPlatz.Platz = RuestAuf.Platz NO-ERROR. IF NOT AVAILABLE RuestPlatz THEN NEXT. SUBSTRING(cZeile,12) = '- ' + RuestPlatz.Bezeichnung. DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. LEAVE. END. IF lOpen THEN DO: OUTPUT STREAM out_Stream CLOSE. lOpen = FALSE. RUN DRUCKAUSGABE NO-ERROR. IF ERROR-STATUS:ERROR THEN RETURN 'ERROR'. END. FIND FIRST tAufze NO-LOCK NO-ERROR. cMessage = SUBSTITUTE('Palettenschein &1 Platz &2 beendet', tAufze.Aufnr, iPlatz). RUN writeLogFile.p ( ProgName, cLogName, cMessage ) NO-ERROR. RETURN ''. END PROCEDURE. PROCEDURE PALETTENSCHEIN_ARTIKELZEILE: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cBarCode AS CHARACTER NO-UNDO. DEFINE VARIABLE oBarCode AS CHARACTER NO-UNDO. /* DEF VAR cCodeArt AS CHAR INIT 'P0205075' NO-UNDO. */ DEFINE VARIABLE cCodeArt AS CHARACTER INIT 'P0205080' NO-UNDO. FIND FIRST zAufze NO-LOCK. PUT STREAM Out_Stream CONTROL bDrucker.Dru15cpi. DO WHILE zAufze.Artnr = 0: SUBSTRING(cZeile,036) = STRING(zAufze.Bez1,"x(30)"). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. IF zAufze.Bez2 <> '' THEN DO: SUBSTRING(cZeile,036) = STRING(zAufze.Bez2,"x(30)"). DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. RETURN. END. FIND Artst NO-LOCK OF zAufze. FIND VGebinde WHERE VGebinde.Firma = zAufze.Firma AND VGebinde.Geb_Cd = zAufze.VGeb_Cd NO-ERROR. FIND KGebinde WHERE KGebinde.Firma = zAufze.Firma AND KGebinde.Geb_Cd = zAufze.KGeb_Cd NO-ERROR. SUBSTRING(cZeile,001) = STRING(KGebinde.KBez,"x(10)"). IF zAufze.VGeb_Me <> 0 THEN DO: SUBSTRING(cZeile,012) = STRING(zAufze.VGeb_Me,'->>>') + 'x ' + VGebinde.KBez. END. SUBSTRING(cZeile,028) = STRING(zAufze.MGeli ,"->>>>9"). SUBSTRING(cZeile,036) = STRING(zAufze.Bez1 ,"x(30)"). IF zAufze.Alk_Gehalt <> 0 THEN SUBSTRING(cZeile,068) = STRING(zAufze.Alk_Gehalt,"zz9.9%"). IF zAufze.Jahr > 9 THEN SUBSTRING(cZeile,075) = STRING(zAufze.Jahr,"9999"). SUBSTRING(cZeile,081) = STRING(zAufze.Artnr ,"999999"). SUBSTRING(cZeile,089) = STRING(zAufze.LagOrt,'x(08)'). cZeile = bDrucker.Drufettb + SUBSTRING(cZeile,001,027) + bDrucker.Drufette + SUBSTRING(cZeile,028,061) + bDrucker.Drufettb + SUBSTRING(cZeile,089,008) + bDrucker.Drufette + SUBSTRING(cZeile,097). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. IF zAufze.Bez2 <> '' THEN DO: SUBSTRING(cZeile,036) = STRING(zAufze.Bez2,"x(30)"). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END PROCEDURE. PROCEDURE PALETTENSCHEIN_KOPF: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipPlatz AS INTEGER NO-UNDO. DEFINE VARIABLE cAufnr AS CHARACTER NO-UNDO. DEFINE VARIABLE oBarCode 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 cString AS CHARACTER NO-UNDO. DEFINE VARIABLE cLeerZeile AS CHARACTER NO-UNDO. DEFINE VARIABLE cFahrer AS CHARACTER NO-UNDO. /* DEF VAR cCodeArt AS CHAR INIT 'P0205075' NO-UNDO. */ /* P = Portrait */ /* L = Landscape */ DEFINE VARIABLE cCodeArt AS CHARACTER INIT 'P0210200' NO-UNDO. RUN NEUE_SEITE. PUT STREAM out_Stream CONTROL bDrucker.Dru15cpi. PUT STREAM out_Stream CONTROL CHR(27) '&k2G'. cAufnr = STRING(bAufko.Aufnr,'9999999') + '.' + TRIM(STRING(ipPlatz,'>9')). RUN BAR-CODE-39 ( INPUT cAufnr , INPUT cCodeArt, OUTPUT oBarCode ). oBarCode = CHR(027) + "*p" + "100y" + "100X" + oBarCode + CHR(027) + "*p" + "405y" + "260X" + bDrucker.Drufettb + bDrucker.Dru10cpi + bDrucker.Drufettb + cAufnr + bDrucker.Drufette + bDrucker.Dru15cpi + bDrucker.Drufette + CHR(027) + "*p" + "0y" + "0X". PUT STREAM out_Stream CONTROL oBarCode. FIND FIRST tSchrift NO-LOCK WHERE tSchrift.iPlatz = iPlatz. IF tSchrift.Schzzbeg = 0 THEN tSchrift.Schzzbeg = 1. cLeerZeile = FILL(CHR(10), tSchrift.Schzzbeg). IF cLeerZeile <> '' THEN PUT STREAM out_Stream cLeerZeile. iZeile = tSchrift.Schzzbeg. IF bAufko.Adresse[05] <> '' THEN DO: DO ix = 1 TO 5: SUBSTRING(cZeile,066) = bAufko.Adresse[ix]. IF ix = 5 THEN DO: DYNAMIC-FUNCTION('putStream':U, 'F', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. ELSE DO: DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. END. DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. ELSE DO: DO ix = 6 TO 12: SUBSTRING(cZeile,066) = bAdresse.Anschrift[ix]. IF ix = 11 THEN DO: DYNAMIC-FUNCTION('putStream':U, 'F', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. ELSE DO: DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. END. END. IF bAufko.Auf_Tot >= 0 THEN SUBSTRING(cZeile,008) = SUBSTRING(FormText[02],01,20). ELSE SUBSTRING(cZeile,008) = SUBSTRING(FormText[02],21,20). cZeile = bDrucker.Dru10cpi + SUBSTRING(cZeile,001,30) + bDrucker.Dru15cpi. DYNAMIC-FUNCTION('putStream':U, 'F', 1, INPUT-OUTPUT cZeile) NO-ERROR. SUBSTRING(cZeile,066) = TRIM(SUBSTRING(FormText[07],01,20)) + " " + STRING(dDatum,"99.99.9999"). DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. IF iSeite = 1 THEN DO: FIND FIRST tTabtexte NO-LOCK WHERE tTabTexte.cRecArt = 'ABLAD' NO-ERROR. IF AVAILABLE tTabTexte THEN SUBSTRING(cZeile,008) = tTabTexte.cFeld3. SUBSTRING(cZeile,066) = TRIM(SUBSTRING(FormText[08],21,20)) + STRING(bAufko.Gewicht,"zz,zz9.999-"). cZeile = TRIM(bDrucker.Drufettb) + SUBSTRING(cZeile,001,65) + TRIM(bDrucker.Drufette) + SUBSTRING(cZeile,066). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. SUBSTRING(cZeile,008) = TRIM(SUBSTRING(FormText[07],41,20)) + " " + STRING(bAufko.Auf_Datum,"99.99.9999"). SUBSTRING(cZeile,038) = TRIM(SUBSTRING(FormText[08],01,20)) + STRING(bAufko.Knr,"z999999"). SUBSTRING(cZeile,066) = TRIM(SUBSTRING(FormText[08],41,20)) + " " + bAdresse.Tel-1. DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. SUBSTRING(cZeile,008) = TRIM(SUBSTRING(FormText[09],21,20)) + " " + STRING(bAufko.Lief_Datum,"99.99.9999"). SUBSTRING(cZeile,038) = TRIM(SUBSTRING(FormText[09],01,20)) + " ". /* Lieferart */ DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. SUBSTRING(cZeile,008) = TRIM(SUBSTRING(FormText[07],21,20)) + " " + STRING(bAufko.U_Ref,'x(20)'). DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. SUBSTRING(cZeile,001) = TRIM(SUBSTRING(FormText[03],01,70)). SUBSTRING(cZeile,071) = TRIM(SUBSTRING(FormText[04],01,70)). DYNAMIC-FUNCTION('putStream':U, 'F', 2, INPUT-OUTPUT cZeile) NO-ERROR. IF iSeite = 1 AND bAufko.Abh_Text <> '' THEN DO: cString = bAufko.Abh_Text. i2 = 0. DO i1 = 1 TO NUM-ENTRIES(cString, CHR(10)): SUBSTRING(cZeile,008) = ENTRY(i1, cString, CHR(10)). DYNAMIC-FUNCTION('putStream':U, 'F', 1, INPUT-OUTPUT cZeile) NO-ERROR. i2 = i2 + 1. END. IF i2 > 0 THEN DO: DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. END. IF iSeite = 1 THEN DO: DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. RUN FIND_FAHRER ( bAufko.Fahrer, OUTPUT cString ). IF cString <> '' THEN cFahrer = ENTRY(2, cString, CHR(01)) + ' ' + ENTRY(3, cString, CHR(01)). i1 = (80 - LENGTH(cFahrer)) / 2. SUBSTRING(cZeile,i1) = CHR(27) + "(s6H" + cFahrer + bDrucker.Dru15cpi. DYNAMIC-FUNCTION('putStream':U, 'F', 2, INPUT-OUTPUT cZeile) NO-ERROR. FIND FIRST RuestPlatz NO-LOCK WHERE RuestPlatz.Firma = bAufko.Firma AND RuestPlatz.RuestArt = iRuestArt AND RuestPlatz.Platz = ipPlatz. i1 = (98 - LENGTH(RuestPlatz.Bezeichnung)) / 2. cZeile = FILL('=', i1) + ' ' + RuestPlatz.Bezeichnung + ' ' + FILL('=', i1). DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. DO WHILE iSeite > 1: DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. LEAVE. END. END PROCEDURE. PROCEDURE PALETTENSCHEIN_RUECKSTAND: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipRecid AS RECID NO-UNDO. DEFINE VARIABLE cBarCode AS CHARACTER NO-UNDO. DEFINE VARIABLE oBarCode AS CHARACTER NO-UNDO. /* DEF VAR cCodeArt AS CHAR INIT 'P0205075' NO-UNDO. */ DEFINE VARIABLE cCodeArt AS CHARACTER INIT 'P0205080' NO-UNDO. FIND tRueck WHERE RECID(tRueck) = ipRecid NO-LOCK. PUT STREAM Out_Stream CONTROL bDrucker.Dru15cpi. DO WHILE tRueck.Artnr = 0: SUBSTRING(cZeile,036) = STRING(tRueck.Bez1,"x(30)"). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. IF tRueck.Bez2 <> '' THEN DO: SUBSTRING(cZeile,036) = STRING(tRueck.Bez2,"x(30)"). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. END. RETURN. END. FIND Artst NO-LOCK OF tRueck. FIND VGebinde NO-LOCK WHERE VGebinde.Firma = tRueck.Firma AND VGebinde.Geb_Cd = tRueck.VGeb_Cd NO-ERROR. FIND KGebinde NO-LOCK WHERE KGebinde.Firma = tRueck.Firma AND KGebinde.Geb_Cd = tRueck.KGeb_Cd NO-ERROR. SUBSTRING(cZeile,001) = STRING(KGebinde.KBez,"x(10)"). IF tRueck.VGeb_Ru <> 0 AND tRueck.VGeb_Me <> tRueck.VGeb_Be THEN DO: SUBSTRING(cZeile,012) = STRING(tRueck.VGeb_Ru,'->>>') + 'x ' + VGebinde.KBez. END. SUBSTRING(cZeile,028) = STRING(tRueck.MRuek ,"->>>>9"). SUBSTRING(cZeile,036) = STRING(tRueck.Bez1 ,"x(30)"). IF tRueck.Alk_Gehalt <> 0 THEN SUBSTRING(cZeile,068) = STRING(tRueck.Alk_Gehalt,"zz9.9%"). IF tRueck.Jahr > 9 THEN SUBSTRING(cZeile,075) = STRING(tRueck.Jahr,"9999"). SUBSTRING(cZeile,081) = STRING(tRueck.Artnr ,"999999"). SUBSTRING(cZeile,089) = STRING(tRueck.LagOrt,'x(08)'). cZeile = bDrucker.Drufettb + SUBSTRING(cZeile,001,027) + bDrucker.Drufette + SUBSTRING(cZeile,028,061) + bDrucker.Drufettb + SUBSTRING(cZeile,089,008) + bDrucker.Drufette + SUBSTRING(cZeile,097). DYNAMIC-FUNCTION('putStream':U, 'N', 1, INPUT-OUTPUT cZeile) NO-ERROR. IF tRueck.Bez2 <> '' THEN DO: SUBSTRING(cZeile,036) = STRING(tRueck.Bez2,"x(30)"). DYNAMIC-FUNCTION('putStream':U, 'N', 2, INPUT-OUTPUT cZeile) NO-ERROR. END. END PROCEDURE. /* ************************ Function Implementations ***************** */ FUNCTION getLogfileName RETURNS CHARACTER ( /* parameter-definitions */ ) : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cPath AS CHARACTER NO-UNDO. DEFINE VARIABLE cProg AS CHARACTER NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. cPath = DYNAMIC-FUNCTION ('getLogFilePfad':U) NO-ERROR. cProg = REPLACE(Progname, '\', '/'). ii = R-INDEX(cProg, '/'). IF ii > 0 THEN cProg = SUBSTRING(cProg, ii + 1). cPath = cPath + cProg + '_' + REPLACE(STRING(TODAY,'99.99.9999'), '.', '') + '.Log'. RETURN cPath. END FUNCTION. FUNCTION putStream RETURNS LOGICAL ( ipAttrib AS CHARACTER, ipAnzZeilen AS INTEGER, INPUT-OUTPUT ipZeile AS CHARACTER ) : /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cLF AS CHARACTER NO-UNDO. cLF = FILL(CHR(10), ipAnzZeilen). CASE ipAttrib: WHEN 'N' THEN PUT STREAM out_Stream CONTROL ipZeile. WHEN 'F' THEN PUT STREAM out_Stream CONTROL bDrucker.Drufettb ipZeile bDrucker.Drufette. WHEN 'U' THEN PUT STREAM out_Stream CONTROL bDrucker.Druunterb ipZeile bDrucker.Druuntere. END CASE. PUT STREAM out_Stream CONTROL cLF. iZeile = iZeile + ipAnzZeilen. ipZeile = ''. RETURN TRUE. END FUNCTION.