NetUse

 ****************************************************************
 * Открытие базы данных:                                        *
 * в распределенном режиме  lExc := NIL or lExc := .F.          *
 *          или                                                 *
 * в монопольном  режиме    lExc := .T.                         *
 * NetUse( cAlias,cFile,[cIndexes],[lExc],[cRdd] ) --> lSuccess *
 ****************************************************************

 FUNCTION NetUse( cAlias,cFile,cIndexes, lExc, cRdd, lReadyOnly, lNew, lNoIndex )
   LOCAL i, cDbfFile, cCdxFile,cDisk,;
         lForever:=.F., nSeconds:=10, nCo, cParol := GetId()
   LOCAL uPath,uLoad,nArea:=SELECT()
   cFile := ALLTRIM( cFile )
   i     := ATNUM( '.', cFile )
 IF VALTYPE( cRdd ) <> 'C' ;   cRdd := NameRdd()           ; ENDIF
 IF VALTYPE( lNew ) <> 'L' ;   lNew  := .T.                ; ENDIF
 IF SELECT( cAlias ) > 0 .AND. lNew  ;   (cAlias)->( DBCLOSEAREA() ) ; ENDIF
 IF VALTYPE( lExc ) <> 'L' ;   lExc  := .F.                ; ENDIF
   IF( VALTYPE(lReadyOnly) <> 'L', ;
      lReadyOnly := .F. ,;
      )
     IF UPPER(cRdd) == 'SIXCDX'
       cRdd:='DBFCDX'
     ENDIF
     IF IsAds()
       IF !EMPTY( uPath := UPPER(ExtractPath( cFile )) )
         uLoad := UPPER(LoadPath())
         IF !( SUBSTR(uLoad,3) $ uPath )
           cRdd := 'DBFCDX'
         ENDIF
         IF "PRO\" $ uPath
           cRdd := 'DBFCDX'
         ENDIF
       ENDIF
     ENDIF
     IF( i == 0.OR. i < LEN(cFile) - 3, i:= LEN(cFile), i-- )
       IF RIGHT( cFile, 3 ) == 'PRO'
         cDbfFile := cFile
       ELSE
         cDbfFile := LEFT(cFile,i)+'.DBF'
         cFile := LEFT(cFile,i)
       ENDIF
       /*
       IF !_REC_YES .AND. !Bs_IsTmp( cFile )
       // Глобальное запрещение записи
       lReadyOnly := .T.
       ENDIF
       */
       cCdxFile := LEFT(cFile,i)+'.CDX'
       IF( !FILE(cDbfFile), (nSeconds:= 0,SayError('Нет файла: '+cDbfFile)), ) // Нет базы
         DO WHILE (!lForever .AND. nSeconds > 0)
         WHILE  SECONDS() - nOpenSec < MEMVAR->WAIT_OPEN .AND. dOpenData = DATE(); ENDDO
           IF lNew
             IF lExc
               USE (cFile) ALIAS (cAlias) NEW VIA (cRdd) EXCLUSIVE
             ELSE
               USE (cFile) ALIAS (cAlias) NEW VIA (cRdd) SHARED
             ENDIF
           ELSE
             IF lExc
               USE (cFile) ALIAS (cAlias) VIA (cRdd) EXCLUSIVE
             ELSE
               USE (cFile) ALIAS (cAlias) VIA (cRdd) SHARED
             ENDIF
           ENDIF
           dOpenData := DATE()
           nOpenSec := SECONDS()
           IF !NETERR()               // USE успешно выполнена
             IF FILE(cCdxFile) .AND. EMPTY(cIndexes) .AND. EMPTY(lNoIndex)     // так как xH хватает CDX с таким же именем и падает
               OrdListAdd( cCdxFile )
             ENDIF
             IF (VALTYPE(cIndexes) == 'C')
               OrdListAdd(cIndexes )
             ELSEIF (VALTYPE(cIndexes) == 'A')
               FOR nCo:=1 TO LEN(cIndexes)
                 IF (LEN(TRIM(cIndexes[nCo])) > 0)
                   SET INDEX TO (cIndexes[nCo]) ADDITIVE
                 ENDIF
               NEXT
             ENDIF
             lForever := .T.
             EXIT
           ENDIF
           // Ожидание приблизительно 0.1 секунда
           //    INKEY(0.1)
           nSeconds--
         ENDDO
         IF !lForever
           IF nArea>0
             SELECT(nArea)
           ENDIF
         ENDIF
         #ifndef _DEBUG
         CheckLastRec(cAlias)
       #ENDIF
       RETURN(lForever)