**BRegieR5.prg - Regie-Zentrum fr Bestattungsverwaltung // Aufstellung/Abrechnung zu einem Auftrag #include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Appedit.ch" #include "Appbrow.ch" #include "Font.ch" #include "xbpdev.ch" #include "Dmlb.ch" #include "Fileio.ch" FUNCTION Rech5Eingabe( cAuf, oDlg1 ) LOCAL oDlg, nEvent, mp1, mp2, oXbp, aEdit := {} LOCAL aSizeDesktop := AppDesktop():currentSize() LOCAL nBSb := aSizeDesktop[1] LOCAL nBSh := aSizeDesktop[2] LOCAL nOldArea := Select() LOCAL cArt := Trim( "5000" ) LOCAL lFlucht := .F., nFlucht LOCAL aEditcontrols := {} //+22.10.2018 11:05 PRIVATE dDatum, dDatum14, dDatum8, cKuvert := "n", cAnzahl := "1", cAnzbeg := "0" //+22.10.2018 21:50 PRIVATE oCB // folgende Zahlen-Werte basieren auf 800x600: PRIVATE nH := nBSb/800 // Korrekturfaktor fr tats„chliche Aufl”sung PRIVATE nV := nBSh/600, nHV := nH/nV //+07.06.2011 17:28 PRIVATE oEdit, oBrowse PRIVATE nZeile := 0, a3 := {}, lModi := .F. // lModi : Rechnung modifiziert? .T. == JA PRIVATE lTrans := .T. //+02.05.2017 21:20 um bei R5Doppelt() tauftr.dbf NICHT zu beschreiben PRIVATE nVSum := 0, nASum := 0, nGSum := 0 PRIVATE nSumme := 0 , nSummeI := 0 , nSummeII := 0 , nSummeIII := 0 PRIVATE aFelder, aStructure //+16.10.2018 10:00 //vvv +13.11.2018 17:42 Name der Auf5temp, Art der 'besetzt'-Meldung und Reihenfolge ge„ndert:vvvvvvvvvvv cAuf5temp := "auf5"+PadL(cAuf,6,"0") //+13.11.2018 17:32 statt: LTrim(Str(Int(Seconds()/10))) DO WHILE FExists( cDatver+cAuf5temp+".dbf" ) IF ModalFen( "Aufstellung wird schon bearbeitet! ; " + ; "Nochmal versuchen? ; " + ; "(Abbrechen mit ESC) ", ; "A C H T U N G !", ; oDlg1 ) == "ESC" RETURN .F. ELSE IF FErase( cDatver+cAuf5temp+".dbf" ) != 0 LOOP ENDIF ENDIF ENDDO //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SELECT 3 COPY STRU TO (cDatver+cAuf5temp) aData1 := Array(FCount()) aData2 := Array(FCount()) aDataD := Array(FCount()) //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SELECT 2 DbSeek(cAuf,.F.) //13.11.2018 17:31 statt FIND &cAuf DO WHILE 2->auftrnr = Val( cAuf ) .AND. .NOT. Eof() nVSum := nVSum + &b_b_g SKIP ENDDO SELECT 13 USE (cAuf5temp) EXCLUSIVE SELECT 3 //+12.10.2018 11:35 IF AppKeyState(65553)==1 //+16.10.2018 10:09 nur bei gedrckter Strg-Taste // REINDEX IF !R5IndexCheck() IF ConfirmBox( oCB, "M”chten Sie das Programm abbrechen?", ; "IndexFehler!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES RETURN .F. ENDIF ENDIF ENDIF DbSeek(cAuf,.F.) //+12.10.2018 11:35 bisher: FIND &cAuf DO WHILE 3->auftrnr=val(cAuf) .and. .not. eof() IF 3->rn = "3" // Satzsp( oDlg ) // sperren fr die anderen??? Ja: seit 21.7.02 :: // 13.11.2018 17:36 nach vorne verlegt: // IF DbRLock( RecNo() ) // ELSE // IF ModalFen( "Aufstellung wird schon bearbeitet! Nochmal?",, oDlg1 ) == "ESC" // SELECT 13 // USE // FErase( cDatver+cAuf5temp+".dbf" ) // Select &nOldArea // RETURN .F. // ELSE // LOOP // ENDIF // ENDIF For n := 1 to FCount() aData2[n] := FieldGet( n ) NEXT AAdd( a3, Recno() ) SELECT 13 APPEND BLANK For n := 1 to FCount() FieldPut( n, aData2[n] ) NEXT SELECT 3 ELSEIF 3->rn = "A" //04.05.2008 21:21 nSummeIII := nSummeIII + 3->(&b_g) ELSEIF 3->rn = "2" nSummeII := nSummeII + 3->(&b_g) ELSE nSummeI := nSummeI + 3->(&b_g) ENDIF 3->(DbSkip()) ENDDO nSumme := nSummeI + nSummeII + nSummeIII //+13.11.2018 17:44 wird doch eigentlich nicht gebraucht: ASort( a3 ) SELECT 8 USE serie index xserie SET FILTER TO 8->zeile > 999 //+20.10.2018 13:24 damit F5/F6 getrennt funktioniert SELECT 13 GO BOTT DO WHILE Recno() < 20 APPEND BLANK ENDDO SUM 13->(&b_g) TO nASum nGSum := nSumme - nVSum + nASum GO TOP lEinfg := .T. DO WHILE lEinfg = .T. // cFont := IIf( nBSb < 800, "8.Arial", "10.Arial" ) oDlg := AKDialog():new( AppDesktop(), oDlg1,,, { { XBP_PP_FGCLR, GRA_CLR_BLACK } } ) oDlg:tasklist := .T. oDlg:title := "Aufstellung zu Auftrag "+cAuf+" / Sterbefall: "+; Trim(1->name)+", "+Trim(1->vorname)+" / Auftraggeber: "+; Trim(1->ansp_name)+", "+Trim(1->ansp_vname) oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10,30*nV}, {int(770*nH),int(500*nV)} ) // oDlg:drawingArea:setFontCompoundName( cFont ) oDlg:drawingArea:setColorBG( GRA_CLR_GREEN ) oCB := oDlg:drawingArea oXbp := XbpStatic():new( oDlg:drawingArea, , {int(10*nH),int(145*nV)}, {int(250*nH),int(15*nV)}) oXbp:caption := "Mit F5/F6 suchen entlang der eingerichteten Serie." oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(440*nH),int(145*nV)}, {int(250*nH),int(15*nV)}) oXbp:caption := "Mit Strg-F1 wird der Hilfetext im unteren Feld dargestellt." oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(10*nH),int(160*nV)}, {int(50*nH),int(20*nV)}) oXbp:caption := "Leist I+II+A:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle1 := XbpSLE():new( oDlg:drawingArea, , {int(60*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle1:bufferLength := 8 oSle1:align := XBPSLE_RIGHT oSle1:group := XBP_WITHIN_GROUP oSle1:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSummeI, '99999.99' ), nSummeI := Val(x) ) } oSle1:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(120*nH),int(160*nV)}, {int(10*nH),int(20*nV)}) oXbp:caption := "+" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle2 := XbpSLE():new( oDlg:drawingArea, , {int(130*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle2:bufferLength := 8 oSle2:group := XBP_WITHIN_GROUP oSle2:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSummeII, '99999.99' ), nSummeII := Val(x) ) } oSle2:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(190*nH),int(160*nV)}, {int(10*nH),int(20*nV)}) oXbp:caption := "+" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSleA := XbpSLE():new( oDlg:drawingArea, , {int(200*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleA:bufferLength := 8 oSleA:group := XBP_WITHIN_GROUP oSleA:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSummeIII, '99999.99' ), nSummeII := Val(x) ) } oSleA:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(260*nH),int(160*nV)}, {int(10*nH),int(20*nV)}) oXbp:caption := "=" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle := XbpSLE():new( oDlg:drawingArea, , {int(270*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := 8 oSle:group := XBP_WITHIN_GROUP oSle:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme, '99999.99' ), nSumme := Val(x) ) } oSle:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(330*nH),int(160*nV)}, {int(50*nH),int(20*nV)}) oXbp:caption := "Zahlung:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle3 := XbpSLE():new( oDlg:drawingArea, , {int(380*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle3:bufferLength := 8 oSle3:group := XBP_WITHIN_GROUP oSle3:dataLink := {|x| IIf( PCOUNT()==0, Transform( nVSum, '999999.99' ), nVSum := Val(x) ) } oSle3:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(440*nH),int(160*nV)}, {int(50*nH),int(20*nV)}) oXbp:caption := "Aufst. :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle4 := XbpSLE():new( oDlg:drawingArea, , {int(490*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle4:bufferLength := 8 oSle4:group := XBP_WITHIN_GROUP oSle4:dataLink := {|x| IIf( PCOUNT()==0, Transform( nASum, '99999.99' ), nASum := Val(x) ) } oSle4:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(550*nH),int(160*nV)}, {int(50*nH),int(20*nV)}) oXbp:caption := "Gesamt :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle5 := XbpSLE():new( oDlg:drawingArea, , {int(600*nH),int(160*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle5:bufferLength := 8 oSle5:group := XBP_WITHIN_GROUP oSle5:dataLink := {|x| IIf( PCOUNT()==0, Transform( nGSum, '999999.99' ), nGSum := Val(x) ) } oSle5:create():setData() aPPd := { { XBP_PP_FGCLR , GRA_CLR_BLACK } , ; { XBP_PP_BGCLR , IIf( DtoC( 1->ABR_DATUM )=" ", GRA_CLR_GREEN, GRA_CLR_RED) } } oXbp := XbpStatic():new( oDlg:drawingArea, , {int(670*nH),int(455*nV)}, {int(70*nH),int(20*nV)}) oXbp:caption := "Abrechnungs-Datum :" oXbp:setPresParam( aPPd ) oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oSleD := XbpSLE():new( oDlg:drawingArea, , {int(670*nH),int(435*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleD:bufferLength := 10 oSleD:tabStop := .T. oSleD:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleD:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleD:group := XBP_WITHIN_GROUP // oSleD:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme, '@N' ), nSumme := Val(x) ) } oSleD:dataLink := {|x| IIf( PCOUNT()==0, ; IIf( DtoC( 1->ABR_DATUM )=" ", DtoC(DATE()), DtoC( 1->ABR_DATUM )), ; IIf( len(x)<7, dDatum := CtoD(x+str(year(date(),4,0))), ; dDatum := CtoD(x) ) ) } oSleD:create():setData() oSleD:cargo := "dDatum" oSleD:enable() AAdd ( aEditControls, oSleD ) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(670*nH),int(405*nV)}, {int(70*nH),int(20*nV)}) oXbp:caption := "Zahl-Datum :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oSleD14 := XbpSLE():new( oDlg:drawingArea, , {int(670*nH),int(385*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleD14:bufferLength := 10 oSleD14:tabStop := .T. oSleD14:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleD14:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleD14:group := XBP_WITHIN_GROUP // oSleD:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme, '@N' ), nSumme := Val(x) ) } oSleD14:dataLink := {|x| IIf( PCOUNT()==0, ; IIf( DtoC( 1->ABR_DATUM )=" ", DtoC(DATE()+14), DtoC( 1->ABR_DATUM + 14 ) ), ; IIf( len(x)<7, dDatum14 := CtoD(x+str(year(date(),4,0))), ; dDatum14 := CtoD(x) ) ) } oSleD14:create():setData() oSleD14:cargo := "dDatum14" oSleD14:enable() AAdd ( aEditControls, oSleD14 ) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(670*nH),int(355*nV)}, {int(70*nH),int(20*nV)}) oXbp:caption := "Skonto-Datum :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oSleD8 := XbpSLE():new( oDlg:drawingArea, , {int(670*nH),int(335*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleD8:bufferLength := 10 oSleD8:tabStop := .T. oSleD8:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleD8:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleD8:group := XBP_WITHIN_GROUP // oSleD:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme, '@N' ), nSumme := Val(x) ) } oSleD8:dataLink := {|x| IIf( PCOUNT()==0, ; IIf( DtoC( 1->ABR_DATUM )=" ", DtoC(DATE()+8), DtoC( 1->ABR_DATUM + 8 ) ), ; IIf( len(x)<7, dDatum8 := CtoD(x+str(year(date(),4,0))), ; dDatum8 := CtoD(x) ) ) } oSleD8:create():setData() oSleD8:cargo := "dDatum8" oSleD8:enable() AAdd ( aEditControls, oSleD8 ) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(670*nH),int(305*nV)}, {int(70*nH),int(20*nV)}) oXbp:caption := "Briefumschlag j/k/n :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oSleS := XbpSLE():new( oDlg:drawingArea, , {int(670*nH),int(285*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleS:bufferLength := 1 oSleS:tabStop := .T. oSleS:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleS:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleS:group := XBP_WITHIN_GROUP oSleS:dataLink := {|x| IIf( PCOUNT()==0, Trim(cKuvert), cKuvert := x ) } oSleS:create():setData() oSleS:cargo := "cKuvert" AAdd ( aEditControls, oSleS ) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(670*nH),int(255*nV)}, {int(70*nH),int(20*nV)}) oXbp:caption := "Anz. Begleitbrief :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oSleZB := XbpSLE():new( oDlg:drawingArea, , {int(670*nH),int(235*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleZB:bufferLength := 1 oSleZB:tabStop := .T. oSleZB:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleZB:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleZB:group := XBP_WITHIN_GROUP oSleZB:dataLink := {|x| IIf( PCOUNT()==0, Trim( cAnzbeg), cAnzbeg := x ) } oSleZB:create():setData() oSleZB:cargo := "cAnzbeg" AAdd ( aEditControls, oSleZB ) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(670*nH),int(205*nV)}, {int(70*nH),int(20*nV)}) oXbp:caption := "Anzahl Drucke :" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT oXbp:create() oSleZ := XbpSLE():new( oDlg:drawingArea, , {int(670*nH),int(185*nV)}, {int(60*nH),int(20*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleZ:bufferLength := 1 oSleZ:tabStop := .T. oSleZ:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleZ:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleZ:group := XBP_WITHIN_GROUP oSleZ:dataLink := {|x| IIf( PCOUNT()==0, Trim( cAnzahl), cAnzahl := x ) } oSleZ:create():setData() oSleZ:cargo := "cAnzahl" AAdd ( aEditControls, oSleZ ) oPbDruck := XbpPushButton():new( oDlg:drawingArea, , {int(670*nH),int(160*nV)}, {int(50*nH),int(20*nV)} ) oPbDruck:caption := "~Druck" oPbDruck:group := XBP_WITHIN_GROUP oPbDruck:create() // oPbDruck:activate := {|| Rechdr2uni( cAuf, cDrucker, DtoC( date() ), "J", 1, .F., oDlg ), ; // SetAppFocus( oPbDruck ) } //+30.08.2012 11:42 nimmt das abgespeicherte Aufstellungsdatum: // oPbDruck:activate := {|| Rechdr2uni( cAuf, cDrucker, IIf( DtoC(1->abr_datum)!=" ", DtoC(1->abr_datum), DtoC(DATE()) ), "J", 1, .F., oDlg ), ; oPbDruck:activate := {|| Gather( aEditControls ), ; Rechdr2uni( cAuf, cDrucker, DtoC(dDatum), DtoC(dDatum14), DtoC(dDatum8), cKuvert, cAnzbeg, cAnzahl, .T., .T. ), ; SetAppFocus( oPbDruck ) } APPBROWSE INTO oBrowse; PARENT oDlg:drawingArea ; POSITION TOP ; FONT &cFont ; SIZE 60,85 PERCENT APPFIELD zugr_z_st INTO oBrowse CAPTION "Art-Nr." WIDTH 5 APPFIELD bezeichf1 INTO oBrowse CAPTION "Leistung (Zeile1)" WIDTH 30 APPFIELD bezeichf2 INTO oBrowse CAPTION "Leistung (Zeile2)" WIDTH 15 APPFIELD &b_g INTO oBrowse CAPTION "Betrag/"+w_g WIDTH 6 APPFIELD rn INTO oBrowse CAPTION "L" READONLY APPFIELD kennz INTO oBrowse CAPTION "K" READONLY APPFIELD zeile INTO oBrowse CAPTION "Z" READONLY //+14.10.2018 13:57 readonly erg„nzt APPEDIT INTO oEdit ; PARENT oDlg:drawingArea ; POSITION BOTTOM ; FONT &cFont ; SEEK Rech5Such( cAuf, cArt, oDlg ) ; TRIGGER "Rech5Einfg" ON INSERT ; TRIGGER "Rech5Aend" ON UPDATE ; TRIGGER "Rech5Entf" ON DELETE ; SIZE 30,100 PERCENT APPFIELD zugr_z_st INTO oEdit CAPTION "Art-Nr." WIDTH 5 COMMENT "Artikelnr. eingeben ..." APPFIELD bezeichf1 INTO oEdit CAPTION "Leistung (Zeile1)" WIDTH 40 APPFIELD bezeichf2 INTO oEdit CAPTION "Leistung (Zeile2)" WIDTH 25 APPFIELD &b_g INTO oEdit CAPTION "Betrag/"+w_g WIDTH 6 APPFIELD rn INTO oEdit CAPTION "L" READONLY APPFIELD kennz INTO oEdit CAPTION "K" READONLY APPFIELD zeile INTO oEdit CAPTION "Z" READONLY //+14.10.2018 13:57 readonly erg„nzt APPDISPLAY oBrowse MODELESS APPDISPLAY oEdit MODELESS //+15.10.2018 10:20 weil READONLY nicht wirkt: (und editable:=.F. auch nicht !!) oEdit:scrollArea:childList()[5]:disable() oEdit:scrollArea:childList()[6]:disable() oEdit:scrollArea:childList()[7]:disable() ortfMLE := XbpMle():new( oEdit:scrollArea, , {oEdit:scrollArea:childlist()[7]:currentpos()[1]+25,2}, ; {oEdit:scrollArea:currentsize()[1]-oEdit:scrollArea:childlist()[7]:currentpos()[1]-25,oEdit:scrollArea:currentsize()[2]-4}, ; { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) ortfMLE:FORMAT := 3 ortfMLE:horizScroll := .F. //+26.11.2008 09:24 ortfMLE:CREATE() ortfMLE:setData(MemoRead(cDatver+"F1_R5.rtf")) ortfMLE:hide() oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() oFocus := SetAppFocus( oEdit ) lEinfg := .F. nEvent := xbeP_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeP_User nRec := Recno() 13->(DbGoBottom()) DO While !Bof() 13->(DbSkip(-1)) ENDDO 13->(DbGoto(nRec)) ENDIF IF nEvent == xbeP_User+1 oEdit:gonext() //+15.10.2018 17:06 Bewegung zum synchronen ... oEdit:goprevious() //+15.10.2018 17:06 ... Anzeigen in oBrowse ENDIF IF nEvent == xbeM_LbClick DO CASE CASE oXbp:isDerivedFrom( "XbpPushButton" ) .AND. ValType(oXbp:caption) == "N" IF oXbp:caption == 27 oEdit:SAVE() ENDIF ENDCASE ENDIF IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_ESC nFlucht := ConfirmBox( oCB, "Žnderungen speichern?", ; "Programm AUFSTELLUNG beenden.", ; XBPMB_YESNOCANCEL, ; XBPMB_QUESTION ) IF nFlucht == XBPMB_RET_YES lEinfg := .F. lFlucht := .F. PostAppEvent( xbeP_Close) ELSEIF nFlucht == XBPMB_RET_NO lEinfg := .F. lFlucht := .T. PostAppEvent( xbeP_Close) ELSE ENDIF CASE mp1 == xbeK_F10 // IF oXbp:isDerivedFrom( "XbpSle" ) .and. oXbp != oSle1 .and. oXbp != oSle2 .and. oXbp != oSleA ; // .and. oXbp != oSle .and. oXbp != oSle3 .and. oXbp != oSle4 .and. oXbp != oSle5 IF oXbp:isDerivedFrom( "XbpSle" ) .AND. !Empty(oXbp:cargo) //+29.04.2018 21:42 oEdit:save() SetAppFocus( oDlg ) ENDIF lEinfg := .F. PostAppEvent( xbeP_Close) CASE mp1 == xbeK_ALT_D PostAppEvent( xbeP_Activate,,, oPbDruck) CASE mp1 == xbeK_ALT_E lEinfg := .T. PostAppEvent( xbeP_Close) CASE mp1 == xbeK_CTRL_F1 IF ortfMLE:isVisible() ortfMLE:hide() ELSE ortfMLE:show() ENDIF CASE mp1 == xbeK_F1 ModalDialog( (cDatver+"f1_R5.dbf"), "Bedienungshinweise", oDlg, 680*nH, 460*nV ) CASE mp1 == xbeK_CTRL_F5 //+18.10.2018 10:47 cArt := Max("5000",cArt) lSS := SET( _SET_SOFTSEEK, .T. ) oEdit:SEEK() SET( _SET_SOFTSEEK, lSS ) oEdit:gonext() //+15.10.2018 17:06 Bewegung zum synchronen ... oEdit:goprevious() //+15.10.2018 17:06 ... Anzeigen in oBrowse CASE mp1 == xbeK_CTRL_F6 //+18.10.2018 10:48 cArt := Min("9900", cArt) lSS := SET( _SET_SOFTSEEK, .T. ) oEdit:SEEK() SET( _SET_SOFTSEEK, lSS ) oEdit:gonext() //+15.10.2018 17:06 Bewegung zum synchronen ... oEdit:goprevious() //+15.10.2018 17:06 ... Anzeigen in oBrowse CASE mp1 == xbeK_F5 SELECT 8 if .not. Bof() skip -1 endif cArt := 8->art SELECT 13 Rech5Such( cAuf, cArt, oDlg ) CASE mp1 == xbeK_F6 SELECT 8 if .not. Eof() skip 1 endif cArt := 8->art SELECT 13 Rech5Such( cAuf, cArt, oDlg ) CASE mp1 == xbeK_F7 .and. oXbp:isDerivedFrom( "XbpSle" ) .AND. !Empty(oXbp:cargo) //+29.04.2018 21:42 oEdit:save() SetAppFocus( oEdit ) CASE mp1 == xbeK_F7 oEdit:edit() CASE (mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB) ; .AND. oXbp:isDerivedFrom( "XbpSle" ) .AND. !Empty(oXbp:cargo) //+29.04.2018 21:42 26.10.2018 21:34 TAB // IF Upper(oXbp:cargo[1]) = "ZUGR_Z_ST" .AND. ((Empty(13->zugr_z_st) .AND. !Empty(oxbp:editbuffer())) .OR. ; // Trim(oxbp:editbuffer()) != Trim(13->zugr_z_st)) //+16.10.2018 15:36 IF Upper(oXbp:cargo[1]) = "ZUGR_Z_ST" .AND. !Empty(oxbp:editbuffer()) .AND. ; !Trim(oxbp:editbuffer()) == Trim(13->zugr_z_st) //+27.10.2018 08:49 FOR i := 1 TO 7 // derselbe Artikel DO CASE // nicht nochmal CASE FieldInfo( FieldPos(oEdit:scrollArea:childList()[i]:cargo[1]), FLD_TYPE ) = "C" AAdd( aEdit, oEdit:scrollarea:childlist()[i]:editbuffer()) CASE FieldInfo( FieldPos(oEdit:scrollArea:childList()[i]:cargo[1]), FLD_TYPE ) = "D" AAdd( aEdit, CtoD(oEdit:scrollarea:childlist()[i]:editbuffer())) CASE FieldInfo( FieldPos(oEdit:scrollArea:childList()[i]:cargo[1]), FLD_TYPE ) = "N" AAdd( aEdit, Val( oEdit:scrollarea:childlist()[i]:editbuffer())) ENDCASE NEXT Rech5Aend( aEdit,, .T. ) //04.05.2008 21:17 .T.=lNeuArt = neue Artikelnummer eingegeben aEdit := {} ELSEIF Upper(oXbp:cargo[1]) == "BETRAGEU" //+16.10.2018 12:13 ist das letzte editierbare Feld ... oEdit:SAVE() // ... danach sofort die Eingabe abschlieáen ENDIF // CASE mp1 == xbeK_TAB .AND. oXbp:isDerivedFrom( "XbpSle" ) .AND. !Empty(oXbp:cargo) .AND. Upper(oXbp:cargo[1]) == "BETRAGEU" // oEdit:SAVE() // siehe voriges CASE CASE mp1 == xbeK_SH_CTRL_HOME // beseitigt doppelte Zeilen mit Abfrage R5Doppelt() ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() SetAppFocus( oFocus ) SELECT 13 IF lEinfg = .T. SET DELETED OFF R3SatzEinfg( Recno() ) SET DELETED ON ENDIF ENDDO SELECT 13 //+28.06.2018 10:04 geREMt auf Reklamation von Herrn Franke: ////// //+21.05.2017 19:57 vorsichtshalber mal fragen, ob das speichern gewollt ist: ////// IF lFlucht == .F. .AND. lModi == .T. .AND. DtoC(1->abr_datum) != DtoC(DATE()) ; ////// .AND. ConfirmBox( oCB, "Sollen die Daten gespeichert werden?", ; ////// "Aufstellungs-Daten wurden ge„ndert oder gedruckt!", ; ////// XBPMB_YESNO, ; ////// XBPMB_QUESTION ) == XBPMB_RET_NO ////// lFlucht := .T. ////// ENDIF IF lFlucht == .F. .AND. lModi == .T. // ESC-Taste: lFlucht = .T. GO TOP SELECT 3 DbSeek(cAuf+"3",.F.) //13.11.2018 17:14 statt: FIND &cAuf SELECT 11 //+30.04.2018 08:47 neue Abfrage, ob die Datei schon gesperrt ist: vvvvvvvvvvvvvvvvvvvvvv nHandle := FOpen( cDatver+"tauftr.dbf", FO_EXCLUSIVE ) DO WHILE nHandle == -1 Msgbox( "Eine andere Aufstellung wird jetzt gerade transferiert!"+CRLF+"OK klicken.") nHandle := FOpen( cDatver+"tauftr.dbf", FO_EXCLUSIVE ) LOOP ENDDO FClose(nHandle) //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ USE tauftr EXCLUSIVE SELECT 13 //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv // DELETE 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 Rechdrun.prg) *** DbGotop() DO WHILE !Eof() IF 13->auftrnr <> Val( cAuf ) .AND. ( !Empty(13->zugr_z_st) .AND. !Empty(13->bezeichf1)) 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->bezeichf1)) 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 ... 13->rn := "3" 13->kennz := "2" 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 // neu zum Abspeichern in die Feldvariablen der auftr.dbf *** aStructure := 13->(DbStruct()) //+16.10.2018 09:50: aFelder := {} // Array mit allen Feldnamen AEval( aStructure, {|a| AAdd( aFelder, a[1] ) } ) // hier werden alle verbliebenen Zeilen fortlaufend nummeriert und zu 3->/auftr.dbf bertragen *** DbGotop() //13.11.2018 17:13 statt go top nZeile := 0 DO WHILE .NOT. 13->(Eof()) //+13.11.2018 17:27 jetzt mit 13-> ++nZeile REPLACE 13->zeile WITH Str( nZeile,2,0 ) For n := 1 to FCount() aData2[n] := FieldGet( n ) NEXT // delete // oder nicht delete ????? SELECT 3 IF nZeile <= Len( a3 ) c3 := Str( a3[nZeile] ) //13.11.2018 17:21 statt : GO &c3 IF !RecNo() == Val(c3) msgbox("Index defekt! Starten Sie die Aufstellung nochmal mit gedrckter Strg-Taste!") ENDIF IIf( 3->auftrnr == Val( cAuf ), Satzsp( oCB ), SatzAppend() ) ELSE APPEND BLANK ENDIF //* aData1 := Satzget( 3, Recno() ) *// // Satzsp( oCB ) // s.o. For n := 1 to FCount() // FieldPut( n, aData2[n] ) //+16.10.2018 09:58 wegen in Knowledgebase vermuteter Indexschw„che ... 3->&(aFelder[n]) := aData2[n] // ... ersetzt durch diese Zeile NEXT DbSkip(0) //+11.10.2018 14:52 schreibt den aktuellen 3->Datensatz auf die Platte DbRUnlock( Recno() ) n4 := 0 aDataD := SatzDiff( 13, @aData1, @aData2, "AUFTR" ) SELECT 11 //+03.06.2013 12:42 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv // hier wird das Tripel zusammen mit USERNAME/PCNAME/PCART in die Fauftr.dbf gespeichert *** // damit verfolgt werden kann, wer das auf welchem AP gemacht hat IF !FILE( cDatver + "TTFL\FAUFTR.dbf" ) aStruktur := DbStruct() AAdd( aStruktur, {"USERNAME","C",30,0} ) AAdd( aStruktur, {"PCNAME","C",30,0} ) AAdd( aStruktur, {"PCART","C",1,0} ) DbCreate( cDatver + "TTFL\FAUFTR.dbf", aStruktur ) ENDIF 21->(DbUseArea(,,"TTFL\FAUFTR",,.F.)) 21->(DbAppend()) SatzPut( 21, 21->(RecNo()), aData1, "0", 3 ) 21->(Satzsp()) 21->username := cUserName; 21->pcname := cPCName; 21->pcart := cDatver[1] 21->(DbAppend()) SatzPut( 21, 21->(RecNo()), aData2, "0", 3 ) 21->(Satzsp()) 21->username := cUserName; 21->pcname := cPCName; 21->pcart := cDatver[1] 21->(DbAppend()) SatzPut( 21, 21->(RecNo()), aDataD, "0", 3 ) 21->(Satzsp()) 21->username := cUserName; 21->pcname := cPCName; 21->pcart := cDatver[1] 21->(DbCloseArea()) //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // hier wird der Trippel an die tauftr.dbg angeh„ngt fr die šbertragung *** IF lTrans //+02.05.2017 21:22 wenn NICHT R5Doppelt() APPEND BLANK SatzPut( 11, RecNo(), aData1, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aData2, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aDataD, "0" ) SKIP ENDIF SELECT 3 DbSkip() // 13.11.2018 17:12 wird jetzt trotz a3/c3 gebraucht SELECT 13 DbSkip() ENDDO //+14.05.2017 11:54 wenn alle Zeilen gel”scht wurden vvvvvvvvvvvvvvvvvvv IF nZeile==0 .AND. !Empty(aData2[5]) aData1 := aData2 aData2 := Array(3->(FCount())) aData2[14] := aData1[14] aData1[1] := 1->auftrnr aData2[1] := 1->auftrnr n4 := 0 aDataD := SatzDiff( 13, @aData1, @aData2, "AUFTR" ) SELECT 11 //+03.06.2013 12:42 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv IF !FILE( cDatver + "TTFL\FAUFTR.dbf" ) aStruktur := DbStruct() AAdd( aStruktur, {"USERNAME","C",30,0} ) AAdd( aStruktur, {"PCNAME","C",30,0} ) AAdd( aStruktur, {"PCART","C",1,0} ) DbCreate( cDatver + "TTFL\FAUFTR.dbf", aStruktur ) ENDIF 21->(DbUseArea(,,"TTFL\FAUFTR",,.F.)) 21->(DbAppend()) SatzPut( 21, 21->(RecNo()), aData1, "0", 3 ) 21->(Satzsp()) 21->username := cUserName; 21->pcname := cPCName; 21->pcart := cDatver[1] 21->(DbAppend()) SatzPut( 21, 21->(RecNo()), aData2, "0", 3 ) 21->(Satzsp()) 21->username := cUserName; 21->pcname := cPCName; 21->pcart := cDatver[1] 21->(DbAppend()) SatzPut( 21, 21->(RecNo()), aDataD, "0", 3 ) 21->(Satzsp()) 21->username := cUserName; 21->pcname := cPCName; 21->pcart := cDatver[1] 21->(DbCloseArea()) //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ IF lTrans //+02.05.2017 21:22 wenn NICHT R5Doppelt() APPEND BLANK SatzPut( 11, RecNo(), aData1, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aData2, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aDataD, "0" ) SKIP ENDIF SELECT 13 ENDIF //+14.05.2017 12:36 k”nnte hier auch doppelte Zeilen verhindern: (Muss noch gekl„rt werden!) // einen *leeren* NULL-Tripel schreiben als Abgrenzung, falls vorher dieselbe Auftragsnr. war: IF lTrans //+02.05.2017 21:22 wenn NICHT R5Doppelt() SELECT 11 aDataD := Array(3->(FCount())) APPEND BLANK SatzPut( 11, RecNo(), aDataD, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aDataD, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aDataD, "0" ) SKIP SELECT 13 ENDIF // //+Ende von 14.05.2017 11:54 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ USE SELECT 3 DO WHILE nZeile < Len( a3 ) .AND. .NOT. Eof() c3 := Str( a3[++nZeile] ) GO &c3 IIf( 3->auftrnr == Val( cAuf ) .AND. Val( 3->rn ) = 3, SatzDelete(), ) ENDDO SELECT 11 USE ELSE USE // schlieáen der TEMP-Datei 3->(DbUnlock()) ENDIF //################## 3->(DbCommit()) //+02.08.2012 22:15 Puffer auf die Platte schreiben //################## FErase( cDatver+cAuf5temp+".dbf" ) Select &nOldArea RETURN .T. FUNCTION Rech5Such( cAuf, cArt, oDlg1, lRech5Aend ) LOCAL oDlg, nEvent, mp1, mp2 LOCAL aSizeDesktop := AppDesktop():currentSize() LOCAL nBSb := aSizeDesktop[1] LOCAL nBSh := aSizeDesktop[2] // folgende Zahlen-Werte basieren auf 800x600: LOCAL nH := nBSb/800 // Korrekturfaktor fr tats„chliche Aufl”sung LOCAL nV := nBSh/600, nHV := nH/nV //+07.06.2011 17:28 LOCAL nRec := RecNo() //+28.10.2018 12:04 LOCAL nOldArea := Select() LOCAL lFluchtS := .F. PRIVATE oCB lRech5Aend := IIf(ValType(lRech5Aend)!="L",.F.,lRech5Aend) cArt := IIf(Val(cArt)<5000, "5000",cArt) //+18.10.2018 11:27 SELECT 6 SET FILTER TO Val(art_lei) >= 5000 //+28.10.2018 12:07 FIND &cArt oDlg := AKDialog():new( AppDesktop(), oDlg1 ) oDlg:tasklist := .T. oDlg:title := "Artikel/Leistung ausw„hlen" oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10,30*nV}, {int(740*nH),int(460*nV)} ) oDlg:drawingArea:setColorBG( GRA_CLR_DARKGREEN ) oCB := oDlg:drawingArea APPBROWSE ; PARENT oDlg:drawingArea ; POSITION TOP ; FONT &cFont ; SIZE 100,100 PERCENT APPFIELD art_lei CAPTION "Art-Nr." APPFIELD bezf1 CAPTION "Leistung (Zeile1)" WIDTH 25 APPFIELD bezf2 CAPTION "Leistung (Zeile2)" WIDTH 10 APPFIELD &v_p_s CAPTION "Preis/"+w_g APPFIELD kennz CAPTION "K" APPDISPLAY MODELESS oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() 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_RETURN .or. mp1 == xbeK_F10 PostAppEvent( xbeP_Close) CASE mp1 == xbeK_ESC lFluchtS := .T. PostAppEvent( xbeP_Close) CASE mp1 == xbeK_CTRL_F5 //+18.10.2018 10:50 cArt := Str( Max( 5000, (Val(cArt)-100) ),4,0 ) DbSeek( cArt, .T. ) CASE mp1 == xbeK_CTRL_F6 //+18.10.2018 10:50 cArt := Str( Min( 9900, (Val(cArt)+100) ),4,0 ) DbSeek( cArt, .T. ) cArt := IIf(!Eof(),Trim(art_lei),cArt) CASE mp1 == xbeK_F5 SELECT 8 IF .not. Bof() SKIP -1 ENDIF cArt := 8->art SELECT 6 DbSeek( cArt, .T. ) CASE mp1 == xbeK_F6 SELECT 8 IF .not. Eof() SKIP 1 ENDIF cArt := 8->art SELECT 6 DbSeek( cArt, .T. ) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO SELECT 13 IF lFluchtS = .F. // ESC-Taste: lFluchtS = .T. IF Val( 13->zugr_z_st ) > 0 IF !lRech5Aend //01.05.2008 20:50 NICHT beim Žndern LOCATE FOR Val( 13->zugr_z_st ) == 0 IF Eof() APPEND BLANK ENDIF ELSE //+29.10.2018 20:48 beim Žndern abfragen: IF ConfirmBox( oCB, "Soll sie trotzdem auf neue Art-Nr. ge„ndert werden?", ; "Die Zeile ist nicht leer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO // die alte Art-Nr aus 13-> wieder zurck ins Feld schreiben: oEdit:scrollArea:childList()[1]:setData(13->zugr_z_st) oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() Select &nOldArea RETURN APPOP_PROCEED ENDIF ENDIF ENDIF REPLACE 13->auftrnr WITH Val( cAuf ) REPLACE 13->rn WITH "3" REPLACE 13->kennz WITH 6->ausg REPLACE 13->zeile WITH Str( Recno(),2,0 ) REPLACE 13->mwst_schl WITH 6->mwst_schl REPLACE 13->zugr_z_st WITH 6->art_lei REPLACE 13->bezeichf1 WITH 6->bezf1 REPLACE 13->bezeichf2 WITH 6->bezf2 REPLACE 13->&b_g WITH 6->&v_p_s REPLACE 13->&b_gh WITH 6->&v_p_sh DbCommit() nASum := nASum + &b_g nGSum := nSumme - nVSum + nASum oSle4:setdata( Str( nASum,8,2 ) ) oSle5:setdata( Str( nGSum,8,2 ) ) lModi := .T. // Rechnung wird durch Rech3Such modifiziert ELSE //+27.10.2018 18:38: // die alten Werte aus 13-> wieder zurck in die Felder schreiben: oEdit:scrollArea:childList()[1]:setData(Trim(13->zugr_z_st)) oEdit:scrollArea:childList()[2]:setData(Trim(13->bezeichf1)) oEdit:scrollArea:childList()[3]:setData(Trim(13->bezeichf2)) oEdit:scrollArea:childList()[4]:setData(AllTrim(Str(13->&b_g,7,2))) ENDIF oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() Select &nOldArea IF lFluchtS = .F. // ESC-Taste: lFlucht = .T. oEdit:gonext() //+15.10.2018 17:06 Bewegung zum synchronen ... oEdit:goprevious() //+15.10.2018 17:06 ... Anzeigen in oBrowse PostAppEvent( xbeP_User+1, 1, 1, oEdit ) //+18.10.2018 14:52 ENDIF RETURN IIf(lFluchtS==.T., APPOP_IGNORE, APPOP_PROCEED) FUNCTION Rech5Einfg(aRechPos) lModi := .T. // Rechnung wird durch Rech3Einfg modifiziert RETURN APPOP_PROCEED FUNCTION Rech5Aend(aRechPos, o, lNeuArt) //04.05.2008 20:29 lNeuArt, wenn gerade neue ArtNr eingegeben LOCAL cArt, c6b1, c6b2, n6v, n6veu, cRn, cKennz, n1a, cMwst, nRec LOCAL xAPPOPP //+18.10.2018 11:38 LOCAL nOldArea := SELECT() //+27.10.2018 08:34 lNeuArt := IIf(ValType(lNeuArt)!="L", .F., lNeuArt ) //04.05.2008 20:32 lModi := .T. // Rechnung wird durch Rech3Aend modifiziert n1a := 1->auftrnr cArt := aRechPos[1] c6b1 := aRechPos[2] c6b2 := aRechPos[3] n6veu := aRechPos[4] cRn := aRechPos[5] cKennz := aRechPos[6] IF !Empty(cArt) .AND. Val(cArt[1])<5 .AND. ; ConfirmBox( oCB, "Geben Sie die Artikelnummer einer Fremdleistung ein!", ; "Die Artikelnummer ist unter 5000!", ; XBPMB_OK, ; XBPMB_QUESTION ) == XBPMB_RET_OK oEdit:scrollArea:childList()[1]:setData(Trim(13->zugr_z_st)) oEdit:scrollArea:childList()[2]:setData(Trim(13->bezeichf1)) oEdit:scrollArea:childList()[3]:setData(Trim(13->bezeichf2)) oEdit:scrollArea:childList()[4]:setData(Trim(Str(13->&b_g,7,2))) RETURN APPOP_IGNORE ENDIF SELECT 6 // FIND &cArt DbSeek( cArt, .T. ) // 04.05.2008 17:02 Softseek eingeschaltet !! IF lNeuArt .AND. (!Trim(art_lei) == Trim(cArt) .OR. Eof()) //+24.10.2018 12:59 lNeuArt // Artikelnr wurde ge„ndert + neue Artnr wurde nicht in art.dbf gefunden xAPPOPP := Rech5Such( Str(n1a,6,0), 6->art_lei, oCB:cargo, .T. ) //04.05.2008 20:20 + 18.10.2018 11:54 SELECT &nOldArea RETURN xAPPOPP // APPOP_PROCEED ELSEIF lNeuart .AND. Trim(art_lei) == Trim(cArt) // Artikelnummer wurde ge„ndert: (und neue wurde in art.dbf gefunden) // damit existierende Zeilen nicht versehentlich mit den Daten aus der art.dbf berschrieben werden IF ConfirmBox( oCB, "Soll sie trotzdem auf neue Art-Nr. ge„ndert werden?", ; "Die Zeile ist nicht leer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO // die alte Art-Nr aus 13-> wieder zurck ins Feld schreiben: oEdit:scrollArea:childList()[1]:setData(13->zugr_z_st) lNeuArt := .F. SELECT &nOldArea PostAppEvent( xbeP_User+1, 1, 1, oEdit ) // -> + <- RETURN APPOP_PROCEED ELSE cArt := 6->art_lei c6b1 := 6->bezf1 c6b2 := 6->bezf2 n6veu := 6->vk_preiseu cRn := "3" // weil Aufstellung cKennz := 6->ausg cMwSt := 6->mwst_schl lNeuArt := .T. // vorsichtshalber ... aber berflssig ENDIF ELSEIF !Empty(cArt) // damit existierende Zeilen nicht versehentlich mit den von Hand ge„nderten Daten berschrieben werden: IF (!(Trim(13->bezeichf1) == c6b1) .OR. !(Trim(13->bezeichf2) == c6b2) .OR. 13->betrageu != n6veu) IF ConfirmBox( oCB, "Soll sie trotzdem berschrieben/ge„ndert werden?", ; "Die Zeile ist nicht leer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO // die alten Werte aus 13-> wieder zurck in die Felder schreiben: oEdit:scrollArea:childList()[1]:setData(Trim(13->zugr_z_st)) oEdit:scrollArea:childList()[2]:setData(Trim(13->bezeichf1)) oEdit:scrollArea:childList()[3]:setData(Trim(13->bezeichf2)) oEdit:scrollArea:childList()[4]:setData(Trim(Str(13->&b_g,7,2))) lNeuArt := .F. SELECT &nOldArea PostAppEvent( xbeP_User+1, 1, 1, oEdit ) //+18.10.2018 14:52 RETURN APPOP_PROCEED ELSE cMwSt := 13->mwst_schl cRn := "3" // weil Aufstellung cKennz := "2" lNeuArt := .T. ENDIF ENDIF ELSE // damit leere Zeilen nicht versehentlich von Hand ohne Artikelnr. eingegeben werden: IF (!(Trim(13->bezeichf1) == c6b1) .OR. !(Trim(13->bezeichf2) == c6b2) .OR. 13->betrageu != n6veu) IF ConfirmBox( oCB, "Soll die Zeile trotzdem so angelegt werden?", ; "Die Artikelnummer ist leer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO // die alten Werte aus 13-> wieder zurck in die Felder schreiben: oEdit:scrollArea:childList()[1]:setData(Trim(13->zugr_z_st)) oEdit:scrollArea:childList()[2]:setData(Trim(13->bezeichf1)) oEdit:scrollArea:childList()[3]:setData(Trim(13->bezeichf2)) oEdit:scrollArea:childList()[4]:setData(Trim(Str(13->&b_g,7,2))) lNeuArt := .F. SELECT &nOldArea PostAppEvent( xbeP_User+1, 1, 1, oEdit ) //+18.10.2018 14:52 RETURN APPOP_PROCEED ELSE cArt := "9999" cMwSt := "0" cRn := "3" // weil Aufstellung cKennz := "2" lNeuArt := .T. ENDIF ENDIF ENDIF SELECT &nOldArea IF lNeuArt // neuer Artikel oder Artikel ge„ndert nASum := nASum - 13->betrageu REPLACE 13->auftrnr WITH n1a REPLACE 13->zeile WITH IIf( Val(aRechPos[7])>0, aRechPos[7], Str(13->(Recno()),2,0) ) REPLACE 13->rn WITH cRn REPLACE 13->kennz WITH cKennz REPLACE 13->mwst_schl WITH IIf( Empty(cMwst), "0", cMwst ) // "0" heiát keine MwSt, da Fremdleistung REPLACE 13->zugr_z_st WITH cArt REPLACE 13->bezeichf1 WITH c6b1 REPLACE 13->bezeichf2 WITH c6b2 REPLACE 13->betrageu WITH n6veu DbCommit() nASum := nASum + 13->betrageu // wurde in Vorzeile ge„ndert auf n6veu !! nGSum := nSumme - nVSum + nASum oSle4:setdata( Str( nASum,8,2 ) ) oSle5:setdata( Str( nGSum,8,2 ) ) oEdit:scrollArea:childList()[1]:setData(cArt) oEdit:scrollArea:childList()[2]:setData(c6b1) oEdit:scrollArea:childList()[3]:setData(c6b2) oEdit:scrollArea:childList()[4]:setData(Str(n6veu,7,2)) oEdit:gonext() oEdit:goprevious() ENDIF PostAppEvent( xbeP_User+1, 1, 1, oEdit ) //+18.10.2018 14:52 RETURN APPOP_PROCEED FUNCTION Rech5Aend_ALT(aRechPos, o, lNeuArt) //04.05.2008 20:29 lNeuArt, wenn neue ArtNr eingegeben LOCAL cArt, c6b1, c6b2, n6v, n6veu, cRn, cKennz, n1a, cMwst, nRec LOCAL xAPPOPP //+18.10.2018 11:38 lNeuArt := IIf(ValType(lNeuArt)!="L", .F., lNeuArt ) //04.05.2008 20:32 lModi := .T. // Rechnung wird durch Rech3Aend modifiziert cArt := aRechPos[1] c6b1 := aRechPos[2] c6b2 := aRechPos[3] n6veu := aRechPos[4] cRn := aRechPos[5] cKennz := aRechPos[6] n1a := 1->auftrnr //+16.10.2018 12:40 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv // damit existierende Zeilen nicht mit den Daten aus der art.dbf berschrieben werden IF (!Empty(13->bezeichf1) .OR. !Empty(13->bezeichf2) .OR. !Empty(13->betrageu)) .AND. ; (Trim(13->bezeichf1) != c6b1 .OR. Trim(13->bezeichf2) != c6b2 .OR. 13->betrageu != n6veu) IF ConfirmBox( oCB, "Soll sie trotzdem berschrieben/ge„ndert werden?", ; "Die Zeile ist nicht leer!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO oEdit:scrollArea:childList()[1]:setData(13->zugr_z_st) oEdit:scrollArea:childList()[2]:setData(13->bezeichf1) oEdit:scrollArea:childList()[3]:setData(13->bezeichf2) oEdit:scrollArea:childList()[4]:setData(Str(13->&b_g,7,2)) lNeuArt := .F. PostAppEvent( xbeP_User+1, 1, 1, oEdit ) //+18.10.2018 14:52 RETURN APPOP_PROCEED ELSE lNeuArt := .T. ENDIF ENDIF // IF Val(cArt) <> Val(13->zugr_z_st) SELECT 6 // FIND &cArt DbSeek( cArt, .T. ) // 04.05.2008 17:02 Softseek eingeschaltet !! IF lNeuArt .AND. (!Trim(art_lei) == Trim(cArt) .OR. Eof()) //+24.10.2018 12:59 lNeuArt xAPPOPP := Rech5Such( Str(n1a,6,0), 6->art_lei, oCB:cargo, .T. ) //04.05.2008 20:20 + 18.10.2018 11:54 SELECT 13 RETURN xAPPOPP //+18.10.2018 11:39 APPOP_PROCEED //01.05.2008 20:20 ELSE /* 04.05.2008 22:26 IIfs erg„nzt */ c6b1 := IIf( Len(aRechPos[2])=0 .OR. lNeuArt, 6->bezf1, c6b1 ) c6b2 := IIf( Len(aRechPos[3])=0 .OR. lNeuArt, 6->bezf2, c6b2 ) //+23.07.2008 12:44 n6v := IIf( aRechPos[4]=0 .OR. lNeuArt, 6->vk_preis, n6v ) n6veu := IIf( aRechPos[4]=0 .OR. lNeuArt, 6->vk_preiseu, n6veu ) cRn := "3" // cKennz := 6->ausg cKennz := IIf( Len(aRechPos[6])=0 .OR. lNeuArt, 6->ausg, cKennz ) //+23.10.2018 21:44 // cMwSt := 6->mwst_schl cMwSt := IIf( lNeuArt, 6->mwst_schl, 13->mwst_schl ) //+23.10.2018 21:44 /**/ ENDIF SELECT 13 IF lNeuArt .AND. (Val(aRechPos[5])!=0 .OR. !Empty(6->ausg)) // wenn der Betrag!=0 oder wenn in art.dbf eine FL steht nASum := nASum - &b_g REPLACE 13->auftrnr WITH n1a REPLACE 13->zeile WITH IIf( Val(aRechPos[7])>0, aRechPos[7], Str(Recno(),2,0) ) REPLACE 13->rn WITH cRn REPLACE 13->kennz WITH cKennz REPLACE 13->mwst_schl WITH IIf( Empty(cMwst), "1", cMwst ) REPLACE 13->zugr_z_st WITH cArt REPLACE 13->bezeichf1 WITH c6b1 REPLACE 13->bezeichf2 WITH c6b2 //+ REPLACE 13->betrag WITH n6v REPLACE 13->betrageu WITH n6veu DbCommit() nASum := nASum + &b_g nGSum := nSumme - nVSum + nASum oSle4:setdata( Str( nASum,8,2 ) ) oSle5:setdata( Str( nGSum,8,2 ) ) ENDIF RETURN APPOP_PROCEED FUNCTION Rech5Entf(aRechPos) lModi := .T. // Rechnung wird durch Rech5Entf modifiziert IF AScan( aRechPos, {|x| ! Empty(x) } ) == 0 RETURN APPOP_PROCEED ENDIF IF ConfirmBox( oCB, "Soll der Datensatz gel”scht werden?", ; "Datensatz l”schen", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_NO RETURN APPOP_IGNORE ENDIF nASum := nASum - aRechPos[4] nGSum := nSumme - nVSum + nASum oSle4:setdata( Str( nASum,8,2 ) ) oSle5:setdata( Str( nGSum,8,2 ) ) PostAppEvent( xbeP_User) RETURN APPOP_PROCEED FUNCTION R5Doppelt() LOCAL cArtnr, cArtBez, nA := SELECT() DbGotop() cArtnr := (nA)->zugr_z_st cArtBez := (nA)->bezeichf1 + (nA)->bezeichf2 DbSkip() DO WHILE !Eof() IF cArtnr == (nA)->zugr_z_st .AND. cArtBez == (nA)->bezeichf1+(nA)->bezeichf2 .AND. !Empty((nA)->bezeichf1) aRechPos := {(nA)->zugr_z_st,(nA)->bezeichf1,(nA)->bezeichf2,(nA)->&b_g,(nA)->rn,(nA)->kennz,(nA)->zeile} IF Rech5Entf(aRechPos) == APPOP_PROCEED (nA)->(DbDelete()) ENDIF ENDIF cArtnr := (nA)->zugr_z_st cArtBez := (nA)->bezeichf1 + (nA)->bezeichf2 DbSkip() ENDDO DbGotop() DbSkip() lTrans := .F. // Rechnung wird durch R5Doppelt NICHT bertragen, sondern nur korrigiert !! RETURN .T. //+12.10.2018 11:26 testet, ob die Indexdatei bis zum Ende der Auftragsdatei reicht: FUNCTION R5IndexCheck() LOCAL cInd USE auftr // ohne Index DbGobottom() // auf den letzten Datensatz cInd := Str(3->auftrnr,6,0) + 3->rn + 3->kennz + 3->zeile // Aufbau des Indexkeys USE auftr INDEX xaufauf DbSeek( cInd, .F. ) // kein (!) Softseek, Indexsuche des letzten Datensatzes IF !Found() .AND. Eof() IF ConfirmBox( oCB, "Soll die Auftragsdatei reindiziert werden (ca. 1 min.)?", ; "Der Index der Auftragsdatei ist gebrochen!", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES REINDEX ELSE RETURN .F. ENDIF ENDIF USE auftr INDEX xaufauf RETURN .T.