-- Шаблон создан мастером бланков
-- 05.01.2005 18:06:15
--
БланкСШаблоном "Добавление новых счетов бюджетного (бухгалтерского) учета";

var Упр:I;

СущСчет:L;

var МаскаБК:S="ФКР.*|КИФД.*|КД.*";

var ПС:I;
var ПС_:S=if(ПС=1:"План счетов бюджетного учреждения (переходный период) (Инструкция 162н)"
            |ПС=2:"План счетов казенного учреждения (Инструкция 162н)"
            |ПС=3:"План счетов бюджетного учреждения (Инструкция 174н)"
            |ПС=4:"План счетов автономного учреждения (Инструкция 183н)"
            |ПС=5:"План счетов финансового органа (Инструкция 162н)"
            |ПС=6:"Объединенный план счетов КУ+ФО (Инструкция 162н)"
            |True:"");

var ffПС:S=if(ПС=1:"Pos('КУ',S04)>0"
             |ПС=2:"Pos('КУ',S04)>0"
             |ПС=3:"Pos('БУ',S04)>0"
             |ПС=4:"Pos('АУ',S04)>0"
             |ПС=5:"Pos('ФО',S04)>0"
             |ПС=6:"(Pos('ФО',S04)>0 or Pos('КУ',S04)>0)"
             |True:"");

БК:S;
ЭК:S;
ВД:S=["1"];
Синт:S;
Ан:S;
КОСГУ:S;

var ВД_:S=if(ВД="","?",ВД);
var Синт_:S=if(Синт="","???",Синт);
var Ан_:S=if(Ан="","??",Ан);
var КОСГУ_:S=if(КОСГУ="","???",КОСГУ);

var пп[]:I=$;
var СчВст[]:L;
var СчВст_[]:S=if(СчВст[$],"V","X");
var Сч[]:S;
var СчБалСтр[]:S;
var СчНаим[]:S;
var Статус[]:L;
var Статус_[]:S=if(Статус[$],"Счет может быть добавлен","Счет уже существует. Добавление невозможно");
var Key[]:S;

var Buf[]:S;
var BufCode[]:S;

var ОтклКонтрольВД:L;
cbОтклКонтрольВД: Object;


var Искл101      :L;
var Искл104      :L;
var Искл105      :L;
var Искл106      :L;
var ИсклЛизинг   :L=[True];
var ИсклВПути    :L=[True];
var ИсклИмущКазны:L=[True];
var ИсклЗатраты  :L=[True];
var Искл201_35   :L;
var Искл208      :L;
var Искл210_03   :L;
var Искл303      :L;
var Искл304_02   :L;
var ИсклПлан     :L=[True];
var ИсклАссигн   :L=[True];
var ИсклГРБС     :L=[True];
var ИсклРБС      :L=[if(ПС=3 or ПС=4,True,False)];

cbИскл101      :Object;
cbИскл104      :Object;
cbИскл105      :Object;
cbИскл106      :Object;
cbИсклЛизинг   :Object;
cbИсклВПути    :Object;
cbИсклИмущКазны:Object;
cbИсклЗатраты  :Object;
cbИскл201_35   :Object;
cbИскл208      :Object;
cbИскл210_03   :Object;
cbИскл303      :Object;
cbИскл304_02   :Object;
cbИсклПлан     :Object;
cbИсклАссигн   :Object;
cbИсклГРБС     :Object;
cbИсклРБС      :Object;

var ffОбщ:S="Name_Voc='СЧ'";

var НастрGUID:S;
--
--Процедуры и функции -------------
Func ВзятьТипКБК(v1:S; v2:s):S;
 if ПС=3 or ПС=4:
    if Match(v1,"???.????.???????.???"):            ^"КРБ";
      |Match(v1,"???.?.??.?????.??.????"):          ^"КДБ";
      |Match(v1,"???.??.??.??.??.??.????"):         ^"КИФ";
    fi;
   else
    if Match(v1+"."+v2,"???.0000.0000000.000.000"): ^"КРZ";
      |Match(v1,"???.0000.0000000.000") and ВД="1": ^"КРZ";
      |Match(v1,"???.0000.0000000.000") and ВД="3": ^"КРZ";
      |Match(v1,"???.????.???????.???"):            ^"КРБ";
      |Match(v1,"???.0.00.00000.00.0000"):          ^"КДZ";
      |Match(v1,"???.?.??.?????.??.????"):          ^"КДБ";
      |Match(v1,"???.00.00.00.00.00.0000"):         ^"КИZ";
      |Match(v1,"???.??.??.??.??.??.????"):         ^"КИФ";
    fi;
 fi;
end;

Func ВзятьНаимКБК(v1:S; v2:s):S;
 if Match(v1+"."+v2,"???.0000.0000000.000.000"): ^"Код главы";
   |Match(v1,"???.0000.0000000.000") and ВД="1": ^"Код главы";
   |Match(v1,"???.0000.0000000.000") and ВД="3": ^"Код главы";
   |Match(v1,"???.????.???????.???"):            ^"Классификация расходов бюджета";
   |Match(v1,"???.0.00.00000.00.0000"):          ^"Код главы";
   |Match(v1,"???.?.??.?????.??.????"):          ^"Классификация доходов бюджета";
   |Match(v1,"???.00.00.00.00.00.0000"):         ^"Код главы";
   |Match(v1,"???.??.??.??.??.??.????"):         ^"Классификация источников дефицита";
 fi;
 ^"";
end;

var НаимКБК:S=ВзятьНаимКБК(БК,ЭК);
var ТипКБК:S=ВзятьТипКБК(БК,ЭК);

Proc Оформление;
var Flag:L;
 Flag=not ЭК="" or Синт_="???";
 cbИскл101.Enabled=Flag;
 cbИскл104.Enabled=Flag;
 cbИскл105.Enabled=Flag;
 cbИскл106.Enabled=Flag;
 cbИсклЛизинг.Enabled=Flag;
 cbИсклИмущКазны.Enabled=Flag;
 cbИсклЗатраты.Enabled=Flag;
 cbИскл201_35.Enabled=Flag;
 cbИскл208.Enabled=Flag;
 cbИскл210_03.Enabled=Flag;
 cbИскл303.Enabled=Flag;
 cbИсклВПути.Enabled=Flag;
 cbИскл304_02.Enabled=Flag;
 cbИсклПлан.Enabled=Flag;
 cbИсклАссигн.Enabled=Flag;
 cbИсклГРБС.Enabled=Flag;
 cbИсклРБС.Enabled=Flag;
end;

Proc Настр(aСохр:L);
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("КОНСТРУКТОР_СЧЕТОВ",0,0,"",НастрGUID):
    Раб.Настр.Добавить("Искл101","L");
    Раб.Настр.Добавить("Искл104","L");
    Раб.Настр.Добавить("Искл105","L");
    Раб.Настр.Добавить("Искл106","L");
    Раб.Настр.Добавить("ИсклЛизинг","L");
    Раб.Настр.Добавить("ИсклВПути","L");
    Раб.Настр.Добавить("ИсклИмущКазны","L");
    Раб.Настр.Добавить("ИсклЗатраты","L");
    Раб.Настр.Добавить("Искл201_35","L");
    Раб.Настр.Добавить("Искл208","L");
    Раб.Настр.Добавить("Искл210_03","L");
    Раб.Настр.Добавить("Искл303","L");
    Раб.Настр.Добавить("Искл304_02","L");
    Раб.Настр.Добавить("ИсклПлан","L");
    Раб.Настр.Добавить("ИсклАссигн","L");
    Раб.Настр.Добавить("ИсклГРБС","L");
    Раб.Настр.Добавить("ИсклРБС","L");
    Раб.Настр.Добавить("ПС","I");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else
       НастрGUID=Раб.Настр.Загрузить("","");
    fi;
 fi;
end;

Func ЭКвКОСГУ(vЭК:S):S;
var z:i;
 z=Int(vЭК);
 if z<300: ^""; fi;
 ^Str(z+100);
end;

Func ПолучитьФильтр(aОбщ:S; aПС:S; aЭК:S; aТипКБК:S; aВД:S; aКодСч:S):S;
var F:S;
var tmp:S;
 F=Раб.Бюджет2005.Объединить(aОбщ,aПС," and ");
 tmp="";
 if ОтклКонтрольВД:
    if not aТипКБК="":
       tmp="(Pos('"+aТипКБК+"',S01)>0 or Pos('"+aТипКБК+"',S02)>0)";
    fi;
   else
    if aТипКБК="":
       tmp="(Pos('"+aВД+"',S01)>0 or Pos('"+aВД+"',S02)>0)";
      else
       tmp="((Pos('"+aВД+"',S01)>0 and Pos('"+aТипКБК+"',S01)>0) or (Pos('"+aВД+"',S02)>0 and Pos('"+aТипКБК+"',S02)>0))";
    fi;
 fi;
 F=Раб.Бюджет2005.Объединить(F,tmp," and ");
 tmp="";
 if not aЭК="":
    tmp=ЭКвКОСГУ(aЭК);
    if tmp="":
       tmp="(Pos('."+aЭК+"',CODE)>0 or Pos('"+aЭК+"',S03)>0 or S03='000')";
      else
       tmp="(Pos('."+aЭК+"',CODE)>0 or Pos('."+tmp+"',CODE)>0 or Pos('"+aЭК+"',S03)>0 or S03='000')";
    fi;
 fi;
 F=Раб.Бюджет2005.Объединить(F,tmp," and ");
 if not aКодСч="":
    F=Раб.Бюджет2005.Объединить(F,"Match(Code,'"+aКодСч+"')"," and ");
 fi;
 ^F;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(СчВст);
 ClearVariable(Сч);
 ClearVariable(СчБалСтр);
 ClearVariable(СчНаим);
 ClearVariable(Статус);
 ClearVariable(Key);
end;

Func ПолучитьМаскуБК:S;
var OWA,n,nr,w,ww:i;
var tmp,wrd,ret:S;
 Ret="";
 ClearVariable(Buf);
 OWA=OpenWorkArea("РПО_Бюдж_Класс","Name_Voc;Code",ffОбщ+" and Match(Code,'"+Синт_+"."+Ан_+"."+КОСГУ_+"')");
 Try
  Nr=Records(OWA);
  for n=1..Nr do
   tmp=Раб.Бюджет2005.Объединить(GetFieldS(OWA,n,"S01"),GetFieldS(OWA,n,"S02"),",");
   ww=WordsCount(tmp,",");
   for w=1..ww do
    wrd=ExtractWord(w,tmp,",");
    if not Length(wrd)=1:
       if wrd="КРБ":  wrd="ФКР.*"+if(ВД="1","&~ФКР.???.0000.0000000.000","");
         |wrd="КРZ":  wrd="ФКР.???.0000.0000000.000";
         |wrd="КДБ":  wrd="КД.*&~КД.???.0.00.00000.00.0000";
         |wrd="КДZ":  wrd="КД.???.0.00.00000.00.0000";
         |wrd="КИФ":  wrd="КИФД.*&~КИФД.???.00.00.00.00.00.0000";
         |wrd="КИZ":  wrd="КИФД.???.00.00.00.00.00.0000";
         |True      : wrd="";
       fi;
       if not wrd="":
          if SearchInArray(Buf,wrd,true)=-1: InsertInArraySort(Buf,wrd); Ret=Ret+"|"+wrd; fi;
       fi;
    fi;
   od;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 ^SubStr(Ret,2,255);
end;

Func СписокБКСч(OWA:I):S;
var n,nr,w,ww,z:i;
var tmp,wrd,ret:S;
 Ret="";
 ClearVariable(Buf);
 Nr=Records(OWA);
 for n=1..nr do
  tmp=Раб.Бюджет2005.Объединить(GetFieldS(OWA,n,"S01"),GetFieldS(OWA,n,"S02"),",");
  ww=WordsCount(tmp,",");
  for w=1..ww do
   wrd=ExtractWord(w,tmp,",");
   if Length(wrd)>1:
      z=SearchInArray(Buf,wrd);
      if z=-1: InsertInArray(Buf,1,wrd); Ret=Ret+","+wrd; fi;
   fi;
  od;
 od;
 ^SubStr(Ret,2,255);
end;

Func ВыборКодСч (Mode:S):S;
var OWA,nr,n,z,p1,p2:i;
var tmp,F,Head,Ret,txt:S;
var ТипКБК_:S;
 ClearVariable(Buf);
 ClearVariable(BufCode);
 if ВД_="3" and ТипКБК="КРБ": ТипКБК_="КРZ"; else ТипКБК_=ТипКБК; fi;
 if Mode="ВД_": 
    F=ffОбщ+" and Match(Code,'?')";
    Head="Выбор вида финансового обеспечения (деятельности)";
    p1=1; p2=1;
    Ret=ВД;
   |Mode="Синт_": 
    F=ПолучитьФильтр(ffОбщ,ffПС,"",ТипКБК_,ВД_,"???.??."+КОСГУ_);
    Head="Выбор кода синтетическго учета";
    p1=1; p2=3;
    Ret=Синт;
   |Mode="Ан_": 
    F=ПолучитьФильтр(ffОбщ,ffПС,"",ТипКБК_,ВД_,Синт_+".??."+КОСГУ_);
    Head="Выбор кода аналитического учета";
    p1=5; p2=2;
    Ret=Ан;
   |Mode="КОСГУ_": 
    F=ПолучитьФильтр(ffОбщ,ffПС,"",ТипКБК_,ВД_,Синт_+"."+Ан_+".???");
    Head="Выбор КОСГУ";
    p1=8; p2=35;
   |True: ^"";
 fi;
 OWA=OpenWorkArea("РПО_Бюдж_Класс","Name_Voc;Code",F);
 Try
  Nr=Records(OWA);
  if Nr=0: 
     SetFilter(OWA,ПолучитьФильтр(ffОбщ,ffПС,"","",ВД_,Синт_+"."+Ан_+"."+КОСГУ_));
     Nr=Records(OWA);
     if Nr=0:
        Message("Выполните обновление справочников и повторите выбор",mtError);
        OpenBlank("Раб.Вспом.Импорт_Справ",True);
       else
        txt=СписокБКСч(OWA);
        Message("Не найдено соответствие кода счета бюджетного учета "+ВД_+"."+Синт_+"."+Ан_+"."+КОСГУ_+" коду бюджетной классификации "+ТипКБК_+" "+БК+"^MДопустимая классификация кода счета "+ВД_+"."+Синт_+"."+Ан_+"."+КОСГУ_+" ("+Txt+")",mtWarning);
     fi;
     ^""; 
  fi;
  for n=1..Nr do
   tmp=SubStr(GetFieldS(OWA,n,"CODE"),p1,p2);
   z=SearchInArray(BufCode,tmp,true);
   if z=-1:
      z=InsertInArraySort(BufCode,tmp);
      if Mode="Синт_": Txt=Раб.Бюджет.НаимКБК("СЧ",tmp);
        |Mode="Ан_": Txt=Раб.Бюджет.НаимКБК("СЧ",Синт_+"."+tmp);
        |Mode="КОСГУ_" and Синт="???" and Ан="??": Txt=Раб.Бюджет.НаимКБК("КОСГУ2006",tmp);
        |True: Txt=GetFieldS(OWA,n,"Txt");
      fi;
     InsertInArray(Buf,z,tmp+" --"+Txt);
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 n=Alternate(Head,Buf,-1,SearchInArray(BufCode,Ret,True),12);
 if n=0: ^""; fi;
 Ret=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 ^Ret;
end;

Func Проверить:L;
 if ВД="": Message("Выберите вид деятельности",mtError); Template.Field="ВД_"; ^False; fi;
 ^True;
end;

Func СоотвКод(vКод:S):L;
var OWA:I;
var F,tmp:S;
 if vКод="Синт": tmp=Синт_+".??.???";
   |vКод="Ан":   tmp=Синт_+"."+Ан_+".???";
   |vКод="КОСГУ":tmp=Синт_+"."+Ан_+"."+КОСГУ_;
 fi;
 F=ПолучитьФильтр(ffОбщ,ffПС,"",ТипКБК,ВД_,tmp);
 OWA=OpenWorkArea("РПО_Бюдж_Класс","Name_Voc;Code",F);
 Try
  ^not Records(OWA)=0;
 Finally
  CloseWorkArea(OWA);
 end;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func ПС_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="План счетов бюджетного учреждения (переходный период) (Инструкция 162н)";
 Buf[2]="План счетов казенного учреждения (Инструкция 162н)";
 Buf[3]="План счетов бюджетного учреждения (Инструкция 174н)";
 Buf[4]="План счетов автономного учреждения (Инструкция 183н)";
 Buf[5]="План счетов финансового органа (Инструкция 162н)";
-- Buf[6]="План счетов органа осуществляющего кассовое обслуживание";
 Buf[6]="Объединенный план счетов КУ+ФО (Инструкция 162н)";
 n=Alternate("Выберите план счетов",Buf,-1,ПС,12);
 if n=0: ^False; fi;
 ВД="";
 Синт="";
 Ан="";
 КОСГУ="";
 ПС=n;
 Очистить;
 Return False;
end;

Proc Field_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ВД_": ВД="";
   |FieldName="Синт_": Синт=""; Ан=""; КОСГУ="";
   |FieldName="Ан_":  Ан="";
   |FieldName="КОСГУ_": КОСГУ="";
 fi;
end;

Func БК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 if ВД="": Message("Выберите вид деятельности",mtError); Template.Field="ВД_"; ^False; fi;
 if Синт_="???" and Ан_="??" and КОСГУ_="???":
    tmp=AnaElection(МаскаБК,False,True);
   else
    tmp=ПолучитьМаскуБК;
    tmp=AnaElection(tmp,False,True);
 fi;
 if not tmp="":
    if SubStr(tmp,Length(tmp),1)=".": tmp=SubStr(tmp,1,Length(tmp)-1); fi;
    if Match(tmp,"ФКР"): БК="???.????.???????.???";
      |Match(tmp,"ФКР.???"): БК=SubStr(tmp,5,255)+".????.???????.???";
      |Match(tmp,"ФКР.???.????"): БК=SubStr(tmp,5,255)+".???????.???";
      |Match(tmp,"ФКР.???.????.???????"): БК=SubStr(tmp,5,255)+".???";
      |Match(tmp,"ФКР.???.????.???????.???"): БК=SubStr(tmp,5,255);
      |Match(tmp,"КД"): БК="???.?.??.?????.??.????";
      |Match(tmp,"КД.???"): БК=SubStr(tmp,4,255)+".?.??.?????.??.????";
      |Match(tmp,"КД.???.?"): БК=SubStr(tmp,4,255)+".??.?????.??.????";
      |Match(tmp,"КД.???.?.??"): БК=SubStr(tmp,4,255)+".?????.??.????";
      |Match(tmp,"КД.???.?.??.?????"): БК=SubStr(tmp,4,255)+".??.????";
      |Match(tmp,"КД.???.?.??.?????.??"): БК=SubStr(tmp,4,255)+".????";
      |Match(tmp,"КД.???.?.??.?????.??.????"): БК=SubStr(tmp,4,255);
      |Match(tmp,"КИФД"): БК="???.??.??.??.??.??.????";
      |Match(tmp,"КИФД.???"): БК=SubStr(tmp,6,255)+".??.??.??.??.??.????";
      |Match(tmp,"КИФД.???.??"): БК=SubStr(tmp,6,255)+".??.??.??.??.????";
      |Match(tmp,"КИФД.???.??.??"): БК=SubStr(tmp,6,255)+".??.??.??.????";
      |Match(tmp,"КИФД.???.??.??.??"): БК=SubStr(tmp,6,255)+".??.??.????";
      |Match(tmp,"КИФД.???.??.??.??.??"): БК=SubStr(tmp,6,255)+".??.????";
      |Match(tmp,"КИФД.???.??.??.??.??.??"): БК=SubStr(tmp,6,255)+".????";
      |Match(tmp,"КИФД.???.??.??.??.??.??.????"): БК=SubStr(tmp,6,255);
      |True: Message("Недопустимый формат признака БК",mtError); ^False;
    fi;
 fi;
end;

Proc БК_OnExit(FieldName: String; Iter: Integer);
 ЭК="";
end;

Func ЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if БК="": Message("Введите бюджетную классификацию",mtError); Template.Field="БК"; ^False; fi;
 if ТипКБК="КРБ": tmp=Раб.Бюджет2005.МаскаРасхКОСГУ+"|КОСГУ.000";
   |ТипКБК="КДБ": tmp=Раб.Бюджет2005.МаскаДоходКОСГУ+"|КОСГУ.000";
   |ТипКБК="КИФ": tmp=Раб.Бюджет2005.МаскаДефицитКОСГУ+"|КОСГУ.000";
   |True:         tmp="КОСГУ.000!";
 fi;
 tmp=AnaElection(tmp);
 if not tmp="":
    ЭК=SubStr(tmp,Pos(".",tmp)+1,3);
    Синт="";
    Ан="";
    КОСГУ="";
 fi;
 Оформление;
 Return False;
end;

Proc ЭК_OnExit(FieldName: String; Iter: Integer);
 Оформление;
end;

Func КодСч_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if ПС=0: Message("Выберите тип плана счетов",mtError); Template.Field="ПС_"; ^False; fi;
 if not ЭК="" and not FieldName="ВД_": Message("Выбор данного параметра невозможен, т.к. указан КОСГУ",mtWarning); Template.Field="ЭК"; ^False; fi;
 if not FieldName="ВД_" and ВД_="?": Message("Введите вид деятельности",mtError); Template.Field="ВД_"; ^False; fi;
 if FieldName="Ан_" and Синт_="???": Message("Введите код синтетического счета",mtError); Template.Field="Синт_"; ^False; fi;
 tmp=ВыборКодСч(FieldName);
 if tmp="": ^False; fi;
 if FieldName="ВД_": 
    ВД=tmp; 
    if not Синт="": if not СоотвКод("Синт"): Синт=""; Ан=""; КОСГУ=""; fi; fi;
    if not Ан="": if not СоотвКод("Ан"): Ан=""; КОСГУ=""; fi; fi;
    if not КОСГУ="": if not СоотвКод("КОСГУ"): КОСГУ=""; fi; fi;
   |FieldName="Синт_": 
    Синт=tmp; 
    if not Ан="": if not СоотвКод("Ан"): Ан=""; КОСГУ=""; fi; fi;
    if not КОСГУ="": if not СоотвКод("КОСГУ"): КОСГУ=""; fi; fi;
   |FieldName="Ан_": 
    Ан=tmp; 
    if not КОСГУ_="???": if not СоотвКод("КОСГУ"): КОСГУ=""; fi; fi;
   |FieldName="КОСГУ_": 
    КОСГУ=tmp;
 fi;
 ^False;
end;

Func СчВст_OnEnter(FieldName: String; Iter: Integer): logical;
 if Статус[Iter]=False: Message("Выбранный счет уже существует в плане счетов.^MПовторное добавление невозможно",mtError); ^False; fi;
 if СчВст[Iter]: СчВст[Iter]=False; else СчВст[Iter]=True; fi;
 ^False;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnОчистить_OnClick(Sender: String);
 Очистить;
end;

Proc btnЗаполнить_OnClick(Sender: String);
var F,Sgn,Mask,tmp,txt,Сч_,КодСч:S;
var OWA,n,nr,p,z,s,ss:i;
var Flag:L;
 if ПС=0: Message("Выберите тип плана счетов",mtError); Template.Field="ПС_"; Exit; fi;
 if БК="": Message("Введите БК счета",mtError); Template.Field="БК"; Exit; fi;
 if ЭК="" and Синт_="???":  Message("Введите КОСГУ КБК или синтетический счет",mtError); Template.Field="ЭК"; Exit; fi;
 if Проверить=False: Exit; fi;
 if ПС=3 or ПС=4:
    if ТипКБК="КРБ" or ТипКБК="КРZ": Mask="ФКР."+БК;
      |ТипКБК="КДБ" or ТипКБК="КДZ": Mask="КД."+БК;
      |ТипКБК="КИФ" or ТипКБК="КИZ": Mask="КИФД."+БК;
      |True        :  Exit;
    fi;
   else
    if ТипКБК="КРБ":  Mask="ФКР."+БК+if(ВД="1","&~ФКР.???.0000.0000000.000","");
      |ТипКБК="КРZ":  Mask="ФКР."+БК;
      |ТипКБК="КДБ":  Mask="КД."+БК+"&~КД.???.0.00.00000.00.0000";
      |ТипКБК="КДZ":  Mask="КД."+БК;
      |ТипКБК="КИФ":  Mask="КИФД."+БК+"&~КИФД.???.00.00.00.00.00.0000";
      |ТипКБК="КИZ":  Mask="КИФД."+БК;
      |True        :  Exit;
    fi;
 fi;
 F=ПолучитьФильтр(ffОбщ,ffПС,ЭК,ТипКБК,ВД_,if(ЭК="",Синт_+"."+Ан_+"."+КОСГУ_,""));
 OWA=OpenWorkArea("РПО_Бюдж_Класс","Code",F);
 Try
  Nr=Records(OWA);
  if Nr=0: 
     SetFilter(OWA,ПолучитьФильтр(ffОбщ,ffПС,ЭК,"",ВД_,Синт_+"."+Ан_+"."+КОСГУ_));
     txt=СписокБКСч(OWA);
     Message("Не найдено соответствие кода счета бюджетного учета "+ВД_+"."+Синт_+"."+Ан_+"."+КОСГУ_+" коду бюджетной классификации "+ТипКБК+" "+БК+"^MДопустимая классификация кода счета "+ВД_+"."+Синт_+"."+Ан_+"."+КОСГУ_+" ("+Txt+")",mtWarning);     
     Exit;
  fi;
  ClearVariable(Buf);
  ss=0;
  if Sender="Вызов1": 
     ss=1;
     Buf[ss]="."+БК; --добавляем ведущию точку для порядку, будет удалена позже
    else
     for Sign Sgn=Mask, Sort do
      ss=ss+1;
      Buf[ss]=Sgn;
     od;
  fi;
  ShowProgress(Nr*ss,"Анализ плана счетов....");
  for s=1..ss do
   for n=1..Nr do
    p=p+1;
    ProgressPos(p);
    КодСч=GetFieldS(OWA,n,"CODE");
    tmp=SubStr(Buf[s],Pos(".",Buf[s])+1,255);
    Сч_=tmp+"."+ВД+"."+КодСч;
    if (Name_S(Сч_)<>" " and СущСчет) or (Name_S(Сч_)=" "):
       Flag=True;
       if Ан_="??":
          if Искл101: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"101.*"); fi;
          if Искл104 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"104.*"); fi;
          if Искл105 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"105.*"); fi;
          if Искл106 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"106.*"); fi;
          if ИсклЛизинг and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"101.4?.*|104.4?.*|105.4?.*|106.4?.*|107.4?.*"); fi;
          if ИсклВПути and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"107.*|201.13.*|201.23.*|202.12.*|202.22.*|202.32.*|203.20.*|501.?6.*|503.?6.*"); fi;
          if ИсклИмущКазны and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"104.5?.*|108.*"); fi;
          if ИсклЗатраты and Flag and ВД="1": Flag=not Раб.Бюджет2005.MatchMask(КодСч,"109.*"); fi;
          if Искл201_35 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"201.35.*"); fi;
          if Искл208 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"208.*"); fi;
          if Искл210_03 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"210.03.*"); fi;
          if Искл303 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"303.*"); fi;
          if Искл304_02 and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"304.02.*"); fi;
          if ИсклПлан and Flag:
             if Match(КодСч,"50?.*"):
                Flag=Раб.Бюджет2005.MatchMask(КодСч,"50?.1?.*");
             fi;
          fi;
          if ИсклАссигн and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"503.*"); fi;
          if ИсклГРБС and Flag and not (ПС=5 or ПС=6): Flag=not Раб.Бюджет2005.MatchMask(КодСч,"501.?1.*|503.?1.*"); fi;
          if ИсклРБС and Flag: Flag=not Раб.Бюджет2005.MatchMask(КодСч,"501.?2.*|503.?2.*|501.?4.*|503.?4.*"); fi;
       fi;
       if Flag:
          if SearchInArray(Key,Сч_,True)=-1:
             z=InsertInArraySort(Key,Сч_);
             InsertFrame(Упр,z);
             Сч[z]=Сч_;
             СчБалСтр[z]=GetFieldS(OWA,n,"S05");
             СчНаим[z]=GetFieldS(OWA,n,"Txt");
             if Name_S(Сч[z])=" ": Статус[z]=True; else Статус[z]=False; fi;
             СчВст[z]=Статус[z];
          fi;
       fi;
    fi; --if (Name_S(Сч_)<>" " and СущСчет) or (Name_S(Сч_)=" "):
   od; --for n=1..Nr do
  od; --for s=1..ss do
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

Proc btnДобавить_OnClick(Sender: String);
var Iter:i;
 if Упр=0: Message("Заполните таблицу счетов",mtWarning); Exit; fi;
 Раб.КСА.Начать;
 for Iter=1..Упр do
  Раб.КСА.ДобавитьСч(Сч[Iter],if(СчБалСтр[Iter]="!","ЗАБ","БАЛ"),True);
 od;
 Раб.КСА.Закончить(False);
 Очистить;
 Message("Добавление счетов завершено");
end;

Proc cbСущСчет_OnChange(Sender: String);
var n,z:i;
 if СущСчет: Exit; fi;
 n=1; z=0;
 Try
  ShowProgress(Упр,"Перестройка таблицы счетов....");
  While n<=Упр do
   z=z+1;
   ProgressPos(z);
   if Статус[Упр]=False: DeleteFrame(Упр,n); else n=n+1; fi;
  od;
 Finally
  CloseProgress;
 end;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;

Proc btnПомощь_OnClick(Sender: String);
 OpenBlank("ПОМОЩЬ.ДОБАВЛ_СЧЕТОВ");
end;

Proc cbОтклКонтрольВД_OnChange(Sender: String);
 if EnqOkCancel("Отключение контроля вида деятельности, может привести к формированию неправильного плана счетов.^MПродолжить ?",mtWarning)=cmCancel: ОтклКонтрольВД=False; cbОтклКонтрольВД.State=ОтклКонтрольВД; Exit; fi;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc Вызов1;
var n,nn:i;
var Учет:S;
 Очистить;
 ПС=Раб.Обмен.BufI1[1]; --Тип плана счетов
 if ПС=0:
    Учет=Trim(PlanVar("УЧЕТ"));
    ПС=if(Учет="162н":2|Учет="174н":3|Учет="183н":4|True:0);
 fi;
 ВД=Str(Раб.Обмен.BufI1[2]); Синт=""; Ан=""; КОСГУ=""; --Вид деятельности
 СущСчет=Раб.Обмен.BufI1[3]=1; --Показывать существующие счета
 ОтклКонтрольВД=Раб.Обмен.BufI1[4]=1; --Отключить контроль вида деятельности
 nn=LengthOfArray(Раб.Обмен.BufS1);
 for n=1..nn do
  БК=ExtractWord(2,Раб.Обмен.BufS1[n]," ");
  ЭК=ExtractWord(3,Раб.Обмен.BufS1[n]," ");
  btnЗаполнить_OnClick("Вызов1");
 od;
 if Упр>0: btnДобавить_OnClick("Вызов1"); fi;
 Раб.Обмен.AnswerL=True;
end;

Proc OnOpen(Create: Logical);
var Учет:S;
 Настр(False);
 if ПС=0:
    Учет=Trim(PlanVar("УЧЕТ"));
    ПС=if(Учет="162н":2|Учет="174н":3|Учет="183н":4|True:0);
 fi;
 if Раб.Обмен.Recipient="КОНСТРУКТОР_СЧЕТОВ":
    if Раб.Обмен.Sender="ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД" or Раб.Обмен.Sender="ДОКУМЕНТЫ.ЛБО.РР_ВХ" or Раб.Обмен.Sender="Раб.КБК": Вызов1; fi;
    Close;
 fi;
 ОтклКонтрольВД=False;
 Оформление;
end;

Proc Template_onClose(Destroy: Logical);
 Очистить;
 Настр(True);
end;
--Обработчики событий шаблона -----
--


Конец