


--Идея и реализация:
--Казунин Ю.Я. 2008г.

БланкСШаблоном "Данные для Настройки НФА";
var current_ini:l;
--перед открытием данного бланка или обращении к его функциям или данным требуется его инициализация  (проверка по current_ini)
var crd_ini:s='SYS_RPO';-- имя картотеки с настройками
var db_crd_ini:s;
var user      :s;
var scheme    :s;
var vervar:i;
var verbln:i=0;
var НФА_Справочники[]:s;-- список справочников работающих в подсистеме УНФА
var НФА_ГРНФА[]:s;-- список разрешенных групп нфа
var НФА_ГРНФА_НЕ_ОБНОВЛЕНИЕ[]:s;-- список НЕ разрешенных групп нфа для автообновления
var Усл1:l;
var Усл2:l;
var Усл3:l;

var УслСПР_0	 :s;
var УслПД_106_0  :s;
var УслНетАморт_0:s;
var МетодАморт_0 :i;
var ТолькоНормаИзКарточкиНФА_101_08:L	       ;
var линейно_при_дэкспл_до2007:l;


func ab(str1:s;sum:s;str2:s):s;
  if длина(str1)=0:^str2;fi;
  if длина(str2)=0:^str1;fi;
  if длина(str1)+длина(str2)+длина(sum)>255:
     Message('Ошибка![функция РАБ.НФА.B01.ab]^MРезультат превышает максимальную^Mдлину строки в 256 символов^M'+str1+'^M'+sum+'^M'+str2,mterror);
     ^str2;
  fi;
  ^str1+sum+str2;
end;




proc Усл_set_ini;
 var t,p:i;
 p=LengthOfArray(РАБ.НФА.INI_SETUP.НФА_ГРНФА);
 Усл1=false;Усл2=false;Усл3=false;
 for t=1..p do
   if pos('105.',НФА_ГРНФА[t])>0:Усл1=true;
    | pos('101.',НФА_ГРНФА[t])>0:Усл2=true;
    | pos('102.',НФА_ГРНФА[t])>0:Усл3=true;
    | pos('103.',НФА_ГРНФА[t])>0:Усл3=true;
    | pos('106.04',НФА_ГРНФА[t])>0:Усл1=true;
    | pos('106.01',НФА_ГРНФА[t])>0:Усл2=true;
    | pos('106.02',НФА_ГРНФА[t])>0:Усл3=true;
   fi;
 od;
end;

proc НФА_ГРНФА_set_ini_3(Вид_По_Умолчанию:i);
var t:i;
--  Вид_По_Умолчанию=0 101+105				-- ОС+Материалы
--  Вид_По_Умолчанию=1 101+102+105			-- ОС+НМА+Материалы
--  Вид_По_Умолчанию=2 106.01+106.04			-- ОС+Материалы не принятые к учету (в т.ч. базы снабжения)
--  Вид_По_Умолчанию=3 106.01+106.02+106.04		-- ОС+НМА+Материалы не принятые к учету (в т.ч. базы снабжения)
--  Вид_По_Умолчанию=4 101+105+106.01+106.04		-- ОС+Материалы как принятые к учету так и не принятые к учету(в т.ч. базы снабжения)
--  Вид_По_Умолчанию=5 101+102+105+106.01+106.02+106.04 -- ОС+НМА+Материалы как принятые к учету так и не принятые к учету(в т.ч. базы снабжения)
--  Вид_По_Умолчанию=6 все				-- Любые НФА как принятые к учету, так и не принятые к учету

  ClearVariable(РАБ.НФА.INI_SETUP.НФА_ГРНФА);
  ClearVariable(РАБ.НФА.INI_SETUP.НФА_ГРНФА_НЕ_ОБНОВЛЕНИЕ);
  if Вид_По_Умолчанию=0 or Вид_По_Умолчанию=1 or Вид_По_Умолчанию=4 or Вид_По_Умолчанию=5: --стандарт=101+105
     t=t+1;НФА_ГРНФА[t]='101.01';
     t=t+1;НФА_ГРНФА[t]='101.02';
     t=t+1;НФА_ГРНФА[t]='101.03';
     t=t+1;НФА_ГРНФА[t]='101.04';
     t=t+1;НФА_ГРНФА[t]='101.05';
     t=t+1;НФА_ГРНФА[t]='101.06';
   --  t=t+1;НФА_ГРНФА[t]='101.07';
     t=t+1;НФА_ГРНФА[t]='101.08';
     if Вид_По_Умолчанию=1 or Вид_По_Умолчанию=5: --стандарт+102=101+105+102
	t=t+1;НФА_ГРНФА[t]='102.00';
     fi;
   --  t=t+1;НФА_ГРНФА[t]='102.00';
   --  t=t+1;НФА_ГРНФА[t]='103.01';
   --  t=t+1;НФА_ГРНФА[t]='103.02';
   --  t=t+1;НФА_ГРНФА[t]='103.03';
     t=t+1;НФА_ГРНФА[t]='105.01';
     t=t+1;НФА_ГРНФА[t]='105.02';
     t=t+1;НФА_ГРНФА[t]='105.03';
     t=t+1;НФА_ГРНФА[t]='105.04';
     t=t+1;НФА_ГРНФА[t]='105.05';
     t=t+1;НФА_ГРНФА[t]='105.06';
     t=t+1;НФА_ГРНФА[t]='105.07';
     if Вид_По_Умолчанию=4 or Вид_По_Умолчанию=5: --стандарт 106.01+106.04
       t=t+1;НФА_ГРНФА[t]='106.01';
       if Вид_По_Умолчанию=5: --стандарт 106+106.02=106.01+106.02+106.04
	  t=t+1;НФА_ГРНФА[t]='106.02';
       fi;
       t=t+1;НФА_ГРНФА[t]='106.04';
     fi;
   --  t=t+1;НФА_ГРНФА[t]='106.01';
   --  t=t+1;НФА_ГРНФА[t]='106.02';
   --  t=t+1;НФА_ГРНФА[t]='106.03';
   --  t=t+1;НФА_ГРНФА[t]='106.04';
   | Вид_По_Умолчанию=2 or Вид_По_Умолчанию=3: --стандарт 106.01+106.04
     t=t+1;НФА_ГРНФА[t]='106.01';
     if Вид_По_Умолчанию=3: --стандарт 106+106.02=106.01+106.02+106.04
	t=t+1;НФА_ГРНФА[t]='106.02';
     fi;
     t=t+1;НФА_ГРНФА[t]='106.04';
   | Вид_По_Умолчанию=6:
     t=t+1;НФА_ГРНФА[t]='101.01';
     t=t+1;НФА_ГРНФА[t]='101.02';
     t=t+1;НФА_ГРНФА[t]='101.03';
     t=t+1;НФА_ГРНФА[t]='101.04';
     t=t+1;НФА_ГРНФА[t]='101.05';
     t=t+1;НФА_ГРНФА[t]='101.06';
     t=t+1;НФА_ГРНФА[t]='101.07';
     t=t+1;НФА_ГРНФА[t]='101.08';
--     t=t+1;НФА_ГРНФА[t]='101.09';
     t=t+1;НФА_ГРНФА[t]='102.00';
     t=t+1;НФА_ГРНФА[t]='103.01';
     t=t+1;НФА_ГРНФА[t]='103.02';
     t=t+1;НФА_ГРНФА[t]='103.03';
     t=t+1;НФА_ГРНФА[t]='105.01';
     t=t+1;НФА_ГРНФА[t]='105.02';
     t=t+1;НФА_ГРНФА[t]='105.03';
     t=t+1;НФА_ГРНФА[t]='105.04';
     t=t+1;НФА_ГРНФА[t]='105.05';
     t=t+1;НФА_ГРНФА[t]='105.06';
     t=t+1;НФА_ГРНФА[t]='105.07';
     t=t+1;НФА_ГРНФА[t]='106.01';
     t=t+1;НФА_ГРНФА[t]='106.02';
     t=t+1;НФА_ГРНФА[t]='106.03';
     t=t+1;НФА_ГРНФА[t]='106.04';

  fi;
end;


proc ВосстановитьНастройкиПоУмолчанию(Вид_По_Умолчанию:i);
  НФА_ГРНФА_set_ini_3(Вид_По_Умолчанию);
end;
proc ВосстановитьНастройкиПоУмолчанию_ВедомостьАмортизации(Усл:s);
  Усл=up(trim(Усл));
  if pos('УСЛПД_106_0'	,Усл)>0 or Усл='':УСЛПД_106_0  ="ВД.ПД*|ВД.2*";       fi;
  if pos('УСЛСПР_0'	,Усл)>0 or Усл='':УСЛСПР_0     ="МОЛ|М|ВД|РБС|ПГР|КТ";fi;
  if pos('УСЛНЕТАМОРТ_0',Усл)>0 or Усл='':УСЛНЕТАМОРТ_0="";		      fi;
  if pos('МЕТОДАМОРТ_0' ,Усл)>0 or Усл='':МетодАморт_0=1;		      fi;
  if pos('ТОЛЬКОНОРМАИЗКАРТОЧКИНФА_101_08' ,Усл)>0 or Усл='':ТолькоНормаИзКарточкиНФА_101_08=true;fi;-- false для арх
  if pos('ЛИНЕЙНО_ПРИ_ДЭКСПЛ_ДО2007' ,Усл)>0 or Усл='':линейно_при_дэкспл_до2007=true;		  fi;-- false для арх
end;
proc user_scheme_ini;
  db_crd_ini=ИмяБазы(crd_ini);
--  user='ИмяПользователя';
--  scheme='ИмяСхемы';
  user=ИмяПользователя(db_crd_ini);
  scheme=ИмяСхемы(db_crd_ini);
end;

proc set_current_ini;
  var user1,scheme1:s;
  if current_ini:exit;fi;
  user_scheme_ini;user1=user;scheme1=scheme;
  vervar=1;-- уровень конечного пользователя по его схеме
  if user='':vervar=0;
   | true:ReadVarFromCardFile(crd_ini,false,'РАБ.НФА.INI_SETUP','РАБ.НФА.INI_SETUP',1.1.100,1.1.100,verbln,vervar,user1,scheme1);user_scheme_ini;user1=user;scheme1=scheme;
  fi;
  if vervar=0:
     vervar=2;user1='';
  -- отсутствуют настройки конечного уровня пользователя по его схеме, пытаемся загрузить настройки
  -- более общего вида по схеме без учета пользователя
     if scheme='':vervar=0;
      | true:ReadVarFromCardFile(crd_ini,false,'РАБ.НФА.INI_SETUP','РАБ.НФА.INI_SETUP',1.1.100,1.1.100,verbln,vervar,user1,scheme1);user_scheme_ini;user1=user;scheme1=scheme;
     fi;
     if vervar=0:
	vervar=3;user1='';scheme1='';
     -- отсутствуют настройки по схеме, пытаемся загрузить настройки общие настройки
	ReadVarFromCardFile(crd_ini,false,'РАБ.НФА.INI_SETUP','РАБ.НФА.INI_SETUP',1.1.100,1.1.100,verbln,vervar,user1,scheme1);user_scheme_ini;user1=user;scheme1=scheme;
	if vervar=0:-- нет сохраненных настроек, инициализируем настройки по умолчанию и сохраняем vervar=3
--	     vervar=3;
	   user_scheme_ini;user1=user;scheme1=scheme;
	   ВосстановитьНастройкиПоУмолчанию(0);Усл_set_ini;ВосстановитьНастройкиПоУмолчанию_ВедомостьАмортизации('');
	   --WriteVarToCardFile(crd_ini,false,'','',1.1.100,1.1.100,verbln,vervar,user,scheme);
	fi;
     fi;
  fi;
  current_ini=true;
end;

func ВзятьУсловиеВыборНФА_Аналитика(Усл:s):s;
 var t,p:i;
 var ss,zv:s;
 var ll:l;
 if pos('ГРНФА',Усл)>0:zv='.';
  | true:zv='*';
 fi;
 if not current_ini:set_current_ini;fi;
 p=LengthOfArray(РАБ.НФА.INI_SETUP.НФА_ГРНФА);
-- if p>0:ss='НФА.'+НФА_ГРНФА[t]+'*';fi;
 if Усл='':
    for t=1..p do
      ll=false;
      if Усл1 and (pos('105.',НФА_ГРНФА[t])>0 or pos('106.04',НФА_ГРНФА[t])>0) or pos('108.06',НФА_ГРНФА[t])>0:ll=true;
       | Усл2 and (pos('101.',НФА_ГРНФА[t])>0 or pos('106.01',НФА_ГРНФА[t])>0):ll=true;
       | Усл3 and (pos('102.',НФА_ГРНФА[t])>0 or pos('106.02',НФА_ГРНФА[t])>0 or pos('103.',НФА_ГРНФА[t])>0):ll=true;
      fi;
      if ll:ss=ab('НФА.'+НФА_ГРНФА[t]+zv,'|',ss);fi;
    od;
  | true:
    for t=1..p do
      ll=false;
      if pos('1',Усл)>0 and (pos('105.',НФА_ГРНФА[t])>0 or pos('106.04',НФА_ГРНФА[t])>0) or pos('108.06',НФА_ГРНФА[t])>0:ll=true;
       | pos('2',Усл)>0 and (pos('101.',НФА_ГРНФА[t])>0 or pos('106.01',НФА_ГРНФА[t])>0):ll=true;
       | pos('3',Усл)>0 and (pos('102.',НФА_ГРНФА[t])>0 or pos('103.',НФА_ГРНФА[t])>0 or pos('106.02',НФА_ГРНФА[t])>0):ll=true;
      fi;
      if ll:ss=ab('НФА.'+НФА_ГРНФА[t]+zv,'|',ss);fi;
    od;
 fi;
 ^ss;
end;
func ВзятьРазрешенныйСписокСчетов:s;
 var t,p:i;
 var ss:s;
 if not current_ini:set_current_ini;fi;
 p=LengthOfArray(РАБ.НФА.INI_SETUP.НФА_ГРНФА);
 for t=1..p do
   ss=ab(НФА_ГРНФА[t],'|',ss);
 od;
 ^ss;
end;
func ВзятьСписокСчетовНеОбновлять:s;
 var t,p:i;
 var ss:s;
 if not current_ini:set_current_ini;fi;
 p=LengthOfArray(РАБ.НФА.INI_SETUP.НФА_ГРНФА_НЕ_ОБНОВЛЕНИЕ);
 for t=1..p do
   ss=ab(НФА_ГРНФА_НЕ_ОБНОВЛЕНИЕ[t],'|',ss);
 od;
 ^ss;
end;

func ВзятьУсловиеВыборНФА_КАРТ(Усл:s):s;
 var t,p:i;
 var ss:s;
 var ll:l;
 if not current_ini:set_current_ini;fi;
 p=LengthOfArray(РАБ.НФА.INI_SETUP.НФА_ГРНФА);
 if Усл='':
    for t=1..p do
      ll=false;
      if Усл1 and (pos('105.',НФА_ГРНФА[t])>0 or pos('106.04',НФА_ГРНФА[t])>0 or pos('108.06',НФА_ГРНФА[t])>0):ll=true;
       | Усл2 and (pos('101.',НФА_ГРНФА[t])>0 or pos('106.01',НФА_ГРНФА[t])>0):ll=true;
       | Усл3 and (pos('102.',НФА_ГРНФА[t])>0 or pos('103.',НФА_ГРНФА[t])>0 or pos('106.02',НФА_ГРНФА[t])>0):ll=true;
      fi;
      if ll:ss=ab(НФА_ГРНФА[t],'|',ss);fi;
    od;
  | true:
    for t=1..p do
      ll=false;
      if pos('1',Усл)>0 and (pos('105.',НФА_ГРНФА[t])>0 or pos('106.04',НФА_ГРНФА[t])>0 or pos('108.06',НФА_ГРНФА[t])>0):ll=true;
       | pos('2',Усл)>0 and (pos('101.',НФА_ГРНФА[t])>0 or pos('106.01',НФА_ГРНФА[t])>0):ll=true;
       | pos('3',Усл)>0 and (pos('102.',НФА_ГРНФА[t])>0 or pos('103.',НФА_ГРНФА[t])>0 or pos('106.02',НФА_ГРНФА[t])>0):ll=true;
      fi;
      if ll:ss=ab(НФА_ГРНФА[t],'|',ss);fi;
    od;
 fi;

 ^'РПО_НФА#pos(ГРНФА,"'+ss+'")>0#НФА.*';
end;

НФА_101:l;-- разрешена работа с основными средствами
НФА_102:l;-- разрешена работа с нематериальными активами
НФА_103:l;-- разрешена работа с непроизведенными активами
НФА_105:l;-- разрешена работа с материалами
НФА_106:l;-- разрешена работа с капвложениями(учет непринятого к учету иммущества)

Конец
