-- Шаблон создан мастером бланков
-- 22.11.2004 13:30:53
--
БланкСШаблоном "Создание наименований групп счетов";

var Buf[]:S;
var Buf2[]:S;
var BufAcc[]:S;
var BufTxt[]:S;

--
--Процедуры и функции ------------- 
Func DelDot(Value:S):S;
var p,pp:i;
var ret,ch:s;
 pp=Length(Value);
 ret="";
 for p=1..pp do
  ch=SubStr(Value,p,1);
  if not ch=".": ret=ret+ch; fi;
 od;
 ^Ret;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnСоздать_OnClick(Sender: String);
var Fs,Fd,tmp,w1,w2,КОСГУ:S;
var n,nn,f,z:i;
var StoreARF:L;
 ClearVariable(BufAcc);
 ClearVariable(BufTxt);
 RefreshAna;
 ShowProgress(13*2,"Анализ плана счетов....");
 Раб.Бюджет2005.РежимМаски="?";
 Раб.Бюджет.Начать_НаимКБК;
 Try
  --КР=ППП, КД=ПП, КИФД=ППП
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР+"|"+Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,BufAcc,1);
  ProgressPos(1);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("ППП2006",BufAcc[n]);
  od;
  --КР=ФКР, КД=ГР, КИФД=ГР
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР+"|"+Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2);
  ProgressPos(2);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.????"):
      tmp=SubStr(Buf[n],5,4); 
      tmp=Раб.Бюджет.Взять_НаимКБК("ФКР2006",tmp);
     |Match(Buf[n],"???.?"):
      tmp="000"+SubStr(Buf[n],5,1)+"0000000000000000";
      tmp=Раб.Бюджет.Взять_НаимКБК("КД2006",tmp);
     |Match(Buf[n],"???.??"):
      tmp="000"+SubStr(Buf[n],5,2)+"000000000000000";
      tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КР=ЦС, КД=ПГР, КИФД=ПГР
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР+"|"+Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3);
  ProgressPos(3);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.????.???????"):
      tmp=SubStr(Buf[n],10,7);
      tmp=Раб.Бюджет.Взять_НаимКБК("КЦСР2006",tmp);
     |Match(Buf[n],"???.?.??"):
      tmp=DelDot("000"+SubStr(Buf[n],5,4)+"00000000000000");
      tmp=Раб.Бюджет.Взять_НаимКБК("КД2006",tmp);
     |Match(Buf[n],"???.??.??"):
      tmp=DelDot("000"+SubStr(Buf[n],5,5)+"0000000000000");
      tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КР=ВР
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР,Buf,1,2,3,4);
  ProgressPos(4);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   tmp=SubStr(Buf[n],18,3);
   tmp=Раб.Бюджет.Взять_НаимКБК("КВР2006",tmp);
   InsertInArray(BufTxt,z,tmp);
  od;
  --КД=СТ
  ClearVariable(Buf2);
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаКД,Buf,1,2,3,4,8,9,10); --8,9,10 группы нужны для определения КОСГУ (аля счет 205.01), а КОСГУ нуно для определения названия статьи
  ProgressPos(5);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   tmp=SubStr(Buf[n],16,10); --берем Синт+Ан+КОСГУ
   КОСГУ=Раб.КБК.ВзятьКОСГУизАН(tmp,1); --получаем КОСГУ
   tmp=SubStr(Buf[n],1,14); --берем КБК
   if SearchInArray(Buf2,tmp+"."+КОСГУ,True)=-1:
      InsertInArraySort(Buf2,tmp+"."+КОСГУ);
      z=InsertInArraySort(BufAcc,tmp); --кбк
      tmp=DelDot("000"+SubStr(tmp,5,7)+"000000000"+КОСГУ); --Статью 12345 приводим к виду 12000
      tmp=Раб.Бюджет.Взять_НаимКБК("КД2006",tmp);
      InsertInArray(BufTxt,z,tmp);
   fi;
  od;
  --КИФД=СТ
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,11); --11(КОСГУ) группа нужна для определения названия статьи
  ProgressPos(6);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=SearchInArray(BufAcc,SubStr(Buf[n],1,12),True);
   tmp=DelDot("000"+SubStr(Buf[n],5,8)+"00000000"+SubStr(Buf[n],14,1))+"00"; --Для 74н нужен КОСГУ вида 500 или 600
   if not SubStr(Buf[n],14,3)="000": tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006",tmp); else tmp=""; fi;
   if z=-1:
      z=InsertInArraySort(BufAcc,SubStr(Buf[n],1,12)); --КОСГУ удаляем
      InsertInArray(BufTxt,z,tmp);
     else
      if BufTxt[z]="":
         BufTxt[z]=tmp;
        else
         if not SubStr(Buf[z],14,3)="172":  --Меняем увеличение или уменьшение на изменение
            w1=ExtractWord(1,BufTxt[z]," ");
--            w2=ExtractWord(1,tmp," ");
            BufTxt[z]=Delete(BufTxt[z],1,Length(w1));
            BufTxt[z]="Изменение"+BufTxt[z];
         fi;
      fi;
   fi;
  od;
  --КР=ВД,КД=ЭЛ
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР+"|"+Раб.Бюджет2005.МаскаСчетаКД,Buf,1,2,3,4,5);
  ProgressPos(7);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.????.???????.???.?"):
      tmp=SubStr(Buf[n],22,1);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
     |Match(Buf[n],"???.?.??.?????.??"):
      tmp="00000000000"+SubStr(Buf[n],16,2)+"0000000";
      tmp=Раб.Бюджет.Взять_НаимКБК("КД2006",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КИФД=ПСТ
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,5,11); --11(КОСГУ) группа нужна для оперделения названия подстатьи
  ProgressPos(8);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=SearchInArray(BufAcc,SubStr(Buf[n],1,15),True);
   tmp=DelDot("000"+SubStr(Buf[n],5,11)+"000000"+SubStr(Buf[n],17,3));
   if not SubStr(Buf[n],17,3)="000": tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006",tmp); else tmp=""; fi;
   if z=-1:
      z=InsertInArraySort(BufAcc,SubStr(Buf[n],1,15)); --КОСГУ удаляем
      InsertInArray(BufTxt,z,tmp);
     else
      if BufTxt[z]="":
         BufTxt[z]=tmp;
        else
         if not SubStr(Buf[z],14,3)="172":
            w1=ExtractWord(1,BufTxt[z]," ");
--            w2=ExtractWord(1,tmp," ");
            BufTxt[z]=Delete(BufTxt[z],1,Length(w1));
            BufTxt[z]="Изменение"+BufTxt[z];
         fi;
      fi;
   fi;
  od;
  --КР=СИНТ, КД=ПГР, КИФД=ЭЛ
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР+"|"+Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,5,6);
  ProgressPos(9);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.????.???????.???.?.???"):
      tmp=SubStr(Buf[n],24,3);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
     |Match(Buf[n],"???.?.??.?????.??.????"):
      tmp="0000000000000"+SubStr(Buf[n],19,4)+"000";
      tmp=Раб.Бюджет.Взять_НаимКБК("КД2006",tmp);
     |Match(Buf[n],"???.??.??.??.??.??"):
      tmp="00000000000"+SubStr(Buf[n],17,2)+"0000000";
      tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КР=АН, КД=ВД, КИФД=ПГР
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаФКР+"|"+Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,5,6,7);
  ProgressPos(10);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.????.???????.???.?.???.??"):
      tmp=SubStr(Buf[n],24,6);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
     |Match(Buf[n],"???.?.??.?????.??.????.?"):
      tmp=SubStr(Buf[n],24,1);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
     |Match(Buf[n],"???.??.??.??.??.??.????"):
      tmp="0000000000000"+SubStr(Buf[n],20,4)+"000";
      tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КД=СИНТ, КИФД=ВД
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,5,6,7,8);
  ProgressPos(11);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.?.??.?????.??.????.?.???"):
      tmp=SubStr(Buf[n],26,3);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
     |Match(Buf[n],"???.??.??.??.??.??.????.?"):
      tmp=SubStr(Buf[n],25,1);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КД=АН, КИФД=СИНТ
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаКД+"|"+Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,5,6,7,8,9);
  ProgressPos(12);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   if Match(Buf[n],"???.?.??.?????.??.????.?.???.??"):
      tmp=SubStr(Buf[n],26,6);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
     |Match(Buf[n],"???.??.??.??.??.??.????.?.???"):
      tmp=SubStr(Buf[n],27,3);
      tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
   fi;
   InsertInArray(BufTxt,z,tmp);
  od;
  --КИФД=АН
  nn=GetGroupAccounts(Раб.Бюджет2005.МаскаСчетаКИФД,Buf,1,2,3,4,5,6,7,8,9,10);
  ProgressPos(13);
  for n=1..nn do
   Hint(Str(n)+" из "+Str(nn));
   z=InsertInArraySort(BufAcc,Buf[n]);
   tmp=SubStr(Buf[n],27,6);
   tmp=Раб.Бюджет.Взять_НаимКБК("СЧ",tmp);
   InsertInArray(BufTxt,z,tmp);
  od;
  --Нахоим наименование групп
  StoreARF=Autorefresh;
  ToggleAutorefresh(False);
  nn=LengthOfArray(BufAcc);
  ShowProgress(nn*2,"Создание описания групп счетов...");
  fs=PlanVar("Бух");
  if SubStr(fs,Length(fs),1)<>"\": fs=fs+"\"; fi;
  fs=fs+"Счета\"+GetGUID;
  fd=PlanVar("Бух");
  if SubStr(fd,Length(fd),1)<>"\": fd=fd+"\"; fi;
  fd=fd+"Счета\ГруппыСчетов.lis";
  f=TextFileCreate(fs);
  Try
   TextFileWriteLn(f,"Счета");
   for n=1..nn do
    ProgressPos(nn+n);
    if not BufTxt[n]="":
       TextFileAppendLn(f,"Группа "+BufAcc[n]+" --");
       TextFileWriteLn(f,BufTxt[n]);
    fi;
   od;
  Finally
   TextFileClose(f);
  end;
 Finally
  Раб.Бюджет.Закончить_НаимКБК;
  CloseProgress;
 end;
 if CloseEditor(Fd,False): fi;
 CopyFile(Fd,Fd+".bak");
 RenameFile(Fs,Fd);
 ToggleAutorefresh(StoreARF);
 Message("Формирование описания групп счетов завершено");
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
--Обработчики событий шаблона -----
--


Конец
