#pragma Library( "XppUI2.LIB" ) #include "Appevent.ch" #include "Appedit.ch" #include "Appbrow.ch" #include "Common.ch" #include "Font.ch" #include "Gra.ch" #include "Xbp.ch" PROCEDURE Rech3Eingabe( cAuf, oDlg1, nFontR, cDruck ) LOCAL nEvent, mp1, mp2, oXbp, oBrowse:=oDlg1:cargo // nur damit oBrowse den richtigen Typ hat LOCAL oDlg, cTitel, oPbDruck, nRab := 50, aMwSt := { 0, 7, 16 } LOCAL aSizeDesktop := AppDesktop():currentSize() LOCAL nBSb := aSizeDesktop[1] LOCAL nBSh := aSizeDesktop[2] // folgende Zahlen-Werte basieren auf 800x600: LOCAL nV := nBSb/800 // Korrekturfaktor f_r tats"chliche Aufl"sung LOCAL nOldArea := Select() LOCAL oFocus := SetAppFocus() LOCAL cArt := Trim(" "), cNt := "R", cBez := Trim(" "), cAufS := Space(6), nB1, nB2 LOCAL lFlucht := .F., nFlucht, cTab := "RET" PRIVATE oCB, oFocusF := oBrowse // weil in Makros verwandt: PRIVATE nAnz := 1, nt := 0, nRechnr := 0, nGS := 0 PRIVATE nZeile := 0, a3 := {} PRIVATE nSum := 0 PRIVATE oSle, oSle0, oSle1, oSle2, oSle3, oSleR PRIVATE nSumme := nSumme0 := nSumme1 := nSumme2 := nSumme3 := 0 , nH := 1 PRIVATE nSumme0a := nSumme0b := nSumme3a := nSumme3b := 0 // folgende Variablen m_ssen individuell gesetzt werden ( in R3 und R5 ): PRIVATE bezZ1 := "bez" , bezZ2 := "bez2" // Artikel in Art-> PRIVATE bezeichZ1 := "bezeich" , bezeichZ2 := "bezeich2" // Artikel in AUftr ////// die WIDTH und PERCENT -Werte f_r APPBROWSE und APPEDIT: PRIVATE nBezWb1 := 25 , nBezWb2 := 10 IF nBezZeil = 1 .AND. ( nFontR = FONT_DEFFIXED_MEDIUM .OR. nFontR = FONT_DEFFIXED_LARGE ) nBezWb1 := 45 ENDIF 1->(DbSuspendNotifications()) IF IsFieldVar("gkz") IIf( !Empty(1->gkz), 5->(DbSeek( 1->gkz, .T. )),) IIf( IIf(5->(IsFieldVar("gruppe")), 5->gruppe == "R", 5->etgruppe == "R" ), ; { v_p_s := "vk_pr2eu", v_p_sh := "vk_pr2" }, ; { v_p_s := "vk_preiseu", v_p_sh := "vk_preis" } ) ENDIF ////// IF !Empty(1->schladr) // nur bei Raguse!!! ////// 5->(DbSeek( 1->schladr, .T. )) ////// v_p_s := "vk_preis"+IIf(5->preisgr$"1234567", 5->preisgr, "1" ) ////// ELSE ////// v_p_s := "vk_preis1" ////// ENDIF cAuf3temp := "r_"+LTrim(Str(1->auftrnr,6,0)) DO WHILE FILE( cDatver+cAuf3temp+".dbf" ) IF ModalFen( "Rechnung wird schon bearbeitet! ; " + ; "Nochmal versuchen? ; " + ; "(Abbrechen mit ESC) ", ; "A C H T U N G !", ; oDlg1 ) == "ESC" RETURN ELSE IF FErase( cDatver+cAuf3temp+".dbf" ) != 0 LOOP ENDIF ENDIF ENDDO SELECT 3 FIND &cAuf IF Eof() SELECT 1 IF ConfirmBox( oDlg1, "Soll Musterrechnung geladen werden?", ; "Noch keine Rechnung", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES cAufS := Trim( ModalDialog( " 100", "Muster auswhlen:", oDlg1, Int(333*nV), Int(500*nV) ) ) cAufS := IIf( Empty(cAufS), cAuf, PadL( cAufS, 6 ) ) ELSE cAufS := cAuf ENDIF SELECT 3 ELSE cAufS := cAuf ENDIF // SELECT 3 COPY STRU TO (cDatver+cAuf3temp) aData1 := Array(FCount()) aData2 := Array(FCount()) aDataD := Array(FCount()) IF !"U"$cDruck SELECT 13 USE (cAuf3temp) EXCLUSIVE SELECT 3 FOR nt := 0 TO IIf(Upper(AppName())="MUELLX.EXE",4,3) FIND &cAufS DO WHILE 3->auftrnr=val(cAufS) .and. .not. eof() IF Val( rn ) = nt For n := 1 to FCount() aData2[n] := FieldGet( n ) NEXT AAdd( a3, Recno() ) // // Artikel-Daten korrigieren: // 17.3.03: siehe beim Programmausstieg // cArt := 3->zugr_z_st // SELECT 6 // FIND &cArt // Satzsp( oDlg1 ) // REPLACE 6->bestand WITH 6->bestand+1 // REPLACE 6->mgjahr WITH 6->mgjahr-1 // REPLACE 6->umsatz WITH 6->umsatz - 3->betrag // REPLACE 6->umsatzeu WITH 6->umsatzeu - 3->betrageu // DbRUnlock( Recno() ) // // SELECT 13 APPEND BLANK For n := 1 to FCount() FieldPut( n, aData2[n] ) NEXT IF Upper(AppName())="BERGX.EXE" nB1 := 13->&b_g nB2 := 13->&b_gh REPLACE 13->&b_g WITH 0 REPLACE 13->&b_gh WITH 0 ENDIF REPLACE 13->auftrnr WITH Val(cAuf) REPLACE 13->zeile WITH Str(Recno(),2,0) IF nBezZeil=2 IF !Empty(13->bezeich2) 13->bezeich2 := Space(45) // damit die Zeile nicht doppelt kommt!! APPEND BLANK FieldPut( 1, aData2[1] ) // =auftrnr n := FieldPos("BEZEICH2") - 1 // =bezeich (1. Zeile) FieldPut( n, aData2[n+1] ) n := FieldPos("rn") FieldPut( n, aData2[n] ) n := FieldPos("kennz") FieldPut( n, aData2[n] ) 13->zeile := Str(Recno(),2,0) // wird eine eigenstndige Zeile! ENDIF ENDIF IF Upper(AppName())="BERGX.EXE" REPLACE 13->&b_g WITH nB1 REPLACE 13->&b_gh WITH nB2 ENDIF SELECT 3 ENDIF skip ENDDO NEXT IF cAufS = cAuf ASort( a3 ) ELSE // wenn erzeugt aus einer Musterrechnung: a3 := {} DbSeek( cAuf+" ",.T. ) DO WHILE 3->auftrnr = Val(cAuf) .AND. 3->rn = " " .AND. .NOT. 3->(Eof()) DbDelete() DbSkip() ENDDO ENDIF ELSE SELECT 13 USE (cAuf3temp) EXCLUSIVE APPEND BLANK aData1 := Array(FCount()) For n := 1 to FCount() aData1[n] := FieldGet( n ) NEXT RECALL ALL GO TOP DO WHILE !Eof() For n := 1 to FCount() FieldPut( n, aData1[n] ) NEXT SKIP ENDDO DELETE ALL PACK ENDIF SELECT 8 USE serie index xserie SELECT 13 GO BOTT DO WHILE Recno() < 50 APPEND BLANK REPLACE 13->zeile WITH Str(Recno(),2,0) ENDDO SUM 13->(&b_g) TO nSumme0 FOR Val( 13->rn ) = 0 SUM 13->(&b_g) TO nSumme1 FOR Val( 13->kennz ) = 1 .AND. Val(13->rn) < 4 SUM 13->(&b_g) TO nSumme2 FOR Val( 13->kennz ) = 2 .AND. Val(13->rn) < 4 SUM 13->(&b_g) TO nSumme3 FOR Val( 13->rn ) > 0 .AND. Val(13->rn) < 4 ////// SUM 13->(&b_g)*(1+zschl_voll/100) TO nSumme0a FOR Val( 13->rn ) = 0 .AND. Val( 13->kennz ) = 1 ////// SUM 13->(&b_g) TO nSumme0b FOR Val( 13->rn ) = 0 .AND. Val( 13->kennz ) = 2 ////// nSumme0 := nSumme0a + nSumme0b ////// SUM 13->(&b_g)*(1+zschl_voll/100) TO nSumme1 FOR Val( 13->kennz ) = 1 ////// SUM 13->(&b_g) TO nSumme2 FOR Val( 13->kennz ) = 2 ////// SUM 13->(&b_g)*(1+zschl_voll/100) TO nSumme3a FOR Val( 13->rn ) > 0 .AND. Val( 13->kennz ) = 1 ////// SUM 13->(&b_g) TO nSumme3b FOR Val( 13->rn ) > 0 .AND. Val( 13->kennz ) = 2 ////// nSumme3 := nSumme3a + nSumme3b // SUM 13->(&b_g) TO nSumme0 FOR Val( 13->rn ) = 0 // SUM 13->(&b_g) TO nSumme1 FOR Val( 13->rn ) = 1 // SUM 13->(&b_g) TO nSumme2 FOR Val( 13->rn ) = 2 // SUM 13->(&b_g) TO nSumme3 FOR Val( 13->rn ) = 3 nSumme := nSumme0 + nSumme3 GO TOP IF "U"$cDruck cTitel := IIf( !"U"$cDruck, "Rechnung zu Auftrag "+cAuf+" / Verstorbener: "+ ; Trim(1->name)+", "+Trim(1->vorname)+" / Auftraggeber: "+; Trim(1->ansp_name)+", "+Trim(1->ansp_vname), ; " B U N G S - Rechnung (Abspeichern nicht mglich!)" ) ELSE cTitel := IIf( Upper(cDruck) == "BL_R", "Rechnung zu Auftrag "+cAuf+" / Verstorbener: "+ ; Trim(1->name)+", "+Trim(1->vorname)+" / Auftraggeber: "+ ; Trim(1->ansp_name)+", "+Trim(1->ansp_vname), ; "Angebot zu Vorvertrag "+cAuf+" / Kunde: "+ ; Trim(1->name)+", "+Trim(1->vorname) ) ENDIF // Standard Dialog erzeugen oDlg := GuiStdDialog( cTitel, oDlg1, nV, nFontR, @oBrowse ) // @: weil spter oBrowse gesetzt IF Upper(cDruck) = "BL_V" oDlg:drawingArea:setColorBG( GRA_CLR_GREEN ) ELSE oDlg:drawingArea:setColorBG( GRA_CLR_YELLOW ) ENDIF // Browser im Fenster erzeugen oBrowse := GuiBrowseDb( oDlg:drawingArea,,, nV ) oBrowse:softTrack := .F. // Spalten an Browser anfuegen AddColumns( oBrowse ) // Der Browser fuellt das gesamte Fenster aus oDlg:drawingArea:resize := ; {|mp1,mp2,obj| obj:childList()[1]:setSize(mp2) } // Tasten zum Editieren an das Xbp???Column Objekt delegieren oBrowse:keyboard := ; {|nKey, x, obj| IIf( nKey > 31 .OR. nKey < 256, ; obj:getColumn( obj:colPos ):keyboard( nKey ), ; NIL ) } oSleR := XbpSLE():new( oDlg:drawingArea, , {int(5*nV),int(440*nV)}, {int(20*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSleR:bufferLength := 2 oSleR:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSleR:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSleR:group := XBP_WITHIN_GROUP oSleR:dataLink := {|x| IIf( PCOUNT()==0, Str(nRab,2,0), nRab := Val(x) ) } // oSleR:dataLink := {|x| IIf( PCOUNT()==0, cNt, cNt := Upper(x) ) } oSleR:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(20*nV),int(440*nV)}, {int(70*nV),int(25*nV)}) oXbp:caption := "Summe-I:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle0 := XbpSLE():new( oDlg:drawingArea, , {int(90*nV),int(440*nV)}, {int(65*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle0:bufferLength := 8 oSle0:editable := .F. oSle0:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle0:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle0:group := XBP_WITHIN_GROUP oSle0:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme0, '99999.99' ), nSumme0 := Val(x) ) } oSle0:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(150*nV),int(440*nV)}, {int(70*nV),int(25*nV)}) oXbp:caption := "Summe-A:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle1 := XbpSLE():new( oDlg:drawingArea, , {int(220*nV),int(440*nV)}, {int(65*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle1:bufferLength := 8 oSle1:editable := .F. oSle1:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle1:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle1:group := XBP_WITHIN_GROUP oSle1:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme1, '99999.99' ), nSumme1 := Val(x) ) } oSle1:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(280*nV),int(440*nV)}, {int(70*nV),int(25*nV)}) oXbp:caption := "Summe-P:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle2 := XbpSLE():new( oDlg:drawingArea, , {int(350*nV),int(440*nV)}, {int(65*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle2:bufferLength := 8 oSle2:editable := .F. oSle2:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle2:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle2:group := XBP_WITHIN_GROUP oSle2:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme2, '99999.99' ), nSumme2 := Val(x) ) } oSle2:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(410*nV),int(440*nV)}, {int(70*nV),int(25*nV)}) oXbp:caption := "o/Fracht:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle3 := XbpSLE():new( oDlg:drawingArea, , {int(480*nV),int(440*nV)}, {int(65*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle3:bufferLength := 8 oSle3:editable := .F. oSle3:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle3:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle3:group := XBP_WITHIN_GROUP oSle3:dataLink := {|x| IIf( PCOUNT()==0, Transform( nSumme3, '99999.99' ), nSumme3 := Val(x) ) } oSle3:create():setData() oXbp := XbpStatic():new( oDlg:drawingArea, , {int(550*nV),int(440*nV)}, {int(70*nV),int(25*nV)}) oXbp:caption := "Gesamt:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() oSle := XbpSLE():new( oDlg:drawingArea, , {int(620*nV),int(440*nV)}, {int(65*nV),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := 8 oSle:editable := .F. 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, Transform( nSumme, '99999.99' ), nSumme := Val(x) ) } oSle:create():setData() oPbDruck := XbpPushButton():new( oDlg:drawingArea, , {int(700*nV),int(440*nV)}, {int(50*nV),int(25*nV)} ) oPbDruck:caption := "~Druck" // oPbDruck:group := XBP_WITHIN_GROUP oPbDruck:clipSiblings := .F. oPbDruck:create() oPbDruck:activate := {|| nGS := BlattDRG( cDruck,, oDlg:drawingArea,,, "P", "O", @nAnz, @nt ), ; SetAppFocus( oBrowse ) } // Browser anzeigen und Focus geben oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() oBrowse:show() SetAppFocus( oBrowse ) DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeP_Close .AND. lFlucht != .T. IF nSumme0>99999.99 .OR.nSumme1>99999.99 .OR.nSumme2>99999.99 .OR.nSumme3>99999.99 ; .OR.nSumme>99999.99 ModalFen( "Die Betrge der Summen ; " + ; "sind ber 99.999 EUR! ; " + ; "Korrigieren Sie die ; " + ; "falschen Preise! ; Weiter?", ; "A C H T U N G !", ; oDlg:drawingArea ) nEvent := xbeP_None LOOP ENDIF ENDIF IF nEvent == xbeP_Keyboard DO CASE CASE ( mp1 == xbeK_CTRL_INS .OR. mp1 == xbeK_ALT_E ) .AND. oXbp = oBrowse nSumme := nSumme0 := nSumme1 := nSumme2 := nSumme3 := 0 R3TSatzeinfg() oBrowse:refreshAll() CASE mp1 == xbeK_CTRL_DEL .AND. oXbp = oBrowse nSumme := nSumme0 := nSumme1 := nSumme2 := nSumme3 := 0 R3TSatzeinfg( .T. ) oBrowse:refreshAll() CASE mp1 == xbeK_CTRL_RETURN oBrowse:down() oBrowse:firstCol() oBrowse:refreshAll() PostAppEvent( xbeP_Keyboard, xbeK_RETURN,, oBrowse ) CASE mp1 == xbeK_ESC .AND. !oXbp:isDerivedFrom( "XbpSle" ) nFlucht := ConfirmBox( oCB, "nderungen speichern?", ; "Programm RECHNUNG beenden.", ; XBPMB_YESNOCANCEL, ; XBPMB_QUESTION ) IF nFlucht == XBPMB_RET_YES IF nSumme0>99999.99 .OR.nSumme1>99999.99 .OR.nSumme2>99999.99 .OR.nSumme3>99999.99 ; .OR.nSumme>99999.99 ModalFen( "Die Betrge der Summen ; " + ; "sind ber 99.999 EUR! ; " + ; "Korrigieren Sie die ; " + ; "falschen Preise! ; Weiter?", ; "A C H T U N G !", ; oDlg:drawingArea ) nEvent := xbeP_None LOOP ENDIF lFlucht := .F. PostAppEvent( xbeP_Close) ELSEIF nFlucht == XBPMB_RET_NO lFlucht := .T. PostAppEvent( xbeP_Close) ELSE SetAppFocus( oBrowse ) ENDIF CASE mp1 == xbeK_ALT_D .OR. mp1 == xbeK_CTRL_D nGS := BlattDRG( cDruck,, oDlg:drawingArea,,, "P", "O", @nAnz, @nt ) //// Rechbetr( nt, nGS, oDlg ) SetAppFocus( oPbDruck ) CASE mp1 == xbeK_ALT_G nGS := BlattDRG( cDruck,, oDlg:drawingArea,,, "P", "O", @nAnz, @nt ) //// Rechbetr( nt, nGS, oDlg ) SetAppFocus( oPbDruck ) CASE mp1 == xbeK_F1 ModalDialog( (cDatver+"f1_r3.dbf"), "Bedienungshinweise", oDlg:drawingArea, 680*nV, 460*nV ) CASE mp1 == xbeK_F10 IF nSumme0>99999.99 .OR.nSumme1>99999.99 .OR.nSumme2>99999.99 .OR.nSumme3>99999.99 ; .OR.nSumme>99999.99 ModalFen( "Die Betrge der Summen ; " + ; "sind ber 99.999 EUR! ; " + ; "Korrigieren Sie die ; " + ; "falschen Preise! ; Weiter?", ; "A C H T U N G !", ; oDlg:drawingArea ) LOOP ENDIF lFlucht := .F. PostAppEvent( xbeP_Close) CASE mp1 == xbeK_F4 .AND. oBrowse:colPos = 1 .AND. IsMemberVar( oXbp, "value" ) DbSuspendNotifications() cArt := PadR( oXbp:value, 6 ) 6->(DbSeek( cArt, .F. )) IF .NOT. 6->(Eof()) RZeileSpeichern( cAuf, 13 ) ELSE SET SOFTSEEK ON RechBSuch( cAuf, cArt, oDlg:drawingArea, nFontR, GRA_CLR_RED, 13 ) SET SOFTSEEK OFF oXbp:setData( 13->zugr_z_st ) ENDIF oBrowse:refreshAll() DbResumeNotifications() CASE (mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB .OR. mp1 == xbeK_SH_TAB) ; .AND. oBrowse:colPos = 1 .AND. IsMemberVar( oXbp, "value" ) cArt := PadR( oXbp:value, 6 ) IF !Empty(cArt) .AND. cArt != 13->zugr_z_st .AND. Val(cArt)>3 DbSuspendNotifications() 6->(DbSeek( cArt, .F. )) IF .NOT. 6->(Eof()) RZeileSpeichern( cAuf, 13 ) ELSE SET SOFTSEEK ON RechBSuch( cAuf, cArt, oDlg:drawingArea, nFontR, GRA_CLR_RED, 13 ) SET SOFTSEEK OFF oXbp:setData( 13->zugr_z_st ) ENDIF oBrowse:refreshAll() DbResumeNotifications() ENDIF CASE mp1 == xbeK_F4 .AND. oBrowse:colPos = 2 .AND. IsMemberVar( oXbp, "value" ) cBez := Trim( oXbp:value ) SET SOFTSEEK ON RechBSuch( cAuf, cArt, oDlg:drawingArea, nFontR, GRA_CLR_DARKCYAN, 13, cBez ) SET SOFTSEEK OFF oXbp:setData( 13->&bezeichZ1 ) oBrowse:refreshAll() CASE (mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB .OR. mp1 == xbeK_SH_TAB) ; .AND. oBrowse:colPos = 2 .AND. IsMemberVar( oXbp, "value" ) IF 13->&bezeichZ1 != oXbp:value .or. Empty(13->kennz) REPLACE 13->&bezeichZ1 WITH oXbp:value DbSuspendNotifications() R3TSummenVor( 13 ) // wieso eigentlich?? ckennz := 13->kennz cNt := 13->rn IF Val(13->zugr_z_st) == 0 DbSkip(-1) cKennz := 13->kennz cNt := 13->rn DbSkip() ELSEIF Val(13->zugr_z_st) < 4 ckennz := Str(Val(13->zugr_z_st),1,0) IF Upper((cNt := oSleR:getData())) == "R" cNt := " " ELSEIF Val((cNt := oSleR:getData())) > 0 ENDIF ENDIF REPLACE 13->auftrnr WITH Val(cAuf) REPLACE 13->kennz WITH cKennz REPLACE 13->rn WITH cNt oBrowse:refreshAll() R3TSummenNach( 13 ) // wieso eigentlich?? DbResumeNotifications() ENDIF CASE (mp1 == xbeK_F4 .OR. mp1 == xbeK_RETURN .OR. mp1 == xbeK_TAB .OR. mp1 == xbeK_SH_TAB) ; .AND. oBrowse:colPos = 3 .AND. IsMemberVar( oXbp, "value" ) IF 13->&b_g != oXbp:value .AND. !Empty(13->&bezeichZ1) R3TSummenVor( 13 ) REPLACE 13->&b_g WITH oXbp:value R3TSummenNach( 13 ) ENDIF // CASE mp1 == xbeK_F5 .AND. IsMemberVar( oXbp, "value" ) ; // .AND. oBrowse:colPos = 1 .AND. Upper(AppName())!="MUELLX.EXE" CASE (mp1 == xbeK_F5 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())!="MUELLX.EXE") .OR. ; (mp1 == xbeK_CTRL_F5 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())="MUELLX.EXE") DbSuspendNotifications() SELECT 8 IF !Bof() skip -1 ENDIF cArt := 8->art SELECT 13 oFocusF := SetAppFocus() cTab := RechBSuch( cAuf, cArt, oDlg:drawingArea, nFontR,, 13 ) oBrowse:refreshAll() DbResumeNotifications() IIf( cTab="TAB",, oBrowse:down() ) oBrowse:refreshAll() oFocusF := oBrowse CASE (mp1 == xbeK_F5 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())="MUELLX.EXE") .OR. ; (mp1 == xbeK_CTRL_F5 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())!="MUELLX.EXE") DbSuspendNotifications() SELECT 8 IF !Bof() skip -1 ENDIF SELECT 13 REPLACE 13->bezeich WITH 8->b1 oBrowse:refreshAll() oXbp:setData( 8->art ) DbResumeNotifications() oFocusF := oBrowse // CASE mp1 == xbeK_F6 .AND. IsMemberVar( oXbp, "value" ) .AND. Upper(AppName())!="MUELLX.EXE" CASE (mp1 == xbeK_F6 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())!="MUELLX.EXE") .OR. ; (mp1 == xbeK_CTRL_F6 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())="MUELLX.EXE") DbSuspendNotifications() SELECT 8 IF !Eof() skip 1 ENDIF cArt := 8->art SELECT 13 cTab := RechBSuch( cAuf, cArt, oDlg:drawingArea, nFontR,, 13 ) oBrowse:refreshAll() DbResumeNotifications() IIf( cTab="TAB",, oBrowse:down() ) oBrowse:refreshAll() CASE (mp1 == xbeK_F6 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())="MUELLX.EXE") .OR. ; (mp1 == xbeK_CTRL_F6 .AND. IsMemberVar( oXbp, "value" ) ; .AND. oBrowse:colPos = 1 .AND. Upper(AppName())!="MUELLX.EXE") DbSuspendNotifications() SELECT 8 IF !Eof() skip 1 ENDIF SELECT 13 REPLACE 13->bezeich WITH 8->b1 oBrowse:refreshAll() oXbp:setData( 8->art ) DbResumeNotifications() ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() SetAppFocus( oFocus ) SELECT 13 IF lFlucht == .F. .AND. !"U"$cDruck // ESC-Taste: lFlucht = .T. GO TOP REPLACE ALL 13->auftrnr WITH Val( cAuf ) FOR !Empty(13->bezeich) DELETE ALL FOR 13->auftrnr <> Val( cAuf ) .AND. Empty(13->bezeich) PACK INDEX ON Str(auftrnr,6,0)+rn+kennz+zeile TO xtemp IF Upper(AppName()) == "DISCHX.EXE" SELECT 11 USE tauftr EXCLUSIVE ENDIF SELECT 3 FIND &cAuf nZeile := 0 FOR nt := 0 TO IIf(Upper(AppName())="MUELLX.EXE",4,3) SELECT 13 IF .NOT. Bof() GO TOP ENDIF nGS := 0 DO WHILE .NOT. Eof() IF Val( 13->rn ) <> nt SKIP LOOP ENDIF ++nZeile For n := 1 to FCount() aData2[n] := FieldGet( n ) NEXT // delete // oder nicht delete ????? SELECT 3 IF nZeile <= Len( a3 ) c3 := Str( a3[nZeile] ) GO &c3 IF Upper(cDruck) != "BL_VR" // Vorvertrag ndert nicht die Artikelbestnde IF 3->auftrnr == Val(cAuf) .and. nt < 4 // 17.3.03: jetzt hier: // Artikel-Daten korrigieren: cArt := 3->zugr_z_st SELECT 6 FIND &cArt Satzsp( oDlg1 ) REPLACE 6->bestand WITH 6->bestand+1 REPLACE 6->mgjahr WITH 6->mgjahr-1 REPLACE 6->umsatz WITH 6->umsatz - 3->betrag REPLACE 6->umsatzeu WITH 6->umsatzeu - 3->betrageu DbRUnlock( Recno() ) SELECT 3 // ENDIF ENDIF IIf( 3->auftrnr == Val( cAuf ), Satzsp( oDlg1 ), SatzAppend() ) // entweder lock ... ELSE APPEND BLANK // ... oder append ENDIF For n := 1 to FCount() FieldPut( n, aData2[n] ) NEXT REPLACE 3->zeile WITH Str( nZeile,2,0 ) DbRUnlock( Recno() ) // ... und unlock nGS := nGS + 3->&b_g IF Upper(AppName()) == "DISCHX.EXE" n4 := 0 aDataD := SatzDiff( 13, @aData1, @aData2, "AUFTR" ) SELECT 11 APPEND BLANK SatzPut( 11, RecNo(), aData1, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aData2, "0" ) APPEND BLANK SatzPut( 11, RecNo(), aDataD, "0" ) SKIP // damit eof entsteht ENDIF IF Upper(cDruck) != "BL_VR" // Vorvertrag ndert nicht die Artikelbestnde IF nt < 4 // Artikel-Daten korrigieren: cArt := 3->zugr_z_st SELECT 6 FIND &cArt Satzsp( oDlg1 ) REPLACE 6->bestand WITH 6->bestand-1 REPLACE 6->mgjahr WITH 6->mgjahr+1 REPLACE 6->umsatz WITH 6->umsatz + 3->betrag REPLACE 6->umsatzeu WITH 6->umsatzeu + 3->betrageu DbRUnlock( Recno() ) // ENDIF ENDIF SELECT 13 SKIP ENDDO IF nt<4 Rechbetr( nt, nGS, oDlg ) ENDIF NEXT USE SELECT 3 DO WHILE nZeile < Len( a3 ) .AND. .NOT. Eof() c3 := Str( a3[++nZeile] ) GO &c3 IIf( 3->auftrnr == Val( cAuf ), SatzDelete(), ) ENDDO IF Upper(AppName()) == "DISCHX.EXE" SELECT 11 USE ENDIF ELSE USE // 3->(DbUnlock()) // wozu ?? ENDIF SELECT 8 USE FErase( cDatver+cAuf3temp+".dbf" ) Select &nOldArea 1->(DbResetNotifications()) RETURN ****************************************************************** * GUI Browser mit Navigations-Codebloecken erzeugen ****************************************************************** FUNCTION GuiBrowseDB( oParent, aPos, aSize, nV ) LOCAL oBrowse IF Empty(aPos) oBrowse := XbpBrowse():new( oParent,, {5,int(5*nV)}, {int(760*nV),int(420*nV)},, .F. ):create() ELSE oBrowse := XbpBrowse():new( oParent,, aPos, ASize,, .F. ):create() ENDIF // Navigations Codebloecke fuer den Browser oBrowse:skipBlock := {|n| DbSkipper(n) } oBrowse:goTopBlock := {| | DbGoTop() } oBrowse:goBottomBlock := {| | DbGoBottom() } oBrowse:phyPosBlock := {| | Recno() } // Codebloecke fuer den vertikalen Scrollbar. // Hinweis: DbPosition() liefert Werte zwischen 0 und 100. oBrowse:posBlock := {| | DbPosition() } oBrowse:goPosBlock := {|n| DbGoPosition(n) } oBrowse:lastPosBlock := {| | 100 } oBrowse:firstPosBlock := {| | 0 } RETURN oBrowse ****************************************************************** * Standard Dialog unsichtbar erzeugen ****************************************************************** FUNCTION GuiStdDialog( cTitle, oDlg1, nV, nFontR, oBrowse ) LOCAL oDlg // LOCAL aSize := {600,400} // LOCAL aPos := CenterPos( aSize, AppDesktop():currentSize() ) // DEFAULT cTitle TO "Standard Dialog Window" oDlg := AKDialog():new( AppDeskTop(), oDlg1:cargo, {10,int(30*nV)}, {int(770*nV),int(500*nV)},, .F. ) oDlg:icon := 1 oDlg:taskList := .T. oDlg:title := cTitle oDlg:drawingArea:ClipChildren := .T. // oDlg:setInputFocus := {|| SetAppFocus( IIf( oFocusF:isDerivedFrom("XbpBrowse"), oBrowse, oFocusF ) ) } // damit die Tabelle den Focus bekommt oDlg:create() oDlg:drawingArea:setFontCompoundName( nFontR ) oDlg:drawingArea:cargo := oDlg RETURN oDlg FUNCTION CenterPos( aSize, aRefSize ) RETURN { Int( (aRefSize[1] - aSize[1]) / 2 ) ; , Int( (aRefSize[2] - aSize[2]) / 2 ) } ****************************************************************** * Wert in Feld schreiben wenn Datensatz gesperrt werden kann ****************************************************************** FUNCTION WriteField( cField, xValue ) PRIVATE nA := SELECT() IF DbRLock(RecNo()) /////***** IF nA == 13 .OR. nA == 14 R3TSummenVor( nA ) ENDIF *****///// &cField := xValue //// IF cField = "(nA)->menge" //// (nA)->ges_preis := xValue * (nA)->&b_g //// ENDIF //// IF cField = "(nA)->&b_g" //// (nA)->ges_preis := xValue * (nA)->menge //// ENDIF /////***** IF nA == 13 .OR. nA == 14 R3TSummenNach( nA ) ENDIF *****///// DbRUnlock(RecNo()) ENDIF RETURN xValue ****************************************************************** * Spalten fuer Browser definieren ****************************************************************** PROCEDURE AddColumns( oBrowse, H, S ) LOCAL nA := SELECT() LOCAL aPP, oColumn, bBlock aPP := { { XBP_PP_COL_HA_CAPTION , "" }, ; { XBP_PP_COL_FA_CAPTION , "" }, ; { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK }, ; { XBP_PP_COL_DA_BGCLR , GRA_CLR_WHITE }, ; { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE }, ; { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY }, ; { XBP_PP_COL_DA_HILITEFRAMELAYOUT, XBPFRAME_BOX + XBPFRAME_RECT + XBPFRAME_DOTTED }, ; { XBP_PP_COL_DA_CELLFRAMELAYOUT , XBPFRAME_BOX + XBPFRAME_RAISED }, ; { XBP_PP_COL_DA_ROWSEPARATOR , XBPCOL_SEP_LINE }, ; { XBP_PP_COL_DA_COLSEPARATOR , XBPCOL_SEP_NONE }, ; { XBP_PP_COL_DA_FRAMELAYOUT , XBPFRAME_BOX }, ; { XBP_PP_COL_DA_HILITE_BGCLR , XBPSYSCLR_HILITEBACKGROUND } } //Stapel: IF !Empty(S) bBlock := {|x| IIf(x==NIL, (nA)->auftrnr, (nA)->(WriteField( "(nA)->auftrnr", x )) ) } aPP[1,2] := "AuftrNr" aPP[2,2] := "AuftrNr" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Str(Eval( bBlock )) ) oBrowse:addColumn( oColumn ) ENDIF bBlock := {|x| IIf(x==NIL, (nA)->ZUGR_Z_ST, (nA)->(WriteField( "(nA)->ZUGR_Z_ST", x )) ) } aPP[1,2] := "Art-Nr." aPP[2,2] := "" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Eval( bBlock ) ) oBrowse:addColumn( oColumn ) bBlock := {|x| IIf(x==NIL, (nA)->BEZEICH, (nA)->(WriteField( "(nA)->BEZEICH", x )) ) } aPP[1,2] := "Artikel-Bezeichnung" aPP[2,2] := " zur Suche nach Zeichenketten" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Eval( bBlock ) ) oBrowse:addColumn( oColumn ) bBlock := {|x| IIf(x==NIL, (nA)->&b_g, (nA)->(WriteField( "(nA)->&b_g", x )) ) } aPP[1,2] := "Preis/"+w_g aPP[2,2] := "Preis/"+w_g oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Str(Eval( bBlock )) ) oBrowse:addColumn( oColumn ) //Stapel: IF !Empty(S) bBlock := {|x| IIf(x==NIL, (nA)->kass_betr, (nA)->(WriteField( "(nA)->kass_betr", x )) ) } aPP[1,2] := "Kasse/"+w_g aPP[2,2] := "Kasse/"+w_g oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Str(Eval( bBlock )) ) oBrowse:addColumn( oColumn ) bBlock := {|x| IIf(x==NIL, (nA)->gebucht, (nA)->(WriteField( "(nA)->gebucht", x )) ) } aPP[1,2] := "buc" aPP[2,2] := "_,x" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Eval( bBlock ) ) oBrowse:addColumn( oColumn ) ENDIF //Handel: IF !Empty(H) bBlock := {|x| IIf(x==NIL, (nA)->menge, (nA)->(WriteField( "(nA)->menge", x )) ) } aPP[1,2] := "Stck" aPP[2,2] := "Stck" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Str(Eval( bBlock )) ) oBrowse:addColumn( oColumn ) bBlock := {|x| IIf(x==NIL, (nA)->ges_preis, (nA)->(WriteField( "(nA)->ges_preis", x )) ) } aPP[1,2] := "Gesamt/"+w_g aPP[2,2] := "Gesamt/"+w_g oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Str(Eval( bBlock )) ) oColumn:editable := .F. oColumn:TabStop := .F. oBrowse:addColumn( oColumn ) ENDIF bBlock := {|x| IIf(x==NIL, (nA)->KENNZ, (nA)->(WriteField( "(nA)->KENNZ", x )) ) } aPP[1,2] := "AE/IE" aPP[2,2] := "1,2" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Eval( bBlock ) ) oColumn:editable := .F. oColumn:TabStop := .F. oBrowse:addColumn( oColumn ) // bBlock := {|x| IIf(x==NIL, (nA)->RN, (nA)->(WriteField( "(nA)->RN", x)) ) } // aPP[1,2] := "Rg/NRg" // aPP[2,2] := "_,1,2,3" // oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) // oColumn:dataLink := bBlock // oColumn:bufferLength := Len( Eval( bBlock ) ) // oColumn:editable := .F. // oColumn:TabStop := .F. // oBrowse:addColumn( oColumn ) bBlock := {|x| IIf(x==NIL, (nA)->ZEILE, (nA)->(WriteField( "(nA)->ZEILE", x)) ) } aPP[1,2] := "Zeile" aPP[2,2] := "Zeile" oColumn := XbpGetColumn():new( oBrowse,,,, aPP ) oColumn:dataLink := bBlock oColumn:bufferLength := Len( Eval( bBlock ) ) oColumn:editable := .T. oColumn:TabStop := .F. oBrowse:addColumn( oColumn ) RETURN FUNCTION RechBSuch( cAuf, cArt, oDlg1, nFontR, nColor, nA, cSuchfeld ) 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 f_r tats"chliche Aufl"sung LOCAL nOldArea := Select() LOCAL lFlucht := .F., cTab := "RET" PRIVATE oCB (nA)->(DbSuspendNotifications()) SELECT 6 IF !Empty(cSuchfeld) 6->(DbSetFilter( {|| Trim(cSuchFeld)$6->&bezZ1 } )) IIf( !(6)->(Bof()), 6->(DbGotop()), ) ELSE FIND &cArt ENDIF oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := "Artikel/Leistung auswhlen" oDlg:maxButton := .F. oDlg:moveWithOwner := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10,10}, {int(740*nV),int((1+nBrowH)*150*nV)} ) // oDlg:drawingArea:setFontCompoundName( "8.Arial" ) oDlg:drawingArea:setColorBG( GRA_CLR_DARKGREEN ) oCB := oDlg:drawingArea APPBROWSE ; PARENT oDlg:drawingArea ; POSITION TOP ; FONT (nFontR) ; SIZE 100,100 PERCENT APPFIELD art_lei COLOR nCOLOR CAPTION "Art-Nr." APPFIELD &bezZ1 COLOR nCOLOR CAPTION "Leistung (Zeile1)" WIDTH nBezWb1 IF nBezZeil == 2 APPFIELD &bezZ2 COLOR nCOLOR CAPTION "Leistung (Zeile2)" WIDTH nBezWb2 ENDIF APPFIELD &v_p_s COLOR nCOLOR CAPTION "Preis/"+w_g APPFIELD ausg COLOR nCOLOR 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_TAB cTab := "TAB" PostAppEvent( xbeP_Close) CASE mp1 == xbeK_ESC lFlucht := .T. PostAppEvent( xbeP_Close) CASE mp1 == xbeK_F5 .OR. mp1 == xbeK_CTRL_F5 SELECT 8 if .not. Bof() skip -1 endif cArt := 8->art SELECT 6 FIND &cArt CASE mp1 == xbeK_F6 .OR. mp1 == xbeK_CTRL_F6 SELECT 8 if .not. Eof() skip 1 endif cArt := 8->art SELECT 6 FIND &cArt ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() 6->(DbClearFilter()) SELECT &nA IF lFlucht = .F. // ESC-Taste: lFlucht = .T. REPLACE (nA)->auftrnr WITH Val( cAuf ) REPLACE (nA)->zeile WITH Str( Recno(),2,0 ) REPLACE (nA)->kennz WITH 6->ausg REPLACE (nA)->mwst_schl WITH 6->mwst_schl REPLACE (nA)->zugr_z_st WITH 6->art_lei (nA)->neu := IIf( 6->konto="1000", "ka", " " ) REPLACE (nA)->&bezeichZ1 WITH 6->&bezZ1 IF nA == 13 R3TSummenVor( nA ) ENDIF nRab := Val(oSleR:getData()) IF Upper(AppName())!="BERGX.EXE" IF (nA)->kennz = "1" .OR. (nA)->kennz = "2" REPLACE (nA)->&b_g WITH (6->&v_p_s - 6->&e_p_s*nRab + 6->&v_p_s*0,105)*aMwSt[6->mwst_schl] REPLACE (nA)->&b_gh WITH (6->&v_p_s - 6->&e_p_s*nRab + 6->&v_p_s*0,07)*aMwSt[6->mwst_schl] ELSEIF (nA)->kennz = "0" REPLACE (nA)->&b_g WITH (6->&v_p_s)*aMwSt[6->mwst_schl] REPLACE (nA)->&b_gh WITH (6->&v_p_s)*aMwSt[6->mwst_schl] ELSEIF (nA)->kennz = "3" REPLACE (nA)->&b_g WITH (6->&v_p_s + 6->&v_p_s*0,07)*aMwSt[6->mwst_schl] REPLACE (nA)->&b_gh WITH (6->&v_p_s + 6->&v_p_s*0,07)*aMwSt[6->mwst_schl] ENDIF // REPLACE (nA)->&b_g WITH 6->&v_p_s // Handel: IF Upper(AppName())="RAGUSEX.EXE" REPLACE (nA)->menge WITH 1 REPLACE (nA)->ges_preis WITH 6->&v_p_s ENDIF // REPLACE (nA)->&b_gh WITH 6->&v_p_sh ENDIF //// IF Upper((cNt := oSleR:getData())) == "R" // Nolte/Lange-Spezial: keine Nachrechnungs-Automatik //// REPLACE (nA)->rn WITH " " //// ELSEIF Val((cNt := oSleR:getData())) > 0 //// REPLACE (nA)->rn WITH cNt //// ENDIF IF nA == 13 R3TSummenNach( nA ) ENDIF IF nBezZeil == 2 IF !Empty(6->&bezZ2) ckennz := (nA)->kennz cNt := (nA)->rn (nA)->(DbSkip()) IIf( (nA)->(Eof()), (nA)->(DbAppend()), IIf(!Empty((nA)->&bezeichZ1),R3TSatzeinfg(),)) REPLACE (nA)->&bezeichZ1 WITH 6->&bezZ2 REPLACE (nA)->auftrnr WITH Val( cAuf ) REPLACE (nA)->kennz WITH ckennz REPLACE (nA)->rn WITH cNt REPLACE (nA)->zeile WITH Str( Recno(),2,0 ) IF Upper(AppName())="BERGX.EXE" REPLACE (nA)->&b_g WITH 6->&v_p_s REPLACE (nA)->&b_gh WITH 6->&v_p_sh ENDIF (nA)->(DbSkip(-1)) ELSE IF Upper(AppName())="BERGX.EXE" REPLACE (nA)->&b_g WITH 6->&v_p_s REPLACE (nA)->&b_gh WITH 6->&v_p_sh ENDIF ENDIF ENDIF ENDIF Select &nOldArea (nA)->(DbResumeNotifications()) (nA)->(DbSkip(0)) RETURN cTab PROCEDURE RZeileSpeichern( cAuf ) LOCAL nA := SELECT() DbSuspendNotifications() REPLACE (nA)->auftrnr WITH Val( cAuf ) REPLACE (nA)->zeile WITH Str( Recno(),2,0 ) REPLACE (nA)->kennz WITH 6->ausg REPLACE (nA)->mwst_schl WITH 6->mwst_schl REPLACE (nA)->zugr_z_st WITH 6->art_lei (nA)->neu := IIf( 6->konto="1000", "ka", " " ) REPLACE (nA)->&bezeichZ1 WITH 6->&bezZ1 IF nA == 13 R3TSummenVor( nA ) ENDIF nRab := Val(oSleR:getData()) IF Upper(AppName())!="BERGX.EXE" IF (nA)->kennz = "1" .OR. (nA)->kennz = "2" REPLACE (nA)->&b_g WITH (6->&v_p_s - 6->&e_p_s*nRab + 6->&v_p_s*0,105)*aMwSt[6->mwst_schl] REPLACE (nA)->&b_gh WITH (6->&v_p_s - 6->&e_p_s*nRab + 6->&v_p_s*0,07)*aMwSt[6->mwst_schl] ELSEIF (nA)->kennz = "0" REPLACE (nA)->&b_g WITH (6->&v_p_s)*aMwSt[6->mwst_schl] REPLACE (nA)->&b_gh WITH (6->&v_p_s)*aMwSt[6->mwst_schl] ELSEIF (nA)->kennz = "3" REPLACE (nA)->&b_g WITH (6->&v_p_s + 6->&v_p_s*0,07)*aMwSt[6->mwst_schl] REPLACE (nA)->&b_gh WITH (6->&v_p_s + 6->&v_p_s*0,07)*aMwSt[6->mwst_schl] ENDIF // REPLACE (nA)->&b_g WITH 6->&v_p_s // Handel: IF Upper(AppName())="RAGUSEX.EXE" REPLACE (nA)->menge WITH 1 REPLACE (nA)->ges_preis WITH 6->&v_p_s ENDIF ////// REPLACE (nA)->&b_gh WITH 6->&v_p_sh ENDIF //// IF Upper((cNt := oSleR:getData())) == "R" // Nolte/Lange-Spezial: keine Nachrechnungs-Automatik //// REPLACE (nA)->rn WITH " " //// ELSEIF Val((cNt := oSleR:getData())) > 0 //// REPLACE (nA)->rn WITH cNt //// ENDIF // DbCommit() // nRec := Recno() IF nA == 13 R3TSummenNach( nA ) ENDIF IF nBezZeil == 2 IF !Empty(6->&bezZ2) ckennz := (nA)->kennz cNt := (nA)->rn (nA)->(DbSkip()) IIf( (nA)->(Eof()), (nA)->(DbAppend()), IIf(!Empty((nA)->&bezeichZ1),R3TSatzeinfg(),)) REPLACE (nA)->&bezeichZ1 WITH 6->&bezZ2 REPLACE (nA)->auftrnr WITH Val( cAuf ) REPLACE (nA)->kennz WITH ckennz REPLACE (nA)->rn WITH cNt REPLACE (nA)->zeile WITH Str( Recno(),2,0 ) IF Upper(AppName())="BERGX.EXE" REPLACE (nA)->&b_g WITH 6->&v_p_s REPLACE (nA)->&b_gh WITH 6->&v_p_sh ENDIF (nA)->(DbSkip(-1)) ELSE IF Upper(AppName())="BERGX.EXE" REPLACE (nA)->&b_g WITH 6->&v_p_s REPLACE (nA)->&b_gh WITH 6->&v_p_sh ENDIF ENDIF ENDIF DbResumeNotifications() RETURN FUNCTION Rechbetr( nt, nGS, oDlg1 ) LOCAL nOldArea := Select() IF nGS == NIL RETURN .T. ENDIF SELECT 1 IF Round(&r_b_0,2) <> Round(nGS,2) .AND. nt = 0 satzsp( oDlg1 ) IF xdmeu="D" repl &r_b_0 with nGS repl &r_b_0h with nGS/xFaktor ELSE repl &r_b_0 with nGS repl &r_b_0h with nGS*xFaktor ENDIF DbRUnlock( Recno() ) ENDIF IF Round(&r_b_1,2) <> Round(nGS,2) .AND. nt = 1 satzsp( oDlg1 ) IF xdmeu="D" repl &r_b_1 with nGS repl &r_b_1h with nGS/xFaktor ELSE repl &r_b_1 with nGS repl &r_b_1h with nGS*xFaktor ENDIF DbRUnlock( Recno() ) ENDIF IF Round(&r_b_2,2) <> Round(nGS,2) .AND. nt = 2 satzsp( oDlg1 ) IF xdmeu="D" repl &r_b_2 with nGS repl &r_b_2h with nGS/xFaktor ELSE repl &r_b_2 with nGS repl &r_b_2h with nGS*xFaktor ENDIF DbRUnlock( Recno() ) ENDIF IF Round(&r_b_3,2) <> Round(nGS,2) .AND. nt = 3 satzsp( oDlg1 ) IF xdmeu="D" repl &r_b_3 with nGS repl &r_b_3h with nGS/xFaktor ELSE repl &r_b_3 with nGS repl &r_b_3h with nGS*xFaktor ENDIF DbRUnlock( Recno() ) ENDIF satzsp(oDlg1) 1->&r_s := 1->&r_b_0 + 1->&r_b_1 + 1->&r_b_2 + 1->&r_b_3 1->&r_sh := 1->&r_b_0h + 1->&r_b_1h + 1->&r_b_2h + 1->&r_b_3h 1->&t_l := 1->&r_s - 1->&v_m 1->&t_lh := 1->&r_sh - 1->&v_mh DbRUnlock(RecNo()) Select &nOldArea RETURN .T. FUNCTION R3TSatzEinfg( lDel ) LOCAL nA := SELECT() LOCAL aBlattSE := {} , aBlattZSE[FCount()] LOCAL nRec := RecNo() // nSumme := nSumme0 := nSumme1 := nSumme2 := nSumme3 := 0 lDel := IIf( lDel<>NIL, lDel, .F. ) APPEND BLANK aBlattZSE := R3TSatzLese() // liest eine leere Zeile GO 1 DO WHILE .NOT. Eof() IF !Deleted() IF nRec = Recno() .AND. !lDel AAdd( aBlattSE, aBlattZSE ) // fgt eine leere Zeile ein AAdd( aBlattSE, R3TSatzLese() ) ELSEIF nRec = Recno() .AND. lDel // lt den aktuellen Satz aus ELSE AAdd( aBlattSE, R3TSatzLese() ) ENDIF ENDIF SKIP ENDDO ZAP // lscht die Datei ganz FOR i := 1 to Len( aBlattSE ) // baut die Datei neu auf: APPEND BLANK aBlattZSE := aBlattSE[i] For n := 1 to FCount() FieldPut( n, aBlattZSE[n] ) NEXT IF (nA)->(IsFieldVar("zeile")) REPLACE (nA)->zeile WITH Str( Recno(), 2, 0 ) ENDIF R3TSummenNach( nA, 0 ) NEXT IF nA = 13 oSle0:setdata( Str( nSumme0,8,2 ) ) oSle1:setdata( Str( nSumme1,8,2 ) ) oSle2:setdata( Str( nSumme2,8,2 ) ) oSle3:setdata( Str( nSumme3,8,2 ) ) nSumme := nSumme0 + nSumme3 oSle:setdata( Str( nSumme,8,2 ) ) ELSEIF nA = 14 oSle:setdata( Str( nSumme,8,2 ) ) ELSEIF nA = 19 ////// oSle:setdata( Str( nSumme,8,2 ) ) ENDIF GO nRec RETURN .T. FUNCTION R3TSatzLese() LOCAL aValue := Array( FCount() ) FOR n := 1 TO FCount() aValue[n] := FieldGet(n) NEXT RETURN aValue PROCEDURE R3TSummenVor( nA ) LOCAL nM := IIf( nH=0, 1, (nA)->menge ) IF nA = 13 IF (nA)->kennz = "1" nSumme0 := nSumme0 - (nA)->&b_g * nM //Handel ENDIF IF (nA)->kennz = "2" nSumme1 := nSumme1 - (nA)->&b_g * nM ENDIF IF (nA)->kennz = "0" .OR. (nA)->kennz = "3" nSumme2 := nSumme2 - (nA)->&b_g * nM ENDIF // IF (nA)->kennz = "0" .OR. (nA)->kennz = "3" nSumme3 := nSumme3 - (nA)->&b_gh * nM // ENDIF ////// ELSEIF nA = 14 ////// nSumme -= IIf(Empty((nA)->gebucht), (nA)->kass_betr * nM, 0 ) ////// ELSEIF nA = 19 ////// nSumme0 -= (nA)->&e_n ////// nSumme1 -= (nA)->&a_g ////// nSumme2 = nSumme0 - nSumme1 ////// nSumme = nSumme2 + nSumme3 ////// ENDIF RETURN PROCEDURE R3TSummenNach( nA, s ) LOCAL nM := IIf( nH=0, 1, (nA)->menge ) IF nA = 13 IF (nA)->kennz = "1" nSumme0 := nSumme0 + (nA)->&b_g * nM oSle0:setdata( Str( nSumme0,8,2 ) ) ENDIF IF (nA)->kennz = "2" nSumme1 := nSumme1 + (nA)->&b_g * nM oSle1:setdata( Str( nSumme1,8,2 ) ) ENDIF IF (nA)->kennz = "0" .OR. (nA)->kennz = "3" nSumme2 := nSumme2 + (nA)->&b_g * nM oSle2:setdata( Str( nSumme2,8,2 ) ) ENDIF // IF (nA)->kennz = "0" .OR. (nA)->kennz = "3" nSumme3 := nSumme3 + (nA)->&b_gh * nM oSle3:setdata( Str( nSumme3,8,2 ) ) // ENDIF IF s == 0 RETURN ENDIF nSumme := nSumme0 + nSumme1 + nSumme2 ////// ELSEIF nA = 14 ////// nSumme += IIf(Empty((nA)->gebucht), (nA)->kass_betr * nM, 0 ) ////// ELSEIF nA = 19 ////// nSumme0 += (nA)->&e_n ////// oSle0:setdata( Str( nSumme0,8,2 ) ) ////// nSumme1 += (nA)->&a_g ////// oSle1:setdata( Str( nSumme1,8,2 ) ) ////// nSumme2 = nSumme0 - nSumme1 ////// oSle2:setdata( Str( nSumme2,8,2 ) ) ////// nSumme := nSumme2 + nSumme3 ////// ENDIF oSle:setdata( Str( nSumme,8,2 ) ) RETURN FUNCTION RechnungsNr(cRArt) LOCAL cRechnr := space(5), nOldArea := SELECT() IF IsMemVar("xR") .OR. Val(cRArt)>9998 // mit "9999" wird aktueller Wert ermittelt 1->(DbRlock()) // mit >10000 wird Wert in 9->nextre eingetragen cMWSTDAT := cDatver+"mwstdat" SELECT 9 // (beides wird fr Spin in BRegieFVo gebraucht) USE (cMWSTDAT) 9->(DbRLock()) cRechnr := Str(IIf( Val(cRArt)>10000, 9->nextre := Val(cRArt), 9->nextre ),5,0) DO CASE CASE cRArt == "0" cRechnr := IIf( !Empty(1->rechnr), 1->rechnr, 1->rechnr := Str(9->nextre++ ,5,0) ) CASE cRArt == "1" cRechnr := IIf( !Empty(1->rechnrn), 1->rechnrn, 1->rechnrn := Str(9->nextre++ ,5,0) ) CASE cRArt == "2" cRechnr := IIf( !Empty(1->rechnrn2), 1->rechnrn2, 1->rechnrn2 := Str(9->nextre++ ,5,0) ) CASE cRArt == "3" cRechnr := IIf( !Empty(1->rechnrn3), 1->rechnrn3, 1->rechnrn3 := Str(9->nextre++ ,5,0) ) ENDCASE USE 1->(DbRUnlock()) ELSE DO CASE CASE cRArt == "0" cRechnr := IIf( !Empty(1->rechnr), 1->rechnr, cRechnr ) CASE cRArt == "1" cRechnr := IIf( !Empty(1->rechnrn), 1->rechnrn, cRechnr ) CASE cRArt == "2" cRechnr := IIf( !Empty(1->rechnrn2), 1->rechnrn2, cRechnr ) CASE cRArt == "3" cRechnr := IIf( !Empty(1->rechnrn3), 1->rechnrn3, cRechnr ) ENDCASE ENDIF SELECT &nOldArea RETURN cRechNr