************
*
* Программа..:  Общие функции складского учета,реализации,закупок
* Имя файла..:  G_Open.Prg
* Назначение.:  Открытие баз данных
*
******

// Copyright (c) 1993-2005 "Компания БЭСТ". Все права сохраняются.

#include "sc_all.ch"
#INCLUDE "task.ch"

STATIC lUpgrade := .T.

FUNCTION OpenBase(aBase,aAlias,lSpec,cMess,lReadOnly)
LOCAL i,cName,cAlias,nProces:=0,l:=.T.
IF cMess==NIL
   cMess:='Открытие баз данных'
ENDIF
IF (LEN(aBase) > 1)
    nProces := Proces_Ini(LEN(aBase)-1,,,cMess)
ENDIF
FOR i:=1 TO LEN(aBase)
cName:=UPPER(aBase[i])
cAlias:=IF(aAlias==NIL.OR.LEN(aAlias)<i.OR.aAlias[i]==NIL,cName,aAlias[i])
IF lSpec!=NIL.AND.!FILE(cName+'.dbf')
   LOOP
ENDIF
IF SELECT(cAlias) > 0
   SELECT (cAlias)
   LOOP
ENDIF
IF (cName=='PLAN_SCH'.OR.cName=='PLAN').AND.;  //Здесь жесткий Алиас
   (l:=NetUse('Plan','Plan_Sch','Plan_Sch',,lReadOnly))
   IF SELECT('PLAN')>0
      SET FILTER TO Status='1'
   ENDIF
ELSE
   IF FILE(cName+'.IDX')
      l:=NetUse(cAlias,cName,cName,,,lReadOnly)
   ELSEIF FILE(cName+'.DBF')
      l:=NetUse(cAlias,cName,,,,lReadOnly)
   ELSE
      l:=.T.
   ENDIF
ENDIF
cAlias:=UPPER(cAlias)
IF cAlias=='MAIN'.OR.cAlias=='MDOC'.OR.cAlias=='MDOCM'.OR.cAlias=='MKART'.OR.cAlias='MBARCODE'.OR.cAlias=='MPAR'.OR.cAlias=='MLABEL'
   IsDemo()
   ValidBase()
ENDIF
IF (LEN(aBase) > 1 .AND. i<LEN(aBase))
   Proces_Update(nProces)
ENDIF
IF !l
   EXIT
ENDIF
NEXT
IF (LEN(aBase) > 1)
   Proces_End(nProces)
ENDIF
RETURN (l)

FUNCTION CloseBase(aBase)
LOCAL i,cName
COMMIT
FOR i:=1 TO LEN(aBase)
cName:=UPPER(aBase[i])
IF SELECT(cName) > 0
   (cName)->(DBCLOSEAREA())
ENDIF
NEXT
RETURN (NIL)
//----------------------------------------------------------------------------//
                  FUNCTION ValidBase()
//----------------------------------------------------------------------------//
LOCAL cAlias := UPPER(ALIAS()), aBase, aNds, nPoz, nOper, cName
   IF cAlias=='MDOC'.AND. FIELDPOS('TZR1')>0.AND.ASCAN({TXT_TSUM},{|x| FIELDPOS(x) = 0 }) != 0
     SayError({'Выполните,пожалуйста,перенос данных','с помощью программы "Upgrade"'})
     CLS
     QUIT
   ELSEIF cAlias == 'MDOCM'
     DopolnBase({{"MDOCM",LoadPath()+"SCLAD\MDOCM.DBF"}},{{"PARTIA","C",5,0}},,,,.T.)
   ELSEIF cAlias=='MPAR'
      AEVAL(;
      {TXT_TSUM},;
      {|x,n|;
        IF(!dbSeek('1'+x),;
           (;
            AddRec(),;
            MPAR->Vid := '1',;
            MPAR->Ident := x,;
            MPAR->Name := 'Доп.сумма('+NTOC(n)+') по докум.',;
            MPAR->Len := 15,;
            MPAR->Dec := 3,;
            MPAR->Status := '1',;
            MPAR->Area := '1',;
            dbUnLock();
           ),;
           NIL;
          );
        };
            )
      IF !DBSEEK('1CURS')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'CURS',Name WITH 'Курс валюты',;
         Len WITH 13,Dec WITH 5,Status WITH '2',Area WITH '3'
         UNLOCK
      ENDIF
      IF !DBSEEK('1SNAL')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'SNAL',Name WITH 'Налоговая стоимость',;
         Len WITH 15,Dec WITH 3,Status WITH '3',Area WITH '2',;
         Block WITH '{|x|IF(x=NIL,m->nSumN,m->nSumN:=x)}'
         UNLOCK
      ENDIF
      IF !DBSEEK('1SUM_NDS')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'SUM_NDS',Name WITH 'Сумма НДС по строке',;
         Len WITH 15,Dec WITH 3,Status WITH '6',Area WITH '2', BLOCK WITH '{|| SH_OP->SUMMA_NDS }'
         UNLOCK
      ENDIF
      IF !DBSEEK('1SUM_CSH')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'SUM_CSH',Name WITH 'Сумма НП по строке',;
         Len WITH 15,Dec WITH 3,Status WITH '6',Area WITH '2', BLOCK WITH '{|| SH_OP->SUMMA_CSH }'
         UNLOCK
      ENDIF
      IF !DBSEEK('1CSH')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'CSH',Name WITH 'Налог с продаж,%',;
         Len WITH 8,Dec WITH 3,Status WITH '1',Area WITH '2'
         UNLOCK
      ENDIF
      IF !DBSEEK('1SUM_AKC')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'SUM_AKC',Name WITH 'Сумма акциза по строке',;
         Len WITH 15,Dec WITH 3,Status WITH '6',Area WITH '2', BLOCK WITH '{|| SH_OP->SUMMA_ACZ }'
         UNLOCK
      ENDIF
      IF !DBSEEK('1SPV')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'SPV',Name WITH 'Стоимость поставщика Вал.',;
         Len WITH 15,Dec WITH 3,Status WITH '2',Area WITH '2',BLOCK WITH "{|x| IF(x=NIL,aIn[8],aIn[8] := x) }"
         UNLOCK
      ENDIF
      IF !DBSEEK('2SPP ')
         AddRec()
         REPLACE Vid WITH '2',Ident WITH 'SPP',Name WITH 'Цена поставщика партии',;
         Len WITH 15,Dec WITH 3,Status WITH '2',Area WITH '2'
         UNLOCK
      ENDIF
      IF !DBSEEK('2SPPV')
         AddRec()
         REPLACE Vid WITH '2',Ident WITH 'SPPV',Name WITH 'Цена пост.партии Вал.',;
         Len WITH 15,Dec WITH 3,Status WITH '2',Area WITH '2'
         UNLOCK
      ENDIF
      IF !DBSEEK('2SPV0')
         AddRec()
         REPLACE Vid WITH '2',Ident WITH 'SPV0',Name WITH 'Цена учет.партии Вал.',;
         Len WITH 15,Dec WITH 3,Status WITH '2',Area WITH '2'
         UNLOCK
      ENDIF
      IF !DBSEEK('1Q0  ')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'Q0',Name WITH 'К-во в основных ед.изм',;
         Len WITH 13,Dec WITH 4,Status WITH '2',Area WITH '2'
         UNLOCK
      ENDIF
      IF !DBSEEK('1Q_BR')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'Q_BR',Name WITH 'К-во брака в осн.ед.изм',;
         Len WITH 13,Dec WITH 4,Status WITH '2',Area WITH '2',BLOCK WITH "{|x| IF(x=NIL,aIn[22],aIn[22] := x) }"
         UNLOCK
      ENDIF
      IF !DBSEEK('1SUM_TN')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'SUM_TN',Name WITH 'Сумма наценки',;
         Len WITH 13,Dec WITH 4,Status WITH '2',Area WITH '2'
         UNLOCK
      ENDIF
      IF !DBSEEK('1Q_NED')
         AddRec()
         REPLACE Vid WITH '1',Ident WITH 'Q_NED',Name WITH 'К-во недост.в осн.ед.изм',;
         Len WITH 13,Dec WITH 4,Status WITH '2',Area WITH '2',BLOCK WITH "{|x| IF(x=NIL,aIn[23],aIn[23] := x) }"
         UNLOCK
      ENDIF
      IF !DBSEEK('1ST  ').OR.!DBSEEK('1ST1 ')
         RestPar('MLab')
         IF !DBSEEK('1ST  ')
            AddRec()
            REPLACE Vid WITH '1',Ident WITH 'ST',Name WITH m->Koef_[1],;
            Len WITH 14,Dec WITH 3,Status WITH '5',Area WITH '2'
            UNLOCK
         ENDIF
         IF !DBSEEK('1ST1 ')
            AddRec()
            REPLACE Vid WITH '1',Ident WITH 'ST1',Name WITH m->Koef1_[1],;
            Len WITH 14,Dec WITH 3,Status WITH '5',Area WITH '2'
            UNLOCK
         ENDIF
      ENDIF
      IF DBSEEK('PP1') .AND. RecLock()
         FIELD->LEN := 18
         FIELD->DEC := 5
         dbUnLock()
      ENDIF
      IF DBSEEK('PP2') .AND. RecLock()
         FIELD->LEN := 18
         FIELD->DEC := 5
         dbUnLock()
      ENDIF
      IF DBSEEK('PP3') .AND. RecLock()
         FIELD->LEN := 18
         FIELD->DEC := 5
         dbUnLock()
      ENDIF
      IF DBSEEK('DOP1') .AND. RecLock()
         FIELD->LEN := 18
         FIELD->DEC := 5
         dbUnLock()
      ENDIF
      IF DBSEEK('DOP2') .AND. RecLock()
         FIELD->LEN := 18
         FIELD->DEC := 5
         dbUnLock()
      ENDIF
      IF DBSEEK('DOP3') .AND. RecLock()
         FIELD->LEN := 18
         FIELD->DEC := 5
         dbUnLock()
      ENDIF
   ELSEIF cAlias=='MLABEL'.AND.FIELDPOS('Koef1')=0
      IF TYPE('Koef1_')=='A'
         m->Koef1_[2]:=.F.
      ELSE
         PUBLIC Koef1_:={'',.F.}
      ENDIF
   ELSEIF cAlias = "MGRUP" .AND. lUpgrade
      IF FieldPos("OPER_NDS") = 0
        SayError(" Выполните UPGRADE ! ")
        BREAK
      ENDIF
      lUpgrade := .F.
      IF MGRUP->(!EOF()) .AND. EMPTY(MGRUP->OPER_NDS)
        Busy(.T.,"Заполнение справочника значений НДС")
        aBase := {"MGRUP","SPR_NDS","MEMDAT"}
        aNds := {}
        dbOpenBases(aBase,,,.F.)
        SPR_NDS->(DBEVAL({|| IF((nPoz := ASCAN(aNds,{|x| x[1] = SPR_NDS->NDS })) = 0,(AADD(aNds,{SPR_NDS->NDS,{},NIL}),nPoz := LEN(aNds)),NIL),aNds[nPoz,3] := SPR_NDS->NNOPER }))
        MGRUP->(DBEVAL({|| IF((nPoz := ASCAN(aNds,{|x| x[1] = MGRUP->NDS })) = 0,(AADD(aNds,{MGRUP->NDS,{},NIL}),nPoz := LEN(aNds)),NIL),AADD(aNds[nPoz,2],RECNO()) },{|| EMPTY(MGRUP->OPER_NDS) }))
        ASORT(aNds,,,{|x,y| x[1] < y[1] })
        IF (nPoz := ASCAN(aNds,{|x| x[1] = 0 .AND. x[3] = NIL })) != 0
          AEVAL(aNds[nPoz,2],{|nRec| MGRUP->(dbGoTo(nRec),IF(RecLock(),(MGRUP->OPER_NDS := -1,dbUnLock()),NIL)) })
          ADEL(aNds,nPoz)
          ASIZE(aNds,LEN(aNds)-1)
        ENDIF
        nPoz := 1
        SPR_NDS->(ORDSETFOCUS("TAG_NAME"),AEVAL(aNds,{|x|  cName := "Ставка НДС N "+NTOC(nPoz),dbGoTop(),DBEVAL({|| nPoz++,cName := "Ставка НДС N "+NTOC(nPoz)},,{|| dbSeek(UPPER(cName)) }),IF(x[1] = 0 .OR. x[3] != NIL,nOper := IF(x[3] = NIL,-1,x[3]),(AddRec(),nOper := SPR_NDS->NNOPER := IncStep("OperNds"),SPR_NDS->NDS := x[1],SPR_NDS->NAME := cName,dbUnLock())),AEVAL(x[2],{|nRec| MGRUP->(dbGoTo(nRec),IF(RecLock(),(MGRUP->OPER_NDS := nOper,dbUnlock()),NIL)) }) }))
        dbCloseBases(aBase,,,.F.)
        Busy(.F.)
      ENDIF
   /*ELSEIF cAlias == "SSTRU" .OR. (cAlias == "STRU" .AND. GlobalTask $ "0305")
     IF !dbSeek("050770") .AND. AddRec()
        FIELD->ARM := "05"
        FIELD->NUMPP := "0770"
        FIELD->FORM := "MAIN"
        FIELD->IDENT := "lDataProd"
        FIELD->NAME := "Контроль даты записи"
        FIELD->COMMON := .T.
        FIELD->TYPEVAL := "L"
        FIELD->INIT0 := ".T."
        FIELD->DESCRIPT :=;
          'Данный параметр устанавливает контроль     '+CHR(13)+CHR(10)+;
          'соответствия даты счета-фактуры на от-     '+CHR(13)+CHR(10)+;
          'грузку и даты записи в книге продаж.       '+CHR(13)+CHR(10)+;
          'При значении "Да" - дата в книге продаж по '+CHR(13)+CHR(10)+;
          'отгрузке не может быть более ранней, чем   '+CHR(13)+CHR(10)+;
          'дата самого счета-фактуры. При значении    '+CHR(13)+CHR(10)+;
          'параметра "Нет" - дается возможность офор- '+CHR(13)+CHR(10)+;
          'мить запись в книге с датой, ранней, чем   '+CHR(13)+CHR(10)+;
          'дата счета-фактуры. При учетной политике   '+CHR(13)+CHR(10)+;
          '"по отгрузке" в этом случае разрешается    '+CHR(13)+CHR(10)+;
          'корректировать дату записи. Параметр не    '+CHR(13)+CHR(10)+;
          'имеет значения при формировании записей    '+CHR(13)+CHR(10)+;
          'в книгу продаж по иным типам счетов-факту- '+CHR(13)+CHR(10)+;
          'ры кроме счета-фактуры на отгрузку.        '

        dbUnLock()
     ENDIF
     dbGoTop()*/
   ENDIF
RETURN NIL
