**BRegieVE.prg   -  Regie-Zentrum fr Bestattungsverwaltung
//                      Versicherungsanschreiben zu einem Auftrag
// 06.11.2005 Auftrnr statt 6 jetzt 7-stellig bei MengX
// 06.11.2005: E ersetzt 6: aus StrX(1->auftrnr,6,0) wird StrX(1->auftrnr,E,0)

//      NEU: mit Auftrnr + Bb (=Zeile) ist der Satz eindeutig
//              beschrieben. D.h. Zeile darf nur ge„ndert aber nie (!)
//              gel”scht werden! (Z.B. mit "LEER"/"----" berschreiben)

#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Appedit.ch"
#include "Appbrow.ch"
#include "Font.ch"
#include "Dmlb.ch"
#include "Common.ch"

   #define  xbeU_RefreshPLZ xbeP_User + 7
   #define  xbeU_CalcReturn xbeP_User + 11
   #define  xbeU_RefreshCalc xbeP_User + 12

PROCEDURE VersEingabe( cAuf, oDlg1, aPos, ASize )
   LOCAL oDlg, nEvent, mp1, mp2, oXbp, oBrowse
   LOCAL oCtrl, oFocus := SetAppFocus(), aEditControls := {}
   LOCAL aPP := { { XBP_PP_FGCLR       , GRA_CLR_BLACK    } , ;
                  { XBP_PP_BGCLR       , GRA_CLR_WHITE    } }
   LOCAL aPPSle := { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } }
   LOCAL aPPTxt := { { XBP_PP_FGCLR       , GRA_CLR_BLACK    } , ;
                     { XBP_PP_BGCLR       , XBPSYSCLR_DIALOGBACKGROUND } }
   LOCAL nOldArea := Select() , aV := {} , nBbSum, nZeile
   LOCAL lFlucht := .F., nFlucht, nVS, nVS0, nVS1, nVS2, nVS3, nVExist  //07.09.2006 12:58
   PRIVATE oCB, oVEDA, oEdit, oSle0, oSle, oSle1, nVSum, cIK
   PRIVATE cIT := cVps1 := cVps2 := cVps3 := cVps4 := cVps5 := ""    // cIT Individueller Text
   PRIVATE cVanl1 := cVanl2 := cVanl3 := cVanl4 := cVanl5 := cVanl6 := ""
   PRIVATE cVKanl1 := cVKanl2 := cVKanl3 := cVKanl4 := cVKanl5 := cVKanl6 := ""
   PRIVATE ANAM, ZS1, ZS2, KAB, GR, cVr   //22.09.2006 17:36 cVr

//14.09.2007 16:11 fr den Fall, dass der Auftrag nur als 'gel”scht' markiert ist: (cAc)
   IF "g e l ” s c h t"$1->notiz
      RETURN
   ENDIF

   aPos := IIf(Empty(aPos),{10,30*nV},aPos)
   ASize:= IIf(Empty(ASize),{770*nH,500*nV},ASize)
/*14.04.2008 19:25 nH, nV ver„ndert wegen Resize */
//   IF nV < 1              // wenn die Fensterh”he reduziert wurde
      aPos := {oDlg1:cargo:currentpos()[1]+4,oDlg1:cargo:currentpos()[2]} //14.04.2008 14:28 unten wie Hauptmaske
//      aPos := {5*IIf(nH<1,1,nH),30*IIf(nV<1,1,nV)}       //06.04.2008 19:20
      ASize := {oDlg1:cargo:currentsize()[1],oDlg1:cargo:currentsize()[2]}  //14.04.2008 14:22 H”he wie Hauptmaske
//   ENDIF
/**/
//////////////////////////////////////////////////////////////////////////////////
   IF Val(cRS) < aZugang[2]      // 18.10.2007 15:25 =Bergrath
      ConfirmBox( oDlg1, "Sie haben dazu NICHT die Berechtigung!", ;
                        IIf(SET(43)==0,ConvToAnsiCP("Versicherungs/Zahlungsverwaltung"), ;
                        "Versicherungs/Zahlungsverwaltung"), ;
                        XBPMB_OK, ;
                        XBPMB_WARNING )
      RETURN
   ENDIF
///////////////////////////////////////////////////////////////////////////////////
   
   cVerstemp := "v_"+LTrim(StrX(1->auftrnr,E,0))
   DO WHILE FExists( cDatver+cVerstemp+".dbf" ) .AND. nVExist != XBPMB_RET_YES
// 07.09.2006 12:56 - damit bei Abbruch die Versicherungen rekonstruiert werden:
      nVExist := ConfirmBox( oDlg1,  ;
                  " entweder:"+CRLF+ ;
                  "1. Versicherungen werden von einem anderen Benutzer bearbeitet."+CRLF+ ;
                  "   <Ja> oder <Nein> = nochmal versuchen"+CRLF+ ;
                  "   <Esc> abbrechen"+CRLF+CRLF+ ;
                  " oder:"+CRLF+ ;
                  IIf(SET(43)==0,ConvToAnsiCP("2. Daten sind bei einem Programmabsturz bergeblieben."), ;
                  "2. Daten sind bei einem Programmabsturz bergeblieben.")+CRLF+ ;
                  "   <Ja> rekonstruiert abgebrochene Daten"+CRLF+ ;
                  "   <Nein> baut die Daten neu auf (Normalfall)"+CRLF+ ;
                  "   <Esc> abbrechen", ;
                  "Versicherungen werden schon bearbeitet ?!", ;
                  XBPMB_YESNOCANCEL, ;
                  XBPMB_WARNING, ;
                  XBPMB_DEFBUTTON2 )
      IF nVExist = XBPMB_RET_CANCEL
         //+ abbrechen, Select() oder Close() ist nicht n”tig:
         RETURN
      ELSEIF nVExist = XBPMB_RET_NO
         IF FErase( cDatver+cVerstemp+".dbf" ) != 0
            nVExist := XBPMB_RET_YES
         ENDIF
      ENDIF
      //+27.02.2009 10:30 Unsicherheit beseitigen, wenn die Datei existiert
      //+                 (sie k”nnte von mir oder einem anderen sein)
      IF nVExist = XBPMB_RET_YES       //+ nochmal versuchen 
                                     //+ bzw. Daten rekonstruieren, also Datei belassen (!)
         IF FRename( cDatver+cVerstemp+".dbf", cDatver+cVerstemp+"-X-"+".dbf" ) != 0
            nVExist := ConfirmBox( oDlg1,  ;
                        "Versicherungen werden von einem anderen Benutzer bearbeitet."+CRLF+ ;
                        "   <Ja> = nochmal versuchen"+CRLF+ ;
                        "   <Esc>/<Nein> abbrechen"+CRLF, ;
                        "Versicherungen werden schon bearbeitet !", ;
                        XBPMB_YESNOCANCEL, ;
                        XBPMB_WARNING, ;
                        XBPMB_DEFBUTTON2 )
            IF nVExist = XBPMB_RET_CANCEL .OR. nVExist = XBPMB_RET_NO
               //+27.02.2009 10:01 beim Abbrechen alles wieder zurck:
               RETURN
            ELSEIF nVExist = XBPMB_RET_YES       //+ nochmal versuchen 
               nVExist := XBPMB_RET_NO    //+ wenn  umbenennen nicht gelingt, 
                                       //+ dann wird die Datei von einem anderen festgehalten
            ENDIF
         ELSEIF FRename( cDatver+cVerstemp+"-X-"+".dbf", cDatver+cVerstemp+".dbf" ) != 0
               FErase( cDatver+cVerstemp+"-X-"+".dbf" )
               nVExist := XBPMB_RET_NO    //+ wenn zurckbenennen nicht gelingt,
                                       //+ dann hat in diesem Moment ein anderer zugeschlagen
         ENDIF
      ENDIF
   ENDDO
   IF FExists( cDatver+cVerstemp+".dbf" )    // 06.09.2006 15:59 Datei wird rekonstruiert
      SELECT 12
      USE (cVerstemp) EXCLUSIVE
      aData1 := Array(FCount())
      aData2 := Array(FCount())
      aDataD := Array(FCount())
      SELECT 2
      FIND &cAuf
      do while 2->auftrnr=val(cAuf) .and. .not. eof()
         AAdd( aV, Recno() )
         skip
      enddo
   ELSE
      SELECT 2
         DbCopyExtStruct( "VersStru" )    //27.01.2007 22:59 fr Kassen/Bankbuchungen
         SELECT 12
         USE VersStru
         APPEND BLANK
         12->field_name := "ORIG_SATZ"
         12->field_type := "N"
         12->field_len := 5
         12->field_dec := 0
         DbCreateFrom( cVerstemp,,"VersStru")
      aData1 := Array(FCount())
      aData2 := Array(FCount())
      aDataD := Array(FCount())
   
      SELECT 12
   
      USE (cVerstemp) EXCLUSIVE
      SELECT 2
      FIND &cAuf
      do while 2->auftrnr=val(cAuf) .and. .not. eof()
         For n := 1 to FCount()
            aData2[n] := FieldGet( n )
         NEXT
         AAdd( aV, Recno() )
         SELECT 12
         APPEND BLANK
         For n := 1 to FCount()-1   // wegen orig_satz   28.01.2007 10:15
            FieldPut( n, aData2[n] )
         NEXT
         12->orig_satz := ATail(aV)    //27.01.2007 22:58
         SELECT 2
         skip
      ENDDO
   ENDIF
   ASort( aV )
   SELECT 12
   GO BOTT
   DO WHILE Recno() < 30
      APPEND BLANK
   ENDDO
   SUM &b_b_g TO nVSum
   GO TOP

   oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo )
   oDlg:tasklist := .T.
   IF Upper(AppName())$cAc      //25.06.2007 19:16 Breit() ist in DbDruSysw
      oDlg:title := "Versicherungsanschreiben zu Auftrag "+cAuf+" / Verstorbener: "+;
                        Breit(Upper(Trim(1->name))," ")+", "+Trim(1->vorname) + ;
                        " / Rechnungsempf„nger: "+Trim(1->ansp_name)+", "+Trim(1->ansp_vname)
   ELSE
      oDlg:title := "Versicherungsanschreiben zu Auftrag "+cAuf+" / Verstorbener: "+;
                        Trim(1->name)+", "+Trim(1->vorname)+" / Auftraggeber: "+;
                        Trim(1->ansp_name)+", "+Trim(1->ansp_vname)
   ENDIF
   oDlg:title := IIf(SET(43)==0,ConvToAnsiCP(oDlg:title),oDlg:title)   //03.12.2006 18:02
   oDlg:maxButton := .F.
   oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED
//**   oDlg:DrawingArea:lbDown := {|x,y,o| ClearFlex(o)}  //*********************20.2.2004
   oDlg:create(,, aPos, ASize )
   SetAppFocus(oDlg)       // Fenster muá den Focus haben, damit Parts ihn dann kriegen k”nnen!
   oDlg:lockUpdate(.T.)    // damit der Bildaufbau unsichtbar bleibt
   oDlg:drawingArea:setColorBG( XBPSYSCLR_TRANSPARENT )
   oCB := oDlg:drawingArea
   oVEDA := oDlg:drawingArea
   oVEDA:cargo := oDlg

// jetzt folgt die Erzeugung der Eingabefelder
   oEdit := VersFF():new( oVEDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vv", -100, 299, 12 )
   oEdit:CREATE( oVEDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vv", -100, 299, 12 )
   oEdit:SingleZeile[1]:disable()
   oEdit:SingleZeile[2]:disable()
   oEdit:SingleZeile[4]:enable()		//+06.10.2020 14:07 SONNEX provisorisch, weil sonst keine Eingabe m”glich...
   IF Upper(AppName())$cAc
      oEdit:SingleZeile[3]:disable()      //+03.08.2017 11:31
      oEdit:SingleZeile[8]:disable()      //+03.08.2017 13:58
      oEdit:SingleZeile[9]:disable()      //+03.08.2017 13:58
      oEdit:SingleZeile[10]:disable()      //+03.08.2017 13:58
      oEdit:SingleZeile[11]:disable()      //+03.08.2017 13:58
   ENDIF

   AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } )
//   AEval( oEdit:appendControls, {|x| oDlg:addAppendControl( x ) } )
// bis hierhin geht die Erzeugung der Eingabefelder
   SELECT 12
   oDlg:setModalState( XBP_DISP_APPMODAL )

   oCtrl := XbpGetController():new( oDlg )
   oCtrl:create()
   oCtrl:READ( Val(oEdit:StartFocus), .F. )          // beinhaltet oDlg:show() und focus
// * Shortcuts initialisieren
   oDlg:InitShortCuts( oDlg )
   oDlg:lockUpdate(.F.)
   oDlg:invalidateRect()
   DbSkip(0)

   nEvent := xbe_None
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      IF nEvent == xbeP_Close .AND. lFlucht != .T.
               IF nVSum>9999999.99
                  ModalFen( "Die Summe der Zahlbetr„ge ; " + ;
                           "ist ber 9.999.999 EUR! ; " + ;
                           "Korrigieren Sie die ; " + ;
                           "falschen Betr„ge! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oVEDA )
                  nEvent := xbeP_None
                  LOOP
               ENDIF
               IF !oEdit:Pflichtfelder()      //+17.04.2012 11:57
                  nEvent := xbe_None
                  LOOP
               ENDIF
      ENDIF
      IF nEvent == xbeP_Keyboard
//// Buchstaben-Tastaturen wirken bei cAc nur, wenn der Auftrag als editierbar markiert ist:
//      IF (mp1=xbeK_BS .OR. mp1=xbeK_DEL .OR. (mp1>31 .AND. mp1<128)) ;
//                              .AND. ValType(oXbp:cargo)=="C" .AND. oXbp:cargo != "cString";
//                              .AND. !oEdit:EditVV == .T. .AND. Val(cRS) < 5;
//                              .AND. !Empty(12->&b_b_g) .AND. !Empty(12->bez_am) .AND. !Empty(12->bez_wie);
//                              .AND. Upper(AppName())$cAc   //+19.07.2017 15:51
//         MsgBox("Sie haben kein Recht zur Žnderung!")
//         LOOP
//      ENDIF
      DO CASE
//         CASE mp1 == xbeK_RETURN
//            PostAppEvent( xbeP_Activate,,, oXbp)
         CASE mp1 == xbeK_ALT_G
            BlattDrG( "Bl_v",, oVEDA )
         CASE mp1 == xbeK_ESC
               IF ValType(oVideo) == "O"
                  oVideo:stop()
                  oVideo:cargo:destroy()
                  oVideo := NIL
                  mp1 := 0
                  LOOP
               ENDIF
               IF !oEdit:Pflichtfelder()      //+12.10.2008 19:22
                  LOOP
               ENDIF
            nFlucht := ConfirmBox( oCB, IIf(SET(43)==0,ConvToAnsiCP("Žnderungen speichern?"), ;
                        "Žnderungen speichern?"), ;
                        "Programm VERSICHERUNG beenden.", ;
                        XBPMB_YESNOCANCEL, ;
                        XBPMB_QUESTION )
            IF nFlucht == XBPMB_RET_YES
               IF nVSum>9999999.99
                  ModalFen( "Die Summe der Zahlbetr„ge ; " + ;
                           "ist ber 9.999.999 EUR! ; " + ;
                           "Korrigieren Sie die ; " + ;
                           "falschen Betr„ge! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oVEDA )
                  LOOP
               ENDIF
               lEinfg := .F.
               lFlucht := .F.
               PostAppEvent( xbeP_Close)
            ELSEIF nFlucht == XBPMB_RET_NO
               lEinfg := .F.
               lFlucht := .T.
               PostAppEvent( xbeP_Close)
            ELSE
               LOOP
            ENDIF
         CASE mp1 == xbeK_CTRL_F7 .AND. Val(cRS)>4 .AND. Upper(AppName())$cAc       //+03.08.2017 12:56 >3 //+21.08.2017 21:29 >4
            oEdit:SingleZeile[8]:enable()      //+03.08.2017 13:58
            oEdit:SingleZeile[9]:enable()      //+03.08.2017 13:58
            oEdit:SingleZeile[10]:enable()      //+03.08.2017 13:58
            oEdit:SingleZeile[11]:enable()      //+03.08.2017 13:58
//         CASE mp1 == xbeK_ALT_F12
//            SELECT 2
//            DbGotop()
//            DO WHILE !Eof()
//               IF Empty(2->ind_text)
//                  satzsp(oCB)
//                  2->ind_text := IIf(2->kennzab="A",oEdit:TxBd1,IIf(2->kennzab="B",oEdit:TxBd0,""))
//                  DbRUnlock()
//               ENDIF
//               DbSkip()
//            ENDDO
//            SELECT 12
         CASE mp1 == xbeK_F10
               IF nVSum>9999999.99
                  ModalFen( "Die Summe der Zahlbetr„ge ; " + ;
                           "ist ber 9.999.999 EUR! ; " + ;
                           "Korrigieren Sie die ; " + ;
                           "falschen Betr„ge! ; Weiter?", ;
                           "A C H T U N G !", ;
                           oVEDA )
                  LOOP
               ENDIF
               IF !oEdit:Pflichtfelder()      //+12.10.2008 19:22
                  LOOP
               ENDIF
            lEinfg := .F.
//            PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[6] )
            PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[oEdit:XbpNummer(oEdit:DruckKnopf,"ENDE")] )
         CASE mp1 == xbeK_F7
            oEdit:VersAusVV()
//            CASE mp1 == xbeK_CTRL_F12
//               aaa[3] := xxx     // um einen Laufzeitfehler zu erzeugen 07.09.2006 09:08
         CASE mp1 == xbeK_F1
            ModalDialog( (cDatver+"f1_VE.rtf"), "Bedienungshinweise", oVEDA, 680*nH, 460*nV )
            oXbp:enable()
         CASE mp1 == Asc("+") .AND. oXbp:isderivedfrom("XbpSle") .AND. ValType(oXbp:value)=="D"
            oEdit:DatumSet( oXbp, +1 )
         CASE mp1 == Asc("-") .AND. oXbp:isderivedfrom("XbpSle") .AND. ValType(oXbp:value)=="D"
            oEdit:DatumSet( oXbp, -1 )
         CASE mp1 == Asc("*") .AND. oXbp:isderivedfrom("XbpSle") .AND. ValType(oXbp:value)=="D"
            oEdit:DatumSet( oXbp, +7 )
         CASE mp1 == Asc("_") .AND. oXbp:isderivedfrom("XbpSle") .AND. ValType(oXbp:value)=="D"
            oEdit:DatumSet( oXbp, -7 )
         CASE mp1 == Asc("#") .AND. oXbp:isderivedfrom("XbpSle") .AND. ValType(oXbp:value)=="D"
            oEdit:DatumSet( oXbp, 0 )
					CASE mp1 == xbeK_ALT_SZ		//18.12.2023 16:52 fr FormHtml-inditext-Modul -> Feldnamen in AuftragNr. 66 zeigen
		            IF 1->auftrnr == 66 .AND. Upper(AppName())$"NOLTEX.EXE-BLEINX.EXE"
		            	nRec := 12->(RecNo())
			            12->(DbSuspendNotifications())
		               IF ConfirmBox( oCB, ;
		                        "Klick auf OK zeigt in den Feldern die Feldnamen." + CRLF + ;
		                        "Vorher musste auf den Fall 66 umgestellt werden," + CRLF + ;
		                        "danach wieder zurck auf den aktuellen Fall." + CRLF + ;
		                        "abbrechen mit <Esc>", ;
		                        "Funktion Feldname im Feld zeigen:", ;
		                        XBPMB_OKCANCEL, ;
		                        XBPMB_QUESTION ) == XBPMB_RET_OK
		               	IF 1->(DbSeek("000066",.F.))
			               	Satzsp()
			               	FOR ec:=2 TO Len(oEdit:editControls)
			               		xCargo := oEdit:editControls[ec]:cargo
			               		IF 12->(IsFieldVar(xCargo))
				               		IF ValType(xCargo) == "C" .AND. ValType(12->&(xCargo)) $ "CM"
				               			IIf(ValType(12->&(xCargo)) == "M",Satzsp(),)
					               		oEdit:editControls[ec]:setData( xCargo )
					               		oEdit:editControls[ec]:getData()
				               		ELSEIF ValType(xCargo) == "C" .AND. ValType(12->&(xCargo)) $ "ND"
//					               		oEdit:editControls[ec]:setData( xCargo )
					               		oEdit:editControls[ec]:seteditbuffer( xCargo )
					               	ENDIF
					               ELSEIF IsMemberVar(oEdit,xCargo)
					               	IF ValType(oEdit:&xCargo) == "M" .OR. oEdit:editControls[ec]:isDerivedFrom("MGET")
				               			oEdit:editControls[ec]:setdata( ":"+xCargo )
				               		ELSE
					               		oEdit:editControls[ec]:seteditbuffer( ":"+xCargo )
					               	ENDIF
					               ELSEIF xCargo[1]=="&" .AND. IsMemVar(SubStr(xCargo,2))
				               		oEdit:editControls[ec]:seteditbuffer( xCargo )
					               ENDIF
			               	NEXT
			               	DbRUnlock(RecNo())
			               	msgbox("Dieses ist die Anzeige der Feldnamen." + CRLF +;
			               		"Der Feldname des Kennzeichen "+Trim(12->verskz)+" ist VERSKZ.")
		               	ENDIF
		               ENDIF
			            12->(DbGoto(nRec))
			            12->(DbSkip(0))
			            12->(DbResumeNotifications())
		         	ELSE
		         		msgbox("Suchen/erzeugen Sie zuerst den Fall 66!")
		         	ENDIF
      ENDCASE
      ENDIF
//+ Calculator wurde beendet:
      IF nEvent == xbeU_CalcReturn     //+ xbeP_User + 10
         //+ bisher noch keine Aktion an dieser Stelle !
         oFocsle:setData( mp1 )
         SetAppFocus(oFocSle)
//+ PLZ/Ort wurde gesucht: in SLE einsetzen (steht in oBest:aI1, beim Aufrufen von PLC() gesetzt)
      ELSEIF nEvent == xbeU_RefreshPLZ
         IF mp1 != NIL
            Satzsp(oCB)
            oEdit:aI1[1]:setData(mp1[1])
            oEdit:aI1[2]:setData(mp1[2])
   //         oBest:XbpObjektSet(,oBest:aI1[3],mp1[3])   // wrde gebraucht bei separatem PLZ-Feld
            oEdit:aI1[1]:getData()
            oEdit:aI1[2]:getData()
   //         oBest:XbpObjektGet(,oBest:aI1[3])
            DbRUnlock()
         ENDIF
         oBest:oPLZThrd := NIL      //+ fr alle F„lle
         SetAppFocus(oFocSle)
      ELSE
         oXbp:handleEvent( nEvent, mp1, mp2 )
      ENDIF
   ENDDO

   oDlg:setModalState( XBP_DISP_MODELESS )
   DbDeRegisterClient(oEdit)
   oEdit:destroy()
   oDlg:destroy()
   ThreadObject():cargo := oDlg1:cargo //+09.02.2010 18:24 wegen MagicHelp
   SetAppFocus( oFocus )

   SELECT 12
   IF lFlucht == .F.               // ESC-Taste: lFlucht = .T.
      SUM &b_b_g TO nVSum
      nVS := nVSum
      IF IsFieldVar("rn")        // cAc
         SUM &b_b_g TO nVS0 FOR Val(rn)=0    //18.07.2007 15:06
         SUM &b_b_g TO nVS1 FOR rn="1"
         SUM &b_b_g TO nVS2 FOR rn="2"
         SUM &b_b_g TO nVS3 FOR rn="3"
      ENDIF
      SELECT 2
      FIND &cAuf
      SELECT 12
      DELETE FOR 12->bb = "*" .OR. (Empty(12->verskz) .AND. Empty(12->name1))
      PACK
      nBbSum := 0
      nZeile := 0
      SUM Val( 12->bb ) TO nBbSum FOR 12->verskz <> "----"
      IF .NOT. Bof()
         GO TOP
      ENDIF
      DO WHILE .NOT. Eof()
         12->auftrnr := Val( cAuf ) 
         IF Val( 12->bb ) <> ++nZeile .AND. nBbSum = 0
            REPLACE 12->bb WITH LTrim(Str( nZeile,2,0 ))
         ENDIF
         For n := 1 to FCount()
            aData2[n] := FieldGet( n )
         NEXT
//         delete                            // oder nicht delete ?????
         SELECT 2
         IF nZeile <= Len( aV )
            cVr := Str( aV[nZeile] )
            GO &cVr
            IIf( 2->auftrnr = Val( cAuf ), Satzsp( oCB ), SatzAppend() )
         ELSE
            APPEND BLANK
         ENDIF
         For n := 1 to FCount()
            FieldPut( n, aData2[n] )
         NEXT
         DbRUnlock( Recno() )
         SELECT 12
         SKIP
      ENDDO
      USE
      SELECT 2
      DO WHILE nZeile < Len( aV ) .AND. !Eof()
         cVr := Str( aV[++nZeile] )
         GO &cVr
         IIf( 2->auftrnr = Val( cAuf ), SatzDelete(), )
      ENDDO
      USE      // 19.08.2006 12:49, damit sicher abgespeichert wird
      USE vv INDEX xvvauf
      SELECT 1
      satzsp( oCB )           // muá getrennt gesperrt werden, weil nicht ber getData()
      1->&v_m  := nVS
      IF 2->(IsFieldVar("rn"))
         1->eingbetr0 := nVS0
         1->eingbetr1 := nVS1
         1->eingbetr2 := nVS2
         1->eingbetr3 := nVS3
      ENDIF
      IIf(IsFieldVar("&"+"v_mh"), ; //!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE-RAGUSEY.EXE-HANDEL.EXE"+cAc, ;
            1->&v_mh  := IIf( xdmeu="D", nVS/xfaktor, nVS*xfaktor ), )
      1->&t_l := 1->&r_s - 1->&v_m
      IIf(IsFieldVar("&"+"t_lh"), ; //!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE-RAGUSEY.EXE-HANDEL.EXE"+cAc, ;
            1->&t_lh := 1->&r_sh - 1->&v_mh, )
      DbRUnlock(RecNo())
      1->(DbCommit())      //10.08.2006 17:40
   ELSE
      USE
//      2->(DbUnlock())    //  WOZU ???
   ENDIF
   FErase( cDatver+cVerstemp+".dbf" )
   FErase( cDatver+cVerstemp+".dbt" )  //+05.12.2017 15:16
   Select &nOldArea
   IIf(lLogBook,oBest:TLog:write():writeLogFile(),)    //16.09.2007 22:32
RETURN


PROCEDURE KuvertKlein
   SET DEVICE TO printw
   @ 13,45 say name1
   @ 14,45 say name2
   @ 15,45 say strasse
   @ 17,45 say plz_ort
   EJECT
   SET DEVICE TO SCREEN
RETURN

PROCEDURE KuvertGross
   SET DEVICE TO printw
   @ 21,45 say name1
   @ 22,45 say name2
   @ 23,45 say strasse
   @ 25,45 say plz_ort
   EJECT
   SET DEVICE TO SCREEN
RETURN

FUNCTION DerDes( cVerwandt, cVerwandt2, cIhr )
   LOCAL cDDD := Trim(" ")
   DO CASE
      CASE "FRAU"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "MANN"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"es"
         cIhr := "Ihrer"
         cVerwandt2 := Verwum(cVerwandt)
      CASE "MUTTER"$Upper(cVerwandt) .AND. "SOHN"$Upper(Verwum(cVerwandt))
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "VATER"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"s"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "TOCHTER"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "SOHN"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"es"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "ENKELIN"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "ENKEL"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"s"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "NICHTE"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "NEFFE"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"n"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "TANTE"$Upper(cVerwandt)
         cDDD := "der "+Trim(cVerwandt)
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      CASE "ONKEL"$Upper(cVerwandt)
         cDDD := "des "+Trim(cVerwandt)+"s"
         cIhr := "Ihres"
         cVerwandt2 := Verwum(cVerwandt)+"es"
      OTHERWISE
         cDDD := "von:"
         cIhr := "Ihr."
         cVerwandt2 := "Verstorbenen"
   ENDCASE
RETURN cDDD

FUNCTION Verwum( cVerwandt )
   DO CASE
      CASE "FRAU"$Upper(cVerwandt)
         cDDD0 := "Ehemann" ; cDDD1 := "seine"; cDDD2 := "r"; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "MANN"$Upper(cVerwandt)
         cDDD0 := "Ehefrau" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWIEGERMUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwiegersohn" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "SCHWIEGERMUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwiegertochter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "MUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Sohn" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "MUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tochter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "MUTTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="KIND"
         cDDD0 := "Kind" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "SCHWIEGERVATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwiegersohn" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "SCHWIEGERVATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwiegertochter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "VATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Sohn" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "VATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tochter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "VATER"$Upper(cVerwandt) .AND. Upper(1->anrede)="KIND"
         cDDD0 := "Kind" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "sein" ; cDDD5 := "es" ; cDDD6 := "es"
      CASE "SCHWIEGERTOCHTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwiegervater" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWIEGERTOCHTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwiegermutter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "TOCHTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Vater" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "TOCHTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Mutter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD4 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWIEGERSOHN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwiegervater" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWIEGERSOHN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwiegermutter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SOHN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Vater" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SOHN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Mutter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "es"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWESTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Bruder" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWESTER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwester" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "BRUDER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Bruder" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "BRUDER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schwester" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "ENKELIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Groávater" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "ENKELIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Groámutter" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "ENKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Groávater" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "ENKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Groámutter" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "sein" ; cDDD5 := "er" ; cDDD6 := ""
      CASE "NICHTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Onkel" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "NICHTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tante" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "NEFFE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Onkel" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "n"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "NEFFE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Tante" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "n"
         cDDD4 := "sein" ; cDDD5 := "er" ; cDDD6 := ""
      CASE "TANTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Neffe" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "n"
      CASE "TANTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Nichte" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "ONKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Neffe" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "n"
      CASE "ONKEL"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Nichte" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWŽGERIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwager" ; cDDD1 := "seine"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWŽGERIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schw„gerin" ; cDDD1 := "ihre"; cDDD2 := "r" ; cDDD3 := ""
         cDDD3 := "ihre" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "SCHWAGER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Schwager" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "SCHWAGER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Schw„gerin" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "LEBENSPARTNERIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Lebenspartner" ; cDDD1 := "sein"; cDDD2 := "er" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "LEBENSPARTNERIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Lebenspartnerin" ; cDDD1 := "ihr"; cDDD2 := "er" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "er" ; cDDD6 := ""
      CASE "LEBENSPARTNER"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Lebenspartner" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "s"
      CASE "LEBENSPARTNER"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Lebenspartnerin" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE "LEBENSGEFŽHRTIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Lebensgef„hrte" ; cDDD1 := "sein"; cDDD2 := "er" ; cDDD3 := ""
         cDDD3 := "ihr" ; cDDD5 := "es" ; cDDD6 := "n"
      CASE "LEBENSGEFŽHRTIN"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Lebensgef„hrtin" ; cDDD1 := "ihr"; cDDD2 := "er" ; cDDD3 := ""
         cDDD4 := "ihr" ; cDDD5 := "er" ; cDDD6 := ""
      CASE "LEBENSGEFŽHRTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="HERR"
         cDDD0 := "Lebensgef„hrte" ; cDDD1 := "sein"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD3 := "sein" ; cDDD5 := "es" ; cDDD6 := "n"
      CASE "LEBENSGEFŽHRTE"$Upper(cVerwandt) .AND. Upper(1->anrede)="FRAU"
         cDDD0 := "Lebensgef„hrtin" ; cDDD1 := "ihr"; cDDD2 := "es" ; cDDD3 := "s"
         cDDD4 := "seine" ; cDDD5 := "r" ; cDDD6 := ""
      CASE cVerwandt = "-"
         cDDD0 := ""
         cDDD1 := ""; cDDD2 := "" ; cDDD3 := ""
         cDDD4 := "" ; cDDD5 := "" ; cDDD6 := ""
      OTHERWISE
         cDDD0 := IIf(1->anrede="H","","")
         cDDD1 := ""; cDDD2 := "" ; cDDD3 := ""
         cDDD4 := "" ; cDDD5 := "" ; cDDD6 := ""
   ENDCASE
RETURN cDDD0


CLASS VersFF FROM DialogFF
   EXPORTED:
   VAR VArea
   VAR nVSum
   VAR nTotal                          //25.06.2007 19:22
//+03.08.2017 13:38 geREMt   VAR EditVV                          //+19.07.2017 15:46
   METHOD INIT
   METHOD CREATE
   METHOD notify
   METHOD SummeBezahlt
   METHOD ZAHLUNGzuKASSE               //27.01.2007 23:09
   METHOD VersSuch
   METHOD VersEntf
   METHOD VersNeu
//+03.08.2017 13:37 geREMt   METHOD VersAendern                  //+19.07.2017 15:46
   METHOD VersDruckA
   METHOD AdrVvZuVers
   METHOD VersAusVV
   METHOD Pflichtfelder                //+12.10.2008 20:24 berl„dt DialogFF, weil ganze Datei...
ENDCLASS

METHOD VersFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::DialogFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::Fancy := cVersBM
   ::VArea := nA
   ::BEArea := {}
   AAdd( ::BEArea, oParent )
   ::BENr := Len( ::BEArea )
   ::aStructure := (::VArea)->(DbStruct())
   ::aFelder := {}                   // Array mit allen Feldnamen
   AEval( ::aStructure, {|a| AAdd( ::aFelder, a[1] ) } )
   IF nA == 12
      (::VArea)->(DbSuspendNotifications())
      SUM (::VArea)->&b_b_g TO ::nVSum
      (::VArea)->(DbGotop())
      (::VArea)->(DbResumeNotifications())
   ENDIF
//+03.08.2017 13:34 geREMt   ::EditVV := .F.
RETURN self

METHOD VersFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
   ::DialogFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA )
//   (nA)->(DbRegisterClient(self))     // reicht es, wenn das Fenster als Ganzes registriert ist??
RETURN self

METHOD VersFF:notify( nEvent, mp1, mp2 )
   LOCAL nRec, oFocus, i
      IF nEvent == xbeDBO_Notify             // Notify-Ereignis
         IF mp1 == DBO_MOVE_DONE             // Skip ist beendet
            IF !SetAppFocus():isDerivedFrom( "XbpBrowse" ) .AND. Len(::BrowseFeld) > 0
               (::VArea)->(DbSuspendNotifications())   //; ++cBegleit[::VArea]
               nRec := (::VArea)->(RecNo())
               FOR i := 1 TO Len(::BrowseFeld)
                  ::BrowseFeld[i]:refreshAll()
               NEXT
//               IF ::VArea == 12
//                  oFocus := SetAppFocus()
//                  SUM (::VArea)->&b_b_g TO nVSum
//                  oSle1:setData( Str(nVSum,10,2) )
//                  SetAppFocus( oFocus )
//               ENDIF
               (::VArea)->(DbGoto( nRec ))
               (::VArea)->(DbResumeNotifications())   //+26.11.2008 19:34 ume
            ENDIF
   // oEdit: statt self:, weil AdressFF auch oBrowse erzeugt, das Suchfeld links unten
            IF Len(aCd)==5     // 06.04.2006  Farbe abh„ngig von aBP[7] (Angeh”riger)
               FOR i := 1 TO Len(aBEAd)
                  oEdit:BEArea[aBEAd[i]]:setColorBG( GraMakeRGBColor( aCd[oBest:aBP[7]] ))
               NEXT
            ENDIF
//+06.10.2020 14:20 fr SonneX geREMt            ::XbpObjekt(::singleZeile,"verskz"):disable()
//+03.08.2017 14:04 vorl„ufig geREMt: (auch bei scroll bleibt Einzahlung enabled)
            IF Empty(::SingleZeile[8]:value) .OR. Empty(::SingleZeile[9]:value) .OR. Empty(::SingleZeile[10]:value)   //+21.08.2017 20:40 testweise wiederbelebt
               ::SingleZeile[8]:enable()      //+03.08.2017 13:58
               ::SingleZeile[9]:enable()      //+03.08.2017 13:58
               ::SingleZeile[10]:enable()      //+03.08.2017 13:58
               ::SingleZeile[11]:enable()      //+03.08.2017 13:58
            ELSE
               ::SingleZeile[8]:disable()      //+03.08.2017 13:58
               ::SingleZeile[9]:disable()      //+03.08.2017 13:58
               ::SingleZeile[10]:disable()      //+03.08.2017 13:58
               ::SingleZeile[11]:disable()      //+03.08.2017 13:58
            ENDIF
//+03.08.2017 13:35 geREMt            ::EditVV := .F.   //+19.07.2017 16:06
         ENDIF
      ENDIF
RETURN self

METHOD VersFF:SummeBezahlt()
   LOCAL nRec, i, oFocus
      (::VArea)->(DbSuspendNotifications())
      ::XbpObjekt(::singleZeile,"&"+"b_b_g"):getData()
      nRec := (::VArea)->(RecNo())
      FOR i := 1 TO Len(::BrowseFeld)
         ::BrowseFeld[i]:refreshAll()
      NEXT
      IF ::VArea == 12
         oFocus := SetAppFocus()
         SUM (::VArea)->&b_b_g TO ::nVSum
         ::XbpObjekt(::singleZeile,"nVSum"):setData()
         IF ::nTotal <> NIL                           //25.06.2007 19:38
            ::nTotal := 1->recheleu + 1->rechfleu - ::nVSum
            ::XbpObjekt(::singleZeile,"nTotal"):setData()
         ENDIF
         SetAppFocus( oFocus )
      ENDIF
      (::VArea)->(DbGoto( nRec ))
      (::VArea)->(DbResumeNotifications())
RETURN self

// Bucht den Eingangsbetrag in die Kasse
// markiert die Zeile als gebucht ("x")
METHOD VersFF:ZAHLUNGzuKASSE( oDlg1 )
   LOCAL nOldArea := SELECT(), n, nRec, a2 := {}
   LOCAL nA := IIf( IsMemVar("cKassTemp"),19,29)    // wenn von der Kasse aufgerufen 24.01.2007 14:18
   IF Empty(12->gebucht) .AND. Upper(12->bez_wie)$"1BKS2šUG" .AND. ;
               ConfirmBox( oCB, ;
               "JA = verbuchen in Kasse/Bank", ;
               "Zahlung buchen?", ;
               XBPMB_YESNO, ;
               XBPMB_QUESTION ) == XBPMB_RET_YES
//      SELECT &nA
      IF Upper(12->bez_wie)$"1BKS"           // bar, Kasse, Scheck
         IF nA = 29 .OR. (nA=19 .AND. 9->(Alias())="BANK")
            SELECT 29   // weil eine von den beiden schon in Area9 ge”ffnet ist !
            USE kbbuch index xkbbuch         // wenn nicht vom Kassen/Bankmodul aufgerufen
            append BLANK                     // oder doch, aber von der Bank-Buchung
         ENDIF
      ELSEIF Upper(12->bez_wie)$"2šUG"       // šberweisung auf das Girokonto
         IF nA = 29 .OR.  (nA=19 .AND. 9->(Alias())="KBBUCH")
            SELECT 29
            USE bank INDEX xbank             // wenn nicht vom Kassen/Bankmodul aufgerufen
            append BLANK                     // oder doch, aber von der Kassen-Buchung
         ENDIF
      ELSE
         RETURN self
      ENDIF
      nA:=IIf( SELECT()=29,29,19)
      (nA)->datum := 12->bez_am
      (nA)->&e_n := IIf(12->&b_b_g>=0,12->&b_b_g,0)
      (nA)->&a_g := IIf(12->&b_b_g<0,Abs(12->&b_b_g),0)
      (nA)->auftrnr := StrX(12->auftrnr)
      (nA)->txnr := "11" 
      (nA)->tx := SubStr(12->name1,1,Len((nA)->tx))
      12->gebucht := "x"         // Satz ist gebucht in Kasse oder Bank
      SELECT 29
      USE
      SELECT 2
      DbGoto(12->orig_satz)
      Satzsp(oDlg1)
      2->gebucht := "x"       // fr den Fall, dass VersTemp nicht gespeichert wird
      DbRUnlock(RecNo())
   ENDIF
   SELECT &nOldArea
RETURN self

METHOD VersFF:VersSuch( oDlg1, cSuchFeld, aPos, ASize )
   LOCAL oDlg, nEvent, mp1, mp2, oBrowse, cVerskz := Trim(" ")
   LOCAL nOldArea := Select(), oFocus := SetAppFocus()
   LOCAL lFlucht := .F., nRet
   LOCAL cVorigerWert := ::XbpObjekt(::singleZeile,Trim(cSuchfeld)):vorigerwert  // 31.12.2004
   LOCAL oLastXbp := ::XbpObjekt(::singleZeile,cSuchfeld)                  // 31.12.2004
//+03.08.2017 13:35 geREMt   LOCAL oEditVVsave := ::EditVV    //+19.07.2017 16:30
   PRIVATE oCB
   DEFAULT aPos TO {10,30*nV}, ;
           ASize TO {330*nH,230*nV}
   (nOldArea)->(DbSuspendNotifications())
   IF !" "$cSuchFeld   // 12.02.2006 bei F7-AdrAusVV heiát es "verskz " (mit Space!)
      SELECT 5          //+26.11.2008 20:47 von vor dem IF
      5->(DbSuspendNotifications())
   
      IF Upper(cSuchFeld) = "NAME1"
         cSuchFeld := oDlg1:childFromName( 12->(FieldPos( cSuchFeld ))):getData()
         5->(DbSetFilter( {|| IIf( !Empty(cSuchFeld),Upper(Trim(cSuchFeld))," " )$Upper(5->name1+5->name2) } ))
         IIf( !(5)->(Bof()), 5->(DbGotop()), )
      ELSEIF Upper(cSuchFeld) = "VERSKZ"
         cVerskz := Trim( oDlg1:childFromName( 12->(FieldPos( cSuchFeld )) ):getData() )
//         IF Upper(AppName())$cAc .AND. Asc(cVerskz)>64     // Suche nach Anfangsbuchstaben
//            5->(DbSetOrder(2))            //06.05.2007 11:58
//         ENDIF
         IF Upper(AppName())$"FLUESX.EXE" //25.04.2008 15:39
            5->(DbSeek( Upper(cVerskz), .T. ))
         ELSE
            5->(DbSeek( cVerskz, .T. ))
            IF 5->(Eof())  //+22.01.2018 09:51
               5->(DbGotop()) // z.B. wenn mit Kleinbuchstaben in lauter Groábuchstaben gesucht
            ENDIF
         ENDIF
      ELSE
         5->(DbSetOrder(1))            //06.05.2007 11:58
         5->(DbSkip(0))                //06.05.2007 11:59
         5->(DbResumeNotifications())  //+26.11.2008 19:34 ume
         Select &nOldArea
         (nOldArea)->(DbResumeNotifications())  //+26.11.2008 19:34 ume
         (nOldArea)->(DbSkip(0) )
         SetAppFocus( oFocus )
         RETURN .F.
      ENDIF
   
      IF Upper(cSuchFeld) != "VERSKZ" .OR. Upper(Trim(cVerskz)) != Upper(Trim(5->verskz)) .OR. Empty(5->verskz)   //+22.01.2018 10:03 Empty
         
         cTitel := "Versicherungsadresse suchen zu ï" + IIf(!Empty(cVerskz),cVerskz,Trim(cSuchFeld))+"ï"
         lFlucht := oEdit:Such(  oVEDA, "s_vv", 300, 399, 5, 5->(RecNo()), ;
                                                aPos, ASize, {}, cTitel  )

      ENDIF
      5->(DbClearFilter())
      5->(DbSetOrder(1))            //06.05.2007 11:58
      5->(DbSkip(0))                //06.05.2007 11:59
      5->(DbResumeNotifications())   //+26.11.2008 19:33 ume
   ENDIF
   cVerskz := 5->verskz
   SELECT 12
   IF lFlucht = .F.               // ESC-Taste: lFlucht = .T.
      IF 12->verskz <> "     " .AND. 12->verskz <>"LEER" .AND. 12->verskz <> "----"
         nRet := IIf( Upper(AppName())$"FLUESX.EXE", XBPMB_RET_NO, ;
                     ConfirmBox( oDlg1, IIf(SET(43)==0,ConvToAnsiCP("(hinten anh„ngen = <Nein>)"), ;
                        "(hinten anh„ngen = <Nein>)"), ;
                        "Versicherungseintrag ersetzen", ;
                        XBPMB_YESNOCANCEL, ;
                        XBPMB_WARNING, ;
                        XBPMB_DEFBUTTON1 ))
         IF nRet ==  XBPMB_RET_YES
         ELSEIF nRet ==  XBPMB_RET_NO
            IF !" "$cSuchFeld   // 12.02.2006 bei F7-AdrAusVV heiát es "verskz " (mit Space!)
               oLastXbp:setData( cVorigerWert ) // 16.12.2004
               oLastXbp:getData()               // 16.12.2004
            ENDIF
            12->(DbLocate( {|| Empty(12->auftrnr) .OR. (Empty(12->verskz) .AND. Empty(12->name1)) } ) )
            IF Eof()
               APPEND BLANK
            ENDIF
         ELSE
            IF !" "$cSuchFeld   // 12.02.2006 bei F7-AdrAusVV heiát es "verskz " (mit Space!)
               oLastXbp:setData( cVorigerWert ) // 16.12.2004
               oLastXbp:getData()               // 16.12.2004
            ENDIF
            Select &nOldArea
            (nOldArea)->(DbResumeNotifications())   //+26.11.2008 19:33 ume
            (nOldArea)->(DbSkip(0) )
            SetAppFocus( oFocus )
            RETURN self
         ENDIF
      ENDIF
      REPLACE 12->auftrnr WITH 1->auftrnr
      REPLACE 12->verskz WITH cVerskz
      REPLACE 12->bb WITH LTrim(Str( Recno(),2,0 ))
      IF IsFieldVar( "kennzab" ) .AND. !Upper(AppName())$"SCHIERX.EXE"  //+14.10.2008 10:20
         REPLACE 12->kennzab WITH "B"
      ELSEIF IsFieldVar( "ausw2" ) .AND. Upper(AppName())="DISCHX.EXE"
         REPLACE 12->ausw2 WITH "B"
         REPLACE 12->ausw1 WITH 5->gruppe
         REPLACE 12->gruppe WITH 5->gruppe
         REPLACE 12->brname WITH 5->anschr1
      ELSEIF IsFieldVar( "ausw1" ) .AND. Upper(AppName())!="DISCHX.EXE"
         REPLACE 12->ausw1 WITH "B"
      ENDIF
      IF IsFieldVar( "abrname" ) .AND. 5->(IsFieldVar("abrname")) 
         REPLACE 12->abrname WITH 5->abrname
      ELSEIF IsFieldVar("brname") .AND. 5->(IsFieldVar("brname"))
         REPLACE 12->brname WITH 5->brname
      ENDIF
      REPLACE 12->erf_datum WITH DATE()
      REPLACE 12->name1 WITH 5->name1
      REPLACE 12->name2 WITH 5->name2
      REPLACE 12->strasse WITH 5->strasse
      REPLACE 12->plz_ort WITH 5->plz_ort
      IF IsFieldVar( "gruppe" )
         REPLACE 12->gruppe WITH 5->gruppe
      ELSEIF IsFieldVar( "etgruppe" )
         REPLACE 12->etgruppe WITH 5->etgruppe
      ENDIF
         IIf( IsFieldVar("IND_TEXT"), 12->ind_text := IIf( !Empty(cIT), cIT, "" ), )
         IIf( IsFieldVar("ueb1"), 12->ueb1 := IIf( !Empty(cVps1), cVps1, "" ),"" )
         IIf( IsFieldVar("ueb2"), 12->ueb2 := IIf( !Empty(cVps2), cVps2, "" ),"" )
         IIf( IsFieldVar("ueb3"), 12->ueb1 := IIf( !Empty(cVps3), cVps3, "" ),"" )
         IIf( IsFieldVar("ueb4"), 12->ueb2 := IIf( !Empty(cVps4), cVps4, "" ),"" )
         IIf( IsFieldVar("ueb5"), 12->ueb1 := IIf( !Empty(cVps5), cVps5, "" ),"" )
         IIf( IsFieldVar("ps1"), 12->ps1 := IIf( !Empty(cVps1), cVps1, "" ),"" )
         IIf( IsFieldVar("ps2"), 12->ps2 := IIf( !Empty(cVps2), cVps2, "" ),"" )
         IF Upper( IIf(IsFieldVar("gruppe"),5->gruppe,5->etgruppe) ) = "K"
            IIf( IsFieldVar("anl1"), 12->anl1 := IIf( Len(cVKanl1)>0, cVKanl1, "1 Vollmacht" ),"" )
            IIf( IsFieldVar("anl2"), 12->anl2 := IIf( Len(cVKanl2)>0, cVKanl2, "1 Sterbeurkunde" ),"" )
            IIf( IsFieldVar("anl3"), 12->anl3 := IIf( Len(cVKanl3)>0, cVKanl3, "1 Rechnung" ),"" )
            IIf( IsFieldVar("anl4"), 12->anl4 := IIf( Len(cVKanl4)>0, cVKanl4, "1 Krankenschein-Heft" ),"" )
            IIf( IsFieldVar("anl5"), 12->anl5 := IIf( Len(cVKanl5)>0, cVKanl5, "1 Kopie des Rentenbescheids" ),"" )
            IIf( IsFieldVar("anl6"), 12->anl6 := IIf( Len(cVKanl6)>0, cVKanl6, "" ),"" )
         ELSE
            IIf( IsFieldVar("anl1"), 12->anl1 := IIf( Len(cVanl1)>0, cVanl1, "1 Vollmacht" ),"" )
            IIf( IsFieldVar("anl2"), 12->anl2 := IIf( Len(cVanl2)>0, cVanl2, "1 Sterbeurkunde" ),"" )
            IIf( IsFieldVar("anl3"), 12->anl3 := IIf( Len(cVanl3)>0, cVanl3, "1 Vers.-Karte" ),"" )
            IIf( IsFieldVar("anl4"), 12->anl4 := IIf( Len(cVanl4)>0, cVanl4, "" ),"" )
            IIf( IsFieldVar("anl5"), 12->anl5 := IIf( Len(cVanl5)>0, cVanl5, "" ),"" )
            IIf( IsFieldVar("anl6"), 12->anl6 := IIf( Len(cVanl6)>0, cVanl6, "" ),"" )
         ENDIF
   ELSE
      IF Empty(12->bb)              // 19.12.2004
         REPLACE 12->bb WITH LTrim(Str( Recno(),2,0 ))
         REPLACE 12->erf_datum WITH DATE()
      ELSE
         oLastXbp:setData( cVorigerWert ) // 16.12.2004
         oLastXbp:getData()               // 16.12.2004
      ENDIF
   ENDIF
   Select &nOldArea
   (nOldArea)->(DbResumeNotifications())   //+26.11.2008 19:34 ume
   (nOldArea)->(DbSkip(0) )
   SetAppFocus( oFocus )
//+03.08.2017 13:35 geREMt   ::EditVV := oEditVVsave    //+19.07.2017 16:31
RETURN self

METHOD VersFF:VersEntf(oDlg1)
   IF Val(cRS) < 5      // 18.10.2007 15:25 =Bergrath
      ConfirmBox( oDlg1, "Sie haben dazu NICHT die Berechtigung!", ;
                        IIf(SET(43)==0,ConvToAnsiCP("Diesen Versicherungs-/Zahlungseintrag l”schen?"), ;
                        "Diesen Versicherungs-/Zahlungseintrag l”schen?"), ;
                        XBPMB_OK, ;
                        XBPMB_WARNING )
      RETURN
   ELSEIF Upper(AppName())$cAc
      IF oEdit:Codewort( oVEDA, "s_best", 840, IIf(cRS="9",859,849), cDatver+"mwstdat", 9, , ;
               {300*nH,200*nV}, {300*nH,300*nV}, , "Mit Codewort best„tigen:" ) ;
               < "5"
         RETURN
      ENDIF
   ENDIF
   IF ConfirmBox( oDlg1, IIf(SET(43)==0,ConvToAnsiCP("Soll der Vers-Eintrag gel”scht werden?"), ;
                        "Soll der Vers-Eintrag gel”scht werden?"), ;
                        IIf(SET(43)==0,ConvToAnsiCP("Versicherung l”schen"),"Versicherung l”schen"), ;
                        XBPMB_YESNO, ;
                        XBPMB_QUESTION ) == XBPMB_RET_NO
      RETURN .F.
   ENDIF
   ::nVSum := ::nVSum - 12->&b_b_g
   IF ::nTotal <> NIL
      ::nTotal -= 12->&b_b_g              //25.06.2007 19:26 
   ENDIF
   12->erf_datum := date()
   12->verskz := "----"
   12->bb := "*"
   12->name1 := "***gel”scht***"
   12->name2 := "***gel”scht***"
   12->strasse := "***gel”scht***"
   12->plz_ort := "***gel”scht***"
   12->&b_b_g := 0
   IIf( IsFieldVar( "&"+"b_b_gh"), 12->&b_b_gh := 0, )
//   IIf(!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE-RAGUSEY.EXE-HANDEL.EXE", 12->&b_b_gh := 0, )
   12->&p_b_g := 0
   IIf( IsFieldVar( "&"+"p_b_gh"), 12->&p_b_gh := 0, )
//   IIf(!Upper(AppName())$"RAGUSEX.EXEVOGELX.EXE-RAGUSEY.EXE-HANDEL.EXE", 12->&p_b_gh := 0, )
   IIf( IsFieldVar("&"+"EKTO"), 12->&EKTO := "", )
   DbCommit()
   ::XbpObjekt(::singleZeile,"nVSum"):setData()
   IF ::nTotal <> NIL
      ::XbpObjekt(::singleZeile,"nTotal"):setData()      //25.06.2007 19:27
   ENDIF
   12->(DbSkip(0))
RETURN self

METHOD VersFF:VersNeu(oDlg1)
   DbSuspendNotifications()
      12->(DbLocate( {|| Empty(12->auftrnr) .OR. (Empty(12->verskz) .AND. Empty(12->name1)) } ) )
      IF 12->(Eof())
         12->(DbAppend())
      ENDIF
      12->auftrnr := 1->auftrnr
   DbResumeNotifications()
   DbSkip(0)
   ::XbpObjekt(::singleZeile,"verskz"):enable()
   SetAppFocus( ::XbpObjekt(::singleZeile,"verskz") )
   oFocSle := SetAppFocus()
//+03.08.2017 13:35 geREMt   ::EditVV := .T.
RETURN self

// +19.07.2017 16:07 neue Funktion fr cAc: (blockiertes Žndern freischalten)
// +19.07.2017 18:55 wieder deaktiviert, weil unn”tig: zum Žndern muss 5er das Prog starten!
//METHOD VersFF:VersAendern(oDlg1)
////   IF Val(cRS) < 5      // 18.10.2007 15:25 =Bergrath
////      ConfirmBox( oDlg1, "Sie haben dazu NICHT die Berechtigung!", ;
////                        IIf(SET(43)==0,ConvToAnsiCP("Diesen Versicherungs-/Zahlungseintrag l”schen?"), ;
////                        "Diesen Versicherungs-/Zahlungseintrag l”schen?"), ;
////                        XBPMB_OK, ;
////                        XBPMB_WARNING )
////      RETURN
////   ELSEIF Upper(AppName())$cAc
//      IF oEdit:Codewort( oVEDA, "s_best", 840, IIf(cRS="9",859,849), cDatver+"mwstdat", 9, , ;
//               {300*nH,200*nV}, {300*nH,300*nV}, , "Mit Codewort best„tigen:" ) ;
//               < "5"
//         RETURN
//      ENDIF
////   ENDIF
//   IF ConfirmBox( oDlg1, IIf(SET(43)==0,ConvToAnsiCP("Soll der Vers-Eintrag ge„ndert werden?"), ;
//                        "Soll der Vers-Eintrag ge„ndert werden?"), ;
//                        IIf(SET(43)==0,ConvToAnsiCP("Versicherung „ndern"),"Versicherung „ndern"), ;
//                        XBPMB_YESNO, ;
//                        XBPMB_QUESTION ) == XBPMB_RET_NO
//      ::EditVV := .F.
//      RETURN .F.
//   ENDIF
//   ::EditVV := .T.
//RETURN self

METHOD VersFF:VersDruckA( cAuf, oDlg1, cBlDatei )
   LOCAL nOldArea := Select()
   LOCAL nRec := Recno()
   DbSuspendNotifications()
      cBlDatei := IIf( !Empty(cBlDatei), cBlDatei, "bl_v" )
      IF !Bof()
         GO TOP
      ENDIF
      DO WHILE 12->auftrnr = Val( cAuf ) .AND. !Eof()
         BlattDrG( cBlDatei,, oDlg1 )
         SKIP
      ENDDO
      GO nRec
   DbResumeNotifications()
   SELECT &nOldArea
RETURN self

METHOD VersFF:AdrVvZuVers(oDlg1)
   IF (Upper(AppName())$"WERNERX.EXE" .AND. Val(cRS)<4)
      MsgBox("Sie haben nicht die Berechtigung, Adressdaten einzugeben/zu „ndern!")
   ELSE 
      IF Empty(12->verskz)
         MsgBox( "Vers.-Kennz. ist leer!" )
         RETURN self
      ENDIF
      5->(DbSeek(12->verskz,.F.))
      IF 5->(Eof())
         5->(DbAppend())
      ELSE
         IF ConfirmBox( oDlg1, "Abbrechen mit <NEIN>", ;
                     IIf(SET(43)==0,ConvToAnsiCP("Vers.-Kennz. existiert! Žndern?"), ;
                     "Vers.-Kennz. existiert! Žndern?"), ;
                     XBPMB_YESNO, ;
                     XBPMB_WARNING, ;
                     XBPMB_DEFBUTTON2 ) ;
                     =  XBPMB_RET_NO
            RETURN self
         ENDIF
         5->(Satzsp(oDlg1))
      ENDIF
      5->verskz := 12->verskz
      5->name1 := 12->name1
      5->name2 := 12->name2
      5->strasse := 12->strasse
      5->plz_ort := 12->plz_ort
   //   5->brname  := 12->brname      //+16.04.2009 11:09
   //+10.10.2010 17:37:
         IF IsFieldVar( "anschr1" ) .AND. 5->(IsFieldVar("anschr1")) 
            5->anschr1 := 12->anschr1
         ELSEIF IsFieldVar( "abrname" ) .AND. 5->(IsFieldVar("abrname")) 
            5->abrname := 12->abrname
         ELSEIF IsFieldVar("brname") .AND. 5->(IsFieldVar("brname"))
            5->brname := 12->brname
         ELSEIF IsFieldVar("abrname") .AND. 5->(IsFieldVar("brname"))
            5->brname := 12->abrname
         ELSEIF IsFieldVar("brname") .AND. 5->(IsFieldVar("abrname"))
            5->abrname := 12->brname
         ENDIF
      5->(DbRUnlock())
   ENDIF
RETURN self

// Zugriff auf die Adressenverwaltung aus der Versicherungseingabe
METHOD VersFF:VersAusVV()           //25.06.2007 18:51 berarbeitet mit aZwi etc
   LOCAL aZwi1 := AClone(aCd), aZwi2 := AClone(aBEAd)
   DbSuspendNotifications()
   IF !Empty(12->verskz)      
      IF !5->(DbSeek(12->verskz,.F.))
         5->(DbAppend())
      ENDIF
   ELSEIF !Empty(12->name1)            //25.06.2007 18:40
      5->(DbAppend())
   ENDIF
   IF Adressen( oVEDA,{340*nH,30*nV},{460*nH,310*nV},,900,959 )
      aCd := AClone(aZwi1)
      aBEAd := AClone(aZwi2)
      DbResumeNotifications()
      oEdit:VersSuch( oCB, "VERSKZ " )
      oEdit:BrowseFeld[1]:refreshAll()
      RETURN self
   ENDIF
   aCd := AClone(aZwi1)
   aBEAd := AClone(aZwi2)
   DbResumeNotifications()
RETURN self

METHOD VersFF:PflichtFelder()
   LOCAL nRec :=RecNo(), lPflichtOK := .T.
   IF Upper(AppName())$cAc+"BERGX.EXE-RAGUSEX.EXE-SANDERX.EXE-BUCKX.EXE-FLUESX.EXE"
      RETURN lPflichtOK
   ENDIF
   DbGotop()
   DO WHILE (::VArea)->auftrnr != 0 .AND. !Eof()
      IF !::DialogFF:PflichtFelder()
         lPflichtOK := .F.
         EXIT
      ENDIF
      DbSkip()
   ENDDO
   IF lPflichtOK
      DbGoto(nRec)
   ENDIF
RETURN lPflichtOK
