// TTAVFUNC - Funktionen fr das Transaktionstracking
// in Verbindung mit TTAV.prg und TTpro5cs/sc
//-------------------------------------------------------------------------
FUNCTION TTCzuS( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecC, cDatei )
//   Die tbest-Datei des Client wird abgearbeitet und die ge„nderten
//   Felder (ggf. der ganze Satz) der best-Datei des Client auf die
//   best-Datei des Servers bertragen.
//   Diese Transaktion wird in der tbest-Datei des Servers erg„nzt.

   LOCAL aData1 := SatzGet( nAreaC, nRecC )
   LOCAL aData2 := SatzGet( nAreaC, nRecC+1 )
   LOCAL aDataD := SatzGet( nAreaC, nRecC+2 )
   LOCAL nAuftr := 000000

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

   SKIP -2      // Satzzeiger in nAreaC auf aData1-Record
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "1"
      RETURN ( nRecC )
   ENDIF

   cAuf := str(aData1[1],6,0)

   IF aData1[5] = SPACE( 20 )
//        wenn es ein neuer Auftrag ist:
      SELECT &nAreaSB
      GO TOP
      DO WHILE (cDatei == "best" .OR.  cDatei == "vbest") .AND. .NOT. Eof()
         nZei := IIf( nZei > 23, 5, nZei )
         @ ++nZei,10 SAY cAuf+": Neue Auftr-Nr. eingeben : " GET nAuftr
         read
         cAuftr := str( nAuftr,6,0 )
         FIND &cAuftr
      ENDDO
      IF cDatei == "best"
         AAdd( aBest, cAuf )
         AAdd( aBest, nAuftr )
      ENDIF
      aData1[1] := aData2[1]:= aDataD[1] := nAuftr
//        die Best-Datei des Servers erg„nzen:
      SELECT &nAreaSB
      APPEND BLANK
      SatzPut( nAreaSB, RecNo(), aData2 )
//        die TT-Datei des Servers erg„nzen:
      SELECT &nAreaS
      APPEND BLANK
      SatzPut( nAreaS, RecNo(), aData1, "1" )
      APPEND BLANK
      SatzPut( nAreaS, RecNo(), aData2, "1" )
      APPEND BLANK
      SatzPut( nAreaS, RecNo(), aDataD, "1" )
//        die Best-Datei des Client erg„nzen um NEUE Auftrag-Nr:
      SELECT &nAreaCB
      FIND &cAuf
      IF Found()
         REPLACE Auftrnr with aData1[1]
      ENDIF
//
   ELSE
//        wenn es ein alter Auftrag ist:
//        die Best-Datei des Servers erg„nzen:
//        Vorannahme: es gilt immer das vom Client ge„nderte Feld !
      SELECT &nAreaSB
      find &cAuf
      FeldPut( nAreaSB, RecNo(), aDataD )
//        die TT-Datei des Servers erg„nzen:
      SELECT &nAreaS
//        wurde dieser Auftrag schon ge„ndert?/ S->C-berspielt? :
      LOCATE FOR Auftrnr == aData1[1]
      DO WHILE .NOT. Eof()
         cTTFlag := TTFlag
         IF .NOT. "2"$cTTFlag
            EXIT
         ENDIF
         CONTINUE
      ENDDO
      IF Eof()
//        wenn im Server dieser Satz nicht auch schon ge„ndert wurde:
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData1, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData2, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aDataD, "1" )
      ELSE
//        wenn im Server auch schon dieser Satz ge„ndert wurde:
//        (FeldPut erg„nzt automatisch die TTFlag auf "1")
         SKIP
         Feldput( nAreaS, RecNo(), aDataD )
         SKIP
         Feldput( nAreaS, RecNo(), aDataD )
      ENDIF
   ENDIF
//        die TT-Datei des Client erg„nzen um (Auftr-Nr) + TTFlag:
   SELECT &nAreaC
   SatzPut( nAreaC, RecNo(), aData1, "1" )
   SKIP
   SatzPut( nAreaC, RecNo(), aData2, "1" )
   SKIP
   SatzPut( nAreaC, RecNo(), aDataD, "1" )

RETURN nRecC

//-----------------------------------------------------------

FUNCTION TTCzuSv( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecC, cDatei )
//   Die tvers-Datei des Client wird abgearbeitet und die ge„nderten
//   Felder (ggf. der ganze Satz) der vers-Datei des Client auf die
//   vers-Datei des Servers bertragen.
//   Diese Transaktion wird in der tvers-Datei des Servers erg„nzt.

   LOCAL aData1 := SatzGet( nAreaC, nRecC )
   LOCAL aData2 := SatzGet( nAreaC, nRecC+1 )
   LOCAL aDataD := SatzGet( nAreaC, nRecC+2 )
   LOCAL cVerskz := "     "

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

   SKIP -2
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "1"
      RETURN ( nRecC )
   ENDIF

   cAuf := aData1[1]

   IF aData1[5] = SPACE( 10 )
//        wenn es ein neuer Versicherer ist:
      SELECT &nAreaSB
      GO TOP
      DO WHILE .NOT. Eof()
         nZei := IIf( nZei > 23, 5, nZei )
         @ ++nZei,10 SAY cAuf+": Neues Vers-Kennz. eingeben : " GET cVerskz
         read
         FIND &cVerskz
      ENDDO
      aData1[1] := aData2[1]:= aDataD[1] := cVerskz
//        die vers-Datei des Servers erg„nzen:
      SELECT &nAreaSB
      APPEND BLANK
      SatzPut( nAreaSB, RecNo(), aData2 )
//        die TT-Datei des Servers erg„nzen:
      SELECT &nAreaS
      APPEND BLANK
      SatzPut( nAreaS, RecNo(), aData1, "1" )
      APPEND BLANK
      SatzPut( nAreaS, RecNo(), aData2, "1" )
      APPEND BLANK
      SatzPut( nAreaS, RecNo(), aDataD, "1" )
//        die vers-Datei des Client erg„nzen um NEUEN Versicherer:
      SELECT &nAreaCB
      FIND &cAuf
      IF Found()
         REPLACE Verskz with aData1[1]
      ENDIF
//      die tvv-Datei des Client korrigieren mit neuer verskz:
      SELECT 7
      USE C:\HDBE\tvv EXCLUSIVE
      REPLACE ALL verskz WITH cVerskz FOR verskz == cAuf
      USE
//
   ELSE
//        wenn es ein alter Versicherer ist:
//        die vers-Datei des Servers erg„nzen:
//        Vorannahme: es gilt immer das vom Client ge„nderte Feld !
      SELECT &nAreaSB
      find &cAuf      // == Verskz
      FeldPut( nAreaSB, RecNo(), aDataD )
//        die TT-Datei des Servers erg„nzen:
      SELECT &nAreaS
//        wurde dieser Auftrag schon ge„ndert?/ S->C-berspielt? :
      LOCATE FOR Verskz == aData1[1]
      DO WHILE .NOT. Eof()
         cTTFlag := TTFlag
         IF .NOT. "2"$cTTFlag
            EXIT
         ENDIF
         CONTINUE
      ENDDO
      IF Eof()
//        wenn im Server dieser Satz nicht auch schon ge„ndert wurde:
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData1, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData2, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aDataD, "1" )
      ELSE
//        wenn im Server auch schon dieser Satz ge„ndert wurde:
//        (FeldPut erg„nzt automatisch die TTFlag auf "1")
         SKIP
         Feldput( nAreaS, RecNo(), aDataD )
         SKIP
         Feldput( nAreaS, RecNo(), aDataD )
      ENDIF
   ENDIF
//        die TT-Datei des Client erg„nzen um (Vers-Kennz.) + TTFlag:
   SELECT &nAreaC
   SatzPut( nAreaC, RecNo(), aData1, "1" )
   SKIP
   SatzPut( nAreaC, RecNo(), aData2, "1" )
   SKIP
   SatzPut( nAreaC, RecNo(), aDataD, "1" )

RETURN nRecC

//-----------------------------------------

FUNCTION TTCzuSa( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecC, nArea6 )
//TTCzuSa  fr die Auftrags-Datei
//   Die tauftr-Datei des Client wird abgearbeitet und die kompletten
//   S„tze auf die auftr-Datei des Servers bertragen.
//   Bei neuen Auftr„gen wird die vorl„ufige Auftr-Nr. automatisch
//   durch die bei der best-šbertragung eingegebenen neuen Nr. ersetzt.

   LOCAL aData1 := SatzGet( nAreaC, nRecC )
   LOCAL aData2 := SatzGet( nAreaC, nRecC+1 )
   LOCAL aDataD := SatzGet( nAreaC, nRecC+2 )
   LOCAL nAuftr := 000000

   PRIVATE nDiff := 0 , n4 := 0
   nOldArea := Select()
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]
   
   SKIP -2
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "1"
      RETURN ( nRecC )
   ENDIF

// 1. lese Auftrags-Nr. in tAuftr:
   cAuf := str(aData1[1],6,0)
   nElement := AScan( aBest, cAuf )

   IF nElement > 0
//        wenn es ein neuer Auftrag ist:
      nAuftr := aBest[nElement+1]
      aData1[1] := aData2[1]:= aDataD[1] := nAuftr
//        die Best-Datei des Servers erg„nzen:
      DO WHILE aData2[1] == nAuftr .AND. .NOT. Eof()
         SELECT &nAreaSB
         APPEND BLANK
         SatzPut( nAreaSB, RecNo(), aData2 )
//        die TT-Datei des Servers erg„nzen:
         SELECT &nAreaS
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData1, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData2, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aDataD, "1" )
         SELECT &nAreaC
//        die TT-Datei des Client erg„nzen um (Auftr-Nr.) + TTFlag:
         SELECT &nAreaC
         SatzPut( nAreaC, RecNo(), aData1, "1" )
         SKIP
         SatzPut( nAreaC, RecNo(), aData2, "1" )
         SKIP
         SatzPut( nAreaC, RecNo(), aDataD, "1" )
         SKIP
         nRecC := nRecC+3
         IF .NOT. Eof()
            aData1 := SatzGet( nAreaC, nRecC )
            aData2 := SatzGet( nAreaC, nRecC+1 )
            aDataD := SatzGet( nAreaC, nRecC+2 )
            SKIP -2
         ENDIF
         nRecC := IIf( aData2[1]==nAuftr .AND. .NOT. Eof(), nRecC, nRecC-3 )
      ENDDO
//        die Best-Datei des Client erg„nzen um NEUE Auftrag-Nr:
      SELECT &nAreaCB
      FIND &cAuf
      DO WHILE cAuf = str(auftrnr,6,0) .AND. .NOT. Eof()
         REPLACE Auftrnr with nAuftr
         SKIP
      ENDDO
//
   ELSE         // wenn kein neuer Auftrag:

****aus prrvor:**( alten Auftrag l”schen )*************************
select &nAreaSB
go top
find &cAuf
aufzei=0
do while auftrnr=val(cAuf) .and. .not. eof()
//if rn=nt      // alle auf einmal!
// Artikel-Best„nde korrigieren
      schl=zugr_z_st
if kennz="1"
   zbetrag=betrag
   zbetrag2=betrageu
   select &nArea6
   find &schl
satzsperren()
   repl bestand with bestand+1,mgjahr with mgjahr-1
   repl umsatz with umsatz-zbetrag
   repl umsatzeu with umsatz-zbetrag2
satzentsperren()
endif
select &nAreaSB
delete
//endif
   skip
enddo
merkzei=aufzei+1
// Ende des Zitats aus PRRVOR : alte Rechnungs-S„tze sind gel”scht

***neuen Auftrag schreiben: **********
         SELECT &nAreaC
      DO WHILE aData2[1] = VAL( cAuf ) .AND. .NOT. Eof()
         SELECT &nAreaSB
         APPEND BLANK
         SatzPut( nAreaSB, RecNo(), aData2 )
//        die TT-Datei des Servers erg„nzen:
         SELECT &nAreaS
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData1, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData2, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aDataD, "1" )
//        die TT-Datei des Client erg„nzen um (Vers-Kennz.) + TTFlag:
         SELECT &nAreaC
         SatzPut( nAreaC, RecNo(), aData1, "1" )
         SKIP
         SatzPut( nAreaC, RecNo(), aData2, "1" )
         SKIP
         SatzPut( nAreaC, RecNo(), aDataD, "1" )
         SKIP 
         nRecC := nRecC+3
         IF .NOT. Eof()
            aData1 := SatzGet( nAreaC, nRecC )
            aData2 := SatzGet( nAreaC, nRecC+1 )
            aDataD := SatzGet( nAreaC, nRecC+2 )
            SKIP -2
         ENDIF
         nRecC := IIf( aData2[1]=Val(cAuf) .AND. .NOT. Eof(), nRecC, nRecC-3 )
      ENDDO
   ENDIF
   SELECT &nOldArea

RETURN nRecC

//----------------------------------------------------

FUNCTION TTCzuSvv( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecC, cDatei )
//TTCzuSvv  fr die Versicherungs-Vertrags-Datei
//   Die tvv-Datei des Client wird abgearbeitet und die ver„nderten
//   Felder auf die vv-Datei des Servers bertragen.
//   Bei neuen Auftr„gen wird die vorl„ufige Auftr-Nr. automatisch
//   durch die bei der best-šbertragung eingegebene neue Nr. ersetzt
//   und die kompletten S„tze an die vv-Datei des Servers angefgt.

   LOCAL aData1 := SatzGet( nAreaC, nRecC )
   LOCAL aData2 := SatzGet( nAreaC, nRecC+1 )
   LOCAL aDataD := SatzGet( nAreaC, nRecC+2 )
   LOCAL nAuftr := 000000

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

   SKIP -2
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "1"
      RETURN ( nRecC )
   ENDIF

// 1. lese Auftrags-Nr. in tvv:
   cAuf := str(aData1[1],6,0)
   nElement := AScan( aBest, cAuf )

   IF nElement > 0
//        wenn es ein neuer Auftrag ist:
      nAuftr := aBest[nElement+1]
      aData1[1] := aData2[1]:= aDataD[1] := nAuftr
//        die vv-Datei des Servers erg„nzen:
         SELECT &nAreaSB
         APPEND BLANK
         SatzPut( nAreaSB, RecNo(), aData2 )
//        die TT-Datei des Servers erg„nzen:
         SELECT &nAreaS
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData1, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData2, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aDataD, "1" )
//        die vv-Datei des Client erg„nzen um NEUE Auftrag-Nr:
      SELECT &nAreaCB
      FIND &cAuf        // immer nur einen Satz „ndern!
      IF cAuf = str(auftrnr,6,0) .AND. .NOT. Eof()
         REPLACE Auftrnr with nAuftr
      ENDIF
//
   ELSE         // wenn kein neuer Auftrag:
//        wenn es ein alter Auftrag ist:
//        die vv-Datei des Servers erg„nzen:
//        Vorannahme: es gilt immer das vom Client ge„nderte Feld !
//  vorl„ufige Vorannahme: es gibt nur einen Vertrag pro Auftr+Vers !!
      SELECT &nAreaSB
      find &cAuf
      DO WHILE Auftrnr == aData1[1] .AND. Auftrnr > 0 .AND. .NOT. Eof()
         IF Verskz == aData1[2]
            FeldPut( nAreaSB, RecNo(), aDataD )
            EXIT
         ENDIF
         SKIP
      ENDDO
//        die TT-Datei des Servers erg„nzen:
      SELECT &nAreaS
//        wurde dieser Auftrag schon ge„ndert?/ S->C-berspielt? :
      LOCATE FOR Auftrnr == aData1[1] .AND. Verskz == aData1[2]
      DO WHILE .NOT. Eof()
         cTTFlag := TTFlag
         IF .NOT. "2"$cTTFlag
            EXIT
         ENDIF
         CONTINUE
      ENDDO
      IF Eof()
//        wenn im Server dieser Satz nicht auch schon ge„ndert wurde:
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData1, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aData2, "1" )
         APPEND BLANK
         SatzPut( nAreaS, RecNo(), aDataD, "1" )
      ELSE
//        wenn im Server auch schon dieser Satz ge„ndert wurde:
//        (FeldPut erg„nzt automatisch die TTFlag auf "1")
         SKIP
         Feldput( nAreaS, RecNo(), aDataD )
         SKIP
         Feldput( nAreaS, RecNo(), aDataD )
      ENDIF

   ENDIF
//        die TT-Datei des Client erg„nzen um (Auftr-Nr.) + TTFlag:
         SELECT &nAreaC
         SatzPut( nAreaC, RecNo(), aData1, "1" )
         SKIP
         SatzPut( nAreaC, RecNo(), aData2, "1" )
         SKIP
         SatzPut( nAreaC, RecNo(), aDataD, "1" )
RETURN nRecC

//-----------------------------------------------------------

FUNCTION TTSzuC( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecS, cDatei )
//  Fr die best/vbest-Datei im Folgenden nur best genannt:
//   Die tbest-Datei des Servers wird abgearbeitet und die
//   korrespondierenden S„tze der best-Datei auf den Client bertragen.
//   Die šbertragung wird in der tbest-Datei des Servers vermerkt.
//   Die zu den bertragenen S„tzen geh”renden S„tze der tbest-Datei
//   des Client werden gel”scht ( == ALLE !!! ).
   LOCAL aData1 := SatzGet( nAreaS, nRecS )
   LOCAL aData2 := SatzGet( nAreaS, ++nRecS )
   LOCAL aDataD := SatzGet( nAreaS, ++nRecS )

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

//      (das war schon das Lesen des Server-Best-Satzes in aData2)
   cAuf := str(aData2[1],6,0)

   SKIP -2
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "2"
      RETURN ( nRecS )
   ENDIF

//      Schreiben des Client-Best-Satzes :
   SELECT &nAreaCB
   FIND &cAuf
   IF Eof()
      APPEND BLANK
   ENDIF
   Satzput( nAreaCB, RecNo(), aData2 )
//      L”schen der zu diesem Auftr geh”renden S„tze in der Client-tbest:
   SELECT &nAreaC
   LOCATE FOR Auftrnr == aData2[1]
      DO WHILE .NOT. Eof()
         cTTFlag := TTFlag
         IF SUBSTR( cTTFlag, VAL( cSystem ), 1 ) == "1"
            EXIT
         ENDIF
         CONTINUE
      ENDDO
   IF .not. Eof()
      DELETE NEXT 3
   ENDIF
//      ï2ï-Setzen der TT-Flag im Server fr diesen Client und diesen Auftr:
   SELECT &nAreaS
//   LOCATE FOR Auftrnr == aData2[1]   <--- steht schon da!
   cTTFlag := TTFlag
   cTTFlag := STUFF( cTTFlag, VAL( cSystem ), 1, "2" )
   REPLACE TTFlag with cTTFlag
   SKIP
   REPLACE TTFlag with cTTFlag
   SKIP
   REPLACE TTFlag with cTTFlag
RETURN nRecS

//-----------------------------------------------------------

FUNCTION TTSzuCv( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecS, cDatei )
//  Fr die vers-Datei im Folgenden nur best genannt:
//   Die tbest-Datei des Servers wird abgearbeitet und die
//   korrespondierenden S„tze der best-Datei auf den Client bertragen.
//   Die šbertragung wird in der tbest-Datei des Servers vermerkt.
//   Die zu den bertragenen S„tzen geh”renden S„tze der tbest-Datei
//   des Client werden gel”scht ( == ALLE !!! ).
   LOCAL aData1 := SatzGet( nAreaS, nRecS )
   LOCAL aData2 := SatzGet( nAreaS, ++nRecS )
   LOCAL aDataD := SatzGet( nAreaS, ++nRecS )

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

//      (das war schon das Lesen des Server-Best-Satzes in aData2)
   cAuf := aData2[1]

   SKIP -2
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "2"
      RETURN ( nRecS )
   ENDIF

//      Schreiben des Client-Best-Satzes :
   SELECT &nAreaCB
   FIND &cAuf
   IF Eof()
      APPEND BLANK
   ENDIF
   Satzput( nAreaCB, RecNo(), aData2 )
//      L”schen der zu diesem Auftr geh”renden S„tze in der Client-tbest:
   SELECT &nAreaC
   LOCATE FOR Verskz == aData2[1]
      DO WHILE .NOT. Eof()
         cTTFlag := TTFlag
         IF SUBSTR( cTTFlag, VAL( cSystem ), 1 ) == "1"
            EXIT
         ENDIF
         CONTINUE
      ENDDO
   IF .not. Eof()
      DELETE NEXT 3
   ENDIF
//      ï2ï-Setzen der TT-Flag im Server fr diesen Client und diesen Auftr:
   SELECT &nAreaS
//   LOCATE FOR Verskz == aData2[1]   <--- steht schon da!
   cTTFlag := TTFlag
   cTTFlag := STUFF( cTTFlag, VAL( cSystem ), 1, "2" )
   REPLACE TTFlag with cTTFlag
   SKIP
   REPLACE TTFlag with cTTFlag
   SKIP
   REPLACE TTFlag with cTTFlag
RETURN nRecS

//-----------------------------------------------------------

FUNCTION TTSzuCa( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecS, cDatei )
//   Die tauftr-Datei des Servers wird abgearbeitet und die
//   korrespondierenden S„tze der auftr-Datei auf den Client bertragen.
//   Die šbertragung wird in der tauftr-Datei des Servers vermerkt.
//   Die zu den bertragenen S„tzen geh”renden S„tze der tauftr-Datei
//   des Client werden gel”scht ( == ALLE !!! ).
   LOCAL aData1 := SatzGet( nAreaS, nRecS )
   LOCAL aData2 := SatzGet( nAreaS, ++nRecS )
   LOCAL aDataD := SatzGet( nAreaS, ++nRecS )

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

//      (das war schon das Lesen des Server-auftr-Satzes in aData2)
   cAuf := str(aData2[1],6,0)

   SKIP -2
// ist der Satz schon S->C-bertragen? :
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "2"
      RETURN ( nRecS )
   ENDIF

//      Schreiben des Client-auftr-Satzes :
   SELECT &nAreaCB
   FIND &cAuf
   IF Eof()

   ELSE

select &nAreaCB
go top
find &cAuf
do while auftrnr=val(cAuf) .and. .not. eof()
   delete
   skip
enddo


   ENDIF

***neuen Auftrag schreiben: **********
      SELECT &nAreaS
      DO WHILE aData2[1] = VAL( cAuf ) .AND. .NOT. Eof()
         SELECT &nAreaCB
         APPEND BLANK
         SatzPut( nAreaCB, RecNo(), aData2 )
         SELECT &nAreaS
         nRecS := nRecS+3
         IF .NOT. Eof()    // doch wohl berflssig ?!
            aData1 := SatzGet( nAreaS, nRecS )
            aData2 := SatzGet( nAreaS, nRecS+1 )
            aDataD := SatzGet( nAreaS, nRecS+2 )
            SKIP -2
         ENDIF
         nRecS := IIf( aData2[1]=Val(cAuf) .AND. .NOT. Eof(), nRecS, nRecS-3 )
      ENDDO

//        die dazugeh”rigen S„tze der TT-Datei des Client l”schen :
         SELECT &nAreaC
         GO TOP
         DELETE ALL FOR Auftrnr == Val( cAuf )

//       in der TT-Datei des Server TTFlag auf "2" setzen :
         SELECT &nAreaS
         GO TOP
         cTTFlag := TTFlag
         cTTFlag := Stuff( cTTFlag, Val( cSystem ), 1, "2" )
         REPLACE ALL TTFlag with cTTFlag FOR Auftrnr == aData2[1]

RETURN nRecS

//-----------------------------------------------------------

FUNCTION TTSzuCvv( nAreaC, nAreaCB, nAreaS, nAreaSB, nRecS, cDatei )
//   Die tvv-Datei des Servers wird abgearbeitet und die
//   korrespondierenden S„tze der vv-Datei auf den Client bertragen.
//   Die šbertragung wird in der tvv-Datei des Servers vermerkt.
//   Die zu den bertragenen S„tzen geh”renden S„tze der tvv-Datei
//   des Client werden gel”scht ( == ALLE !!! ).
   LOCAL aData1 := SatzGet( nAreaS, nRecS )
   LOCAL aData2 := SatzGet( nAreaS, ++nRecS )
   LOCAL aDataD := SatzGet( nAreaS, ++nRecS )

   PRIVATE nDiff := 0 , n4 := 0
   aDataD := SatzDiff( aData1, aData2 )
   aDataD[1] := aData2[1]

//      (das war schon das Lesen des Server-vv-Satzes in aData2)
   cAuf := str(aData2[1],6,0)

   SKIP -2
// ist der Satz schon S->C-bertragen? :
   cTTFlag := TTFlag
   IF substr( cTTFlag, VAL( cSystem ), 1 )  = "2"
      RETURN ( nRecS )
   ENDIF

//      Schreiben des Client-vv-Satzes :
   SELECT &nAreaCB
   FIND &cAuf
   DO WHILE Auftrnr == aData2[1]
      IF Verskz == aData2[2]
         Exit
      ENDIF
      SKIP
   ENDDO
   IF Eof()
      APPEND BLANK
   ENDIF
   Satzput( nAreaCB, RecNo(), aData2 )
//      L”schen der zu diesem Auftr geh”renden S„tze in der Client-tvv:
   SELECT &nAreaC
   LOCATE FOR Auftrnr == aData2[1]
      DO WHILE .NOT. Eof()
         cTTFlag := TTFlag
         IF SUBSTR( cTTFlag, VAL( cSystem ), 1 ) == "1" .AND. Verskz == aData2[2]
            EXIT
         ENDIF
         CONTINUE
      ENDDO
   IF .not. Eof()
      DELETE NEXT 3
   ENDIF
//      ï2ï-Setzen der TT-Flag im Server fr diesen Client und diesen Auftr:
   SELECT &nAreaS
//   LOCATE FOR Auftrnr == aData2[1]   <--- steht schon da!
   cTTFlag := TTFlag
   cTTFlag := STUFF( cTTFlag, VAL( cSystem ), 1, "2" )
   REPLACE TTFlag with cTTFlag
   SKIP
   REPLACE TTFlag with cTTFlag
   SKIP
   REPLACE TTFlag with cTTFlag
RETURN nRecS

//----------------------------------------

FUNCTION SatzGet( nArea, nRec )
   LOCAL aData := {}
   nOldArea := Select()
   SELECT &nArea
   ASize( aData, FCount() )
   GO nRec
   For n := 1 to FCount()
      IF TYPE( FieldName(n) ) == "M"
         cFieldName := FieldName(n)
         aData[n] := &cFieldName
      ELSE
         aData[n] := FieldGet( n )
      ENDIF
   NEXT
   SELECT &nOldArea
RETURN ( aData )

//-----------------------------------------------------------

FUNCTION SatzPut( nArea, nRec, aData, cTTF )
   LOCAL cTTFlag := SPACE( 5 )
   nOldArea := Select()
   SELECT &nArea
   GO nRec
   IF nArea=1 .or. nArea=3 .or. nArea=11
      replace TTDatum with Date()
      replace TTZeit with Time()
      replace TTUser with cSystem
      cTTFlag := TTFlag
      cTTFlag := STUFF( cTTFlag, VAL( cSystem ), 1 , cTTF )
      replace TTFlag with cTTFlag
      n4 := 4
   ELSE
      n4 := 0
   ENDIF
   For n := 1 to FCount()-n4
      FieldPut( n, aData[n] )
   NEXT
   SELECT &nOldArea
RETURN ( aData )

//-----------------------------------------------------------

FUNCTION SatzDiff( aData1, aData2 )
   LOCAL aDataD[ FCount() ]

   For n := 1 to FCount()-n4
      aDataD[n] := IIf( aData1[n] == aData2[n], NIL, aData2[n] )
      IF ValType( aData1[n] ) = "N"
         IF aData1[n] = aData2[n] .AND. aDataD[n] = 0
            aDataD[n] := NIL
         ENDIF
      ENDIF
      nDiff := IIf( aDataD[n]==NIL, nDiff, n )
   NEXT
RETURN ( aDataD )

//-----------------------------------------------------------

FUNCTION FeldPut( nArea, nRec, aData )
   nOldArea := Select()
   SELECT &nArea
   GO nRec

   DO CASE

      CASE nArea=1 .or. nArea=3
      n4 := 4
      cTTFlag := TTFlag
      IF val( substr( cTTFlag, VAL( cSystem ), 1 ) ) = 0
         FOR n := 1 TO FCount()-n4
            IF aData[n] == NIL
            ELSE
               FieldPut( n, aData[n] )
            ENDIF
         NEXT
         replace TTDatum with Date()
         replace TTZeit with Time()
         replace TTUser with cSystem
         cTTFlag := STUFF( cTTFlag, VAL( cSystem ), 1 , "1" )
         replace TTFlag with cTTFlag
      ENDIF

      CASE nArea=2 .or. nArea=4
         FOR n := 1 TO FCount()
            IF aData[n] == NIL
            ELSE
               FieldPut( n, aData[n] )
            ENDIF
         NEXT
   ENDCASE

   SELECT &nOldArea
RETURN ( aData )

