#include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Appedit.ch" #include "Appbrow.ch" #include "Font.ch" PROCEDURE Rechdruni( cAuf, edrucker, zdate, textjn, anz, lAbr, oDlg1 ) // universelles Rechnungsdruckprogramm fr KSO LOCAL nOldArea := Select(), nRec := RecNo() //+11.10.2018 14:24 LOCAL aLeist1 := {}, aLeist2 := {}, aLeist3 := {}, aLeistA := {} //01.05.2008 16:02 aLeistA LOCAL nL1Sum := 0, nL2Sum := 0, nL3Sum := 0, nLASum := 0 LOCAL n4 := 4 , n5 := 5, nL12 := 0 LOCAL sbetr, grsu, smwsta, smwstb, zae PRIVATE aBlatt := {}, aBlattZ := {}, cAnz, cdate, ctextjn PRIVATE cSeite, cNa, cPrompt, cText, nTFont, cBereich, cFeld, nFFont, nZei, nSpa PRIVATE aSeite := {}, aNa := {}, aPrompt := {}, aText := {}, aTFont := {} PRIVATE aBereich := {}, aFeld := {}, aFFont := {}, aZei := {}, aSpa := {} /*21.05.2008 18:25 */ IF xdmeu="D" /* DM darf nicht mehr gebraucht werden fr neue F„lle!! */ RETURN ENDIF /**/ RechnungZeilenKorrektur(cAuf) //+21.10.2018 19:21 nAnz := IIf(ValType(anz)=="C",Val(anz),anz) //+22.10.2018 12:26 //nAnz := anz IF ValType(oDlg1) == "O" //+22.10.2018 11:57 <> NIL aPrompt := { "Datum:", "Sarg-Text:", "Anzahl Drucke:", "Briefkopf:" } aText := { zdate, textjn, Str(anz,1,0), "n" } aFeld := { "cdate", "ctextjn", "cAnz", "cBriefKopf" } FOR i = 1 TO Len(aFeld) cSeite := "p" cNa := "t" cPrompt := aPrompt[i] cText := aText[i] nTFont := 0 cBereich := "v" cFeld := aFeld[i] nFFont := " " nZei := 0 nSpa := 0 AAdd( aBlatt, { cSeite, cNa, cPrompt, cText, nTFont, ; cBereich, cFeld, nFFont, nZei, nSpa }, i ) NEXT aBlatt := BSEingabe( aBlatt, oDlg1 ) IF ValType(aBlatt) == "L" .AND. aBlatt == .F. //+21.10.2018 18:45 Druck wird abgebrochen mit ESC RETURN ENDIF FOR i := 1 to Len( aBlatt ) aBlattZ := aBlatt[i] // AAdd( aSeite, aBlattZ[1] ) // AAdd( aNa, aBlattZ[2] ) // AAdd( aPrompt, aBlattZ[3] ) AAdd( aText, aBlattZ[4] ) // AAdd( aTFont, aBlattZ[5] ) // AAdd( aBereich, aBlattZ[6] ) AAdd( aFeld, aBlattZ[7] ) // Feldbezeichnung // AAdd( aFFont, aBlattZ[8] ) // AAdd( aZei, aBlattZ[9] ) // AAdd( aSpa, aBlattZ[10] ) cText := aBlattZ[4] cFeld := aBlattZ[7] IF !Empty( cFeld ) &cFeld := Trim( cText ) ENDIF NEXT zdate := cdate textjn := ctextjn nAnz := Val( cAnz ) nArea := 13 ELSEIF ValType(oDlg1) == "L" nArea := 13 ELSE nArea := 3 aData2 := Array(FCount()) ENDIF // DO WHILE nAnz > 0 ASize( aLeist1, 0 ); ASize( aLeist2, 0 ); ASize( aLeist3, 0 ); ASize( aLeistA, 0 ) SELECT &nArea IF nArea == 3 FIND &cAuf ELSE GO TOP ENDIF DbSuspendNotifications() //05.03.2008 13:06 DO WHILE Auftrnr == Val( cAuf ) .AND. .NOT. Eof() DO CASE CASE rn == "A" //01.05.2008 21:55 AAdd( aLeistA, bezeich ) AAdd( aLeistA, &b_g ) AAdd( aLeistA, mwst_schl ) AAdd( aLeistA, rn ) nLASum += &b_g //+27.10.2018 21:44 CASE rn == " " AAdd( aLeist1, bezeich ) // AAdd( aLeist1, bezeichF1 ) AAdd( aLeist1, &b_g ) AAdd( aLeist1, mwst_schl ) AAdd( aLeist1, rn ) nL1Sum += &b_g //+27.10.2018 21:44 CASE rn == "2" AAdd( aLeist2, bezeich ) // AAdd( aLeist2, bezeichF1 ) AAdd( aLeist2, &b_g ) AAdd( aLeist2, mwst_schl ) AAdd( aLeist2, rn ) nL2Sum += &b_g //+27.10.2018 21:44 CASE rn == "3" AAdd( aLeist3, bezeichf1 ) AAdd( aLeist3, bezeichf2 ) AAdd( aLeist3, &b_g ) AAdd( aLeist3, mwst_schl ) AAdd( aLeist3, rn ) nL3Sum += &b_g //+27.10.2018 21:44 ENDCASE SKIP ENDDO //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv //+27.10.2018 21:45 Vergleich der gerade erstellten aktuellen Summen mit den Summen in best.dbf IF nLASum != 1->&r_b_1h ENDIF //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DbResumeNotifications() //05.03.2008 13:06 nL1 := Len( aLeist1 ) nL2 := Len( aLeist2 ) nL3 := Len( aLeist3 ) nLA := Len( aLeistA ) //01.05.2008 16:06 IF nAnz == 0 .AND. !Upper(anz) == "W" //+30.10.2018 12:03 AAdd( aLeist1, 0, nL1+1 ) AAdd( aLeist1, 0, nL1+2 ) AAdd( aLeist2, 0, nL2+1 ) AAdd( aLeist2, 0, nL2+2 ) AAdd( aLeistA, 0, nLA+1 ) //01.05.2008 16:06 AAdd( aLeistA, 0, nLA+2 ) //01.05.2008 16:07 ELSE AAdd( aLeist1, 0, nL1+1 ) AAdd( aLeist1, 0, nL1+2 ) AAdd( aLeist1, 0, nL1+3 ) AAdd( aLeist1, 0, nL1+4 ) AAdd( aLeist2, 0, nL2+1 ) AAdd( aLeist2, 0, nL2+2 ) AAdd( aLeist2, 0, nL2+3 ) AAdd( aLeist2, 0, nL2+4 ) AAdd( aLeistA, 0, nLA+1 ) //01.05.2008 16:06 AAdd( aLeistA, 0, nLA+2 ) //01.05.2008 16:07 AAdd( aLeistA, 0, nLA+3 ) //01.05.2008 16:06 AAdd( aLeistA, 0, nLA+4 ) //01.05.2008 16:07 ENDIF ////nL12 := int( nL1/5 + nL2/5 ) // aus 4 mach 5 //////wird nur gebraucht, um die Optik zu korrigieren! nL12 := int( Len( aLeist1 )/4 + Len( aLeist2 )/4 + Len( aLeistA )/4 ) //01.05.2008 16:08 select 20 use drubef edrucker=upper(edrucker) if edrucker="E" z12p=trim(ep12p) z14p=trim(ep14p) znorm=trim(epnorm) nPoffY:= Val(SubStr(epres5,1,3)) nPoffX:= Val(SubStr(epres5,4,3)) nPpZ := Val( Substr( 20->hpres5, 7, 3 ) ) //10.01.2008 09:23 nPpS := Val( Substr( 20->hpres5, 10, 3 ) ) //10.01.2008 09:23 else z12p=trim(hp12p) z14p=trim(hp14p) znorm=trim(hpnorm) nPoffY:= Val(SubStr(hpres5,1,3)) nPoffX:= Val(SubStr(hpres5,4,3)) nPpZ := Val( Substr( 20->epres5, 7, 3 ) ) //10.01.2008 09:23 nPpS := Val( Substr( 20->epres5, 10, 3 ) ) //10.01.2008 09:23 endif USE //+25.06.2018 18:33 wenn anz == w, dann wird nur der HTML-File ausgegeben auf swriter vvvvvvvv IF nAnz == 0 .AND. Upper(anz) == "W" //+29.10.2018 21:34 cDruckabr := "c:\hdbe\dHTML.abr" // Text fr HTML-File ++nAnz ELSE cDruckabr := "c:\hdbe\dummy.abr" // Dummy, damit berechnet wird ENDIF nAnzahl := nAnz //+30.10.2018 17:47 hierher aus Zeile 131 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DO WHILE nAnz > 0 //von oben SELECT 1 find &cAuf // IF oDlg1 != NIL // SET DEVICE TO PRINTW // ELSE // SET DEVICE TO PRINTER // // Set( _SET_DEVICE, "PRINTER" ) // ENDIF // IF nAnz>1 /* 03.07.2008 18:14 in Dummydatei, damit endbetr berechnet wird -auch ohne Druck! */ IF !Upper(anz)=="W" //+30.10.2018 08:53 SET DEVICE TO PRINTW ELSE --nAnz Set( _SET_DEVICE, "PRINTER" ) // damit PRINTW umgangen wird: schreiben in eine Datei cPrintFile := Set( _SET_PRINTFILE, cDruckabr ) // in cPrintfile ist jetzt die VORIGE Einstellung! ENDIF @ 06,8 say ansp_anr @ 07,8 say trim(ansp_vname) + " " + ansp_name @ 08,8 say ansp_str @ 10,8 say ansp_ort //@ 11,47 say cAuf + " / " + zdate @ 12,55 say cAuf + " / " + zdate //18.07.2006 16:18 //zae := 13 //@ zae,21 say Z1214(chr(27)+z12p)+trim(anrede)+" "+trim(vorname)+ " "+name //zae=zae+1 //@ zae,21 say Z1214(chr(27)+znorm)+" " zae := 14 //18.07.2006 16:18 @ zae,25 say Z1214(chr(27)+z12p)+trim(anrede)+" "+trim(vorname)+ " "+name zae=zae+1 @ zae,25 say Z1214(chr(27)+znorm)+" " zae := zae+2 zae := IIf( nL12<7, zae+7-nL12, zae ) //nL1 := Len( aLeist1 ) nLL := nL1 IF nL1 > 0 @ ++zae,10 say "Leistung I:" aLeist1 := Leistdruck( aLeist1, n4, @zae ) @ ++zae,60 say "--------" @ ++zae,36 say "Summe I" @ zae,57 say w_g @ zae,60 say str( aLeist1[nL1+1],8,2 ) @ ++zae,60 say "========" ELSE AAdd( aLeist1, 0, 1 ) AAdd( aLeist1, 0, 2 ) ENDIF //++zae //nL2 := Len( aLeist2 ) nLL := nL2 IF nL2 > 0 @ ++zae,10 say "Leistung II:" aLeist2 := Leistdruck( aLeist2, n4, @zae ) @ ++zae,60 say "--------" @ ++zae,36 say "Summe II" @ zae,57 say w_g @ zae,60 say str( aLeist2[nL2+1],8,2 ) @ ++zae,60 say "========" ELSE AAdd( aLeist2, 0, 1 ) AAdd( aLeist2, 0, 2 ) ENDIF ++zae /*01.05.2008 16:11 fr die LeistungA: */ nLL := nLA IF nLA > 0 @ ++zae,10 say "Leistung III:" aLeistA := Leistdruck( aLeistA, n4, @zae ) @ ++zae,60 say "--------" @ ++zae,36 say "Summe III" @ zae,57 say w_g @ zae,60 say str( aLeistA[nLA+1],8,2 ) @ ++zae,60 say "========" ELSE AAdd( aLeistA, 0, 1 ) AAdd( aLeistA, 0, 2 ) ENDIF ++zae /**/ @ ++zae,36 say "Leistungen I" @ zae,57 say w_g @ zae,60 say str( aLeist1[nL1+1],8,2 ) @ ++zae,34 say "+ Leistungen II" @ zae,57 say w_g @ zae,60 say str( aLeist2[nL2+1],8,2 ) IF aLeistA[nLA+1] != 0 @ ++zae,34 say "+ Leistungen III" @ zae,57 say w_g @ zae,60 say str( aLeistA[nLA+1],8,2 ) ENDIF @ ++zae,60 say "--------" /*01.05.2008 16:14 aLeistA[nLA+1] tr„gt auch zur Gesamtsumme (nLA+2) bei: */ aLeist1[nL1+2] := aLeist2[nL2+2] := aLeistA[nLA+2] := aLeist1[nL1+1] + aLeist2[nL2+1] + aLeistA[nLA+1] @ ++zae,36 say "Gesamtsumme" @ zae,57 say w_g @ zae,60 say str( aLeist1[nL1+2],8,2 ) @ ++zae,60 say "========" if Upper( textjn ) = "J" select 9 use ksotexte ++zae zae := IIf( zae<45, 45, zae ) @ ++zae,12 say rtext1 @ ++zae,12 say rtext2 @ ++zae,12 say rtext3 @ ++zae,12 say rtext4 @ ++zae,12 say rtext5 @ ++zae,12 say rtext6 @ ++zae,12 say rtext7 @ ++zae,12 say rtext8 @ ++zae,12 say rtext9 use endif // aLeist3 := Leistdruck( aLeist3, n5, zae ) IF cLPT = "LPT1" EJECT lSeiteleer := .F. ENDIF --nAnz IF nAnz > 0 aLeist1[nL1+1] := 0 aLeist1[nL1+2] := 0 aLeist2[nL2+1] := 0 aLeist2[nL2+2] := 0 aLeistA[nLA+1] := 0 //01.05.2008 16:15 aLeistA[nLA+2] := 0 //01.05.2008 16:15 ENDIF // SET DEVICE TO SCREEN // //Set( _SET_DEVICE, "SCREEN" ) //... aus R5L: 29.10.2018 21:53 IF nAnz >= 0 /*03.07.2008 18:17 s.o. Dummydruck, um endbetr auszurechnen */ SET DEVICE TO SCREEN ELSE Set( _SET_PRINTFILE, cPrintFile ) // 03.07.2008 18:17 Set( _SET_DEVICE, "SCREEN" ) // weil Ausdruck in File umgeleitet war ENDIF ENDDO //+25.06.2018 18:42 Aufruf von swriter mit dem HTML-Druckfile: vvvvvvvvvvvvvvvvvvvvv IF cDruckabr == "c:\hdbe\dHTML.abr" HTML_Brief(cDruckabr,,"Courier New, monospace", "11pt", "1cm 1cm 1cm 2cm") ENDIF //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ select 1 IF &r_b_1 <> aLeist1[nL1+1] .AND. nAnzahl > 0 satzsperren() //* damit die erg„nzten BestFallDaten auch bertragen werden aData1 := SatzGet( Select(), RecNo() ) *// IF xdmeu="D" /* DM darf nicht mehr gebraucht werden fr neue F„lle!! */ // 21.05.2008 18:19 repl &r_b_1 with aLeist1[nL1+1] // 21.05.2008 18:16 repl &r_b_1h with aLeist1[nL1+1]/xfaktor ELSE repl &r_b_1 with aLeist1[nL1+1] // 21.05.2008 18:16 repl &r_b_1h with aLeist1[nL1+1]*xfaktor ENDIF //* damit die erg„nzten BestFallDaten auch bertragen werden trckng( Select(), RecNo(), aData1 ) *// satzentsperren() ENDIF IF &r_b_2 <> aLeist2[nL2+1] .AND. nAnzahl > 0 satzsperren() //* damit die erg„nzten BestFallDaten auch bertragen werden aData1 := SatzGet( Select(), RecNo() ) *// IF xdmeu="D" /* DM darf nicht mehr gebraucht werden fr neue F„lle!! */ // 21.05.2008 18:19 repl &r_b_2 with aLeist2[nL2+1] // 21.05.2008 18:16 repl &r_b_2h with aLeist2[nL2+1]/xfaktor ELSE repl &r_b_2 with aLeist2[nL2+1] // 21.05.2008 18:17 repl &r_b_2h with aLeist2[nL2+1]*xfaktor ENDIF //* damit die erg„nzten BestFallDaten auch bertragen werden trckng( Select(), RecNo(), aData1 ) *// satzentsperren() ENDIF /*04.05.2008 22:11 wird (noch) nicht in best.dbf abgespeichert */ /*21.05.2008 18:17 ab jetzt werden die Hintergrundw„hrungsfelder fr Leistung III und Fremdleistung verwendet */ IF nAnzahl > 0 satzsperren() //* damit die erg„nzten BestFallDaten auch bertragen werden aData1 := SatzGet( Select(), RecNo() ) *// IF xdmeu="D" /* DM darf nicht mehr gebraucht werden fr neue F„lle!! */ // 21.05.2008 18:18 repl &r_b_1 with aLeistA[nLA+1] // 21.05.2008 18:19 repl &r_b_1h with aLeistA[nLA+1]/xfaktor ELSE // 21.05.2008 18:18 repl &r_b_1 with aLeistA[nLA+1] repl &r_b_1h with aLeistA[nLA+1] repl rech_dat WITH CtoD(zdate) //+16.07.2008 21:08 zdate ist "C" ENDIF //* damit die erg„nzten BestFallDaten auch bertragen werden trckng( Select(), RecNo(), aData1 ) *// satzentsperren() ENDIF /**/ IF nArea == 13 //+30.10.2018 12:53 nur wenn normaler Rechnungsdruck mit BregieR3L // Anfang Schreiben der Auftrag-Backup-Datei SELECT 9 USE AUFTR_B SELECT &nArea // DELETE FOR 13->auftrnr <> Val( cAuf ) // PACK DbGotop() //05.03.2008 13:09 DbSuspendNotifications() INDEX ON Str(auftrnr,6,0)+rn+kennz+zeile TO C:\HDBE\xtemp nZeile := 0 FOR nt := 0 TO 2 STEP 2 SELECT &nArea IF .NOT. Bof() GO TOP ENDIF DO WHILE .NOT. Eof() IF Val( (nArea)->rn ) <> nt .OR. (nArea)->auftrnr != 1->auftrnr SKIP LOOP ENDIF ++nZeile For n := 1 to FCount() aData2[n] := FieldGet( n ) NEXT SELECT 9 APPEND BLANK For n := 1 to FCount() FieldPut( n, aData2[n] ) NEXT REPLACE 9->zeile WITH Str( nZeile,2,0 ) DbRUnlock( Recno() ) SELECT &nArea SKIP ENDDO NEXT /*01.05.2008 16:19 fr LeistungIII */ GO TOP DO WHILE .NOT. Eof() IF (nArea)->rn != "A" .OR. (nArea)->auftrnr != 1->auftrnr SKIP LOOP ENDIF ++nZeile For n := 1 to FCount() aData2[n] := FieldGet( n ) NEXT SELECT 9 APPEND BLANK For n := 1 to FCount() FieldPut( n, aData2[n] ) NEXT REPLACE 9->zeile WITH Str( nZeile,2,0 ) DbRUnlock( Recno() ) SELECT &nArea SKIP ENDDO SELECT 9 USE SELECT &nArea SET INDEX TO DbGotop() //05.03.2008 13:10 DbResumeNotifications() // Ende Schreiben der Auftrag-Backup-Datei ENDIF SELECT &nOldArea DbGoto(nRec) //+11.10.2018 14:25 RETURN FUNCTION Leistdruck( aLeist, n, zae ) IF zae > 0 //04.05.2008 17:11 s.u. IF n == 4 // FOR i := 5 to ( nLL + 1 ) STEP 5 // die zweite Zeile der Bezeichnung FOR i := n to ( nLL + 1 ) STEP n // @ ++zae,10 say aLeist[i-4] // IF Len(Trim(aLeist[i-3])) > 0 @ ++zae,10 say aLeist[i-3] // ENDIF @ zae,57 say w_g @ zae,60 say str( aLeist[i-2],8,2 ) aLeist[nLL+1]=aLeist[nLL+1] + aLeist[i-2] aLeist[nLL+2]=aLeist[nLL+2] + aLeist[i-2] if aLeist[i-1]="3" aLeist[nLL+3]=aLeist[nLL+3] + (aLeist[i-2] / (100+zschl_voll) * zschl_voll) endif if aLeist[i-1]="2" aLeist[nLL+4]=aLeist[nLL+4] + (aLeist[i-2] / (100+zschl_halb) * zschl_halb) endif NEXT ELSE AAdd( aLeist, 0, nLL+5 ) FOR i := n to ( nLL + 1 ) STEP n @ ++zae,5 say "Rechnung-"+Substr(aLeist[i-4],1,34)+"-"+aLeist[i-3] @ zae,64 say w_g @ zae,67 say str( aLeist[i-2],8,2 ) aLeist[nLL+1]=aLeist[nLL+1] + aLeist[i-2] aLeist[nLL+2]=aLeist[nLL+2] + aLeist[i-2] if aLeist[i-1]="3" aLeist[nLL+3]=aLeist[nLL+3] + (aLeist[i-2] / (100+zschl_voll) * zschl_voll) endif if aLeist[i-1]="2" aLeist[nLL+4]=aLeist[nLL+4] + (aLeist[i-2] / (100+zschl_halb) * zschl_halb) endif NEXT ENDIF ELSEIF zae == 0 //04.05.2008 17:10 rechnet in Aufstellung die Vorfinanzierungskosten aus: FOR i := n to ( nLL + 1 ) STEP n aLeist[nLL+1]=aLeist[nLL+1] + aLeist[i-2] aLeist[nLL+2]=aLeist[nLL+2] + aLeist[i-2] NEXT ENDIF RETURN aLeist FUNCTION BSEingabe( aBlatt, oDlg1 ) LOCAL oDlg, nEvent, mp1, mp2 LOCAL aSizeDesktop := AppDesktop():currentSize() LOCAL nBSb := aSizeDesktop[1] LOCAL nBSh := aSizeDesktop[2] // folgende Zahlen-Werte basieren auf 800x600: LOCAL nV := nBSb/800 // Korrekturfaktor fr tats„chliche Aufl”sung LOCAL nOldArea := Select() LOCAL aEditcontrols := {} // LOCAL oFocus := SetAppFocus() LOCAL aSeite := {}, aNa := {}, aPrompt := {}, aText := {}, aTFont := {} LOCAL aBereich := {}, aFeld := {}, aFFont := {}, aZei := {}, aSpa := {} PRIVATE oWin := oDlg1 cFont := IIf( nBSb < 700, "7.Arial", "8.Arial" ) oDlg := XbpDialog():new( AppDeskTop(), oDlg1 ) oDlg:tasklist := .T. oDlg:title := "Felder korrigieren/eingeben" oDlg:maxButton := .F. oDlg:clipSiblings := .T. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10,10}, {int(740*nV),int(460*nV)} ) oDlg:drawingArea:setFontCompoundName( "8.Arial" ) oDlg:drawingArea:setColorBG( GRA_CLR_DARKGREEN ) oCB := oDlg:drawingArea oCB:clipSiblings := .T. nBo := int(430*nV) nBr := 0 j := 0 FOR i := 1 to Len( aBlatt ) aBlattZ := aBlatt[i] AAdd( aSeite, aBlattZ[1] ) AAdd( aNa, aBlattZ[2] ) AAdd( aPrompt, aBlattZ[3] ) AAdd( aText, aBlattZ[4] ) AAdd( aTFont, aBlattZ[5] ) AAdd( aBereich, aBlattZ[6] ) AAdd( aFeld, aBlattZ[7] ) // Feldbezeichnung AAdd( aFFont, aBlattZ[8] ) AAdd( aZei, aBlattZ[9] ) AAdd( aSpa, aBlattZ[10] ) // fr die Positionierung im Editierfenster: nBr := IIf( i<>1 .AND. (aSeite[i]="n" .OR. nBo-Int(j*25*nV) < Int(30*nV)), ; (nBr+Int(370*nV)), nBr ) j := IIf( nBo-Int(j*25*nV) < Int(30*nV) .OR. aSeite[i]="n", 0, j ) IF Upper( aSeite[i] ) = "R" .OR. Upper( aSeite[i] ) = "V" // keine Žnderungen, wenn es sich um "Rechnungszeilen" handelt AAdd( aEditcontrols, aFeld[i] ) ELSE IF aNa[i] = "t" // Text ist zu ver„ndern // aText[i] := aText[i]+Space(70-len(aText[i])) oXbp := XbpStatic():new( oDlg:drawingArea, , {nBr+int(30*nV),nBo-int(++j*25*nV)}, {int(100*nV),int(25*nV)}) oXbp:caption := aPrompt[i] oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle := XbpSLE():new( oDlg:drawingArea, , {nBr+int(140*nV),nBo-int(j*25*nV)}, {int(200*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := 70 oSle:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle:group := XBP_WITHIN_GROUP oSle:dataLink := {|x| IIf( PCOUNT()==0, Trim( aText[i] ), aText[i] := x ) } oSle:create():setData() AAdd( aEditcontrols, oSle ) // IF ASC( aFeld[i] ) > 32 cB := aBereich[i] ; cF := aFeld[i] IF !Empty( cF ) .AND. Val( cB ) > 0 aFeld[i] := ((&cB)->(&cF)) //Feldinhalt ENDIF ELSEIF aNa[i] = "f" // Feldinhalt soll editiert werden cB := aBereich[i] ; cF := aFeld[i] xF := ( (&cB)->(&cF) ) //Feldinhalt DO CASE CASE Valtype( xF ) == "C" aFeld[i] := xF CASE ValType( xF ) == "N" aFeld[i] := Str( xF ) CASE ValType( xF ) == "D" aFeld[i] := DtoC( xF ) ENDCASE oXbp := XbpStatic():new( oDlg:drawingArea, , {nBr+int(30*nV),nBo-int(++j*25*nV)}, {int(100*nV),int(25*nV)}) oXbp:caption := aPrompt[i] oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle := XbpSLE():new( oDlg:drawingArea, , {nBr+int(140*nV),nBo-int(j*25*nV)}, {int(200*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := 50 oSle:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle:group := XBP_WITHIN_GROUP oSle:dataLink := {|x| IIf( PCOUNT()==0, Trim( aFeld[i] ), aFeld[i] := x ) } oSle:create():setData() AAdd( aEditcontrols, oSle ) aText[i] := "" ELSEIF aNa[i] = "v" .AND. aBereich[i] = "v" // Variable soll editiert werden cF := aFeld[i] xF := &(cF) //Variableninhalt DO CASE CASE Valtype( xF ) == "C" aFeld[i] := xF CASE ValType( xF ) == "N" aFeld[i] := Str( xF ) CASE ValType( xF ) == "D" aFeld[i] := DtoC( xF ) ENDCASE oXbp := XbpStatic():new( oDlg:drawingArea, , {nBr+int(30*nV),nBo-int(++j*25*nV)}, {int(100*nV),int(25*nV)}) oXbp:caption := aPrompt[i] oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle := XbpSLE():new( oDlg:drawingArea, , {nBr+int(140*nV),nBo-int(j*25*nV)}, {int(200*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := 50 oSle:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle:group := XBP_WITHIN_GROUP oSle:dataLink := {|x| IIf( PCOUNT()==0, Trim( aFeld[i] ), aFeld[i] := x ) } oSle:create():setData() AAdd( aEditcontrols, oSle ) ELSEIF aNa[i] <> "v" .AND. aBereich[i] = "v" // im aFeld steht Mem-Variable cF := aFeld[i] aFeld[i] := "&(" + cF + ")" AAdd( aEditcontrols, aFeld[i] ) ELSE IF ASC( aFeld[i] ) > 32 cB := aBereich[i] ; cF := aFeld[i] aFeld[i] := ((&cB)->(&cF)) //Feldinhalt ENDIF AAdd( aEditcontrols, aFeld[i] ) ENDIF IF ValType(cF)="C" IF Upper(cF) = "FAM" .OR. Upper(cF) = "KONF" aFeld[i] := Kurzlang( aFeld[i] ) ENDIF ENDIF ENDIF NEXT i=1 oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() IF Len( aEditcontrols ) > 0 .AND. ValType( aEditControls[1] ) = "O" oFocus := SetAppFocus( aEditcontrols[1] ) ELSE oFocus := SetAppFocus( oDlg ) ENDIF DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeM_LbDblClick PostAppEvent( xbeP_Close) ENDIF IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_ESC lFluchtB := .T. //+21.10.2018 18:41 ESC bricht jetzt das Drucken ab PostAppEvent( xbeP_Close) CASE mp1 == xbeK_F10 PostAppEvent( xbeP_Close) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO IF lFluchtB == .F. //+21.10.2018 18:42 zum Abbrechen des Drucks // wie Gather( aEditcontrols ) : FOR i := 1 TO len( aEditcontrols ) IF ValType( aEditcontrols[i] ) == "O" IF aNa[i] == "t" aText[i] := aEditcontrols[i]:getdata() ELSE aFeld[i] := aEditcontrols[i]:getdata() ENDIF ENDIF NEXT FOR i=1 to len(aBlatt) aBlattZ := { aSeite[i], aNa[i], aPrompt[i], Trim(aText[i]), aTFont[i], aBereich[i], ; IIf( ValType(aFeld[i])="C", Trim(aFeld[i]), aFeld[i]), ; aFFont[i], aZei[i], aSpa[i] } aBlatt[i] := aBlattZ NEXT ELSE aBlatt := .F. ENDIF oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() SetAppFocus( oFocus ) SELECT &nOldArea RETURN aBlatt FUNCTION Z1214(a) DO CASE CASE cLPT = "LPTA" .and. a = chr(27)+z12p aFonts := {"12.COURIER NEW Fett"} a := "" CASE cLPT = "LPTA" .and. a = chr(27)+z14p aFonts := {"14.COURIER NEW Fett"} a := "" CASE cLPT = "LPTA" .and. a = chr(27)+znorm aFonts := {"12.COURIER NEW"} a := "" CASE cLPT != "LPTA" aFonts := {} ENDCASE //+25.06.2018 19:21 bei HTML-Druck auf Fettdruck schalten: vvvvvvvvvvvvvvv IF isMemVar("cDruckabr") .AND. "HTML"$cDruckabr IF "Fett"$aFonts[1] a := "" ELSEIF Len(aFonts) = 1 a := "" ENDIF ENDIF //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RETURN a //+21.10.2018 19:22 macht das vor dem Drucken, was sonst erst vor dem Speichern in auftr.dbf gemacht wird: FUNCTION RechnungZeilenKorrektur(cAuf) LOCAL nOldArea := SELECT() LOCAL nZeile := 0, nRec := RecNo() DbSuspendNotifications() IF ConfirmBox( oCB, "Soll die Rechnung geprft und korrigiert werden?" + CRLF +; "(Zeilen ohne Artikelnr oder Artikelbezeichnung l”schen.)", ; "Abrechnungs-Zeilen Checken", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO DbResumeNotifications() RETURN .F. ENDIF SELECT 13 // DELETE ALL FOR 13->auftrnr <> Val( cAuf ) .OR. ( Empty(13->zugr_z_st) .AND. Empty(13->bezeichf1)) //+14.10.2018 13:43 statt der Vorzeile folgende Schleife: // hier wird die Temp-Datei von leeren und falschen Zeilen befreit (siehe auch BregieR5L.prg) *** DbGotop() DO WHILE !Eof() IF 13->auftrnr <> Val( cAuf ) .AND. ( !Empty(13->zugr_z_st) .AND. !Empty(13->bezeich)) IF ConfirmBox( oCB, "Zeile erg„nzen+behalten=ja - Zeile l”schen=nein", ; "Zeile "+13->zeile+" hat noch keine Auftragsnummer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES 13->auftrnr := Val(cAuf) ELSE DbDelete() ENDIF ELSEIF 13->auftrnr == Val( cAuf ) .AND. (Empty(13->zugr_z_st) .OR. Empty(13->bezeich)) IF ConfirmBox( oCB, "Zeile behalten=ja - Zeile l”schen=nein", ; "Zeile "+13->zeile+": Artikelnr oder -bezeichnung ist leer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES 13->auftrnr := Val(cAuf) // vorsichtshalber ... ELSE DbDelete() ENDIF ELSEIF 13->auftrnr <> Val( cAuf ) DbDelete() // der Rest: keine/falsche Auftragsnummer und leere Zeilen ENDIF DbSkip() ENDDO // bis hier geht die neue DELETE-Routine vom 14.10.2018 PACK IF .NOT. Bof() GO TOP ENDIF DO WHILE .NOT. Eof() ++nZeile REPLACE 13->zeile WITH Str( nZeile,2,0 ) DbSkip() ENDDO DO WHILE Recno() < 20 APPEND BLANK ENDDO SELECT &nOldArea DbCommit() DbResumeNotifications() DbGotop() DbGoto(nRec) RETURN .T.