-- Шаблон создан мастером бланков
-- 26.11.2007 15:36:13
--
БланкСШаблоном "Создание аналитических признаков КБК";

fФайлРП:L;
fУжеСущ:L;

var YYYY:S="2006";

var Path:S;

var ЗагрузКР:S="Загрузить";
var СохрКР:S="Сохранить";
var ОчистКР:S="Очистить";

var A:S="+";
var D:S="-";
var A_:S="+";
var D_:S="-";

var УпрКР: I;
var ППП[]:S;
var ПППНаим[]:S;
var fППП[]:L;
var ФКР[]:S;
var КЦСР[]:S;
var КВР[]:S;
var ЭКР[]:S;
var Key[]:S=ППП[$]+"."+ФКР[$]+"."+КЦСР[$]+"."+КВР[$]+"."+ЭКР[$];

var hППП:Record;
var hФКР:Record;
var hКЦСР:Record;
var hКВР:Record;
var hЭКР:Record;

var ПППФед:S="Из перечня прямых получателей фед. бюджета";

var vocКР:S="ФКР";
var vocКД:S="КД";
var vocКИФД:S="КИФД";

var nameКР:S="Классификация расходов";
var nameКД:S="Классификация доходов";
var nameКИФД:S="Классификация источников финансирования дефицитов бюджетов";

var Buf[]:S;
var Buf2[]:S;
var Val1[]:S;
var Val2[]:S;
var Val3[]:I;

var SelfCrd:S="РПО_Бюдж_Класс";
var SelfBro:S="РПО_Бюдж_Класс_000";
--
--Процедуры и функции -------------
Proc ОчиститьКР;
 ClearVariable(УпрКР);
 ClearVariable(ППП);
 ClearVariable(ПППНаим);
 ClearVariable(fППП);
 ClearVariable(ФКР);
 ClearVariable(КЦСР);
 ClearVariable(КВР);
 ClearVariable(ЭКР);
end;

Proc ЗадатьПППНаим(vППП:S; vНаим:S; vfППП:L);
var Iter:I;
 for Iter=1..УпрКР do
  if vППП=ППП[Iter]: ПППНаим[Iter]=vНаим; fППП[Iter]=vfППП; fi;
 od;
end;

Func Проверить: L;
var Iter,Iter2:I;
 Iter=1;
 While Iter<=УпрКР do
  if ППП[Iter]="" and ФКР[Iter]="" and КЦСР[Iter]="" and КВР[Iter]="" and  ЭКР[Iter]="":
     DeleteFrame(УпрКР,Iter);
    else
     if ППП[Iter]="": Message("Заполните главу",mtError); Template.Field="ППП"; Template.Frame=Iter; ^False; fi;
     if not Length(ППП[Iter])=3: Message("Глава должна содержать 3 знака",mtError); Template.Field="ППП"; Template.Frame=Iter; ^False; fi;
     if ФКР[Iter]="": Message("Заполните раздел/подраздел",mtError); Template.Field="ФКР"; Template.Frame=Iter; ^False; fi;
     if not Length(ФКР[Iter])=4: Message("Раздел/подраздел должен содержать 4 знака",mtError); Template.Field="ФКР"; Template.Frame=Iter; ^False; fi;
     if КЦСР[Iter]="": Message("Заполните целевую статью",mtError); Template.Field="КЦСР"; Template.Frame=Iter; ^False; fi;
     if not Length(КЦСР[Iter])=7: Message("Целевая статья должна содержать 7 знаков",mtError); Template.Field="КЦСР"; Template.Frame=Iter; ^False; fi;
     if КВР[Iter]="": Message("Заполните вид расходов",mtError); Template.Field="КВР"; Template.Frame=Iter; ^False; fi;
     if not Length(КВР[Iter])=3: Message("Вид расходов должен содержать 3 знака",mtError); Template.Field="КВР"; Template.Frame=Iter; ^False; fi;
     if ЭКР[Iter]="": Message("Заполните ЭКР",mtError); Template.Field="ЭКР"; Template.Frame=Iter; ^False; fi;
     if not Length(ЭКР[Iter])=3: Message("Вид ЭКР должен содержать 3 знака",mtError); Template.Field="ЭКР"; Template.Frame=Iter; ^False; fi;
     for Iter2=Iter+1..УпрКР do
      if ППП[Iter]=ППП[Iter2] and ФКР[Iter]=ФКР[Iter2] and КЦСР[Iter]=КЦСР[Iter2] and КВР[Iter]=КВР[Iter2] and  ЭКР[Iter]=ЭКР[Iter2]:
         DeleteFrame(УпрКР,Iter2);
--         Message("Повторный ввод классификации",mtError); Template.Field="ППП"; Template.Frame=Iter2; ^False;
      fi;
     od;
     Iter=Iter+1;
  fi;
 od;
 if УпрКР=0: Message("Заполните классификацию расходов",mtError); Template.Field="ППП"; Template.Frame=1; ^False; fi;
 ^True;
end;

Proc Расчет;
var Iter,z,nF,n,nn,F:I;
var Key:S;
var hName,FName,Path_:S;
var ППП_:S;
 ClearVariable(Buf);
 ClearVariable(Val1);
 ClearVariable(Val2);
 ClearVariable(Val3);
 Try
  Раб.Бюджет.Начать_НаимКБК;
   nF=0;
   for Iter=1..УпрКР do
    if Name_A(vocКР+"."+ППП[Iter]+"."+ФКР[Iter]+"."+КЦСР[Iter]+"."+КВР[Iter])=" " or not fУжеСущ:
       if fФайлРП:
          if not hName=ППП[Iter]+"."+ФКР[Iter]: nF=nF+1; hName=ППП[Iter]+"."+ФКР[Iter]; fi;
         else
          if not hName=ППП[Iter]: nF=nF+1; hName=ППП[Iter]; fi;
       fi;
       --Группа имя справочника
       Key=Str16(nF)+" "+vocКР;
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"ГРУППА "+vocКР);
          InsertInArray(Val2,z,nameКР);
          InsertInArray(Val3,z,Iter);
       fi;
       --
       Key=Str16(nF)+" "+vocКР+" я";
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"КОНЕЦ");
          InsertInArray(Val2,z,vocКР);
          InsertInArray(Val3,z,Iter);
       fi;
       --Глава
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter];
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z," ГРУППА "+ППП[Iter]);
          InsertInArray(Val2,z,Раб.Бюджет.Взять_НаимКБК("ППП"+YYYY,ППП[Iter]));
          InsertInArray(Val3,z,Iter);
       fi;
       --
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter]+".я";
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z," КОНЕЦ");
          InsertInArray(Val2,z,ППП[Iter]);
          InsertInArray(Val3,z,Iter);
       fi;
       --Подраздел
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter]+"."+ФКР[Iter];
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"  ГРУППА "+ФКР[Iter]);
          InsertInArray(Val2,z,Раб.Бюджет.Взять_НаимКБК("ФКР"+YYYY,ФКР[Iter]));
          InsertInArray(Val3,z,Iter);
       fi;
       --
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter]+"."+ФКР[Iter]+".я";
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"  КОНЕЦ");
          InsertInArray(Val2,z,ФКР[Iter]);
          InsertInArray(Val3,z,Iter);
       fi;
       --Целевая статья
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter]+"."+ФКР[Iter]+"."+КЦСР[Iter];
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"   ГРУППА "+КЦСР[Iter]);
          InsertInArray(Val2,z,Раб.Бюджет.Взять_НаимКБК("КЦСР"+YYYY,КЦСР[Iter]));
          InsertInArray(Val3,z,Iter);
       fi;
       --
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter]+"."+ФКР[Iter]+"."+КЦСР[Iter]+".я";
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"   КОНЕЦ");
          InsertInArray(Val2,z,КЦСР[Iter]);
          InsertInArray(Val3,z,Iter);
       fi;
       --Вид расходов
       Key=Str16(nF)+" "+vocКР+" "+ППП[Iter]+"."+ФКР[Iter]+"."+КЦСР[Iter]+"."+КВР[Iter];
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(Val1,z,"     "+КВР[Iter]);
          InsertInArray(Val2,z,Раб.Бюджет.Взять_НаимКБК("КВР"+YYYY,КВР[Iter]));
          InsertInArray(Val3,z,Iter);
       fi;
    fi;
   od;
 Finally
  Раб.Бюджет.Закончить_НаимКБК;
 end;
 nn=LengthOfArray(Buf);
 hName="";
 nf=0;
 ClearVariable(Buf2);
 Try
  for n=1..nn do
   if not hName=SubStr(Buf[n],1,8):
      nf=nf+1;
      --FName=YYYY+"_"+ExtractWord(2,Buf[n]," ")+"_"+ППП[Val3[n]];
      FName=ExtractWord(2,Buf[n]," ")+"_"+ППП[Val3[n]];
      if fФайлРП:
         FName=FName+"_"+ФКР[Val3[n]];
      fi;
      FName=FName+".sig";
      hName=SubStr(Buf[n],1,8);
      Path_=SubStr(ExtractWord(1,Path,"\"),2,255);
      if Path_="ППП": Path_=ППП[Val3[n]]; fi;
      Buf2[nf]='ПРИЗНАКИ $'+Path_+'\Аналитика\"'+FName+'" --'+if(fФайлРП,Раб.Бюджет.НаимКБК('ФКР'+YYYY,ФКР[Val3[n]]),if(fППП[Val3[n]],ПППНаим[Val3[n]],Раб.Бюджет.НаимКБК('ППП'+YYYY,ППП[Val3[n]])));
      Path_=PlanVar(Path_)+"\Аналитика\";
      if not n=1: TextFileClose(F); fi;
      F=TextFileCreate(Path_+FName);
   fi;
   TextFileAppendLn(F,Val1[n]);
   TextFileAppendLn(F," --");
   TextFileWriteLn(F,Val2[n]);
  od;
 Finally
  if not nn=0: TextFileClose(F); fi;
 end;
 F=TextFileCreate("Опись файлов признаков.txt");
 Try
  for n=1..nf do
   TextFileWriteLn(F,Buf2[n]);
  od;
 Finally
  TextFileClose(F);
 end;
 OpenEditor("Опись файлов признаков.txt");
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func YYYY_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if Int(Value)=0:
    if Value="0" or Value="00" or Value="000" or Value="0000": ^True; fi;
    Message("Поле должно содержать только числа",mtError);
    ^False;
 fi;
 Return True;
end;

Proc YYYY_OnExit(FieldName: String; Iter: Integer);
var Value,YYYY:S;
var l,n,z:I;
 YYYY=Str(Year(ToDay));
 Value=GetVariableS(FieldName);
 L=Length(Value);
 if L=0: Exit; fi;
 Value=SubStr(YYYY,1,4-L)+Value;
 PutVariableS(FieldName,Value);
end;


Func Path_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="$ГЛАВА\Аналитика\  -- ["+Раб.Бюджет2005.Контроль2Слэш(Lo(PlanVar("ГЛАВА"))+"\Аналитика\]");
 Buf[2]="$НАСТР\Аналитика\  -- ["+Раб.Бюджет2005.Контроль2Слэш(Lo(PlanVar("НАСТР"))+"\Аналитика\]");
 Buf[3]="$БУХ\Аналитика\       -- ["+Раб.Бюджет2005.Контроль2Слэш(Lo(PlanVar("БУХ"))+"\Аналитика\]");
 n=Alternate("Размещение аналитических признаков",Buf,-1,1,12);
 if n=0: ^False; fi;
 Path=Trim(SubStr(Buf[n],1,Pos("--",Buf[n])-1));
 Return False;
end;

Func ЗагрузКР_OnEnter(FieldName: String; Iter: Integer): logical;
var FName,tmp,КБК:S;
var F,n:I;
 if ChooseFile(FName,"Открыть файл...", "Текстовые файлы(*.txt)|*.txt")=cmCancel: ^False; fi;
 F=TextFileOpenRead(FName);
 Try
  Раб.Бюджет2005.РежимМаски="?";
  ОчиститьКР;
  n=0;
  While not TextFileEndOfFile(F) do
   n=n+1;
   Hint("Чтение списка БК..."+Str(n));
   tmp=TextFileReadLn(F);
   if Match(tmp,Раб.Бюджет2005.МаскаФКР+"|???|*"):
      InsertFrame(УпрКР,УпрКР+1);
      КБК=ExtractWord(1,tmp,"|");
      ППП[УпрКР]=ExtractWord(1,КБК,"."); ФКР[УпрКР]=ExtractWord(2,КБК,"."); КЦСР[УпрКР]=ExtractWord(3,КБК,"."); КВР[УпрКР]=ExtractWord(4,КБК,".");
      ЭКР[УпрКР]=ExtractWord(2,tmp,"|");
      ПППНаим[УпрКР]=ExtractWord(3,tmp,"|");
      fППП[УпрКР]=not ПППНаим[УпрКР]=ПППФед;
   fi;
  od;
 Finally
  TextFileClose(F);
 end;
 if not ППП[1]="": Message("Список БК успешно загружен"); else Message("Выбранный файл не является списком БК",mtError); fi;
 Return False;
end;

Func СохрКР_OnEnter(FieldName: String; Iter: Integer): logical;
var FName:S;
var F,n:I;
 if YYYY="": Message("Укажите год",mtError); Template.Field="YYYY"; ^False; fi;
 SortSection(УпрКР,12);
 if not Проверить: ^False; fi;
 --FName="Список КБК."+YYYY+".txt";
 FName="Список КБК.txt";
 if ChooseFile(FName,"Сохранить файл...", "Текстовые файлы(*.txt)|*.txt")=cmCancel: ^False; fi;
 if ExistFile(FName): if EnqOkCancel("Файл "+FName+" существует, переписать ?")=cmCancel: Message("Отказ от сохранения данных"); ^False; fi; fi;
 F=TextFileCreate(FName);
 Try
  for n=1..УпрКР do
   TextFileWriteLn(F,ППП[n]+"."+ФКР[n]+"."+КЦСР[n]+"."+КВР[n]+"|"+ЭКР[n]+"|"+ПППНаим[n]);
  od;
 Finally
  TextFileClose(F);
 end;
 Message("Список БК успешно сохранен");
 Return False;
end;

Func ОчистКР_OnEnter(FieldName: String; Iter: Integer): logical;
 if EnqOkCancel("Очистить список классификаций расходов ?",mtWarning)=cmOk: ОчиститьКР; fi;
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(УпрКР,Iter+1);
 ППП[Iter+1]=ППП[Iter];
 fППП[Iter+1]=fППП[Iter];
 ПППНаим[Iter+1]=ПППНаим[Iter];
 ФКР[Iter+1]=ФКР[Iter];
 КЦСР[Iter+1]=КЦСР[Iter];
 КВР[Iter+1]=КВР[Iter];
 ЭКР[Iter+1]=ЭКР[Iter];
 if FieldName="A_": Template.Field="ЭКР"; Template.Frame=Iter+1; fi;
 Return  False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(УпрКР,Iter);
 Return  False;
end;

Proc ППП_OnExit(FieldName: String; Iter: Integer);
 if ППП[Iter]="":
    ПППНаим[Iter]="";
    fППП[Iter]=False;
   else
    if ПППНаим[Iter]="" and fППП[Iter]=False: ПППНаим[Iter]=ПППФед; fi;
 fi;
 ЗадатьПППНаим(ППП[Iter],ПППНаим[Iter],fППП[Iter]);
 Template.Field="ФКР"; Template.Frame=Iter;
end;

Func КР_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field,F:S;
var Iter:I;
var Rec:Record;
 Template.HideEditor(False);
 if YYYY="": Message("Укажите год",mtError); Template.Field="YYYY"; ^Cur; fi;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 F="NAME_VOC='"+Field+YYYY+"'";
 Rec=OpenCardFile(SelfBro,F,GetVariableR("h"+Field));
 if not Rec=nil:
    PutVariableS(Field+"["+Str(Iter)+"'",GetCardFieldS(SelfCrd,Rec,"CODE"));
    PutVariableR("h"+Field,Rec);
 fi;
 if Field="ППП":
    ППП_OnExit(Field,Iter);
 fi;
 Return Cur;
end;

Func ПППНаим_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if ППП[Iter]="": Message("Выберите главу",mtError);  Template.Field="ППП"; Template.Frame=Iter; ^False; fi;
 ClearVariable(Buf);
 Buf[1]=ПППФед;
 Buf[2]="Ручной ввод";
 n=Alternate("Наименование",Buf,-1,1,12);
 if n=1: 
    ПППНаим[Iter]=Buf[1];
    fППП[Iter]=False; 
    ЗадатьПППНаим(ППП[Iter],ПППНаим[Iter],fППП[Iter]);
    ^False;
   |n=2: 
    fППП[Iter]=True; 
    ^True;
 fi;
 Return False;
end;

Proc ПППНаим_OnExit(FieldName: String; Iter: Integer);
 ЗадатьПППНаим(ППП[Iter],ПППНаим[Iter],fППП[Iter]);
end;

Proc Field_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ФКР": Template.Field="КЦСР";
   |FieldName="КЦСР": Template.Field="КВР";
   |FieldName="КВР": Template.Field="ЭКР";
   |FieldName="ЭКР": Template.Field="A_";
 fi;
 Template.Frame=Iter;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnСоздать_OnClick(Sender: String);
 if YYYY="": Message("Укажите год",mtError); Template.Field="YYYY"; Exit; fi;
 if Path="": Message("Укажите размещение аналитических признаков",mtError); Template.Field="Path"; Exit; fi;
 if not Проверить: Exit; fi;
 SortSection(УпрКР,12);
 Расчет;
end;

Proc SectionAfterInsert(SectName: String; Iter: Integer);
 ППП[Iter]=ППП[Iter-1];
 fППП[Iter]=fППП[Iter-1];
 ПППНаим[Iter]=ПППНаим[Iter-1];
 ФКР[Iter]=ФКР[Iter-1];
 КЦСР[Iter]=КЦСР[Iter-1];
 КВР[Iter]=КВР[Iter-1];
 ЭКР[Iter]=ЭКР[Iter-1];
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
--Обработчики событий шаблона -----
--


Конец
