&ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12 &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure /*------------------------------------------------------------------------ File : Purpose : Syntax : Description : Author(s) : Created : Notes : ----------------------------------------------------------------------*/ /* This .W file was created with the Progress AppBuilder. */ /*----------------------------------------------------------------------*/ /* *************************** Definitions ************************** */ DEFINE INPUT PARAMETER iphParam AS HANDLE NO-UNDO. DEFINE OUTPUT PARAMETER opcResult AS CHARACTER NO-UNDO. DEFINE VARIABLE iSeite AS INTEGER NO-UNDO. DEFINE VARIABLE iAnzDok AS INTEGER NO-UNDO. DEFINE VARIABLE iLauf AS INTEGER NO-UNDO. DEFINE VARIABLE lFirst AS LOG INIT FALSE NO-UNDO. DEFINE VARIABLE lLast AS LOG INIT FALSE NO-UNDO. DEFINE VARIABLE lPreis AS LOG NO-UNDO. DEFINE VARIABLE cFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE AdFirma AS CHARACTER NO-UNDO. DEFINE VARIABLE nFakBetr AS DECIMAL NO-UNDO. DEFINE VARIABLE dFakDatum AS DATE NO-UNDO. DEFINE VARIABLE iFaknr AS INTEGER NO-UNDO. DEFINE VARIABLE iSprcd AS INTEGER NO-UNDO. DEFINE VARIABLE nTotale AS DECIMAL EXTENT 15 NO-UNDO. DEFINE VARIABLE cFormtext AS CHARACTER EXTENT 30 NO-UNDO. DEFINE VARIABLE cRabText AS CHARACTER NO-UNDO. DEFINE VARIABLE cZusText AS CHARACTER NO-UNDO. DEFINE VARIABLE cEpzText AS CHARACTER NO-UNDO. DEFINE VARIABLE cBesrKopf AS CHARACTER EXTENT 12 NO-UNDO. DEFINE VARIABLE lDebIncl AS LOG NO-UNDO. DEFINE VARIABLE Rundbetr AS DECIMAL DECIMALS 4 NO-UNDO. DEFINE VARIABLE RundCode AS INTEGER INIT 1 NO-UNDO. DEFINE VARIABLE htTabTexte AS HANDLE NO-UNDO. DEFINE VARIABLE hAufko AS HANDLE NO-UNDO. DEFINE VARIABLE cInstallation AS CHARACTER NO-UNDO. DEFINE VARIABLE iWgr AS INTEGER NO-UNDO. DEFINE VARIABLE iPgr AS INTEGER NO-UNDO. DEFINE VARIABLE iAgr AS INTEGER NO-UNDO. DEFINE VARIABLE iArtnr AS INTEGER NO-UNDO. DEFINE VARIABLE iInhalt AS INTEGER NO-UNDO. DEFINE VARIABLE iJahr AS INTEGER NO-UNDO. DEFINE VARIABLE iMaxPos AS INTEGER INIT 2650 NO-UNDO. DEFINE VARIABLE cvpr_Dokument AS CHARACTER NO-UNDO. DEFINE VARIABLE iArtZeile AS INTEGER NO-UNDO. DEFINE VARIABLE iVPagePos AS INTEGER NO-UNDO. DEFINE VARIABLE iVGroupPos AS INTEGER NO-UNDO. DEFINE BUFFER bAufko FOR Aufko . DEFINE BUFFER bAufze FOR Aufze . DEFINE BUFFER FDebst FOR Debst . /* Fakturaadresse */ DEFINE BUFFER LDebst FOR Debst . /* Lieferadresse */ DEFINE BUFFER LAdresse FOR Adresse . DEFINE BUFFER bAdresse FOR Adresse . DEFINE BUFFER bWust FOR Wust . DEFINE BUFFER bSteuer FOR Steuer . { incl/properties.i } { incl/ttdruckparam.i } { swissQR/propertiesSwissQR.i } DEFINE TEMP-TABLE tDokument FIELD cGruppe AS CHARACTER FIELD iZeile AS INTEGER FIELD cFeld AS CHARACTER FIELD cInhalt AS CHARACTER INDEX tDokument-k1 IS PRIMARY cGruppe iZeile cFeld . DEFINE TEMP-TABLE tTotale FIELD nMwstPfl AS DECIMAL EXTENT 12 FIELD nMwstBet AS DECIMAL EXTENT 12 FIELD nSammTot AS DECIMAL FIELD nSkBer AS DECIMAL FIELD nWW AS DECIMAL . DEFINE TEMP-TABLE sAufko FIELD cFirma AS CHARACTER FIELD iAufnr AS INTEGER FIELD iFak_Knr AS INTEGER FIELD iKnr AS INTEGER FIELD iSamm_Nr AS INTEGER FIELD iRecid AS RECID FIELD iFaknr AS INTEGER . DEFINE TEMP-TABLE tAufko LIKE Aufko FIELD iRecid AS RECID . DEFINE TEMP-TABLE tqAufko LIKE Aufko FIELD iRecid AS RECID FIELD lBetrag AS LOGICAL. . DEFINE VARIABLE htqAufko AS HANDLE NO-UNDO. htqAufko = TEMP-TABLE tqAufko:DEFAULT-BUFFER-HANDLE. DEFINE TEMP-TABLE tAufze FIELD Aufnr AS INTEGER FIELD Sort1 AS CHARACTER FIELD Sort2 AS CHARACTER FIELD Sort3 AS CHARACTER FIELD Artnr AS INTEGER FIELD Inhalt AS INTEGER FIELD Jahr AS INTEGER FIELD Pos AS INTEGER FIELD Zeile AS RECID FIELD Preis AS DECIMAL DECIMALS 4 FIELD Aktion AS LOG FIELD LagOrt AS CHARACTER FIELD MGeli AS DECIMAL FIELD MRuek AS DECIMAL INDEX tAufze-k1 IS PRIMARY Aufnr Sort1 Sort2 Sort3 . DEFINE TEMP-TABLE tSpeRab FIELD Rab_Grp AS INTEGER FIELD Auf_Betr AS DECIMAL DECIMALS 4 . DEFINE TEMP-TABLE tGebKto FIELD Sort_Cd AS CHARACTER FIELD Geb_Cd AS CHARACTER FIELD Bez AS CHARACTER FIELD Preis AS DECIMAL FIELD A_Anz AS DECIMAL FIELD A_Betrag AS DECIMAL FIELD E_Anz AS DECIMAL FIELD E_Betrag AS DECIMAL FIELD MWST_Art AS INTEGER FIELD MWST_Cd AS INTEGER . DEFINE TEMP-TABLE tRabSumm FIELD Rab_Summ AS INTEGER FIELD Bez AS CHARACTER FIELD F_Rab_Art AS INTEGER FIELD F_Wert AS DECIMAL DECIMALS 4 FIELD A_Rab_Art AS INTEGER FIELD A_Wert AS DECIMAL DECIMALS 4 FIELD Auf_Rab AS DECIMAL DECIMALS 4 FIELD Abh_Rab AS DECIMAL DECIMALS 4 . DEFINE TEMP-TABLE tUmsGrp FIELD Ums_Grp AS INTEGER FIELD Mwst AS INTEGER FIELD Ansatz AS DECIMAL FIELD Bez AS CHARACTER FIELD lInkl AS LOG FIELD Ums_Betr AS DECIMAL DECIMALS 4 . 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. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK /* ******************** Preprocessor Definitions ******************** */ &Scoped-define PROCEDURE-TYPE Procedure &Scoped-define DB-AWARE no /* _UIB-PREPROCESSOR-BLOCK-END */ &ANALYZE-RESUME /* ************************ Function Prototypes ********************** */ &IF DEFINED(EXCLUDE-calcBlock) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calcBlock Procedure FUNCTION calcBlock RETURNS INTEGER (ipGruppe AS CHARACTER) FORWARD. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* *********************** Procedure Settings ************************ */ &ANALYZE-SUSPEND _PROCEDURE-SETTINGS /* Settings for THIS-PROCEDURE Type: Procedure Allow: Frames: 0 Add Fields to: Neither Other Settings: CODE-ONLY COMPILE */ &ANALYZE-RESUME _END-PROCEDURE-SETTINGS /* ************************* Create Window ************************** */ &ANALYZE-SUSPEND _CREATE-WINDOW /* DESIGN Window definition (used by the UIB) CREATE WINDOW Procedure ASSIGN HEIGHT = 15 WIDTH = 60. /* END WINDOW DEFINITION */ */ &ANALYZE-RESUME &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure /* *************************** Main Block *************************** */ opcResult = ''. cInstallation = DYNAMIC-FUNCTION('getInstallation':U). CREATE tParam. htParam:BUFFER-COPY(iphParam). ASSIGN cFirma = tParam.cFirma iAnzDok = tParam.Anzahl. FIND bSteuer NO-LOCK WHERE bSteuer.Firma = cFirma. AdFirma = bSteuer.AdFirma. RUN AUFTRAG_ERMITTELN. IF opcResult <> '' THEN RETURN. FOR EACH sAufko BY sAufko.iFak_Knr: FIND bAdresse NO-LOCK WHERE bAdresse.Firma = AdFirma AND bAdresse.Knr = sAufko.iFak_Knr. iSprcd = bAdresse.Sprcd. RUN GET_FORMTEXT ( tParam.cInstall, tParam.cDokument, iSprcd, OUTPUT cFormText ) NO-ERROR. cRabText = TRIM(SUBSTRING(cFormText[21],01,20)). cZusText = TRIM(SUBSTRING(cFormText[21],21,20)). cEpzText = TRIM(SUBSTRING(cFormText[21],41,20)). RELEASE bAdresse. FIND Aufko NO-LOCK WHERE Aufko.Firma = sAufko.cFirma AND Aufko.Aufnr = sAufko.iAufnr NO-ERROR. EMPTY TEMP-TABLE tqAufko . CREATE tqAufko. BUFFER-COPY Aufko TO tqAufko ASSIGN tqAufko.iRecid = RECID(Aufko) tqAufko.lBetrag = TRUE. RELEASE Aufko. { vpr.i INIT } { vpr.i START } DO iLauf = 1 TO iAnzDok: dFakDatum = tParam.dFakDatum. iSeite = 0. iFaknr = sAufko.iFaknr. lFirst = TRUE. lPreis = TRUE. lLast = FALSE. EMPTY TEMP-TABLE tUmsGrp . EMPTY TEMP-TABLE tTotale . EMPTY TEMP-TABLE tDokument . CREATE tTotale. FOR EACH bAufko NO-LOCK WHERE bAufko.Firma = sAufko.cFirma AND bAufko.Fak_Knr = sAufko.iFak_Knr AND bAufko.Samm_Nr = sAufko.iSamm_Nr AND bAufko.Faknr = sAufko.iFaknr BREAK BY bAufko.Fak_Knr BY bAufko.Samm_Nr BY bAufko.Knr BY bAufko.Aufnr : EMPTY TEMP-TABLE tAufze . EMPTY TEMP-TABLE tGebKto . EMPTY TEMP-TABLE tRabSumm . EMPTY TEMP-TABLE tSpeRab . EMPTY TEMP-TABLE tTabTexte . FIND bAdresse NO-LOCK USE-INDEX Adresse-k1 WHERE bAdresse.Firma = AdFirma AND bAdresse.Knr = bAufko.Fak_Knr NO-ERROR. FIND LDebst NO-LOCK USE-INDEX Debst-k1 WHERE LDebst.Firma = cFirma AND LDebst.Knr = bAufko.Knr NO-ERROR. FIND FDebst NO-LOCK USE-INDEX Debst-k1 WHERE FDebst.Firma = cFirma AND FDebst.Knr = bAufko.Fak_Knr NO-ERROR. FIND bWust NO-LOCK USE-INDEX Wust-k1 WHERE bWust.CodeK = LDebst.MWST AND bWust.CodeA = 99 NO-ERROR. lDebIncl = FALSE. IF AVAILABLE bWust THEN lDebIncl = bWust.Incl. hAufko = BUFFER bAufko:HANDLE. htTabTexte = TEMP-TABLE tTabTexte:DEFAULT-BUFFER-HANDLE. /* Texte und Werte aus Tabelle 'Tabel' laden für RecArt */ /* FAKART, AUFSTATUS, LIEFART, FAHRER, WISO, ABLAD */ RUN CREATE_TABTEXTE ( hAufko, INPUT-OUTPUT htTabTexte ) NO-ERROR. RUN FUELLEN_tAufze ( bAufko.Aufnr ) NO-ERROR. FOR EACH tAufze WHERE tAufze.Artnr > 0: FIND bAufze NO-LOCK WHERE RECID(bAufze) = tAufze.Zeile. /* Spezial-Auftragsrabatt pro Lieferschein bilden */ IF bAufze.Auf_Sp_Grp > 0 THEN DO: FIND FIRST tSpeRab WHERE tSpeRab.Rab_Grp = bAufze.Auf_Sp_Grp NO-ERROR. IF NOT AVAILABLE tSpeRab THEN DO: CREATE tSpeRab. ASSIGN tSpeRab.Rab_Grp = bAufze.Auf_Sp_Grp. END. tSpeRab.Auf_Betr = tSpeRab.Auf_Betr + bAufze.Auf_Sp_Rab. END. /* Summengruppen-Totale pro Lieferschein bilden */ DO WHILE bAufze.Rab_Su_Grp > 0: FIND FIRST tRabSumm WHERE tRabSumm.Rab_Summ = bAufze.Rab_Su_Grp NO-ERROR. IF NOT AVAILABLE tRabSumm THEN DO: FIND FIRST RabSumm NO-LOCK WHERE RabSumm.Firma = bAufze.Firma AND RabSumm.Rab_Summ = bAufze.Rab_Su_Grp NO-ERROR. IF NOT AVAILABLE RabSumm THEN LEAVE. CREATE tRabSumm. ASSIGN tRabSumm.Rab_Summ = bAufze.Rab_Su_Grp tRabSumm.Bez = RabSumm.Bez tRabSumm.Auf_Rab = 0 tRabSumm.Abh_Rab = 0. END. LEAVE. END. END. IF LAST-OF ( bAufko.Samm_Nr ) THEN lLast = TRUE. iArtZeile = 0. RUN DRUCKEN. /* Auftragskopf mutieren */ REPEAT TRANSACTION: IF iLauf < iAnzDok THEN LEAVE. FIND FIRST tTabTexte NO-LOCK WHERE tTabTexte.cRecArt = 'FAKART' AND tTabTexte.iZeile = 1. FIND Aufko WHERE RECID(Aufko) = RECID(bAufko). Aufko.Gedruckt = TRUE. IF tTabTexte.iFeld1 > Aufko.Fak_Art THEN Aufko.Fak_Art = tTabTexte.iFeld1. IF tTabTexte.iFeld2 > Aufko.Auf_Sta THEN Aufko.Auf_Sta = tTabTexte.iFeld2. RELEASE Aufko. LEAVE. END. END. END. { vpr.i STOP } END. PROCEDURE ShellExecuteA EXTERNAL "shell32.dll" : DEFINE INPUT PARAMETER lphwnd AS LONG. DEFINE INPUT PARAMETER lpOperation AS CHARACTER. DEFINE INPUT PARAMETER lpFile AS CHARACTER. DEFINE INPUT PARAMETER lpParameters AS CHARACTER. DEFINE INPUT PARAMETER lpDirectory AS CHARACTER. DEFINE INPUT PARAMETER nShowCmd AS LONG. DEFINE RETURN PARAMETER hInstance AS LONG. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &IF DEFINED(EXCLUDE-DRUCKEN_QRCODE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_QRCODE Procedure PROCEDURE DRUCKEN_QRCODE: /*------------------------------------------------------------------------------*/ /* Purpose: */ /* Parameters: */ /* Notes: */ /*------------------------------------------------------------------------------*/ DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE hAufko AS HANDLE NO-UNDO. DEFINE VARIABLE cBesrTemplate AS CHARACTER NO-UNDO INIT 'viper/sanmartino/BESR_QR.vfr'. DEFINE VARIABLE cWerbung AS CHARACTER NO-UNDO. DEFINE VARIABLE cConString AS CHARACTER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. FIND FIRST tqAufko. tqAufko.Auf_Tot = RundBetr. FIND FIRST tParam. RUN vpr_newPage. FIND FIRST ViperDoc NO-LOCK WHERE ViperDoc.Firma = tqAufko.Firma AND ViperDoc.Benutzer = '' AND ViperDoc.Formular = 'BESR_QR' AND ViperDoc.DokArt = 0 NO-ERROR. IF NOT AVAILABLE ViperDoc THEN RETURN. RUN vpr_LoadVFR (cBesrTemplate). RUN vpr_ActivateReport ('BESR_QR'). RUN vpr_SelectPrinter (ViperDoc.Drucker). RUN vpr_SetDocAttrib ('PAPERSIZE=A4'). RUN vpr_SetPreviewMode ('Direct'). RUN vpr_InitGroups (""). RUN vpr_initGraphObj. IF ViperDoc.Schacht_Besr > 0 THEN RUN vpr_SetCurrentPageProperties("Papertray", ViperDoc.Schacht_BESR). cFileName = SUBSTITUTE('&1&2&3_&4', cPathQRCodes, cInstallation, 'QR_CODE', STRING(bAufko.Aufnr,'9999999')). RUN 'SwissQR/SwissQRCode.p' ( htqAufko, cFileName ). cFilename = cFileName + '.jpg'. IF SEARCH(cFileName) <> ? THEN DO: cFileName = 'FILENAME=' + cFileName. RUN vpr_setGraphObjAttrib ( 'QRCode', 'QRCODE', cFileName ). END. /* FILE-INFO:FILE-NAME = cFileName. */ /* cFileName = FILE-INFO:FULL-PATHNAME.*/ cWerbung = SUBSTITUTE(cPathWerbung, tParam.cInstall). cWerbung = SUBSTITUTE('&1Werbung_&2.jpg', cWerbung, tqAufko.Firma). IF SEARCH(cWerbung) <> ? THEN DO: cWerbung = SUBSTITUTE('FILENAME=&1', cWerbung). RUN vpr_setGraphObjAttrib ( 'Werbung', 'QRCODE', cWerbung ). END. RUN vpr_InitGraphObj. RUN vpr_flushGroup('QRCODE'). /* RUN vpr_printdoc ( vpr_getPageNo(), vpr_getPageNo() ).*/ /* RUN vpr_ActivateReport (tParam.cDokument).*/ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* ********************** Internal Procedures *********************** */ &IF DEFINED(EXCLUDE-ARTIKELZEILE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ARTIKELZEILE Procedure PROCEDURE ARTIKELZEILE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipRecid AS RECID NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE nRabWert AS DECIMAL NO-UNDO. DEFINE VARIABLE xRabText AS CHARACTER NO-UNDO. FIND tAufze WHERE RECID(tAufze) = ipRecid NO-LOCK. FIND Aufze WHERE RECID(Aufze) = tAufze.Zeile NO-LOCK. iArtZeile = iArtZeile + 1. DO WHILE Aufze.Artnr = 0: cString = Aufze.Bez1. IF Aufze.Bez2 <> '' THEN DO: cString = cString + (IF cString = '' THEN '' ELSE CHR(10)) + Aufze.Bez2. END. CREATE tDokument. ASSIGN tDokument.cGruppe = 'ArtikelZeile1' tDokument.iZeile = iArtZeile tDokument.cFeld = 'Bez1' tDokument.cInhalt = cString. RETURN. END. FIND Artst OF Aufze NO-LOCK. FIND GGebinde NO-LOCK WHERE GGebinde.Firma = cFirma AND GGebinde.Geb_Cd = Aufze.GGeb_Cd NO-ERROR. FIND VGebinde NO-LOCK WHERE VGebinde.Firma = cFirma AND VGebinde.Geb_Cd = Aufze.VGeb_Cd NO-ERROR. FIND KGebinde NO-LOCK WHERE KGebinde.Firma = cFirma AND KGebinde.Geb_Cd = Aufze.KGeb_Cd NO-ERROR. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Artnr' , STRING(Aufze.Artnr ,"999999") ). IF Aufze.VGeb_Me <> 0 THEN DO: RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Menge_VGeb', TRIM(STRING(Aufze.VGeb_Me,'->>>>>9')) ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'VGebinde' , VGebinde.KBez ). END. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'KGebinde', KGebinde.Kbez ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Menge' , STRING(Aufze.MGeli,'->>,>>9') ). cString = Aufze.Bez1. IF Aufze.Bez2 <> '' THEN DO: cString = cString + (IF cString = '' THEN '' ELSE CHR(10)) + Aufze.Bez2. END. IF Aufze.Aktion THEN DO: cString = cString + (IF cString = '' THEN '' ELSE CHR(10)) + Aufze.Aktion_Text. END. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', cString ). IF Aufze.Alk_Gehalt <> 0 THEN DO: cString = STRING(Aufze.Alk_Gehalt,"zz9.9%"). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Alk%', cString ). END. IF Aufze.Jahr > 9 THEN DO: cString = STRING(Aufze.Jahr,"9999"). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'JG', cString ). END. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Preis' , STRING(Aufze.Preis ,'>,>>9.99') ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', STRING(Aufze.Bru_Betr,'->>>,>>9.99') ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'MC' , STRING(Aufze.WuCd ,'z9') ). IF Aufze.Rab_Betr <> 0 THEN DO: iArtZeile = iArtZeile + 1. nRabWert = ABSOLUTE(Aufze.Rab_Wert). IF Aufze.Rab_Art = 3 THEN xRabText = cEpzText. ELSE DO: IF Aufze.Rab_Betr < 0 THEN xRabText = cZusText. IF Aufze.Rab_Betr > 0 THEN xRabText = cRabText. END. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', TRIM(xRabText) ). IF Aufze.Rab_Art = 1 THEN cString = STRING(nRabWert,"->9.9%"). IF Aufze.Rab_Art = 2 OR Aufze.Rab_Art = 3 THEN cString = STRING(nRabWert,"-9.99"). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Preis', cString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', TRIM(STRING(- Aufze.Rab_Betr,"->>>,>>9.99")) ). END. DO WHILE TRUE: IF Aufze.Zus_Betr = 0 THEN LEAVE. iArtZeile = iArtZeile + 1. nRabWert = ABSOLUTE(Aufze.Zus_Wert). IF Aufze.Zus_Art = 3 THEN xRabText = cEpzText. ELSE DO: IF Aufze.Zus_Betr < 0 THEN xRabText = cRabText. IF Aufze.Zus_Betr > 0 THEN xRabText = cZusText. END. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', TRIM(xRabText) ). IF Aufze.Zus_Art = 1 THEN cString = STRING(nRabWert,"->9.9%"). IF Aufze.Zus_Art = 2 OR Aufze.Zus_Art = 3 THEN cString = STRING(nRabWert,"-9.99"). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Preis', cString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', TRIM(STRING(+ Aufze.Zus_Betr,"->>>,>>9.99")) ). LEAVE. END. /* ---- Summengruppen-Total -------------------------------------------- */ IF Aufze.Rab_Su_Grp <> 0 THEN DO: FIND FIRST TRabSumm WHERE TRabSumm.Rab_Summ = Aufze.Rab_Su_Grp NO-ERROR. IF AVAILABLE TRabSumm THEN DO: TRabSumm.Auf_Rab = TRabSumm.Auf_Rab + Aufze.Auf_Rab. TRabSumm.Abh_Rab = TRabSumm.Abh_Rab + Aufze.Abh_Rab. END. END. /* ---- Warengruppen-Totale -------------------------------------------- */ FIND FIRST tUmsGrp WHERE tUmsGrp.Ums_Grp = Artst.Wg_Grp AND tUmsGrp.MWst = Aufze.WuCd AND tUmsGrp.Ansatz = Aufze.Mwst% NO-ERROR. IF NOT AVAILABLE tUmsGrp THEN DO: FIND WarenGrp NO-LOCK USE-INDEX WarenGrp-k1 WHERE WarenGrp.Firma = cFirma AND WarenGrp.Wgr = Artst.Wg_Grp NO-ERROR. CREATE tUmsGrp. ASSIGN tUmsGrp.Ums_Grp = Artst.Wg_Grp tUmsGrp.Mwst = Aufze.WuCd tUmsGrp.lInkl = Aufze.Mwst_Inkl tUmsGrp.Ansatz = Aufze.MWST%. IF AVAILABLE WarenGrp THEN tUmsGrp.Bez = WarenGrp.Bez1. ELSE tUmsGrp.Bez = "??????????". END. tUmsGrp.Ums_Betr = tUmsGrp.Ums_Betr + Aufze.Net_Betr - Aufze.Auf_Rab - Aufze.Abh_Rab - Aufze.Auf_Sp_Rab. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-AUFTRAG_ERMITTELN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE AUFTRAG_ERMITTELN Procedure PROCEDURE AUFTRAG_ERMITTELN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE iAufnr AS INTEGER NO-UNDO. DEFINE BUFFER bDebst FOR Debst. FIND FIRST tParam. EMPTY TEMP-TABLE sAufko. /* Sammeln aller Aufträge pro Sammelnummer */ FOR EACH Aufko NO-LOCK USE-INDEX Aufko-k5 WHERE Aufko.Firma = tParam.cFirma AND Aufko.Fak_Art = tParam.iFakArt AND Aufko.Auf_Sta = tParam.iAufSta AND Aufko.Auf_Sta >= 4 AND Aufko.Fak_Knr >= tParam.iVonKnr AND Aufko.Fak_Knr <= tParam.iBisKnr AND Aufko.Lief_Datum >= tParam.dVonDatum AND Aufko.Lief_Datum <= tParam.dBisDatum AND Aufko.Samm_Nr > 0 BREAK BY Aufko.Fak_Knr BY Aufko.Samm_Nr BY Aufko.Faknr DESCENDING: IF NOT FIRST-OF ( Aufko.Samm_Nr ) THEN NEXT. IF tParam.iVerband <> 999999 THEN DO: FIND bDebst NO-LOCK WHERE bDebst.Firma = Aufko.Firma AND bDebst.Knr = Aufko.Fak_Knr NO-ERROR. IF NOT AVAILABLE bDebst THEN NEXT. IF bDebst.Verband_Grp <> tParam.iVerband THEN NEXT. RELEASE bDebst. END. CREATE sAufko. ASSIGN sAufko.cFirma = Aufko.Firma sAufko.iAufnr = Aufko.Aufnr sAufko.iFak_Knr = Aufko.Fak_Knr sAufko.iKnr = Aufko.Knr sAufko.iSamm_Nr = Aufko.Samm_Nr sAufko.iRecid = RECID(Aufko) sAufko.iFaknr = Aufko.Faknr. END. /* Alle Aufträge, die nicht in diese Auswahl passen */ /* Rechnunsnummer und Gedrucktflag zurücksetzen */ /* In Status 4 (Monatsrechnungen) zurück setzen */ REPEAT TRANSACTION: FOR EACH sAufko. FOR EACH Aufko WHERE Aufko.Firma = sAufko.cFirma AND Aufko.Samm_Nr = sAufko.iSamm_Nr AND Aufko.Fak_Knr = sAufko.iFak_Knr: IF Aufko.Lief_Datum >= tParam.dvonDatum AND Aufko.Lief_Datum <= tParam.dbisDatum THEN NEXT. iAufnr = 0. ASSIGN Aufko.Faknr = 0 Aufko.Gedruckt = FALSE. IF Aufko.Auf_Sta > 4 THEN iAufnr = Aufko.Aufnr. RELEASE Aufko. IF iAufnr > 0 THEN RUN ZURUECK ( iAufnr ). END. END. RELEASE Aufko. LEAVE. END. /* Rechnungsnummer auf alle Lieferscheine der Sammelrechnung setzen */ FOR EACH sAufko WHERE sAufko.iFaknr = 0: sAufko.iFaknr = DYNAMIC-FUNCTION('createFaknr':U, sAufko.cFirma ) NO-ERROR. IF sAufko.iFaknr = 0 OR sAufko.iFaknr = ? THEN DO: MESSAGE 'Es konnten keine(nicht alle Rechnungsnummern gelöst werden' VIEW-AS ALERT-BOX ERROR. opcResult = 'FAKNR'. RETURN NO-APPLY. END. END. REPEAT TRANSACTION: FOR EACH sAufko: FOR EACH Aufko WHERE Aufko.Firma = sAufko.cFirma AND Aufko.Samm_Nr = sAufko.iSamm_Nr AND Aufko.Fak_Knr = sAufko.iFak_Knr AND Aufko.Lief_Datum >= tParam.dvonDatum AND Aufko.Lief_Datum <= tParam.dbisDatum: ASSIGN Aufko.Faknr = sAufko.iFaknr Aufko.Fak_Datum = tParam.dFakDat. RELEASE Aufko. END. END. LEAVE. END. /* Alle Auftragstotale aller Lieferscheine neu rechnen */ FOR EACH sAufko: FOR EACH bAufko NO-LOCK WHERE bAufko.Firma = sAufko.cFirma AND bAufko.Samm_Nr = sAufko.iSamm_Nr AND bAufko.Fak_Knr = sAufko.iFak_Knr AND bAufko.Lief_Datum >= tParam.dvonDatum AND bAufko.Lief_Datum <= tParam.dbisDatum: DYNAMIC-FUNCTION('calculateAuftragsTotal':U, bAufko.Firma, bAufko.Aufnr, OUTPUT nTotale ) NO-ERROR. RELEASE bAufko. END. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-AUSGABE_ARTIKELZEILE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE AUSGABE_ARTIKELZEILE Procedure PROCEDURE AUSGABE_ARTIKELZEILE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO. DEFINE VARIABLE cWerte AS CHARACTER NO-UNDO. DEFINE VARIABLE iPos AS INTEGER NO-UNDO. FOR EACH tDokument WHERE tDokument.cGruppe = 'ArtikelZeile1' BREAK BY tDokument.cGruppe BY tDokument.iZeile: IF FIRST-OF ( tDokument.cGruppe ) THEN DO: iVPagePos = vpr_getPageVPos() + 20. RUN vpr_setPageVPos ( iVPagePos ). RUN vpr_setGroupVPos ( 'ArtikelZeile1', iVPagePos ). END. IF FIRST-OF ( tDokument.iZeile ) THEN DO: cZellen = ''. cWerte = ''. END. /* IF tDokument.cFeld = 'Bez1' THEN RUN vpr_Asc2RTF ( tDokument.cInhalt, '', OUTPUT tDokument.cInhalt).*/ IF tDokument.cFeld = 'Bez1' THEN tDokument.cInhalt = REPLACE(tDokument.cInhalt, CHR(10), '\par '). cWerte = cWerte + tDokument.cInhalt. cZellen = cZellen + tDokument.cFeld. IF NOT LAST-OF ( tDokument.iZeile ) THEN DO: ASSIGN cWerte = cWerte + CHR(01) cZellen = cZellen + ','. NEXT. END. RUN vpr_SetDelimiter (CHR(01)). RUN vpr_setGroupText ('ArtikelZeile1', cZellen, cWerte). iVPagePos = vpr_getPageVPos(). iPos = iVPagePos + vpr_getGroupHeight('ArtikelZeile1'). IF iPos > iMaxPos THEN DO: RUN vpr_SetPageVPos ( iMaxPos ). RUN VIPER_NEUE_SEITE. RUN DRUCKEN_ADRESSE. iVPagePos = vpr_getPageVPos() + 20. RUN vpr_setPageVPos ( iVPagePos ). RUN vpr_setGroupText ('ArtikelZeile1', cZellen, cWerte). END. RUN vpr_FlushGroup ('ArtikelZeile1'). iVPagePos = vpr_getPageVPos(). IF LAST-OF ( tDokument.cGruppe ) THEN LEAVE. iVPagePos = vpr_getPageVPos(). RUN vpr_setGroupVPos ( 'ArtikelZeile1', iVPagePos ). END. FOR EACH tDokument WHERE tDokument.cGruppe = 'ArtikelZeile1': DELETE tDokument. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-AUSGABE_GRUPPE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE AUSGABE_GRUPPE Procedure PROCEDURE AUSGABE_GRUPPE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipGruppe AS CHARACTER NO-UNDO. DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO. DEFINE VARIABLE cWerte AS CHARACTER NO-UNDO. DEFINE VARIABLE iSpace AS INTEGER NO-UNDO. iSpace = vpr_getPageVPos(). FOR EACH tDokument NO-LOCK WHERE tDokument.cGruppe = ipGruppe BREAK BY tDokument.cGruppe BY tDokument.iZeile: IF FIRST-OF ( tDokument.iZeile ) THEN iSpace = iSpace + 40. END. IF iSpace > iMaxPos THEN DO: RUN vpr_SetPageVPos ( iMaxPos ). RUN VIPER_NEUE_SEITE. RUN DRUCKEN_ADRESSE. END. iVPagePos = vpr_getPageVPos(). CASE ipGruppe: WHEN 'Gebindeabrechnung' THEN DO: iVPagePos = iVPagePos + 20. RUN vpr_setGroupVPos ( 'GebindeabrechnungTitel', iVPagePos ). RUN vpr_FlushGroup ( 'GebindeabrechnungTitel' ). iVPagePos = vpr_getPageVPos(). END. OTHERWISE DO: END. END CASE. FOR EACH tDokument WHERE tDokument.cGruppe = ipGruppe BREAK BY tDokument.cGruppe BY tDokument.iZeile: IF FIRST-OF ( tDokument.cGruppe ) THEN DO: IF ipGruppe <> 'Kondition' AND ipGruppe <> 'BESR' AND ipGruppe <> 'ADRESSE' THEN DO: iVPagePos = vpr_getPageVPos(). RUN vpr_setPageVPos ( iVPagePos ). RUN vpr_setGroupVPos ( ipGruppe, iVPagePos ). END. END. IF FIRST-OF ( tDokument.iZeile ) THEN DO: cZellen = ''. cWerte = ''. END. cWerte = cWerte + tDokument.cInhalt. cZellen = cZellen + tDokument.cFeld. CASE tDokument.cFeld: WHEN 'Bez1' THEN cWerte = REPLACE(cWerte, CHR(10), ' \par '). END CASE. IF NOT LAST-OF ( tDokument.iZeile ) THEN DO: ASSIGN cWerte = cWerte + CHR(01) cZellen = cZellen + ','. NEXT. END. RUN vpr_SetDelimiter (CHR(01)). RUN vpr_SetGroupText (ipGruppe, cZellen, cWerte). RUN vpr_FlushGroup (ipGruppe). END. FOR EACH tDokument WHERE tDokument.cGruppe = ipGruppe: DELETE tDokument. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-DRUCKEN) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN Procedure PROCEDURE DRUCKEN : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE xString AS CHARACTER NO-UNDO. DEFINE VARIABLE cLAdresse AS CHARACTER NO-UNDO. DEFINE VARIABLE RText AS CHARACTER NO-UNDO. DEFINE VARIABLE WText AS CHARACTER NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE nRabWert AS DECIMAL NO-UNDO. DEFINE VARIABLE iMwstCd AS INTEGER NO-UNDO. DEFINE VARIABLE nZeiTot AS DECIMAL DECIMALS 4 NO-UNDO. FIND FIRST tParam. IF tParam.lCreatePDF THEN tParam.lDokDruck = FALSE. nFakBetr = 0. IF iSeite = 0 THEN RUN VIPER_INIT. RUN DRUCKEN_KOPF. iVPagePos = vpr_getPageVPos() + 20. RUN vpr_setPageVPos ( iVPagePos ). RUN vpr_setGroupVPos( 'FetteZeile', iVPagePos ). iArtZeile = 1. RUN VIPER_CREATE_DOKUMENT ( 'FetteZeile', iArtZeile, 'Bez_LSText', ' ' ). xString = TRIM(SUBSTRING(cFormText[17],01,20)) + ' / ' + TRIM(SUBSTRING(cFormText[17],21,20)) + ' ' + TRIM(STRING(bAufko.Aufnr,"zzzzzzzzz9")) + ' / ' + TRIM(STRING(bAufko.Lief_Datum,"99.99.9999")). iArtZeile = 2. RUN VIPER_CREATE_DOKUMENT ( 'FetteZeile', iArtZeile, 'Bez_LSText', xString ). DO WHILE TRUE: lFirst = TRUE. cLAdresse = ''. IF bAufko.Knr = bAufko.Fak_Knr AND NOT FDebst.Passant THEN LEAVE. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'FetteZeile', iArtZeile, 'Bez_LSText', ' ' ). DO ii = 1 TO 5: IF bAufko.Adresse[ii] = '' THEN NEXT. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'FetteZeile', iArtZeile, 'Bez_LSText', bAufko.Adresse[ii] ). lFirst = FALSE. END. IF NOT lFirst THEN LEAVE. IF bAufko.Knr = bAufko.Fak_Knr THEN LEAVE. FIND LAdresse NO-LOCK WHERE LAdresse.Firma = AdFirma AND LAdresse.Knr = bAufko.Knr NO-ERROR. IF NOT AVAILABLE LAdresse THEN LEAVE. DO ii = 1 TO 12: IF LAdresse.Anschrift[ii] = '' THEN NEXT. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'FetteZeile', iArtZeile, 'Bez_LSText', LAdresse.Anschrift[ii] ). lFirst = FALSE. END. LEAVE. END. IF NOT lFirst THEN DO: iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'FetteZeile', iArtZeile, 'Bez_LSText', ' ' ). END. RUN AUSGABE_GRUPPE ( 'FetteZeile' ). iArtZeile = 0. FOR EACH tAufze NO-LOCK BY tAufze.Aufnr BY tAufze.Sort1 BY tAufze.LagOrt BY tAufze.Sort2 BY tAufze.Pos : FIND Aufze NO-LOCK WHERE RECID(Aufze) = tAufze.Zeile. RUN ARTIKELZEILE ( RECID(tAufze) ). nFakBetr = nFakBetr + Aufze.Net_Betr. RELEASE Aufze. END. iArtZeile = iArtZeile + 1. RUN vpr_Asc2RTF(TRIM(SUBSTRING(cFormText[10],41,20)), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , xString ). RUN vpr_Asc2RTF(TRIM(STRING(nFakBetr,'->>>,>>9.99')), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', xString ). iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , ' ' ). RUN AUSGABE_ARTIKELZEILE. /* Auftragsrabatt ---------------------------------------------------- */ iArtZeile = 0. FOR EACH tRabSumm WHERE tRabSumm.Auf_Rab <> 0 BY tRabSumm.Rab_Summ: Rundbetr = tRabSumm.Auf_Rab. nFakBetr = nFakBetr - Rundbetr. IF Rundbetr < 0 THEN RText = cZusText. ELSE RText = cRabText. xString = RText + " " + tRabSumm.Bez. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', xString ). FIND FIRST AufRabSu NO-LOCK USE-INDEX AufRabSu-k1 WHERE AufRabSu.Firma = bAufko.Firma AND AufRabSu.Aufnr = bAufko.Aufnr AND AufRabSu.Rab_Summ = tRabSumm.Rab_Summ. nRabWert = ABSOLUT(AufRabSu.F_Wert). IF AufRabSu.F_Proz_Betr THEN WText = "%". ELSE WText = "Fr.". xString = STRING(nRabWert,"z9.99-") + WText. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'KGebinde', xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', TRIM(STRING(- Rundbetr,'->>>,>>9.99')) ). END. /* Abholrabatt ------------------------------------------------------- */ FOR EACH tRabSumm WHERE tRabSumm.Abh_Rab <> 0 BY tRabSumm.Rab_Summ: Rundbetr = tRabSumm.Abh_Rab. nFakBetr = nFakBetr - Rundbetr. IF Rundbetr < 0 THEN RText = cZusText. ELSE RText = cRabText. xString = RText + " " + tRabSumm.Bez. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', xString ). FIND FIRST AufRabSu NO-LOCK USE-INDEX AufRabSu-k1 WHERE AufRabSu.Firma = bAufko.Firma AND AufRabSu.Aufnr = bAufko.Aufnr AND AufRabSu.Rab_Summ = tRabSumm.Rab_Summ. nRabWert = ABSOLUT(AufRabSu.A_Wert). IF AufRabSu.A_Proz_Betr THEN WText = "%". ELSE WText = "Fr.". xString = STRING(nRabWert,"z9.99-") + WText. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'KGebinde', xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', TRIM(STRING(- Rundbetr,'->>>,>>9.99')) ). END. /* Spezialpreis-Auftragsrabatte ---------------------------------------- */ FOR EACH TSpeRab WHERE TSpeRab.Auf_Betr <> 0 BY TSpeRab.Rab_Grp: FIND Tabel USE-INDEX Tabel-k1 WHERE Tabel.Firma = cFirma AND Tabel.RecArt = 'ARABGRP' AND Tabel.CodeC = '' AND Tabel.CodeI = TSpeRab.Rab_Grp AND Tabel.Sprcd = 1 NO-LOCK. Rundbetr = TSpeRab.Auf_Betr. nFakBetr = nFakBetr - Rundbetr. IF Rundbetr < 0 THEN RText = cZusText. ELSE RText = cRabText. xString = RText + " " + Tabel.Bez1. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', xString ). FIND FIRST AufSpRab USE-INDEX AufSpRab-k1 WHERE AufSpRab.Firma = bAufko.Firma AND AufSpRab.Aufnr = bAufko.Aufnr AND AufSpRab.Rab_Grp = TSpeRab.Rab_Grp NO-LOCK. nRabWert = ABSOLUT(AufSpRab.Auf_Wert). IF AufSpRab.Auf_Proz_Betr THEN WText = "%". ELSE WText = "Fr.". xString = STRING(nRabWert,"z9.99-") + WText. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'KGebinde', xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', TRIM(STRING(- Rundbetr,'->>>,>>9.99')) ). END. IF iArtZeile > 0 THEN DO: iArtZeile = iArtZeile + 1. RUN vpr_Asc2RTF(TRIM(SUBSTRING(cFormText[14],21,20)), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , xString ). RUN vpr_Asc2RTF(TRIM(STRING(nFakBetr,'->>>,>>9.99')), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', xString ). iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , ' ' ). END. RUN AUSGABE_GRUPPE ('ArtikelZeile1'). /* Recycling-Gebuehren ----------------------------------------------- */ iArtZeile = 0. FOR EACH AufGKon USE-INDEX AufGKon-k1 WHERE AufGKon.Firma = bAufko.Firma AND AufGKon.Aufnr = bAufko.Aufnr AND AufGKon.Gebuehr <> 0 AND AufGKon.Betrag <> 0 NO-LOCK: FIND GebKonto OF AufGKon NO-LOCK NO-ERROR. IF NOT AVAILABLE GebKonto THEN xString = TRIM(SUBSTRING(cFormText[11],41,20)). ELSE xString = GebKonto.Bez. iMwstCd = AufGKon.MWST_Cd. nFakBetr = nFakBetr + AufGKon.Betrag. FIND LAST MwstAns NO-LOCK WHERE MwstAns.Mwst_Cd = iMwstCd AND MwstAns.Datum <= bAufko.Fak_Datum NO-ERROR. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1', xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', TRIM(STRING(AufGKon.Betrag,'->>>,>>9.99')) ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'MC', STRING(AufGKon.MWSt_Cd,'z9') ). FIND FIRST tUmsGrp WHERE tUmsGrp.Ums_Grp = 1000 AND tUmsGrp.Mwst = iMwstCd AND tUmsGrp.Ansatz = MwstAns.Ansatz NO-ERROR. IF NOT AVAILABLE tUmsGrp THEN DO: FIND WarenGrp USE-INDEX WarenGrp-k1 WHERE WarenGrp.Firma = cFirma AND WarenGrp.Wgr = 1000 NO-LOCK NO-ERROR. CREATE tUmsGrp. ASSIGN tUmsGrp.Ums_Grp = 1000 tUmsGrp.Mwst = iMwstCd tUmsGrp.Ansatz = MwstAns.Ansatz tUmsGrp.lInkl = lDebIncl tUmsGrp.Bez = (IF AVAILABLE WarenGrp THEN WarenGrp.Bez1 ELSE 'Recyclinggebühren'). END. tUmsGrp.Ums_Betr = tUmsGrp.Ums_Betr + AufGKon.Betrag. END. IF iArtZeile > 0 THEN DO: iArtZeile = iArtZeile + 1. RUN vpr_Asc2RTF(TRIM(SUBSTRING(cFormText[14],41,20)), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , xString ). RUN vpr_Asc2RTF(TRIM(STRING(nFakBetr,'->>>,>>9.99')), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', xString ). iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , ' ' ). END. RELEASE AufGKon. RUN AUSGABE_GRUPPE ('ArtikelZeile1'). /* Gebindelieferungen ------------------------------------------------ */ nZeiTot = 0. iArtZeile = 0. FOR EACH AufGKon USE-INDEX AufGKon-k1 WHERE AufGKon.Firma = bAufko.Firma AND AufGKon.Aufnr = bAufko.Aufnr AND AufGKon.Depot <> 0 AND (AufGKon.Eingang <> 0 OR AufGKon.Ausgang <> 0) NO-LOCK: iMwstCd = AufGKon.MWSt_Cd. FIND LAST MwstAns NO-LOCK WHERE MwstAns.Mwst_Cd = iMwstCd AND MwstAns.Datum <= bAufko.Fak_Datum NO-ERROR. FIND FIRST tUmsGrp WHERE tUmsGrp.Ums_Grp = 1001 AND tUmsGrp.Mwst = iMwstCd AND tUmsGrp.Ansatz = MwstAns.Ansatz NO-ERROR. IF NOT AVAILABLE tUmsGrp THEN DO: FIND WarenGrp NO-LOCK USE-INDEX WarenGrp-k1 WHERE WarenGrp.Firma = cFirma AND WarenGrp.Wgr = 1001 NO-ERROR. CREATE tUmsGrp. ASSIGN tUmsGrp.Ums_Grp = 1001 tUmsGrp.Mwst = iMwstCd tUmsGrp.Ansatz = MwstAns.Ansatz tUmsGrp.lInkl = lDebIncl tUmsGrp.Bez = (IF AVAILABLE WarenGrp THEN WarenGrp.Bez1 ELSE 'Gebindesaldo'). END. tUmsGrp.Ums_Betr = tUmsGrp.Ums_Betr + AufGKon.Betrag. FIND GebKonto NO-LOCK USE-INDEX GebKonto-k1 WHERE GebKonto.Firma = cFirma AND GebKonto.Geb_Cd = AufGKon.Geb_Cd. i1 = AufGKon.Ausgang - AufGKon.Eingang. Rundbetr = AufGKon.Betrag. nZeiTot = nZeiTot + Rundbetr. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'Gebindeabrechnung', iArtZeile, 'Gebindetext' , GebKonto.Bez ). RUN VIPER_CREATE_DOKUMENT ( 'Gebindeabrechnung', iArtZeile, 'GebindeGel' , TRIM(STRING(AufGKon.Ausgang,"->>,>>9")) ). RUN VIPER_CREATE_DOKUMENT ( 'Gebindeabrechnung', iArtZeile, 'GebindeRet' , TRIM(STRING(AufGKon.Eingang,"->>,>>9")) ). RUN VIPER_CREATE_DOKUMENT ( 'Gebindeabrechnung', iArtZeile, 'GebindeSaldo', TRIM(STRING(i1 ,"->>,>>9")) ). RUN VIPER_CREATE_DOKUMENT ( 'Gebindeabrechnung', iArtZeile, 'GebindeBetr' , TRIM(STRING(Rundbetr ,"->>,>>9.99")) ). END. IF iArtZeile > 0 THEN RUN VIPER_CREATE_DOKUMENT ( 'Gebindeabrechnung', iArtZeile, 'GebindeTot' , TRIM(STRING(nZeiTot,"->>,>>9.99")) ). nFakBetr = nFakBetr + nZeiTot. IF iArtZeile > 0 THEN RUN AUSGABE_GRUPPE ('Gebindeabrechnung'). FIND FIRST tTotale. DO ii = 1 TO 12: tTotale.nMwstPfl[ii] = tTotale.nMwstPfl[ii] + bAufko.Wpfl[ii]. tTotale.nMwstBet[ii] = tTotale.nMwstBet[ii] + bAufko.Wust[ii]. END. tTotale.nSammTot = tTotale.nSammTot + nFakBetr. tTotale.nSkBer = tTotale.nSkBer + bAufko.Sk_Ber. iArtZeile = 1. RUN vpr_Asc2RTF(TRIM(SUBSTRING(cFormText[15],21,20)), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , xString ). RUN vpr_Asc2RTF(TRIM(STRING(nFakBetr,"->>>,>>9.99")), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', xString ). IF lLast THEN DO: iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , ' ' ). iArtZeile = iArtZeile + 1. RUN vpr_Asc2RTF(TRIM(SUBSTRING(cFormText[14],01,20)), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , xString ). RUN vpr_Asc2RTF(TRIM(STRING(tTotale.nSammTot,"->>>,>>9.99")), 'bold', OUTPUT xString ). RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Betrag', xString ). END. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'ArtikelZeile1', iArtZeile, 'Bez1' , ' ' ). RUN AUSGABE_GRUPPE ( 'ArtikelZeile1' ). IF lLast THEN RUN DRUCKEN_ENDE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-DRUCKEN_ADRESSE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_ADRESSE Procedure PROCEDURE DRUCKEN_ADRESSE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO. DEFINE VARIABLE cWerte AS CHARACTER NO-UNDO. FIND FIRST tParam. FIND FIRST tDokument WHERE tDokument.cGruppe = 'KOPF' AND tDokument.iZeile = 1 AND tDokument.cFeld = 'Seite' NO-ERROR. IF NOT AVAILABLE tDokument THEN DO: CREATE tDokument. ASSIGN tDokument.cGruppe = 'KOPF' tDokument.iZeile = 1 tDokument.cFeld = 'Seite'. END. tDokument.cInhalt = STRING(iSeite,'z9'). cZellen = ''. cWerte = ''. FOR EACH tDokument WHERE tDokument.cGruppe = 'Kopf' BREAK BY tDokument.cGruppe BY tDokument.cFeld: cWerte = cWerte + tDokument.cInhalt. cZellen = cZellen + tDokument.cFeld. IF NOT LAST-OF ( tDokument.cGruppe ) THEN ASSIGN cWerte = cWerte + CHR(01) cZellen = cZellen + ','. END. RUN vpr_SetDelimiter (CHR(01)). RUN vpr_setGroupText ('Kopf', cZellen, cWerte). RUN vpr_FlushGroup ('Kopf'). RUN vpr_FlushGroup ('Ueberschrift'). iVPagePos = vpr_getPageVPos() + 20. RUN vpr_setPageVPos ( iVPagePos ). END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-DRUCKEN_BESR) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_BESR Procedure PROCEDURE DRUCKEN_BESR : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipDokument AS CHARACTER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO. DEFINE VARIABLE cVorlage AS CHARACTER NO-UNDO. DEFINE VARIABLE iKopfZeile AS INTEGER NO-UNDO. DEFINE VARIABLE PZBetrag AS CHARACTER NO-UNDO. DEFINE VARIABLE PZReferenz AS CHARACTER NO-UNDO. DEFINE VARIABLE PZTNNummer AS CHARACTER NO-UNDO. DEFINE VARIABLE cReferenz AS CHARACTER NO-UNDO. FIND FIRST tParam. /* IF Rundbetr < 0 THEN RETURN. */ RUN vpr_NewPage. cVorlage = tParam.cInstall + '/' + ipDokument + '.vfr'. RUN vpr_LoadVFR (cVorlage). RUN vpr_ActivateReport (ipDokument). RUN vpr_setPrinterAttrib("duplex=1"). RUN vpr_SetDocAttrib ("PAPERSIZE=A4"). RUN vpr_SetPrinterAttrib("copies=1"). RUN vpr_InitGroups (""). IF tParam.lCreatePDF THEN RUN vpr_initGraphObj. IF tParam.Schacht_Besr > 0 THEN RUN vpr_SetCurrentPageProperties ( "Papertray", tParam.Schacht_Besr ). RUN vpr_SetGroupAttrib ("ADRESSE", "Fixed=true"). RUN vpr_SetGroupAttrib ("BESR" , "Fixed=true"). FIND Adresse NO-LOCK USE-INDEX Adresse-k1 WHERE Adresse.Firma = AdFirma AND Adresse.Knr = bAufko.Fak_Knr NO-ERROR. iKopfZeile = 1. cBesrKopf = ''. IF bAufko.Adresse[05] <> '' THEN DO: i1 = 6. DO ix = 1 TO 5: /* CREATE tDokument. */ /* ASSIGN tDokument.cGruppe = 'ADRESSE' */ /* tDokument.iZeile = 1 */ /* tDokument.cFeld = 'Adresse_' + STRING((6 + ix),'99') */ /* tDokument.cInhalt = bAufko.Adresse[ix]. */ i1 = i1 + 1. cBesrKopf[i1] = bAufko.Adresse[ix]. END. END. ELSE DO: DO ix = 6 TO 11: /* CREATE tDokument. */ /* ASSIGN tDokument.cGruppe = 'ADRESSE' */ /* tDokument.iZeile = 1 */ /* tDokument.cFeld = 'Adresse_' + STRING(ix,'99') */ /* tDokument.cInhalt = Adresse.Anschrift[ix]. */ cBesrKopf[ix] = Adresse.Anschrift[ix]. END. END. DO ix = 6 TO 11: CREATE tDokument. ASSIGN tDokument.cGruppe = 'BESR' tDokument.iZeile = 1 tDokument.cFeld = 'Adresse_R_' + STRING(ix,'99') tDokument.cInhalt = cBesrKopf[ix]. IF ix < 7 THEN NEXT. CREATE tDokument. ASSIGN tDokument.cGruppe = 'BESR' tDokument.iZeile = 1 tDokument.cFeld = 'Adresse_L_' + STRING(ix,'99') tDokument.cInhalt = cBesrKopf[ix]. END. IF Rundbetr > 0.00 THEN DO: cFeld = STRING(Rundbetr,'zzzzzz9.99'). cFeld = REPLACE(cFeld, '.', ' '). cFeld = STRING(cFeld,'X X X X X X X X X X'). END. ELSE cFeld = ''. RUN VIPER_CREATE_DOKUMENT ( 'BESR', iKopfZeile, 'Betrag_L', cFeld ). RUN VIPER_CREATE_DOKUMENT ( 'BESR', iKopfZeile, 'Betrag_R', cFeld ). IF Rundbetr > 0 THEN PZBetrag = '01' + STRING(Rundbetr * 100,'9999999999 '). ELSE PZBetrag = ' 04 '. PZReferenz = '00000000000' + STRING(bAufko.Fak_Knr,'999999') + STRING(bAufko.Faknr ,'9999999') + '00'. PZTNNummer = '01036226'. RUN PRUEFZIFFER ( INPUT-OUTPUT PZBetrag, INPUT-OUTPUT PZReferenz, INPUT-OUTPUT PZTNNummer, OUTPUT cReferenz ). RUN VIPER_CREATE_DOKUMENT ( 'BESR', iKopfZeile, 'Referenz_OCRB', cReferenz ). RUN VIPER_CREATE_DOKUMENT ( 'BESR', iKopfZeile, 'Referenz_R', STRING(PZReferenz,'XX XXXXX XXXXX XXXXX XXXXX XXXXX') ). RUN VIPER_CREATE_DOKUMENT ( 'BESR', iKopfZeile, 'Referenz_L', STRING(PZReferenz,'XX XXXXX XXXXX XXXXX XXXXX XXXXX') ). RUN AUSGABE_GRUPPE ( 'ADRESSE' ). RUN AUSGABE_GRUPPE ( 'BESR' ). END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-DRUCKEN_ENDE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_ENDE Procedure PROCEDURE DRUCKEN_ENDE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cPDFName AS CHARACTER INIT '' NO-UNDO. DEFINE VARIABLE iSpace AS INTEGER INIT 0 NO-UNDO. DEFINE VARIABLE iPos AS INTEGER NO-UNDO. DEFINE VARIABLE iKopie AS INTEGER NO-UNDO. DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE lJa AS LOG NO-UNDO. DEFINE VARIABLE nNetto AS DECIMAL NO-UNDO. DEFINE VARIABLE nMwst AS DECIMAL NO-UNDO. DEFINE VARIABLE nBrutto AS DECIMAL NO-UNDO. DEFINE VARIABLE nTNetto AS DECIMAL NO-UNDO. DEFINE VARIABLE nTMwst AS DECIMAL NO-UNDO. DEFINE VARIABLE nTBrutto AS DECIMAL NO-UNDO. DEFINE VARIABLE cText AS CHARACTER NO-UNDO. FIND FIRST tParam. FIND FIRST tTotale. iPos = vpr_getPageVPos(). iArtZeile = 1. iSpace = iSpace + 40. iMaxPos = 2650. RUN VIPER_CREATE_DOKUMENT ( 'Mehrwertsteuer', iArtZeile, 'MwstBez' , ' ' ). FIND FIRST tTotale. DO ix = 1 TO 11: IF tTotale.nMwstPfl[ix] = 0 THEN NEXT. tTotale.nSammTot = tTotale.nSammTot + tTotale.nMwstBet[ix]. FIND LAST MWSTAns USE-INDEX MWSTAns-k1 WHERE MWSTAns.MWST_Cd = ix AND MWSTAns.Datum <= bAufko.Kond_Datum NO-LOCK. iArtZeile = iArtZeile + 1. iSpace = iSpace + 40. RUN VIPER_CREATE_DOKUMENT ( 'Mehrwertsteuer', iArtZeile, 'MwstBez' , MWStAns.Bez ). RUN VIPER_CREATE_DOKUMENT ( 'Mehrwertsteuer', iArtZeile, 'MwstPfl' , TRIM(STRING(tTotale.nMwstPfl[ix],"->>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Mehrwertsteuer', iArtZeile, 'MwstBetr', TRIM(STRING(tTotale.nMwstBet[ix],"->>>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Mehrwertsteuer', iArtZeile, 'MwstCd' , TRIM(STRING(ix ,">>9")) ). END. IF (iSpace + iPos + 80) >= iMaxPos THEN DO: RUN vpr_SetPageVPos ( iMaxPos ). RUN VIPER_NEUE_SEITE. RUN DRUCKEN_ADRESSE. END. RUN AUSGABE_GRUPPE ( 'Mehrwertsteuer' ). Rundbetr = tTotale.nSammTot. Rundcode = 1. RUN RUNDEN ( Rundcode, INPUT-OUTPUT Rundbetr ). tTotale.nSammTot = Rundbetr. iArtZeile = 1. RUN VIPER_CREATE_DOKUMENT ( 'RechnungsTotal', iArtZeile, 'EndBetrag' , TRIM(STRING(tTotale.nSammTot,"->,>>>,>>9.99")) ). iArtZeile = 2. RUN VIPER_CREATE_DOKUMENT ( 'RechnungsTotal', iArtZeile, 'EndBetrag' , '' ). RUN AUSGABE_GRUPPE ( 'RechnungsTotal' ). /* ------ Umsatzverteilung ------------------------------------------------ */ iArtZeile = 1. RUN vpr_Asc2RTF(TRIM(SUBSTRING(cFormText[15],41,20)), 'bold', OUTPUT cText). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Umsatzgruppe' , cText ). ASSIGN nTNetto = 0 nTMwst = 0 nTBrutto = 0. FOR EACH TUmsGrp NO-LOCK BY TUmsGrp.Ums_Grp BY TUmsGrp.Mwst : IF tUmsGrp.lInkl THEN DO: nNetto = tUmsGrp.Ums_Betr * 100 / (100 + tUmsGrp.Ansatz). nBrutto = tUmsGrp.Ums_Betr. nMwst = nBrutto - nNetto. END. ELSE DO: nNetto = tUmsGrp.Ums_Betr. nBrutto = tUmsGrp.Ums_Betr * (100 + tUmsGrp.Ansatz) / 100. nMwst = nBrutto - nNetto. END. ASSIGN nTNetto = nTNetto + nNetto nTMwst = nTMwst + nMwst nTBrutto = nTBrutto + nBrutto. iArtZeile = iArtZeile + 1. RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Umsatzgruppe' , TUmsGrp.Bez ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Frw' , BSteuer.Fwc03 ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Netto' , TRIM(STRING(nNetto ,"->>>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Ansatz' , TRIM(STRING(TUmsGrp.Ansatz,">9.99%")) ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Mwst' , TRIM(STRING(nMwst ,"->>>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Brutto' , TRIM(STRING(nBrutto ,"->>>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'MC' , TRIM(STRING(tUmsGrp.Mwst ,"z9")) ). END. iArtZeile = iArtZeile + 1. RUN vpr_Asc2RTF('Total', 'bold', OUTPUT cText). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Umsatzgruppe' , cText ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Netto' , TRIM(STRING(nTNetto ,"->>>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Mwst' , TRIM(STRING(nTMwst ,"->>>,>>9.99")) ). RUN VIPER_CREATE_DOKUMENT ( 'Umsatzverteilung', iArtZeile, 'Brutto' , TRIM(STRING(nTBrutto,"->>>,>>9.99")) ). ix = DYNAMIC-FUNCTION('calcBlock':U, 'Umsatzverteilung' ) + 30 + vpr_getPageVPos(). IF ix >= iMaxPos THEN DO: RUN vpr_setPageVPos ( iMaxPos ). RUN VIPER_NEUE_SEITE. RUN DRUCKEN_ADRESSE. END. RUN AUSGABE_GRUPPE ( 'Umsatzverteilung' ). /* Zahlungskondition ------------------------------------------------- */ FIND Kondi NO-LOCK USE-INDEX Kondi-k1 WHERE Kondi.Kond = bAufko.Kond AND Kondi.Sprcd = iSprcd NO-ERROR. IF AVAILABLE Kondi THEN DO: iArtZeile = 1. RUN VIPER_CREATE_DOKUMENT ( 'Kondition', iArtZeile, 'Zahkond', Kondi.KoText ). RUN VIPER_CREATE_DOKUMENT ( 'Kondition', iArtZeile, 'Faellig', STRING((dFakDatum + Kondi.Faellig),"99.99.9999") ). IF Kondi.Skonto[01] <> 0 THEN DO: Rundbetr = tTotale.nSkBer * Kondi.Skonto[01] / 100. Rundcode = 1. RUN RUNDEN ( Rundcode, INPUT-OUTPUT Rundbetr ). RUN VIPER_CREATE_DOKUMENT ( 'Kondition', iArtZeile, 'Skonto', TRIM(STRING(Rundbetr,"->>>,>>9.99")) ). END. END. ELSE DO: iArtZeile = 1. RUN VIPER_CREATE_DOKUMENT ( 'Kondition', iArtZeile, 'Zahkond', FILL('?', 29) ). END. RUN VIPER_CREATE_DOKUMENT ( 'Kondition', iArtZeile, 'Netto', TRIM(STRING(tTotale.nSammTot,"->>>,>>9.99")) ). RUN AUSGABE_GRUPPE ( 'Kondition' ). nFakBetr = tTotale.nSammTot. IF nFakBetr = 0 THEN Rundbetr = -1. ELSE Rundbetr = nFakBetr. IF AVAILABLE Kondi AND Kondi.Skonto[01] <> 0 THEN Rundbetr = 0. /* Abschluss und Druck ----------------------------------------------- */ IF iLauf < iAnzDok THEN DO: RUN vpr_EndDoc. IF tParam.lDokDruck THEN RUN vpr_printDoc (0, 0). RETURN. END. IF nFakBetr > 0 THEN RUN DRUCKEN_QRCODE. /* ------------------------------------------------------ */ /* Druckausgabe */ /* ------------------------------------------------------ */ RUN vpr_EndDoc. cvpr_Dokument = SUBSTITUTE('&1-&2_&3.vpr', STRING(bAufko.Knr ,'999999'), STRING(bAufko.Faknr,'9999999'), tParam.cDokument). cvpr_Dokument = SUBSTITUTE(cERPDokumente, cInstallation, 'Rechnungen', cvpr_Dokument). RUN vpr_SaveDoc ( cvpr_Dokument ). DO WHILE tParam.lDokDruck: SESSION:PRINTER-NAME = tParam.Drucker NO-ERROR. IF SESSION:PRINTER-NAME <> tParam.Drucker THEN DO: RUN vpr_printerDialog ( OUTPUT lJa ). IF NOT lJa THEN LEAVE. END. RUN vpr_printDoc (0, 0). LEAVE. END. IF tParam.lCreatePDF THEN DO: cPDFName = REPLACE(cvpr_Dokument, '.vpr', '.pdf'). RUN vpr_printPDF (0, 0, INPUT-OUTPUT cPDFName ). END. IF tParam.lOpenPDF THEN DO: DEFINE VARIABLE o-i AS i NO-UNDO. FILE-INFO:FILE-NAME = cPDFName. cPDFName = FILE-INFO:FULL-PATHNAME. RUN shellExecuteA (0, "open", cPDFName, "", "", 0, OUTPUT o-i). END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-DRUCKEN_KOPF) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE DRUCKEN_KOPF Procedure PROCEDURE DRUCKEN_KOPF : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cString AS CHARACTER NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE iOldSeite AS INTEGER NO-UNDO. FIND FIRST tParam. iOldSeite = iSeite. RUN VIPER_NEUE_SEITE. IF iSeite = 1 THEN DO: FIND bSteuer NO-LOCK WHERE bSteuer.Firma = cFirma. cBesrKopf = ''. IF bAufko.Adresse[05] <> '' THEN DO: i1 = 6. DO ii = 1 TO 5: CREATE tDokument. ASSIGN tDokument.cGruppe = 'KOPF' tDokument.iZeile = 1 tDokument.cFeld = 'Adresse_' + STRING((6 + ii),'99') tDokument.cInhalt = bAufko.Adresse[ii]. i1 = i1 + 1. cBesrKopf[i1] = bAufko.Adresse[ii]. END. END. ELSE DO: DO ii = 5 TO 11: CREATE tDokument. ASSIGN tDokument.cGruppe = 'KOPF' tDokument.iZeile = 1 tDokument.cFeld = 'Adresse_' + STRING(ii,'99') tDokument.cInhalt = bAdresse.Anschrift[ii]. cBesrKopf[ii] = bAdresse.Anschrift[ii]. END. END. CREATE tDokument. ASSIGN tDokument.cGruppe = 'KOPF' tDokument.iZeile = 1 tDokument.cFeld = 'Ort_Datum' tDokument.cInhalt = TRIM(SUBSTRING(cFormText[07],01,20)) + " " + STRING(dFakDatum,"99.99.9999"). cString = (IF bAufko.Auf_Tot >= 0 THEN TRIM(SUBSTRING(cFormText[02],01,20)) ELSE TRIM(SUBSTRING(cFormText[02],21,20))). cString = cString + ' ' + TRIM(STRING(bAufko.Faknr,'>>>>>>9')). CREATE tDokument. ASSIGN tDokument.cGruppe = 'KOPF' tDokument.iZeile = 1 tDokument.cFeld = 'T_Dokument' tDokument.cInhalt = cString. CREATE tDokument. ASSIGN tDokument.cGruppe = 'KOPF' tDokument.iZeile = 1 tDokument.cFeld = 'Knr' tDokument.cInhalt = STRING(bAufko.Fak_Knr,'999999'). END. IF iSeite > iOldSeite THEN RUN DRUCKEN_ADRESSE. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-FUELLEN_tAufze) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE FUELLEN_tAufze Procedure PROCEDURE FUELLEN_tAufze : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipAufnr AS INTEGER NO-UNDO. 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 iRuestArt AS INTEGER NO-UNDO. DEFINE VARIABLE iPlusMinus AS INTEGER NO-UNDO. DEFINE VARIABLE lArtikel AS LOG NO-UNDO. DEFINE VARIABLE cSort AS CHARACTER NO-UNDO. EMPTY TEMP-TABLE tAufze. FIND Steuer NO-LOCK WHERE Steuer.Firma = cFirma NO-ERROR. IF AVAILABLE Steuer THEN iRuestArt = Steuer.RuestArt. ASSIGN minPos = 0 maxPos = 9999 iPlusMinus = 0. /* Kommentar zu Beginn eines Auftrages */ lArtikel = FALSE. FOR EACH Aufze NO-LOCK WHERE Aufze.Firma = cFirma AND Aufze.Aufnr = ipAufnr AND Aufze.Pos > minPos: IF Aufze.Artnr > 0 THEN DO: lArtikel = TRUE. LEAVE. END. minPos = Aufze.Pos. CREATE tAufze. ASSIGN tAufze.Aufnr = Aufze.Aufnr tAufze.Artnr = Aufze.Artnr tAufze.Inhalt = Aufze.Inhalt tAufze.Jahr = Aufze.Jahr tAufze.Pos = Aufze.Pos tAufze.Zeile = RECID(Aufze) tAufze.Aktion = Aufze.Aktion tAufze.Preis = Aufze.Preis tAufze.MGeli = Aufze.MGeli tAufze.MRuek = Aufze.MRuek. ASSIGN tAufze.Sort1 = '' tAufze.Sort2 = STRING(tAufze.Artnr ,'999999') + STRING(tAufze.Inhalt,'9999') + STRING(tAufze.Jahr ,'9999') + STRING(iPlusMinus ,'9') + STRING(tAufze.Pos ,'99999') tAufze.LagOrt = ''. END. /* Kommentar am Ende eines Auftrages */ IF lArtikel THEN DO: FOR EACH Aufze NO-LOCK WHERE Aufze.Firma = cFirma AND Aufze.Aufnr = ipAufnr BY Aufze.Pos DESCENDING: IF Aufze.Artnr > 0 THEN LEAVE. maxPos = Aufze.Pos. CREATE tAufze. ASSIGN tAufze.Aufnr = Aufze.Aufnr tAufze.Artnr = Aufze.Artnr tAufze.Inhalt = Aufze.Inhalt tAufze.Jahr = Aufze.Jahr tAufze.Pos = Aufze.Pos tAufze.Zeile = RECID(Aufze) tAufze.Aktion = Aufze.Aktion tAufze.Preis = Aufze.Preis tAufze.MGeli = Aufze.MGeli tAufze.MRuek = Aufze.MRuek. ASSIGN tAufze.Sort1 = 'ZZZ' tAufze.Sort2 = STRING(tAufze.Artnr ,'999999') + STRING(tAufze.Inhalt,'9999') + STRING(tAufze.Jahr ,'9999') + STRING(iPlusMinus ,'9') + STRING(tAufze.Pos ,'99999') tAufze.LagOrt = ''. END. END. /* Artikelzeilen nach WarenGruppe/ProdGruppen/Artikelgruppen */ cLagOrt = ''. cSort = ''. FOR EACH Aufze NO-LOCK WHERE Aufze.Firma = cFirma AND Aufze.Aufnr = ipAufnr AND Aufze.Pos > minPos AND Aufze.Pos < MaxPos BY Aufze.Pos DESCENDING: IF Aufze.Artnr > 0 THEN DO: FIND Artst NO-LOCK WHERE Artst.Firma = Aufze.Firma AND Artst.Artnr = Aufze.Artnr AND Artst.Inhalt = Aufze.Inhalt AND Artst.Jahr = Aufze.Jahr NO-ERROR. FIND ArtLager NO-LOCK WHERE ArtLager.Firma = Aufze.Firma AND ArtLager.Artnr = Aufze.Artnr AND ArtLager.Inhalt = Aufze.Inhalt AND ArtLager.Jahr = Aufze.Jahr AND ArtLager.Lager = Aufze.Lager NO-ERROR. IF AVAILABLE ArtLager THEN cLagOrt = ArtLager.Ort. ASSIGN iWgr = Artst.Wg_Grp iPgr = Artst.Prod_Grp iAgr = Artst.Art_Grp iArtnr = Artst.Artnr iInhalt = Artst.Inhalt iJahr = Artst.Jahr. END. cSort = STRING(iWgr,'9999') + STRING(iPgr,'9999') + STRING(iAgr,'9999'). iPlusMinus = (IF Aufze.MGeli < 0 THEN 1 ELSE 0). CREATE tAufze. ASSIGN tAufze.Aufnr = Aufze.Aufnr tAufze.Artnr = Aufze.Artnr tAufze.Inhalt = Aufze.Inhalt tAufze.Jahr = Aufze.Jahr tAufze.Pos = Aufze.Pos tAufze.Zeile = RECID(Aufze) tAufze.Aktion = Aufze.Aktion tAufze.Preis = Aufze.Preis tAufze.MGeli = Aufze.MGeli tAufze.MRuek = Aufze.MRuek. ASSIGN tAufze.Sort1 = cSort tAufze.Sort2 = STRING(iArtnr ,'999999') + STRING(iInhalt ,'9999') + STRING(iJahr ,'9999') + STRING(iPlusMinus,'9') + STRING(tAufze.Pos,'99999') tAufze.LagOrt = cLagort. END. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-PRUEFZIFFER) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE PRUEFZIFFER Procedure PROCEDURE PRUEFZIFFER : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ /* ------------------------------------------------------------------------- */ /* Prufziffer MODULO 10, Rekursiv (27 Stellig Ref.-Nr.) */ /* ------------------------------------------------------------------------- */ /* */ /* Uebergabe Variable: 1. String Betrag (12-stellig) */ /* 2. String Referenz (27-stellig) */ /* 3. String Teilnehmernummer ( 9-stellig) */ /* */ /* Erstellung der VESR-Codierzeile */ /* */ /*---------------------------------------------------------------------------*/ DEFINE INPUT-OUTPUT PARAMETER PZBetrag AS CHARACTER FORMAT "x(13)". DEFINE INPUT-OUTPUT PARAMETER PZReferenz AS CHARACTER FORMAT "x(27)". DEFINE INPUT-OUTPUT PARAMETER PZTNummer AS CHARACTER FORMAT "x(09)". DEFINE OUTPUT PARAMETER VSZeile AS CHARACTER FORMAT "x(58)". DEFINE VARIABLE l1 AS INTEGER. DEFINE VARIABLE l2 AS INTEGER. DEFINE VARIABLE l3 AS INTEGER. DEFINE VARIABLE PZ AS INTEGER. DEFINE VARIABLE x1 AS INTEGER. DEFINE VARIABLE x2 AS INTEGER. DEFINE VARIABLE x3 AS INTEGER. DEFINE VARIABLE VMOD10 AS CHARACTER FORMAT "x(11)" EXTENT 11. VMOD10[01] = "09468271350". VMOD10[02] = "94682713509". VMOD10[03] = "46827135098". VMOD10[04] = "68271350947". VMOD10[05] = "82713509466". VMOD10[06] = "27135094685". VMOD10[07] = "71350946824". VMOD10[08] = "13509468273". VMOD10[09] = "35094682712". VMOD10[10] = "50946827131". l1 = 12. l2 = 26. l3 = 08. DO WHILE SUBSTRING(PZBetrag,01,01) <> " ": /* Mit Betrag */ x2 = 1. x1 = INT(SUBSTRING(PZBetrag ,01 ,01)). x2 = INT(SUBSTRING(VMOD10[x2],x1 + 1,01)). DO x3 = 2 TO 12: x1 = INT(SUBSTRING(PZBetrag ,x3 ,01)). x2 = INT(SUBSTRING(VMOD10[x2 + 1],x1 + 1,01)). END. PZ = INT(SUBSTRING(VMOD10[x2 + 1],11,1)). SUBSTRING(PZBetrag,13) = STRING(PZ,"9"). LEAVE. END. DO WHILE SUBSTRING(PZBetrag,01,01) = " ": /* Ohne Betrag */ x2 = 11. x1 = INT(SUBSTRING(PZBetrag ,01 ,01)). x2 = INT(SUBSTRING(VMOD10[x2],x1 + 1,01)). DO x3 = 12 TO 12: x1 = INT(SUBSTRING(PZBetrag ,x3 ,01)). x2 = INT(SUBSTRING(VMOD10[x2 + 1],x1 + 1,01)). END. PZ = INT(SUBSTRING(VMOD10[x2 + 1],11,1)). SUBSTRING(PZBetrag,13) = STRING(PZ,"9"). LEAVE. END. DO WHILE l2 = 26: x2 = 1. x1 = INT(SUBSTRING(PZReferenz,01 ,01)). x2 = INT(SUBSTRING(VMOD10[x2],x1 + 1,01)). DO x3 = 2 TO 26: x1 = INT(SUBSTRING(PZReferenz ,x3 ,01)). x2 = INT(SUBSTRING(VMOD10[x2 + 1],x1 + 1,01)). END. PZ = INT(SUBSTRING(VMOD10[x2 + 1],11,1)). SUBSTRING(PZReferenz,27) = STRING(PZ,"9"). LEAVE. END. DO WHILE l3 = 08: x2 = 1. x1 = INT(SUBSTRING(PZTNummer ,01 ,01)). x2 = INT(SUBSTRING(VMOD10[x2],x1 + 1,01)). DO x3 = 2 TO 08: x1 = INT(SUBSTRING(PZTNummer ,x3 ,01)). x2 = INT(SUBSTRING(VMOD10[x2 + 1],x1 + 1,01)). END. PZ = INT(SUBSTRING(VMOD10[x2 + 1],11,1)). SUBSTRING(PZTNummer,09) = STRING(PZ,"9"). LEAVE. END. VSZeile = "". SUBSTRING(VSZeile,01) = PZBetrag. SUBSTRING(VSZeile,14) = ">". SUBSTRING(VSZeile,15) = PZReferenz. SUBSTRING(VSZeile,42) = "+ ". SUBSTRING(VSZeile,44) = PZTNummer. SUBSTRING(VSZeile,53) = ">". /* SUBSTRING(VSZeile,58) = "H". */ END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-VIPER_CREATE_DOKUMENT) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_CREATE_DOKUMENT Procedure PROCEDURE VIPER_CREATE_DOKUMENT : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ipGruppe AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER ipZeile AS INTEGER NO-UNDO. DEFINE INPUT PARAMETER ipFeld AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER ipInhalt AS CHARACTER NO-UNDO. CREATE tDokument. ASSIGN tDokument.cGruppe = ipGruppe tDokument.iZeile = ipZeile tDokument.cFeld = ipFeld tDokument.cInhalt = ipInhalt. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-VIPER_INIT) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_INIT Procedure PROCEDURE VIPER_INIT : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE cTemplate AS CHARACTER NO-UNDO. DEFINE VARIABLE cDokument AS CHARACTER NO-UNDO. DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO. DEFINE VARIABLE cZelle AS CHARACTER NO-UNDO. DEFINE VARIABLE cGruppe AS CHARACTER NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. FIND FIRST tParam. cTemplate = tParam.cInstall + '/' + tParam.cDokument + '.vfr'. RUN vpr_LoadVFR (cTemplate). RUN vpr_ActivateReport (tParam.cDokument). RUN vpr_SelectPrinter (tParam.Drucker). RUN vpr_setPrinterAttrib('duplex=1'). RUN vpr_SetPrinterAttrib('copies=1'). RUN vpr_ResetDoc. RUN vpr_SetDocAttrib ('PAPERSIZE=A4'). RUN vpr_SetPreviewMode ('Direct'). RUN vpr_setDocTitle (tParam.cDokument). IF iLauf = 1 THEN DO: IF tParam.Schacht_Original > 0 THEN RUN vpr_SetCurrentPageProperties ( "Papertray", tParam.Schacht_Original ). END. ELSE DO: IF tParam.Schacht_Kopie > 0 THEN RUN vpr_SetCurrentPageProperties ( "Papertray", tParam.Schacht_Kopie ). END. RUN vpr_InitGroups(""). RUN vpr_InitGraphObj. RUN vpr_SetGroupAttrib ("Kopf" , "Fixed=true"). RUN vpr_SetGroupAttrib ("Fusszeilen", "Fixed=true"). iMaxPos = 2600. END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF &IF DEFINED(EXCLUDE-VIPER_NEUE_SEITE) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE VIPER_NEUE_SEITE Procedure PROCEDURE VIPER_NEUE_SEITE : /*------------------------------------------------------------------------------ Purpose: Parameters: Notes: ------------------------------------------------------------------------------*/ DEFINE VARIABLE iPos AS INTEGER NO-UNDO. FIND FIRST tParam. DO WHILE TRUE: IF iSeite = 0 THEN DO: iSeite = iSeite + 1. LEAVE. END. iPos = vpr_getPageVPos(). IF (iPos + 160) < iMaxPos THEN DO: iPos = iPos + 20. RUN vpr_setPageVPos ( iPos ). RETURN. END. RUN vpr_NewPage. IF iLauf = 1 THEN RUN vpr_SetCurrentPageProperties ( "Papertray", tParam.Schacht_Original ). ELSE RUN vpr_SetCurrentPageProperties ( "Papertray", tParam.Schacht_Kopie ). iSeite = iSeite + 1. LEAVE. END. RUN vpr_InitGroups(""). RUN vpr_InitGraphObj. RUN vpr_SetGroupAttrib ("Kopf" , "Fixed=true"). RUN vpr_SetGroupAttrib ("Fusszeilen", "Fixed=true"). RUN vpr_flushGroup('Logo'). RUN vpr_flushGroup('Fusszeilen'). iMaxPos = 2600. RUN vpr_setPageVPos ( 1 ). END PROCEDURE. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF /* ************************ Function Implementations ***************** */ &IF DEFINED(EXCLUDE-calcBlock) = 0 &THEN &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calcBlock Procedure FUNCTION calcBlock RETURNS INTEGER (ipGruppe AS CHARACTER): DEFINE VARIABLE cZellen AS CHARACTER NO-UNDO. DEFINE VARIABLE cWerte AS CHARACTER NO-UNDO. DEFINE VARIABLE iSpace AS INTEGER NO-UNDO. DEFINE VARIABLE iGrpHo AS INTEGER NO-UNDO. FOR EACH tDokument WHERE tDokument.cGruppe = ipGruppe BREAK BY tDokument.cGruppe BY tDokument.iZeile : IF FIRST-OF ( tDokument.iZeile ) THEN DO: cZellen = ''. cWerte = ''. END. cWerte = cWerte + tDokument.cInhalt. cZellen = cZellen + tDokument.cFeld. IF NOT LAST-OF ( tDokument.iZeile ) THEN DO: ASSIGN cWerte = cWerte + CHR(01) cZellen = cZellen + ','. NEXT. END. RUN vpr_setGroupText (ipGruppe, cZellen, cWerte). iGrpHo = vpr_getGroupHeight ( ipGruppe ). iSpace = iSpace + iGrpHo. END. RETURN iSpace. END FUNCTION. /* _UIB-CODE-BLOCK-END */ &ANALYZE-RESUME &ENDIF