**BRegieAK.prg   -  Regie-Zentrum fr Bestattungsverwaltung
// 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)
// 03.03.2006 Kontrollbersicht fr Personen.dbf in Area4
#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Appedit.ch"
#include "Appbrow.ch"
#include "Font.ch"
#include "Dmlb.ch"
#include "Common.ch"
#include "FileIO.ch" //+03.01.2011 14:47

   #define  xbeU_CalcReturn xbeP_User + 11
   #define  xbeU_RefreshCalc xbeP_User + 12

FUNCTION AuftrControl( cAuf, oDlg1, aPos, ASize, nA )    // 03.03.2006 nA ist 1 oder 4
   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, i
   PRIVATE oCB, oKODA, oEdit, nVSum, cIK, cKonto := Trim(" "), o  // o soll oEdit ersetzen 16.5.2005
   PRIVATE aMT1:={}, aMT2:={}, aMT3:={}, aMT4:={}   //18.04.2006 13:05 02.02.2007 09:57
   DEFAULT nA TO 1   // 03.03.2006 fr alle F„lle
   PRIVATE cDatei := IIf(nA=1,"s_kont","s_kon4")     //18.10.2007 15:54
   PRIVATE nSumme4 := 0    //+02.05.2009 10:53 fr Mllers Friedhofsgebhren
   PRIVATE cName, cVorName, dGestorben
   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 11.01.2009 14:44
//   ENDIF
/**/
//////////////////////////////////////////////////////////////////////////////////
   IF Val(cRS) < aZugang[7]      // 18.10.2007 15:25 =Bergrath    14.11.2007 15:52 3 = alle
      ConfirmBox( oDlg1, "Sie haben dazu NICHT die Berechtigung!", ;
                        IIf(SET(43)==0,ConvToAnsiCP("Kontrollbersicht"), ;
                        "Kontroll-šbersicht"), ;
                        XBPMB_OK, ;
                        XBPMB_WARNING )
      RETURN .F.
//   ELSEIF Val(cRS) < 5         //14.11.2007 15:52 geREMt
//      cDatei := IIf(nA=1,"s_koXt","s_koX4")
   ENDIF
///////////////////////////////////////////////////////////////////////////////////
   IF Asc(Right(cAuf,1))>63 .OR. Asc(Right(cAuf,1))=32  // 12.06.2007 15:45
      SELECT 3
      DbUseArea( , "FOXCDX", "PersRech" ) // wegen Angeh”rigen-Kontrollbersicht
      OrdListAdd( "PersRech" )
   ENDIF
   SELECT (nA)
   IF Upper(AppName()) $ "RAGUSEX.EXE-RAGUSEY.EXE-HANDEL.EXE" // 29.08.2005 erg„nzt
      IF !Empty(1->schladr)   // schladr entspricht gkz
         5->(DbSeek( 1->schladr, .T. ))
         v_n_o := "vk_preis"+IIf(5->preisgr$"1234567", 5->preisgr, "1" )
      ELSE
         v_n_o := "vk_preis1"    // weil es ein NETTO-Preis ist - in art.dbf
      ENDIF
         v_p_s := "vk_preis"     // neu anlegen!: Bruttopreis - in art.dbf
         u_n   := "umsatz"       // weil es ein NETTO-Umsatz ist - in art.dbf
         u_z   := "umsbrteu"     // neu anlegen!: Bruttoumsatz - in art.dbf
         b_n   := "betrag"       // weil es ein NETTO-Betrag ist - in auftr.dbf
         b_g   := "betbrteu"     // neu anlegen!: Bruttobetrag - in auftr.dbf
   ENDIF


   oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo )
   oDlg:tasklist := .T.
   oDlg:title := "A U F T R A G S  -  K O N T R O L L E"
   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: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( GRA_CLR_PINK )
   oDlg:drawingArea:setColorBG( XBPSYSCLR_TRANSPARENT )
   oCB := oDlg:drawingArea
   oKODA := oDlg:drawingArea
   oKODA:cargo := oDlg

// jetzt folgt die Erzeugung der Eingabefelder
   oEdit := KontFF():new( oKODA,oDlg, {0*nH,0}, {770*nH,475*nV},,, nBz, ;
                                 cDatei, -100, 299, nA ) // 18.10.2007 15:54
   oEdit:CREATE( oKODA,oDlg, {0*nH,0}, {770*nH,475*nV},,, nBz, ;
                                 cDatei, -100, 299, nA ) // 18.10.2007 15:54
   o := oEdit     // 16.5.2005, damit es in bl_xx/s_xx krzer zugeht
   AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } )
//   AEval( oEdit:appendControls, {|x| oDlg:addAppendControl( x ) } )
// bis hierhin geht die Erzeugung der Eingabefelder

// DialogFF kann nur Field-Variablen verarbeiten, daher erzeuge ich zuerst einen Dummy und dann :
// berladen der Multizeile[2] mit einer Speicher-Variablen und einer Schrift:
   oEdit:MultiZeile[2]:setFontCompoundName( IIf( nV<1, "6.Courier New", FONT_COURIER_SMALL + ;
                                 IIf(cBfont!=NIL .AND. "Fett"$cBfont,FONT_STYLE_BOLD,"")) )  //07.04.2008 22:09
   IF nV < 1
      oEdit:MultiZeile[2]:wordWrap := .F. //07.04.2008 22:10
      oEdit:MultiZeile[2]:horizScroll := .T. //07.04.2008 22:10
      //+03.01.2011 09:46vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
      //+ Zeile abspeichern, um Fehlerpunkt zu lokalisieren
         nHd := FOpen("s_prot.txt", FO_READWRITE+FO_EXCLUSIVE)
         FReadStr(nHd,1000000)
         FWrite(nHd, "vor configure()"+CRLF)
         FClose(nHd)
      //+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      oEdit:Multizeile[2]:configure()
   ENDIF
   oEdit:MultiZeile[2]:dataLink := {|x| IIf( PCOUNT()==0, Trim(cKonto), cKonto := x ) }
   sleep(5) //+03.01.2011 14:26 gem„á Alaska-PDR-5346 : race-Fehler!
   oEdit:MultiZeile[2]:setData( cKonto )
   cKonto := KontrRech( cAuf )

   oDlg:setModalState( XBP_DISP_APPMODAL )

   oCtrl := XbpGetController():new( oDlg )
   oCtrl:create()
   oCtrl:READ( , .F. )
//   SetAppFocus( oDlg:childFromName( 1->(FieldPos( "name" )) ) )
   * Shortcuts initialisieren
   oDlg:InitShortCuts( oDlg )
   oDlg:lockUpdate(.F.)
   oDlg:invalidateRect()

   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      IF nEvent == xbeP_Keyboard
      DO CASE
         CASE mp1 != xbeK_ESC .AND. mp1 != xbeK_F10 .AND. mp1 > 377700 .AND. mp1 < 377800 ;
                           .AND. oXbp = oEdit:Multizeile[1]
            oXbp:KEYBOARD( mp1 )
            LOOP
         CASE mp1 != xbeK_ESC .AND. mp1 != xbeK_F10 .AND. mp1 > 377700 .AND. mp1 < 377800 ;
                            .AND. oXbp = oEdit:Multizeile[2]
            oEdit:Multizeile[2]:KEYBOARD( mp1 )
            LOOP
//         CASE mp1 == xbeK_ALT_G
//            BlattDrG( "Bl_v",, oDlg )
         CASE mp1 == xbeK_ESC
               IF ValType(oVideo) == "O"
                  oVideo:stop()
                  oVideo:cargo:destroy()
                  oVideo := NIL
                  mp1 := 0
                  LOOP
               ENDIF
               lFlucht := .T.
               PostAppEvent( xbeP_Close)
         CASE mp1 == xbeK_F10
            lEinfg := .F.
            PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[oEdit:XbpNummer(oEdit:DruckKnopf,"ENDE")] )
//            PostAppEvent( xbeP_Close)
         CASE mp1 == xbeK_F1
            ModalDialog( (cDatver+"f1_AK.rtf"), "Bedienungshinweise", oKODA, 680*nH, 460*nV )
            oXbp:enable()
         CASE mp1 == xbeK_ALT_AE     //+16.11.2013 13:35 IBAN+BIC
            IF ConfirmBox( oCB, "Abbrechen mit <NEIN>", ;
                        IIf(SET(43)==0,ConvToAnsiCP("ALLE IBAN berechnen?"), ;
                        "ALLE IBAN berechnen?"), ;
                        XBPMB_YESNO, ;
                        XBPMB_WARNING, ;
                        XBPMB_DEFBUTTON2 ) ;
                        =  XBPMB_RET_YES
               1->(DbSuspendNotifications())
               nRecIban := 1->(RecNo())
               1->(DbGotop())
               DO WHILE !Eof()
                  IF Empty(1->ansp_iban) .AND. !Empty(1->ansp_kto) .AND. !Empty(1->ansp_blz)
                     oEdit:IbanBic("ansp_kto","ansp_blz","ansp_iban","ansp_bic",1,.T.)
                  ENDIF
                  DbSkip()
               ENDDO
               1->(DbGoto(nRecIban))
               1->(DbResumeNotifications())
               oEdit:XbpObjekt(,"ansp_kto"):setData()
               oEdit:XbpObjekt(,"ansp_blz"):setData()
               oEdit:XbpObjekt(,"ansp_iban"):setData()
               oEdit:XbpObjekt(,"ansp_bic"):setData()
               MsgBox("Fertig!")
            ENDIF
         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 )
      ENDCASE
      ENDIF
//+ Calculator wurde beendet:
      IF nEvent == xbeU_CalcReturn     //+ xbeP_User + 10
         //+ bisher noch keine Aktion an dieser Stelle !
         oFocsle:setData( mp1 )
         SetAppFocus(oFocSle)
      ELSE
         oXbp:handleEvent( nEvent, mp1, mp2 )
      ENDIF
   ENDDO

   IF 3->(Alias())=="PERSRECH"   //+17.11.2017 21:38
      4->(Satzsp(oCB))  //+19.12.2017 21:42
      oBest:MultiZeile[1]:setData(oBest:PvNOTIZ := oEdit:MultiZeile[1]:getData())
      oBest:MultiZeile[1]:getData()
      4->(DbRUnlock())  //+19.12.2017 21:42
   ENDIF
   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 3             //12.06.2007 15:43 s.o. wegen PersRech (wie ..RSo)
   schdat := "0010000"
   Datei( "0010000" )
   Select &nOldArea
   SET ORDER TO 1
   IIf(lLogBook,oBest:TLog:write():writeLogFile(),)    //16.09.2007 22:32
RETURN .T.

FUNCTION KontrDruck( cString )      // 03.03.2006 ersetzt durch bl_ctrl
   SET DEVICE TO PRINTW
   @ 2,8 SAY "Kontrollbersicht fr Auftrag "+StrX( 1->auftrnr,E,0 )
   @ 4,8 SAY "Verstorbener:    "+Trim( 1->vorname )+" "+Trim( 1->name )
   @ 5,8 SAY "Sterbe-Datum:    "+DtoC( gestorben )
   @ 6,8 SAY "Ansprechpartner: "+Trim( 1->ansp_vname )+" "+Trim( 1->ansp_name ) ;
                +", "+Trim( 1->ansp_bez )
   @ 7,8 SAY "Telefon:         "+Trim( 1->ansp_telp )

   FOR i := 1 TO MlCount( cString )
      @ 9+i,8 SAY MemoLine( cString,, i )
   NEXT
//   EJECT
   SET DEVICE TO SCREEN
RETURN .T.

FUNCTION KontrRech( cAuf )    // 03.03.2006 cAuf bei nA=4: auftrnr+perskz
   LOCAL nOldArea := Select(), CRLF := Chr(13)+Chr(10), k := 0, nRec
   LOCAL nGSum := nESum := nASum := nVSum := nSumme := nSumAng := nSumG := 0    // 04.04.2008 13:55 SummeGewinn
   LOCAL nVSumE := nVSumA := 0               //+04.12.2008 20:21 Eingang/Ausgang getrennt
   LOCAL nSumme3 := nSumme2 := nSumme1 := nSumme0 := 0 // 9.2.2005
   LOCAL nSumme1E := nSumme1F := nSumme2E := nSumme2F := 0 //+06.08.2016 14:45 fr Nolte
   LOCAL nSumGE := nSumG3 := nSumG2 := nSumG1 := nSumG0 := 0      // 04.04.2008 14:10
   LOCAL cString := CRLF, cRD0:="", cRD1:="", cRD2:="", cRD3:=""  //24.04.2006 18:16
   LOCAL nX := IIf(AppDesktop():currentSize()[1]/800<=1,10,0)
   nSumme4 := 0
//14.09.2007 16:11 fr den Fall, dass der Auftrag/Angeh”rige nur als 'gel”scht' markiert ist: (cAc)
   IF "g e l ” s c h t"$1->notiz .OR. (Asc(Right(cAuf,1))>63 .AND. "g e l ” s c h t"$4->P_NOTIZ)
      RETURN cString
   ENDIF
   IF Upper(AppName())$cAc      //17.07.2007 18:04
      cKomma := ","
      cPicture := "999,999.99"
   ENDIF
   DbSuspendNotifications()      //23.09.2007 19:42
   SELECT 3
//////   IF Asc(Right(cAuf,1))>63 .OR. Asc(Right(cAuf,1))=32  // 12.06.2007 15:57 geREMt weil schon in Zeile 30
//////      DbUseArea( , "FOXCDX", "PersRech" )
//////      OrdListAdd( "PersRech" )
//////   ENDIF
   FIND &cAuf
   DO WHILE 3->auftrnr=val(cAuf) .and. .not. eof()
      IF Alias()="PERSRECH"
      // Listet die Positionen zur aktuellen ANGEH™RIGENrechnung auf und summiert EL/FL:
         IF Right(cAuf,1) = 3->rn  //4->P_PERSKZ  // 25.09.2007 09:07
            IF 3->kennz!="1" .AND. ++k == 1 //12.06.2007 21:05 wenn alle EL-Positionen aufgez„hlt:
               cString := cString + IIf(Asc(Right(cAuf,1))>63, PadL("------------------",71)+CRLF, "")
               cString := cString + PadR( "Summe der Eigenleistungen" + ;
                          IIf(3->(IsFieldVar("gewinneu"))," (davon Gewinn:"+Str(nSumGE,8,2)+")",""), 63 ) + ;
                          Str(nESum,8,2) + CRLF+CRLF   //04.04.2008 13:57 Gewinn
            ENDIF
            IF 3->kennz $ "1" .and. Val(3->rn)<4   // Eigenleistung summieren:
               nESum := nESum + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
               nSumGE := nSumGE + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0)   //04.04.2008 13:56
            ENDIF
            IF 3->kennz $ "23" .and. Val(3->rn)<4        // 13.4.2005   "23" wegen Disch
               nASum := nASum + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
            ENDIF
            IF 3->rn = "4"                // 9.2.2005 Mllers Friedhofsgebhren
               nSumme4 := nSumme4 + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
            ENDIF
         // 20.03.2006  alle Rechnungszeilen darstellen:
            cString := cString + IIf(Asc(Right(cAuf,1))>63 .AND. 3->jn="j", ;
                           PadR(3->zugr_z_st,7)+PadR(3->bezeich,46)+ ;
                           IIf(3->(IsFieldVar("ges_preis")),Str(3->ges_preis,8,2),Str(3->&b_g,8,2))+CRLF, "")
         //
         ENDIF
      ELSE  // summiert die Rechnungspositionen der BESTATTUNGSrechnung:
         // Eigenleistungs- und Fremdleistungs-Summe:
         IF 3->kennz $ "1" .and. Val(3->rn)<4
            nESum := nESum + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g) //25.09.2007 13:02
            nSumGE := nSumGE + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0)   //04.04.2008 13:56
         ENDIF
         IF 3->kennz $ "23" .and. Val(3->rn)<4        // 13.4.2005   "23" wegen Disch
            nASum := nASum + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g) //25.09.2007 13:03
         ENDIF
         IF 3->rn = "4"                // 9.2.2005 Mllers Friedhofsgebhren
            nSumme4 := nSumme4 + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)   //25.09.2007 13:03
         ENDIF
         // Einzel-Summen Nachtragsrechnungen und Hauptrechnung:
         IF Upper( AppName() ) = "NOLTEX.EXE"
            IF 3->rn = "3"
               nSumme3 := nSumme3 + 3->(&b_g)*(1+3->mwst_satz/100)
            ELSEIF 3->rn = "2"
               //*06.08.2016 14:57 weil in FL-Rg jetzt auf EL und umgekehrt:
               IF 3->kennz == "1"
                  nSumme2 := nSumme2 + 3->(&b_g)*(1+3->mwst_satz/100)
                  nSumme2E := nSumme2E + 3->(&b_g)*(1+3->mwst_satz/100)
               ELSEIF 3->kennz == "2"
                  nSumme2 := nSumme2 + 3->(&b_g)
                  nSumme2F := nSumme2F + 3->(&b_g)
               ENDIF
            ELSEIF 3->rn = "1" .or. 3->rn = " "
               //*06.08.2016 14:57 weil in EL-Rg jetzt auf FL und umgekehrt:
               IF 3->kennz == "1"
                  nSumme1 := nSumme1 + 3->(&b_g)*(1+3->mwst_satz/100)
                  nSumme1E := nSumme1E + 3->(&b_g)*(1+3->mwst_satz/100)
               ELSEIF 3->kennz == "2"
                  nSumme1 := nSumme1 + 3->(&b_g)
                  nSumme1F := nSumme1F + 3->(&b_g)
               ENDIF
            ENDIF
         ELSEIF cBrNe1 = "N"   // z.B.: Upper( AppName() ) = "HANELX.EXE"
            IF 3->rn = "3"
               nSumme3 := nSumme3 + IIf(3->(IsFieldVar("ges_prnet")),3->ges_prnet,3->&b_n)*(1+3->mwst_satz/100)
               nSumG3 := nSumG3 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
            ELSEIF 3->rn = "2"
               nSumme2 := nSumme2 + IIf(3->(IsFieldVar("ges_prnet")),3->ges_prnet,3->&b_n)*(1+3->mwst_satz/100)
               nSumG2 := nSumG2 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
            ELSEIF 3->rn = "1"
               nSumme1 := nSumme1 + IIf(3->(IsFieldVar("ges_prnet")),3->ges_prnet,3->&b_n)*(1+3->mwst_satz/100)
               nSumG1 := nSumG1 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
            ELSEIF 3->rn = " " .or. 3->rn = "0"
               nSumme0 := nSumme0 + IIf(3->(IsFieldVar("ges_prnet")),3->ges_prnet,3->&b_n)*(1+3->mwst_satz/100)
               nSumG0 := nSumG0 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
            ENDIF
         ELSE
            IF 3->rn = "3"
               nSumme3 := nSumme3 + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
               nSumG3 := nSumG3 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
               cRD3 := IIf( DtoC(3->r_datum)!=" ", DtoC(3->r_datum), cRD3 )   //24.04.2006 18:20
            ELSEIF 3->rn = "2"
               nSumme2 := nSumme2 + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
               nSumG2 := nSumG2 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
               cRD2 := IIf( DtoC(3->r_datum)!=" ", DtoC(3->r_datum), cRD2 )
            ELSEIF 3->rn = "1"
               nSumme1 := nSumme1 + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
               nSumG1 := nSumG1 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
               cRD1 := IIf( DtoC(3->r_datum)!=" ", DtoC(3->r_datum), cRD1 )
            ELSEIF 3->rn = " " .or. 3->rn = "0"
               nSumme0 := nSumme0 + IIf(3->(IsFieldVar("ges_preis")),3->ges_preis,3->&b_g)
               nSumG0 := nSumG0 + IIf(3->(IsFieldVar("gewinneu")),3->gewinneu,0) //04.04.2008 14:13
               cRD0 := IIf( DtoC(3->r_datum)!=" ", DtoC(3->r_datum), cRD0 )
            ENDIF
         ENDIF
      ENDIF
      3->(DbSkip())
   ENDDO
   nSumme := nSumme0 + nSumme1 + nSumme2 + nSumme3
   nSumG := nSumG0 + nSumG1 + nSumG2 + nSumG3
   // wenn Angeh”rigenrechnung nicht leer, dann Summenstrich:
   cString := cString + IIf(Asc(Right(cAuf,1))>63 .AND. nESum+nASum!=0, ;
                                       PadL("------------------",71)+CRLF, "")  // 25.09.2007 12:30
   // Summen der Rechnung darstellen:
//   IF Upper( AppName() ) = "NOLTEX.EXE"
//      cString := cString + PadR( "unsere Eigenleistungs-Rechnung ", 56-nX )+Str( nSumme1,10,2 )+CRLF
//      cString := cString + PadR( "unsere Fremdleistungs-Rechnung ", 56-nX )+Str( nSumme2,10,2 )+CRLF
//      cString := cString + PadR( "unsere Nachtrags-Rechnung ", 56-nX )+Str( nSumme3,10,2 )+CRLF
//   //   cString := cString + PadR( "unsere Nachtrags-Rechnung 3 ", 56-nX )+Str( nSumme3,10,2 )+CRLF
//      cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
//      cString := cString + PadR( "Summe der Rechnungen               ", 53-nX )+w_g+Str( nSumme,10,2 )+CRLF
//   //   cString := cString + "(Davon aus Fremdleistungen " + Str( nASum,8,2 ) + " "+w_g+")"+CRLF
//      cString := cString + PadR( " ", 66-nX )+CRLF
//   ELSE
      IF Upper( AppName() ) = "KOMPAKTX.EXE"
      nSumme := nSumme0 + nSumme3
      cString := cString + PadR( "unsere Bestattungs-Rechnung ", 56-nX )+Str( nSumme0,10,2 )+CRLF
      cString := cString + PadR( "unsere Gemeinde-Rechnung  ", 56-nX )+Str( nSumme3,10,2 )+CRLF
      cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
      cString := cString + PadR( "Summe der Rechnungen               ", 53-nX )+w_g+Str( nSumme,10,2 )+CRLF
      cString := cString + "(Davon aus Fremdleistungen " + Str( nASum,8,2 ) + " "+w_g+")"+CRLF
      cString := cString + PadR( " ", 66-nX )+CRLF
   ELSE  // alle auáer Nolte und Kompakt:
      IF Asc(Right(cAuf,1))>63 .OR. Asc(Right(cAuf,1))=32  // 10.03.2006
      // ANGEH™RIGENrechnung:    //25.09.2007 13:14 berarbeitet
         IF k == 0      // fr den Fall, dass noch nicht oben gedruckt beim kennz-Wechsel/'++k==1'
            cString := cString + PadR( "Summe der Eigenleistungen" + ;
                       IIf(3->(IsFieldVar("gewinneu"))," (davon Gewinn:"+Str(nSumGE,8,2)+")",""), 63 ) + ;
                       Str(nESum,8,2) + CRLF+CRLF   //04.04.2008 13:57 Gewinn
         ENDIF
         cString := cString + PadR( "Summe der Fremdleistungen", 63 )+Str(nASum,8,2)+CRLF
         cString := cString + PadL("----------",71)+CRLF
         IF !4->(IsFieldVar("P_RECH_NR")) .OR. Empty(4->P_RECH_NR)   //Upper(AppName())$"WERNER.EXE"    // weil keine RNr.!
            cString := cString + PadR( "Gesamtsumme der Rechnung vom: "+ ;
                      DtoC(4->P_RECH_DAT), 63 )+Str(4->P_RECHBETR,8,2)+CRLF //26.04.2006 13:06
         ELSE
           cString := cString + PadR( "Gesamtsumme der Rechnung Nr.: "+ ;
                      4->P_rech_nr+"/"+DtoC(4->P_RECH_DAT), 63 )+Str(nESum+nASum,8,2)+CRLF //26.04.2006 13:06
         ENDIF
         cString := cString + CRLF
         IF 4->(IsFieldVar("P_EING_KTO"))
            cString := cString + PadR( "Bisherige Zahlung        vom: "+ ;
                           DtoC(4->P_EING_DAT)+" / Konto: "+4->P_EING_KTO, 63 ) + Str(4->P_EINGBETR,8,2)+CRLF
         ELSE
            cString := cString + PadR( "Bisherige Zahlung        vom: "+ ;
                           DtoC(4->P_EING_DAT), 63 ) + Str(4->P_EINGBETR,8,2)+CRLF
         ENDIF
         cString := cString + Replicate( "-", 71 )+CRLF
         cString := cString + PadR( "Total-Saldo dieses Auftrages         ", 60 )+w_g+;
                              Str( 4->P_SALDO,8,2 )+CRLF
//         cString := cString + PadL("===========",71)+CRLF
         IF Abs(nESum-4->P_RECH_EL)>0.001 .OR. Abs(nASum-4->P_RECH_FL)>0.001 .OR. ;
                  Abs(nESum+nASUM-4->P_RECHBETR)>0.001
            cString := cString + CRLF
            cString := cString + ">>>>> Achtung abgespeicherte Werte weichen davon ab! <<<<<"+CRLF
         ENDIF
//**24.09.2007 17:55:
         // Auflistung aller Angeh”rigen-Rechnungen zu diesem Bestattungsfall:
         nSumme := 0
         nRec := 4->(RecNo())
         4->(DbSuspendNotifications())
         4->(DbGotop())
         cString := cString + Replicate( "#", 76 )+CRLF+CRLF
         cString := cString + PadR( "Rechnungen an Angeh”rige zu diesem Auftrag:", 63 )+CRLF
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         DO WHILE 4->P_AUFTRNR == 1->auftrnr .AND. !4->(Eof())      //05.07.2007 17:56
            IF 4->P_RECHBETR <> 0 .OR. 4->P_SALDO <>0 .AND. !"g e l ” s c h t"$4->P_NOTIZ   //03.03.2008 13:34
               cString := cString + PadR( 4->P_PERSKZ+" / "+Trim(4->P_VORNAME)+" "+Trim(4->P_NAME), 58 )+CRLF
               cString := cString + IIf("g e l ” s c h t"$4->P_NOTIZ,"==== g e l ” s c h t ===="+CRLF,"")   //05.09.2007 18:04
// geREMt, weil sonst zu lang:
//               cString := cString + PadR( "     Summe der Eigenleistungen", 66 )+StrP(4->P_RECH_EL,8,2)+CRLF
//               cString := cString + PadR( "     Summe der Fremdleistungen", 66 )+StrP(4->P_RECH_FL,8,2)+CRLF
//               cString := cString + PadL("----------",76)+CRLF
               IF !4->(IsFieldVar("P_RECH_NR")) .OR. Empty(4->P_RECH_NR)   //Upper(AppName())$"WERNER.EXE"    // weil keine RNr.!
                  cString := cString + PadR( "Gesamtsumme der Rechnung vom: "+ ;
                            DtoC(4->P_RECH_DAT), 66 )+Str(4->P_RECHBETR,8,2)+CRLF //26.04.2006 13:06
               ELSE
                 cString := cString + PadR( "Gesamtsumme der Rechnung Nr.: "+ ;
                            4->P_RECH_NR+"/"+DtoC(4->P_RECH_DAT), 66 )+Str(nESum+nASum,8,2)+CRLF //26.04.2006 13:06
               ENDIF
               IF 4->(IsFieldVar("P_EING_KTO"))
                  cString := cString + PadR( "Bisherige Zahlung        vom: "+ ;
                                 DtoC(4->P_EING_DAT)+" / Konto: "+4->P_EING_KTO, 66 ) + Str(4->P_EINGBETR,8,2)+CRLF
               ELSE
                  cString := cString + PadR( "Bisherige Zahlung        vom: "+ ;
                                 DtoC(4->P_EING_DAT), 66 ) + Str(4->P_EINGBETR,8,2)+CRLF
               ENDIF
               cString := cString + Replicate( "-", 76 )+CRLF
               cString := cString + PadR( "Total-Saldo dieses Auftrages         ", 63 )+w_g+;
                                    StrP( 4->P_SALDO,8,2 )+CRLF
               nSumAng += 4->P_SALDO
               cString := cString + PadR( Replicate( "=", 76-nX ), 77-nX )+CRLF
            ENDIF
            4->(DbSkip())
         ENDDO
         cString := cString + CRLF + ;
         PadR( "Gesamt-Saldo aller Angeh”rigen-Auftr„ge zu d. Bestattungsfall", 63 )+w_g+;
         StrP( nSumAng,8,2 )+CRLF
         cString := cString + PadR( Replicate( "=", 76-nX ), 77-nX )+CRLF
         4->(DbGoto(nRec))
         4->(DbResumeNotifications())
      // 
//**

      ELSEIF Upper(AppName())$cAc
      // BESTATTUNGSrechnung fr cAc
         cString := cString + PadR( "unsere Rechnung             "+IIf(1->(IsFieldVar("rech_dat0")), ;
                                 "vom: "+DtoC(1->rech_dat0),""), 53-nX )+StrP( 1->recheleu0,9,2 )+CRLF   //24.04.2006 18:23
         IF 1->recheleu1 != 0
            cString := cString + PadR( "unsere Nachtrags-Rechnung 1 "+IIf(1->(IsFieldVar("rech_dat1")), ;
                                 "vom: "+DtoC(1->rech_dat1),""), 53-nX )+StrP( 1->recheleu1,9,2 )+CRLF
         ENDIF
         IF 1->recheleu2 != 0
            cString := cString + PadR( "unsere Nachtrags-Rechnung 2 "+IIf(1->(IsFieldVar("rech_dat2")), ;
                                 "vom: "+DtoC(1->rech_dat2),""), 53-nX )+StrP( 1->recheleu2,9,2 )+CRLF
         ENDIF
         IF 1->recheleu3 != 0
            cString := cString + PadR( "unsere Nachtrags-Rechnung 3 "+IIf(1->(IsFieldVar("rech_dat3")), ;
                                 "vom: "+DtoC(1->rech_dat3),""), 53-nX )+StrP( 1->recheleu3,9,2 )+CRLF
         ENDIF
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         cString := cString + PadR( "Summe unserer Rechnungen (=Eigenleistungen)", 63-nX )+w_g+StrP( 1->recheleu,9,2 )+CRLF
         cString := cString + CRLF  //"(Davon aus Eigenleistungen " + Str( nSumme-nASum,8,2 ) + " "+w_g+")"+CRLF //13.01.2007 14:29
         cString := cString + PadR( "unsere Auslagen lt. Abrechnung "+IIf(1->(IsFieldVar("rech_dat0")), ;
                                 "vom: "+DtoC(1->rech_dat0),""), 53-nX )+StrP( 1->rechfleu0,9,2 )+CRLF
         IF 1->rechfleu1 != 0
            cString := cString + PadR( "weitere Auslagen lt. Abrechnung "+IIf(1->(IsFieldVar("rech_dat1")), ;
                                 "vom: "+DtoC(1->rech_dat1),""), 53-nX )+StrP( 1->rechfleu1,9,2 )+CRLF
         ENDIF
         IF 1->rechfleu2 != 0
            cString := cString + PadR( "weitere Auslagen lt. Abrechnung "+IIf(1->(IsFieldVar("rech_dat2")), ;
                                 "vom: "+DtoC(1->rech_dat2),""), 53-nX )+StrP( 1->rechfleu2,9,2 )+CRLF
         ENDIF
         IF 1->rechfleu3 != 0
            cString := cString + PadR( "weitere Auslagen lt. Abrechnung "+IIf(1->(IsFieldVar("rech_dat3")), ;
                                 "vom: "+DtoC(1->rech_dat3),""), 53-nX )+StrP( 1->rechfleu3,9,2 )+CRLF
         ENDIF
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         cString := cString + PadR( "Summe unserer Auslagen              ", 63-nX )+w_g+StrP( 1->rechfleu,9,2 )+CRLF
         cString := cString + CRLF
         cString := cString + PadR( " ", 76-nX )+CRLF
         cString := cString + PadR( "Versicherungen/Zahlungen:", 76-nX )+CRLF
         IF nX = 10
            cString := cString + PadR( "Name                          Erf-Dat  bez.am    Konto     bez-"+w_g, 66-nX )+CRLF
         ELSE
            cString := cString + PadR( "Kennz Name                      Erf-Dat   Pol-"+w_g+"  bez.am    Konto     bez-"+w_g, 66-nX )+CRLF
         ENDIF
         cString := cString + PadR( Replicate( "-", 76-nX ), 76-nX )+CRLF
      
         SELECT 2
         FIND &cAuf
         DO WHILE 2->auftrnr = Val( cAuf ) .AND. .NOT. Eof()
            IF 2->kennzab != "A"    //01.09.2007 22:08
               nVSum := nVSum + &b_b_g
               cString := cString + PadR( verskz+" "+Substr( name1,1,27 )+" "+Substr( DtoC( erf_datum ),1,6 ) + ;
                         IIf( nX=0,Str( &p_b_g,9,2 ),"")+" "+ DtoC( bez_am ) + " " + ;
                         bez_wie[1]+"/"+rn, 66-nX ) + StrP( &b_b_g,9,2 )+CRLF
               IF 2->&PS1 != " "    //29.03.2008 12:18 Versicherungsnummern:
                  cString += Space(6)+"Vers.-Nr.: "+Trim(2->&PS1)+IIf(2->&PS2!=" ",", "+Trim(2->&PS2),"") +CRLF
               ENDIF
            ELSE
               nVSum := nVSum + 0
               cString := cString + PadR( verskz+" "+Substr( name1,1,27 )+" "+Substr( DtoC( erf_datum ),1,6 ) + ;
                         IIf( nX=0,Str( &p_b_g,9,2 ),"")+" an Angeh”rigen",66-nX ) + StrP(0,9,2) + ;
                         IIf(&b_b_g != 0,"*","") + CRLF
            ENDIF
            SKIP
         ENDDO
         nGSum := nSumme - nVSum
      
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         cString := cString + PadR( "Summe der Versicherungen/Zahlungen   ", 66-nX )+StrP( nVSum,9,2 )+CRLF
         IF nVSum != 1->vers_sumeu
            cString := cString + PadR( "***ACHTUNG***: tats„chlicher Eingang beim Rechnungsempf„nger:", 66-nX )+StrP( 1->vers_sumeu,9,2 )+CRLF
         ENDIF
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         cString := cString + PadR( "Total-Saldo dieses Auftrages         ", 63-nX )+w_g+StrP( 1->totaleu,9,2 )+CRLF
         cString := cString + PadR( Replicate( "=", 76-nX ), 77-nX )+CRLF
         cString := cString + PadR( Replicate( "#", 79-nX ), 79-nX )+CRLF+CRLF

         // Auflistung der Angeh”rigen-Rechnungen:
         nRec := 4->(RecNo())
         4->(DbSuspendNotifications())
         4->(DbGotop())
         cString := cString + PadR( "Rechnungen an Angeh”rige:", 63 )+CRLF
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         DO WHILE 4->P_AUFTRNR == 1->auftrnr .AND. !4->(Eof())      //05.07.2007 17:56
            IF 4->P_RECHBETR <> 0 .OR. 4->P_SALDO <>0 .AND. !"g e l ” s c h t"$4->P_NOTIZ   //02.09.2007 16:28
               cString := cString + PadR( 4->P_PERSKZ+" / "+Trim(4->P_VORNAME)+" "+Trim(4->P_NAME), 58 )+CRLF
               cString := cString + IIf("g e l ” s c h t"$4->P_NOTIZ,"==== g e l ” s c h t ===="+CRLF,"")   //05.09.2007 18:04
               cString := cString + PadR( "     Summe der Eigenleistungen", 66 )+StrP(4->P_RECH_EL,8,2)+CRLF
               cString := cString + PadR( "     Summe der Fremdleistungen", 66 )+StrP(4->P_RECH_FL,8,2)+CRLF
               cString := cString + PadL("----------",76)+CRLF
               cString := cString + PadR( "     Gesamtsumme der Rechnung vom: "+ ;
                            DtoC(4->P_RECH_DAT), 66 )+StrP(4->P_RECHBETR,8,2)+CRLF //26.04.2006 13:06
               cString := cString + PadR( "     Bisherige Zahlung        vom: "+ ;
                           DtoC(4->P_EING_DAT)+" / Konto: "+4->P_EING_KTO, 66 ) + StrP(4->P_EINGBETR,8,2)+CRLF
               cString := cString + Replicate( "-", 76 )+CRLF
               cString := cString + PadR( "Total-Saldo dieses Auftrages         ", 63 )+w_g+;
                                    StrP( 4->P_SALDO,8,2 )+CRLF
               cString := cString + PadR( Replicate( "=", 76-nX ), 77-nX )+CRLF
            ENDIF
            4->(DbSkip())
         ENDDO
         4->(DbGoto(nRec))
         4->(DbResumeNotifications())
      // 
      ELSE
         IF Upper( AppName() ) = "NOLTEX.EXE"
            cString := cString + PadR( "unsere Eigenleistungs-Rechnung ", 56-nX )+Str( nSumme1,10,2 )+CRLF
            cString := cString + PadR( "    davon aus Eigenleistung ", 46-nX )+Str( nSumme1E,10,2 )+CRLF
            cString := cString + PadR( "    davon aus Fremdleistung ", 46-nX )+Str( nSumme1F,10,2 )+CRLF
            cString := cString + PadR( "unsere Fremdleistungs-Rechnung ", 56-nX )+Str( nSumme2,10,2 )+CRLF
            cString := cString + PadR( "    davon aus Eigenleistung ", 46-nX )+Str( nSumme2E,10,2 )+CRLF
            cString := cString + PadR( "    davon aus Fremdleistung ", 46-nX )+Str( nSumme2F,10,2 )+CRLF
            cString := cString + PadR( "unsere Nachtrags-Rechnung ", 56-nX )+Str( nSumme3,10,2 )+CRLF
         //   cString := cString + PadR( "unsere Nachtrags-Rechnung 3 ", 56-nX )+Str( nSumme3,10,2 )+CRLF
            cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
            cString := cString + PadR( "Summe der Rechnungen               ", 53-nX )+w_g+Str( nSumme,10,2 )+CRLF
         //   cString := cString + "(Davon aus Fremdleistungen " + Str( nASum,8,2 ) + " "+w_g+")"+CRLF
            cString := cString + PadR( " ", 66-nX )+CRLF
         ELSE
         // BESTATTUNGSrechnung fr alle auáer cAc 
            cString := cString + PadR( "unsere Rechnung             "+IIf(1->(IsFieldVar("rechnr")), ;
                                 "Nr.: "+1->rechnr+"/"+cRD0,""), 56-nX )+Str( nSumme0,10,2 ) + ;
                             IIf(3->(IsFieldVar("gewinneu"))," / "+Str(nSumG0,8,2),"")+CRLF   //04.04.2008 13:57 Gewinn
            cString := cString + PadR( "unsere Nachtrags-Rechnung 1 "+IIf(1->(IsFieldVar("rechnrn")), ;
                                 "Nr.: "+1->rechnrn+"/"+cRD1,""), 56-nX )+Str( nSumme1,10,2 ) + ;
                             IIf(3->(IsFieldVar("gewinneu"))," / "+Str(nSumG1,8,2),"")+CRLF   //04.04.2008 13:57 Gewinn
            cString := cString + PadR( "unsere Nachtrags-Rechnung 2 "+IIf(1->(IsFieldVar("rechnrn2")), ;
                                 "Nr.: "+1->rechnrn2+"/"+cRD2,""), 56-nX )+Str( nSumme2,10,2 ) + ;
                             IIf(3->(IsFieldVar("gewinneu"))," / "+Str(nSumG2,8,2),"")+CRLF   //04.04.2008 13:57 Gewinn
            cString := cString + PadR( "unsere Nachtrags-Rechnung 3 "+IIf(1->(IsFieldVar("rechnrn3")), ;
                                 "Nr.: "+1->rechnrn3+"/"+cRD3,""), 56-nX )+Str( nSumme3,10,2 ) + ;
                             IIf(3->(IsFieldVar("gewinneu"))," / "+Str(nSumG3,8,2),"")+CRLF   //04.04.2008 13:57 Gewinn
            cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
            cString := cString + PadR( "Summe der Rechnungen               ", 53-nX )+w_g+Str( nSumme,10,2 ) + ;
                             IIf(3->(IsFieldVar("gewinneu"))," / "+Str(nSumG,8,2),"")+CRLF   //04.04.2008 13:57 Gewinn
            cString := cString + "(Davon aus Eigenleistungen " + Str( nSumme-nASum,8,2 ) + " "+w_g+")" + ;
                             IIf(3->(IsFieldVar("gewinneu"))," / ("+Str(nSumGE,8,2)+" "+w_g+")","")+CRLF   //04.04.2008 14:13
            cString := cString + "(Davon aus Fremdleistungen " + Str( nASum,8,2 ) + " "+w_g+")"+CRLF
            IF Upper(AppName())$"MUELLX.EXE-BLEINX.EXE" .AND. nSumme4 != 0      // 9.2.2005
               cString := cString + "(nicht enthalten: R4/Friedhofsgebhren" + Str( nSumme4,8,2 ) + " "+w_g+")"+CRLF
            ENDIF
         ENDIF
         cString := cString + PadR( " ", 66-nX )+CRLF
         cString := cString + PadR( "Versicherungen/Zahlungen:", 66-nX )+CRLF
         IF nX = 10
            cString := cString + PadR( "Name                          Erf-Dat  bez.am    bez-"+w_g, 66-nX )+CRLF
         ELSE
            cString := cString + PadR( "Name                          Erf-Dat   Pol-"+w_g+"  bez.am    bez-"+w_g, 66-nX )+CRLF
         ENDIF
         cString := cString + PadR( Replicate( "-", 66-nX ), 66-nX )+CRLF
      
         SELECT 2
         FIND &cAuf
         DO WHILE 2->auftrnr = Val( cAuf ) .AND. .NOT. Eof()
            IF (IsFieldVar("gruppe") .AND. 2->gruppe = "V") .OR. ;
               (IsFieldVar("etgruppe") .AND. 2->etgruppe = "V")
               nVSumE := nVSumE + &b_b_g
            ELSE
               nVSumA := nVSumA + &b_b_g
            ENDIF
            nVSum := nVSum + &b_b_g
            cString := cString + PadR( Substr( name1,1,30 )+" "+Substr( DtoC( erf_datum ),1,6 ) + ;
                      IIf( nX=0,Str( &p_b_g,10,2 ),"")+"  "+Substr( DtoC( bez_am ),1,6 )+" " + Str( &b_b_g,10,2 ), 66-nX )
         //+14.10.2008 10:31 bez_wie gibt es nicht bei jedem!:
            cString += IIf( IsFieldVar("bez_wie") .AND. 2->bez_wie!=" ", " / "+bez_wie+CRLF, +CRLF )   //+14.10.2008 10:31
            SKIP
         ENDDO
         nGSum := nSumme - nVSum
      
         cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
         cString := cString + PadR( "Summe der Versicherungszahlungen ", 46-nX )+Str( nVSumE,10,2 )+CRLF
         cString := cString + PadR( "Summe der sonstigen Ein-/Ausg„nge ", 46-nX )+Str( nVSumA,10,2 )+CRLF
         cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
         cString := cString + PadR( "Summe der Versicherungen/Zahlungen   ", 56-nX )+Str( nVSum,10,2 )+CRLF
         cString := cString + PadR( Replicate( "-", 66-nX ), 67-nX )+CRLF
         cString := cString + PadR( "Total-Saldo dieses Auftrages         ", 53-nX )+w_g+Str( nGSum,10,2 )+CRLF
//**25.09.2007 13:24:
         // Auflistung aller ANGEH™RIGEN-Rechnungen zu diesem Bestattungsfall:
         nSumme := 0
         nRec := 4->(RecNo())
         4->(DbSuspendNotifications())
         4->(DbGotop())
         cString := cString + Replicate( "=", 76 )+CRLF+CRLF
         cString := cString + Replicate( "=", 76 )+CRLF+CRLF
         cString := cString + PadR( "Rechnungen an Angeh”rige zu diesem Auftrag:", 63 )+CRLF
         cString := cString + PadR( Replicate( "-", 76-nX ), 77-nX )+CRLF
         DO WHILE 4->P_AUFTRNR == 1->auftrnr .AND. !4->(Eof())      //05.07.2007 17:56
            IF 4->P_RECHBETR <> 0 .OR. 4->P_SALDO <>0    //02.09.2007 16:28
               cString := cString + PadR( 4->P_PERSKZ+" / "+Trim(4->P_VORNAME)+" "+Trim(4->P_NAME), 58 )+CRLF
               cString := cString + IIf("g e l ” s c h t"$4->P_NOTIZ,"==== g e l ” s c h t ===="+CRLF,"")   //05.09.2007 18:04
//               cString := cString + PadR( "     Summe der Eigenleistungen", 66 )+StrP(4->P_RECH_EL,8,2)+CRLF
//               cString := cString + PadR( "     Summe der Fremdleistungen", 66 )+StrP(4->P_RECH_FL,8,2)+CRLF
//               cString := cString + PadL("----------",76)+CRLF
               IF !4->(IsFieldVar("P_RECH_NR")) .OR. Empty(4->P_RECH_NR)   //Upper(AppName())$"WERNER.EXE"    // weil keine RNr.!
                  cString := cString + PadR( "Gesamtsumme der Rechnung vom: "+ ;
                            DtoC(4->P_RECH_DAT), 66 )+Str(4->P_RECHBETR,8,2)+CRLF //26.04.2006 13:06
               ELSE
                 cString := cString + PadR( "Gesamtsumme der Rechnung Nr.: "+ ;
                            4->P_rech_nr+"/"+DtoC(4->P_RECH_DAT), 66 )+Str(4->P_RECHBETR,8,2)+CRLF //+09.02.2009 09:39
               ENDIF
               IF 4->(IsFieldVar("P_EING_KTO"))
                  cString := cString + PadR( "Bisherige Zahlung        vom: "+ ;
                                 DtoC(4->P_EING_DAT)+" / Konto: "+4->P_EING_KTO, 66 ) + Str(4->P_EINGBETR,8,2)+CRLF
               ELSE
                  cString := cString + PadR( "Bisherige Zahlung        vom: "+ ;
                                 DtoC(4->P_EING_DAT), 66 ) + Str(4->P_EINGBETR,8,2)+CRLF
               ENDIF
               cString := cString + Replicate( "-", 76 )+CRLF
               cString := cString + PadR( "Total-Saldo dieses Auftrages         ", 63 )+w_g+;
                                    StrP( 4->P_SALDO,8,2 )+CRLF
               nSumAng += 4->P_SALDO
               cString := cString + PadR( Replicate( "=", 76-nX ), 77-nX )+CRLF
            ENDIF
            4->(DbSkip())
         ENDDO
         cString := cString + CRLF + ;
         PadR( "Gesamt-Saldo aller Angeh”rigen-Auftr„ge zu dieser Bestattung", 63 )+w_g+;
         StrP( nSumAng,8,2 )+CRLF
         cString := cString + PadR( Replicate( "=", 76-nX ), 77-nX )+CRLF
         4->(DbGoto(nRec))
         4->(DbResumeNotifications())
      // 
//**
      ENDIF
   ENDIF
   SELECT &nOldArea
   DbResumeNotifications() //23.09.2007 19:42
RETURN cString


CLASS KontFF FROM DialogFF
   EXPORTED:
   VAR VArea
   VAR cNt                    // 0,1,2,3,A...Z  = Rechnung        14.07.2007 21:28
   VAR cBB                    // Versicherungszeile (= vv->bb)
   VAR cREName                // Name des Rechnungsempf„ngers
   VAR cREVorname             // Vorname des Rechnungsempf„ngers
   VAR cRETelefon             // Telefonnr. des Rechnungsempf„ngers
   VAR cGKZ                   // evtlles Adresskennzeichen des Rechnungsempf„ngers  14.07.2007 21:28
   VAR nZahlung               // Zahlbetrag zur Verbuchung in VV.dbf  // 30.12.2004
   VAR dZahlDat               // Datum der Zahlung       // 19.4.2005
   VAR cZahlKto               // "bar" oder Konto, auf das die Zahlung erfolgt
   VAR aU0                    // šberschriften fr Statistik         // 16.4.2005
   VAR aV0                    // (Feld-)Variable fr Statistik
   VAR aF0                    // Filterbedingungen fr Statistik
   VAR aU1                    // šberschriften fr Statistik         // 16.4.2005
   VAR aV1                    // (Feld-)Variable fr Statistik
   VAR aF1                    // Filterbedingungen fr Statistik
   METHOD INIT
   METHOD CREATE
   METHOD notify
   METHOD ZumBlockAnfang
   METHOD ZumBlockEnde
   METHOD RechEmpf            // Rechnungsempf„nger=Zahlender  15.07.2007 11:56
   METHOD ZahlungsEingabe     // nZahlung wird zu einer Zeile in VV.dbf // 30.12.2004
   METHOD ZAHLUNGzuKASSE      // nZahlung wird direkt in dei Kasse bertragen //23.09.2007 18:30
   METHOD VI                  // Initialisierung der aU1,aV1,aF1
ENDCLASS

METHOD KontFF: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 )
   ::VArea := nA
   ::cNt := " "            //14.07.2007 21:28
   ::cBB := " "
   ::cREName := ""
   ::cREVorname := ""
   ::cRETelefon := ""
   ::cGKZ := ""
   ::nZahlung := 0      // 30.12.2004
   ::dZahlDat := DATE()
   ::cZahlKto := "    "
   ::aU0 := {}
   ::aV0 := {}
   ::aF0 := {} // 16.4.2005
   ::aU1 := {}
   ::aV1 := {}
   ::aF1 := {} // 16.4.2005
   ::BEArea := {}
   AAdd( ::BEArea, oParent )
   ::BENr := Len( ::BEArea )
   ::Fancy := "0"
   ::cBestLF := oFocSle:cargo       // letztes Feld, welches in Best den Focus hatte
RETURN self

METHOD KontFF: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 KontFF:notify( nEvent, mp1, mp2 )
   LOCAL nRec, oFocus, i
      IF nEvent == xbeDBO_Notify             // Notify-Ereignis
         IF mp1 == DBO_MOVE_DONE             // Skip ist beendet
            IF Alias(4) == "PERSONEN"        //02.09.2007 16:15
               DbSuspendNotifications()   //23.09.2007 19:57
//               IIf( 4->(DbScope()), 4->(DbClearScope()),)      // 26.08.2005  vorsichtshalber
//               4->(DbSetScope( SCOPE_BOTH, StrX(1->auftrnr,E,0) ))   // neuer Auftrag, neue Scope
//               4->(DbGotop())
//   //  statt DbSetRelation DbSeek() nach dem zuletzt bei diesem Auftrag 'eingeloggten' Angeh”rigen:   
//               IIf(!Empty(1->perskz),4->(DbSeek(StrX(1->auftrnr,E,0)+1->perskz),.F.),4->(DbGobottom()) ) 
               oBest:SwapPers("L")      // 5.5.2005 Angeh”rigendaten einlesen
               DBResumeNotifications()    //23.09.2007 19:57
            ENDIF
            ::MultiZeile[2]:setData( cKonto := KontrRech(StrX(1->auftrnr,E,0)+ ;
                                                IIf(SELECT()=4,4->P_PERSKZ,"") ) )  // 09.03.2006
            IF ::VArea == 4
               ::XbpObjekt(::singleZeile,"cName"):setData( cName:=1->name )
               ::XbpObjekt(::singleZeile,"cVorname"):setData( cVorname:=1->vorname )
               ::XbpObjekt(::singleZeile,"dGestorben"):setData( dGestorben:=1->gestorben )
            ENDIF
         ENDIF
      ENDIF
RETURN self

METHOD KontFF:ZumBlockAnfang(cAuf)
   IF SELECT() = 4
      cAuf := cAuf + "A"
            DbSuspendNotifications()
      DbSeek( cAuf, .T. )
            DbResumeNotifications()
   ELSE
      cAuf := IIf( Val(cAuf[1])!=0, cAuf[1]+"00000", "      " )
      SET ORDER TO 1
      DbSeek( cAuf, .T. )
   ENDIF
RETURN self

METHOD KontFF:ZumBlockEnde(cAuf)
   IF SELECT() = 4
      cAuf := cAuf + "Z"
            DbSuspendNotifications()
      DbSeek( cAuf, .T. )
            DbResumeNotifications()
      IIf( SubStr(cAuf,1,E) != StrX(4->P_auftrnr,E,0), DbSkip(-1), DbSkip(0) )
   ELSE
      cAuf := cAuf[1]+"99999"
      SET ORDER TO 1
      DbSuspendNotifications()
      DbSeek( cAuf, .T. )
      DbResumeNotifications()
      IIf( cAuf[1] != StrX(field->auftrnr,E,0)[1], DbSkip(-1), DbSkip(0) )
   ENDIF
RETURN self

METHOD KontFF:RechEmpf()
   IF ::cNt >= "0" .AND. ::cNt <= "3"
      ::XbpObjektSet(,"cREName",1->ansp_name)
      ::XbpObjektSet(,"cREVorname",1->ansp_vname)
      ::XbpObjektSet(,"cRETelefon",1->ansp_telp)
      ::XbpObjektGet(,"cREName")
      ::XbpObjektGet(,"cREVorname")
      ::XbpObjektGet(,"cRETelefon")
   ELSEIF ::cNt>= "A" .AND. ::cNt <= "Z"
      4->(DbSeek(StrX(1->auftrnr,E,0)+::cNt,.F.))
      oBest:SwapPers("L")              //02.09.2007 16:16
      ::XbpObjektSet(,"cREName",4->P_NAME)
      ::XbpObjektSet(,"cREVorname",4->P_VORNAME)
      ::XbpObjektSet(,"cRETelefon",4->P_TELEFON)
      ::XbpObjektGet(,"cREName")
      ::XbpObjektGet(,"cREVorname")
      ::XbpObjektGet(,"cRETelefon")
   ENDIF
RETURN self

METHOD KontFF:ZahlungsEingabe( nZahlBetrag, cZMin, cZPlus, dZahlDatum, cZahlKonto, cBB )
   LOCAL nOldArea := SELECT(), lErl := .T.
   DEFAULT  nZahlBetrag TO ::nZahlung , ;
            cZMin TO "zahl-" , cZPlus TO "zahl+" , ;
            dZahlDatum TO ::dZahlDat , cZahlKonto TO ::cZahlKto, ;
            cBB TO ::cBB                        //14.07.2007 22:27
   
   IF Upper(AppName())$"WERNERX.EXE"      //03.04.2008 17:24
     //* ::cNt ist bei Auftr-Rgn die rn = " "..."3" und bei Pers_Rech die PersKz = "A"..."Z"
      IF nOldArea = 1 .AND. ::cNt < "4" .AND. ;
                      ((Val(cBB) > 0 .AND. 2->(DbSeek( StrX(1->auftrnr,E,0)+Str( Val(cBB),2,0 ), .F. ))) ;
                      .OR. Val(cBB) == 0 ) ; /*neue Zeile, ggf mit Kennzeichen=Text*/
                      .AND. nZahlBetrag > 0 .AND. 2->&b_b_g = 0 // wenn bisher noch kein Zahlungseingang eingegeben wurde
         lErl := .F.    // ... dann braucht man nicht um Erlaubnis fragen zur Eingabe
      ENDIF
      IF (nOldArea = 4 .OR. ::cNt>"@") .AND. nZahlBetrag > 0 .AND. oBest:PvEINGBETR = 0   // dito
         lErl := .F.
      ENDIF
     //* 14.07.2008 21:39 damit H. Bergrath nicht mehr gefragt wird:
      IF Val(cRS) >= aZugang[12]
         lErl := .F.
      ENDIF
     //*//
      IF lErl .AND. !oEdit:Erlaubnis(oKODA,,,aZugang[12])
         ::nZahlung := 0
         ::cZahlKto := ""
         RETURN self
      ENDIF
   ELSEIF ConfirmBox( oCB, "Abbrechen mit <NEIN>", ;
                           "Kunden-Zahlung eintragen?", ;
                           XBPMB_YESNO, ;
                           XBPMB_WARNING, ;
                           XBPMB_DEFBUTTON2 ) ;
                           =  XBPMB_RET_NO
      ::nZahlung := 0
      ::cZahlKto := ""
      RETURN self
   ENDIF
   IF nOldArea = 1 .AND. ::cNt < "4"         //17.07.2007 19:39
      SELECT 2
      IF Val(cBB) > 0                     //14.07.2007 22:40
         DbSeek( StrX(1->auftrnr,E,0)+Str( Val(cBB),2,0 ), .F. )
         IF 2->auftrnr != 1->auftrnr .AND. ;
               ConfirmBox( oCB, "Neue Zeile: <JA> / Abbrechen mit <NEIN>", ;
                        "Zeile nicht vorhanden!", ;
                        XBPMB_YESNO, ;
                        XBPMB_WARNING, ;
                        XBPMB_DEFBUTTON2 ) ;
                        =  XBPMB_RET_YES
            cBB := "  "
         ELSEIF 2->auftrnr == 1->auftrnr     //03.04.2008 19:36
            2->(Satzsp(oCB))
         ELSE
            RETURN self                      //03.04.2008 19:36
         ENDIF
      ENDIF
      IF Val(cBB) == 0
         5->(DbSeek( IIf(cBB>"@".OR.cBB<="/",Trim(cBB),IIf( nZahlBetrag < 0, cZMin, cZPlus )), .F. ))
         DbSeek( StrX(1->auftrnr,E,0), .F. )
         IF !Eof()
            DO WHILE 2->auftrnr == 1->auftrnr
               cBB := 2->BB
               SKIP
            ENDDO
         ENDIF
         cBB := IIf(Val(cBB)=0,"1 ",LTrim(Str( Val(cBB)+1,2,0 )))
         APPEND BLANK
      ENDIF
      IF Empty(2->auftrnr)
         2->auftrnr := 1->auftrnr
         2->BB := cBB
//         IF 5->(IsFieldVar("gruppe"))           //17.07.2007 13:13
//            5->(DbSetFilter( {|| 5->gruppe$"  Z " } ))
//         ELSEIF 5->(IsFieldVar("etgruppe"))
//            5->(DbSetFilter( {|| 5->etgruppe$"  Z " } ))
//         ENDIF
         2->verskz := 5->verskz        // wenn nicht gefunden, dann ist es leer  17.07.2007 13:08
         2->name1 := IIf(!Empty(5->name1),5->name1, ;
                        IIf(nZahlbetrag < 0,"Auszahlung an den Kunden","Zahlung des Kunden") )
         2->name2 := 5->name2
         2->erf_datum := DATE()
         5->(DbClearFilter())
      ENDIF
//      2->bez_am := DATE()
      2->&b_b_g := nZahlBetrag
      2->bez_am := dZahlDatum
      IF Upper(AppName())$"HANELX.EXE" //+02.08.2010 14:31
         IIf(2->(IsFieldVar("bez_wie")), 2->bez_wie := cZahlKonto, )
      ELSE
         IIf(2->(IsFieldVar("bez_wie")), 2->bez_wie := IIf( Len(Trim(cZahlKonto))=1,cZahlKonto[1],""), ) //31.05.2007 21:37
      ENDIF
      IIf(2->(IsFieldVar("bezwie")), 2->bezwie := cZahlKonto, )         // Sander
      IIf(2->(IsFieldVar("eingkto")), 2->eingkto := cZahlKonto, )       // Dischleid, Menge
      IIf(2->(IsFieldVar("wiebez")), 2->wiebez := cZahlKonto, )         // Klemmer
      IIf(2->(IsFieldVar("rn")), 2->rn := ::cNt, )                       // cAc 16.07.2007 12:47
     //+14.10.2008 10:20 Zahlung erfolgte ja an den Bestatter, also: eintragen! :
      IF 2->(IsFieldVar( "kennzab" ))
         2->kennzab := "B"
      ELSEIF 2->(IsFieldVar( "ausw2" )) .AND. Upper(AppName())="DISCHX.EXE"
         2->ausw2 := "B"
      ELSEIF 2->(IsFieldVar( "ausw1" )) .AND. Upper(AppName())!="DISCHX.EXE"
         2->ausw1 := "B"
      ENDIF
    1->(Satzsp(oBEDA))
      1->&v_m += nZahlBetrag
      IF 1->(IsFieldVar("eingbetr0"))  //cAc 16.07.2007 12:47
         ::cNt := IIf(::cNt=" ","0",::cNt)
         1->&("EINGBETR"+::cNt) += nZahlBetrag
      ENDIF
      1->&t_l -= nZahlBetrag
      1->(DbRUnlock())
   ELSEIF nOldArea = 4 .OR. ::cNt>"@"     //17.07.2007 19:38
      oBest:XbpObjekt(oBest:singleZeile,"PvEINGBETR"):setData(oBest:PvEINGBETR+=nZahlBetrag)
      oBest:XbpObjekt(oBest:singleZeile,"PvEING_DAT"):setData(oBest:PvEING_DAT:=dZahlDatum)
      IF 4->(IsFieldVar("P_EING_KTO"))    //17.07.2007 19:44
         oBest:XbpObjekt(oBest:singleZeile,"PvEING_KTO"):setData(oBest:PvEING_KTO:=cZahlKonto)
      ENDIF
      oBest:XbpObjekt(oBest:singleZeile,"PvSALDO"):setData(oBest:PvSALDO-=nZahlBetrag)
      oBest:SwapPers("S")
   ENDIF
   IF Upper(::cZahlKto)$"1BKS" .AND. Upper(AppName())$"BLEINX.EXE"  //23.09.2007 18:25
      ::ZAHLUNGzuKASSE(nOldArea)
   ENDIF
   SELECT (nOldArea)
   cKonto := KontrRech( StrX(1->auftrnr,E,0)+IIf(nOldArea=1,"",4->P_PERSKZ) )
   ::MultiZeile[2]:setData()
   ::nZahlung := 0
   ::cZahlKto := ""
RETURN self

// Bucht den Eingangsbetrag in die Kasse
// markiert die Zeile als gebucht ("x")
METHOD KontFF:ZAHLUNGzuKASSE(nRArt)    // nRArt = Rechnungsart: 1 oder 4
   LOCAL nOldArea := SELECT(), n, nRec, a2 := {}
   LOCAL nA := 29 // 23.09.2007 18:28IIf( IsMemVar("cKassTemp"),19,29)    // wenn von der Kasse aufgerufen 24.01.2007 14:18
   IF (nRArt=4 .OR. (Empty(2->gebucht) .AND. Upper(2->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(::cZahlKto)$"1BKS"           // bar, Kasse, Scheck
         IF nA = 29 //23.09.2007 18:28 .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(::cZahlKto)$"2šUG"       // šberweisung auf das Girokonto
         IF nA = 29 //23.09.2007 18:28 .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
//23.09.2007 18:29      nA:=IIf( SELECT()=29,29,19)
      (nA)->datum := ::dZahlDat  // 2->bez_am
      (nA)->&e_n := IIf(::nZahlung>=0,::nZahlung,0)
      (nA)->&a_g := IIf(::nZahlung<0,::nZahlung,0)
      (nA)->auftrnr := StrX(1->auftrnr)
      (nA)->txnr := "11" 
      (nA)->tx := SubStr(IIf(nRArt=4,4->P_PERSKZ+"-","") + ;
                        IIf(!Empty(5->name1) .AND. nRArt = 1,5->name1, ;
                        IIf(::nZahlung < 0,"Auszahlung an den Kunden","Zahlung des Kunden") ), ;
                        1, Len((nA)->tx))
      IF nRArt = 1
         2->(Satzsp(oCB))
         2->gebucht := "x"         // Satz ist gebucht in Kasse oder Bank
         2->(DbRUnlock())
      ENDIF
      SELECT 29
      USE
   ENDIF
   SELECT &nOldArea
RETURN self

// Statistik-Variablen ausw„hlen
METHOD KONTFF:VI(n)
   ::aU1 := AClone(::aU0[n])
   ::aV1 := AClone(::aV0[n])
   ::aF1 := AClone(::aF0[n])
RETURN self
