-- Шаблон создан мастером бланков
-- 07.09.2005 10:49:28
--
БланкСШаблоном "Конструктор счетов автоматический";

var nСч:I;
var nКорр:I;

var Сч[]:S;
var ТипСч[]:I; --0 Авто 1 Баланс -1 Забаланс
var Корр[]:S;

var PathAcc:S=PlanVar("Бух")+"\Счета\";
var FNameAG:S=PathAcc+"ГруппыСчетов.lis";
var FNameAA:S=PathAcc+"Дополнительные.lis";

var BufAcc[]:S;
var BufCode[]:S;
var BufTxt[]:S;
---
Func DelPPPDot(Value:S):S;
var p,pp:i;
var ret,ch:s;
 Value=SubStr(Value,4,255);
 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 ВзятьНаимГрупп(vShow:L);
var a,aa,n,z:i;
var StoreППП:S;
var StoreКР_РП,StoreКР_ЦС,StoreКР_ВР,StoreКР_ВД,StoreКР_СИНТ,StoreКР_АН:S;
var StoreКД_ГР,StoreКД_ПГР,StoreКД_СТ,StoreКД_ЭЛ,StoreКД_ПРГ,StoreКД_ВД,StoreКД_СИНТ,StoreКД_АН:S;
var StoreКИФД_ГР,StoreКИФД_ПГР,StoreКИФД_СТ,StoreКИФД_ПСТ,StoreКИФД_ЭЛ,StoreКИФД_ПРГ,StoreКИФД_ВД,StoreКИФД_СИНТ,StoreКИФД_АН:S;
var ППП,РП,ЦС,ВР,ГР,ПГР,СТ,ПСТ,ЭЛ,ПРГ,ВД,СИНТ,АН,КОСГУ,ТипКБК,w1,w2,tmp:S;
 ClearVariable(Раб.КСА.BufCode);
 ClearVariable(Раб.КСА.BufTxt);
 aa=LengthOfArray(Раб.КСА.BufAcc);
 if vShow: ShowProgress(aa,"Создание групп счетов...."); fi;
 Раб.Бюджет.Начать_НаимКБК;
 Try
  StoreППП="";
  StoreКР_РП=""; StoreКР_ЦС=""; StoreКР_ВР=""; StoreКР_ВД=""; StoreКР_СИНТ=""; StoreКР_АН="";
  StoreКД_ГР=""; StoreКД_ПГР=""; StoreКД_СТ=""; StoreКД_ЭЛ=""; StoreКД_ПРГ=""; StoreКД_ВД=""; StoreКД_СИНТ=""; StoreКД_АН="";
  StoreКИФД_ГР=""; StoreКИФД_ПГР=""; StoreКИФД_СТ=""; StoreКИФД_ПСТ=""; StoreКИФД_ЭЛ=""; StoreКИФД_ПРГ=""; StoreКИФД_ВД=""; StoreКИФД_СИНТ=""; StoreКИФД_АН="";
  n=0;
  for a=1..aa do
   if vShow: ProgressPos(a); fi;
   ТипКБК=Раб.Бюджет2005.ТипКБКСчета(BufAcc[a]);
   if ТипКБК="ФКР":
      ППП =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ППП",True);
      РП  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"РП",True);
      ЦС  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ЦС",True);
      ВР  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВР",True);
      ВД  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВД",True);
      СИНТ=Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СИНТ",True);
      АН  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"АН",True);
      if not ППП=StoreППП     : StoreППП=ППП;	   n=n+1; BufCode[n]=ППП;  if Name_S(ППП+".") ="" or Name_S(ППП+".") =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("ППП2006",ППП); fi; fi;
      if not РП=StoreКР_РП    : StoreКР_РП=РП;	   n=n+1; BufCode[n]=РП;   if Name_S(РП+".")  ="" or Name_S(РП+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("ФКР2006",Раб.Бюджет2005.ВзятьКодСчета(РП,ТипКБК,"РП",False)); fi; fi;
      if not ЦС=StoreКР_ЦС    : StoreКР_ЦС=ЦС;	   n=n+1; BufCode[n]=ЦС;   if Name_S(ЦС+".")  ="" or Name_S(ЦС+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КЦСР2006",Раб.Бюджет2005.ВзятьКодСчета(ЦС,ТипКБК,"ЦС",False)); fi; fi;
      if not ВР=StoreКР_ВР    : StoreКР_ВР=ВР;	   n=n+1; BufCode[n]=ВР;   if Name_S(ВР+".")  ="" or Name_S(ВР+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КВР2006",Раб.Бюджет2005.ВзятьКодСчета(ВР,ТипКБК,"ВР",False)); fi; fi;
      if not ВД=StoreКР_ВД    : StoreКР_ВД=ВД;	   n=n+1; BufCode[n]=ВД;   if Name_S(ВД+".")  ="" or Name_S(ВД+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВД",False)); fi; fi;
      if not СИНТ=StoreКР_СИНТ: StoreКР_СИНТ=СИНТ; n=n+1; BufCode[n]=СИНТ; if Name_S(СИНТ+".")="" or Name_S(СИНТ+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ_СИНТ",False)); fi; fi;
      if not АН=StoreКР_АН    : StoreКР_АН=АН;	   n=n+1; BufCode[n]=АН;   if Name_S(АН+".")  ="" or Name_S(АН+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ5",False)); fi; fi;
     |ТипКБК="КД":
      ППП =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ППП",True);
      ГР  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ГР",True);
      ПГР =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ПГР",True);
      СТ  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СТ",True);
      ЭЛ  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ЭЛ",True);
      ПРГ =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ПРГ",True);
      ВД  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВД",True);
      СИНТ=Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СИНТ",True);
      АН  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"АН",True); --нуно для определения названия статьи (зависит от КОСГУ)
      КОСГУ=Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ8",False);
      КОСГУ=Раб.КБК.ВзятьКОСГУизАН(КОСГУ,1); --получаем КОСГУ
      if not ППП=StoreППП     : StoreППП=ППП;	   n=n+1; BufCode[n]=ППП;  if Name_S(ППП+".") ="" or Name_S(ППП+".") =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("ППП2006",ППП); fi; fi;
      if not ГР=StoreКД_ГР    : StoreКД_ГР=ГР;	   n=n+1; BufCode[n]=ГР;   if Name_S(ГР+".")  ="" or Name_S(ГР+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КД2006","000"+DelPPPDot(ГР)+"0000000000000000"); fi; fi;
      if not ПГР=StoreКД_ПГР  : StoreКД_ПГР=ПГР;   n=n+1; BufCode[n]=ПГР;  if Name_S(ПГР+".") ="" or Name_S(ПГР+".") =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КД2006","000"+DelPPPDot(ПГР)+"00000000000000"); fi; fi;
      if not SubStr(СТ,1,11)+"."+КОСГУ=StoreКД_СТ: --Сохранея несколько эелементов СТ с КОСГУ (возможно одно из них не будет пустым наименование)
	 StoreКД_СТ=SubStr(СТ,1,11)+"."+КОСГУ;
	 n=n+1; 
	 BufCode[n]=СТ;   
	 if Name_S(СТ+".")="" or Name_S(СТ+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КД2006","000"+SubStr(DelPPPDot(СТ),1,6)+"00000000"+КОСГУ); fi; --Статью 12345 приводим к виду 12000
      fi;
      if not ЭЛ=StoreКД_ЭЛ    : StoreКД_ЭЛ=ЭЛ;	   n=n+1; BufCode[n]=ЭЛ;   if Name_S(ЭЛ+".")  ="" or Name_S(ЭЛ+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КД2006","00000000000"+SubStr(ЭЛ,16,2)+"0000000"); fi; fi;
      if not ПРГ=StoreКД_ПРГ  : StoreКД_ПРГ=ПРГ;   n=n+1; BufCode[n]=ПРГ;  if Name_S(ПРГ+".") ="" or Name_S(ПРГ+".") =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КД2006","0000000000000"+SubStr(ПРГ,19,4)+"000"); fi; fi;
      if not ВД=StoreКД_ВД    : StoreКД_ВД=ВД;	   n=n+1; BufCode[n]=ВД;   if Name_S(ВД+".")  ="" or Name_S(ВД+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВД",False)); fi; fi;
      if not СИНТ=StoreКД_СИНТ: StoreКД_СИНТ=СИНТ; n=n+1; BufCode[n]=СИНТ; if Name_S(СИНТ+".")="" or Name_S(СИНТ+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ_СИНТ",False)); fi; fi;
      if not АН=StoreКД_АН    : StoreКД_АН=АН;	   n=n+1; BufCode[n]=АН;   if Name_S(АН+".")  ="" or Name_S(АН+".")  =" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ5",False)); fi; fi;
     |ТипКБК="КИВФ" or ТипКБК="КИФД":
      ППП =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ППП",True);
      ГР  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ГР",True);
      ПГР =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ПГР",True);
      СТ  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СТ",True);
      ПСТ =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ПСТ",True);
      ЭЛ  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ЭЛ",True);
      ПРГ =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ПРГ",True);
      ВД  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВД",True);
      СИНТ=Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СИНТ",True);
      АН  =Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"АН",True);
      КОСГУ=Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"КОСГУ",False); --нуно для определения названия статьи и подстатьи (зависит от КОСГУ)
      if not ППП=StoreППП     : StoreППП=ППП;	   n=n+1; BufCode[n]=ППП; if Name_S(ППП+".")="" or Name_S(ППП+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("ППП2006",ППП); fi; fi;
      if not ГР=StoreКИФД_ГР  : StoreКИФД_ГР=ГР;   n=n+1; BufCode[n]=ГР;  if Name_S(ГР+".")="" or Name_S(ГР+".")=" ":	BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КИФД2006","000"+DelPPPDot(ГР)+"000000000000000"); fi; fi;
      if not ПГР=StoreКИФД_ПГР: StoreКИФД_ПГР=ПГР; n=n+1; BufCode[n]=ПГР; if Name_S(ПГР+".")="" or Name_S(ПГР+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КИФД2006","000"+DelPPPDot(ПГР)+"0000000000000"); fi; fi;
      if not СТ=StoreКИФД_СТ:
	 StoreКИФД_СТ=СТ;
	 n=n+1;
	 BufCode[n]=СТ;
	 if Name_S(СТ+".")="" or Name_S(СТ+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КИФД2006","000"+DelPPPDot(СТ)+"00000000"+SubStr(КОСГУ,1,1)+"00"); fi;
	else
	 tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006","000"+DelPPPDot(СТ)+"00000000"+SubStr(КОСГУ,1,1)+"00");
	 z=SearchInArray(BufCode,СТ);
	 if BufTxt[z]="":
	    BufTxt[z]=tmp;
	   else
	    if (Match(BufTxt[z],"Увеличение*") or Match(BufTxt[z],"Уменьшение*")): --конечно это все мутно
	       w1=ExtractWord(1,BufTxt[z]," ");
	       --w2=ExtractWord(1,tmp," ");
	       BufTxt[z]=Delete(BufTxt[z],1,Length(w1));
	       BufTxt[z]="Изменение"+BufTxt[z];
	    fi;
	 fi;
      fi;
      if not ПСТ=StoreКИФД_ПСТ:
	 StoreКИФД_ПСТ=ПСТ;
	 n=n+1;
	 BufCode[n]=ПСТ;
	 if Name_S(СТ+".")="" or Name_S(СТ+".")=" ":
	    BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КИФД2006","000"+DelPPPDot(ПСТ)+"000000"+КОСГУ);
	 fi;
	else
	 tmp=Раб.Бюджет.Взять_НаимКБК("КИФД2006","000"+DelPPPDot(ПСТ)+"000000"+КОСГУ);
	 z=SearchInArray(BufCode,ПСТ);
	 if BufTxt[z]="":
	    BufTxt[z]=tmp;
	   else
	    if (Match(BufTxt[z],"Увеличение*") or Match(BufTxt[z],"Уменьшение*")): --конечно это все мутно
	       w1=ExtractWord(1,BufTxt[z]," ");
	       --w2=ExtractWord(1,tmp," ");
	       BufTxt[z]=Delete(BufTxt[z],1,Length(w1));
	       BufTxt[z]="Изменение"+BufTxt[z];
	    fi;
	 fi;
      fi;
      if not ЭЛ=StoreКИФД_ЭЛ:	  StoreКИФД_ЭЛ=ЭЛ;     n=n+1; BufCode[n]=ЭЛ;   if Name_S(ЭЛ+".")="" or Name_S(ЭЛ+".")=" ":     BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КИФД2006","00000000000"+SubStr(ЭЛ,17,2)+"0000000"); fi; fi;
      if not ПРГ=StoreКИФД_ПРГ:   StoreКИФД_ПРГ=ПРГ;   n=n+1; BufCode[n]=ПРГ;  if Name_S(ПРГ+".")="" or Name_S(ПРГ+".")=" ":   BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("КИФД2006","0000000000000"+SubStr(ПРГ,20,4)+"000"); fi; fi;
      if not ВД=StoreКИФД_ВД:	  StoreКИФД_ВД=ВД;     n=n+1; BufCode[n]=ВД;   if Name_S(ВД+".")="" or Name_S(ВД+".")=" ":     BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"ВД",False)); fi; fi;
      if not СИНТ=StoreКИФД_СИНТ: StoreКИФД_СИНТ=СИНТ; n=n+1; BufCode[n]=СИНТ; if Name_S(СИНТ+".")="" or Name_S(СИНТ+".")=" ": BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ_СИНТ",False)); fi; fi;
      if not АН=StoreКИФД_АН:	  StoreКИФД_АН=АН;     n=n+1; BufCode[n]=АН;   if Name_S(АН+".")="" or Name_S(АН+".")=" ":     BufTxt[n]=Раб.Бюджет.Взять_НаимКБК("СЧ",Раб.Бюджет2005.ВзятьКодСчета(BufAcc[a],ТипКБК,"СЧ5",False)); fi; fi;
   fi;
  od;
 Finally
  Раб.Бюджет.Закончить_НаимКБК;
  if vShow: CloseProgress; fi;
 end;
end;
---

Proc Очистить;
 ClearVariable(Раб.КСА.nСч);
 ClearVariable(Раб.КСА.Сч);
 ClearVariable(Раб.КСА.ТипСч);
end;

Proc ОчиститьКорр;
 ClearVariable(Раб.КСА.nКорр);
 ClearVariable(Раб.КСА.Корр);
end;

Proc Начать;
var Flag:L;
 Очистить;
 Flag=CloseEditor(FNameAA,True);
end;

Proc НачатьКорр;
var Flag:L;
 ОчиститьКорр;
 Flag=CloseEditor(FNameAG,True);
end;

Func Добавить(Сч_:S):L;
var Сч2_:S;
 if Trim(Сч_)="": ^True; fi;
 if not Name_S(Сч_)=" ": ^True; fi;
 if not Match(Сч_,Раб.Бюджет2005.МаскаСчетаФКР) and
    not Match(Сч_,Раб.Бюджет2005.МаскаСчетаКД) and
    not Match(Сч_,Раб.Бюджет2005.МаскаСчетаКИВФ): Trace("Добавляемый счет "+Сч_+" не соотвествует структуре учета"); ^False;
 fi;
 AddInArray(Раб.КСА.Сч,True,False,Сч_);
-- Сч2_=Раб.Бюджет2005.Счет_ПереворотКосгу(Сч_);
-- if not Сч2_=Сч_:
--    if Name_S(Сч2_)=" ":
--	 AddInArray(Раб.КСА.Сч,True,False,Сч2_);
--    fi;
-- fi;
 ^True;
end;

Func ДобавитьСч(vСч:S; vТипСч:S; vКонтроль:L):L;
var Сч_:S;
var z:i;
 if Trim(vСч)="": ^True; fi;
 if not Name_S(vСч)=" ": ^True; fi;
 if vКонтроль:
    if not Match(vСч,Раб.Бюджет2005.МаскаСчетаФКР) and
       not Match(vСч,Раб.Бюджет2005.МаскаСчетаКД) and
       not Match(vСч,Раб.Бюджет2005.МаскаСчетаКИВФ): Trace("Добавляемый счет "+vСч+" не соотвествует структуре учета"); ^False;
    fi;
 fi;
 z=SearchInArray(Раб.КСА.Сч,vСч,True);
 if z=-1: 
    z=InsertInArraySort(Раб.КСА.Сч,vСч);
    InsertInArray(Раб.КСА.ТипСч,z,if(vТипСч="БАЛ":1|vТипСч="ЗАБ":-1|True:0));
 fi;
-- Сч_=Раб.Бюджет2005.Счет_ПереворотКосгу(vСч);
-- if not Сч_=vСч:
--    if Name_S(Сч_)=" ":
--	 z=SearchInArray(Раб.КСА.Сч,Сч_,True);
--	 if z=-1:
--	    z=InsertInArraySort(Раб.КСА.Сч,Сч_);
--	    InsertInArray(Раб.КСА.ТипСч,z,if(vТипСч="БАЛ":1|vТипСч="ЗАБ":-1|True:0));
--	 fi;
--    fi;
-- fi;
 ^True;
end;

Func ДобавитьКорр(vСчДеб:S; vСчКре:S; vРежим:S):L;
var ТипСчДеб,ТипСчКре:S;
 if Name_S(vСчДеб)=" " or Name_S(vСчКре)=" ": ^False; fi;
 if Correspond(vСчДеб,vСчКре): ^True; fi;
 ТипСчДеб=Раб.Бюджет2005.ТипКБКСчета(vСчДеб);
 ТипСчКре=Раб.Бюджет2005.ТипКБКСчета(vСчКре);
 if not ТипСчДеб="" and not ТипСчКре="":
    if vРежим="СЧ8":
       vСчДеб="*.?."+Раб.Бюджет2005.ВзятьКодСчета(vСчДеб,ТипСчДеб,vРежим,False);
       vСчКре="*.?."+Раб.Бюджет2005.ВзятьКодСчета(vСчКре,ТипСчКре,vРежим,False);
      |vРежим="СЧ9":
       vСчДеб="*."+Раб.Бюджет2005.ВзятьКодСчета(vСчДеб,ТипСчДеб,vРежим,False);
       vСчКре="*."+Раб.Бюджет2005.ВзятьКодСчета(vСчКре,ТипСчКре,vРежим,False);
      |True:
       Trace("Неизвестный режим добавления корреспонденций: "+vРежим);
    fi;
 fi;
 if SearchInArray(Раб.КСА.Корр,"+"+vСчДеб+"/"+vСчКре,True)=-1: InsertInArraySort(Раб.КСА.Корр,"+"+vСчДеб+"/"+vСчКре); fi;
 ^True;
end;

Proc ВнестиИзменения;
var Iter,F,t,hh,mm,ss,n,OWA,z:i;
var FNameAA_,FNameAG_,FNameAA0,FNameAG0,СчКод,СчБалСтр,СчНаим:S;
var Flag:L;
 nСч=LengthOfArray(Раб.КСА.Сч);
 Iter=1;
 While Iter<=nСч do
  if not Name_S(Сч[Iter])=" ": DeleteFromArray(Раб.КСА.Сч,Iter); nСч=nСч-1; else Iter=Iter+1; fi;
 od;
 if nСч=0: Exit; fi;
 CopyArray(Раб.КСА.Сч,Раб.КСА.BufAcc);
 ВзятьНаимГрупп(True);
 FNameAA_=Раб.Бюджет2005.Контроль2Слэш(PathAcc+GetGUID);
 FNameAG_=Раб.Бюджет2005.Контроль2Слэш(PathAcc+GetGUID);
 FNameAA0=Раб.Бюджет2005.Контроль2Слэш(FNameAA);
 FNameAG0=Раб.Бюджет2005.Контроль2Слэш(FNameAG);
 CopyFile(FNameAA0,FNameAA_);
 CopyFile(FNameAG0,FNameAG_);
 ShowProgress(nСч+LengthOfArray(BufCode),"Добавление в план счетов....");
 F=TextFileOpenWrite(FNameAA_);
 t=Time;
 hh=Int(Trunc(t/3600));
 mm=Int(Trunc((t-(hh*3600))/60));
 ss=Int(Trunc(t-(hh*3600)-(mm*60)));
 OWA=OpenWorkArea("РПО_БЮДЖ_КЛАСС","Code","Name_Voc='СЧ'");
 Try
  TextFileGotoEnd(F);
  TextFileWriteLn(F,"СЧЕТА --Добавлено "+DateToString(ToDay)+" "+Str(hh)+":"+Str(mm)+":"+Str(ss)+if(UserName(AliasName("РПО_БЮДЖ_КЛАСС"))="",""," Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"))),True);
  for Iter=1..nСч do
   ProgressPos(Iter);
   if Name_S(Сч[Iter])=" ":
      СчКод=Раб.Бюджет2005.ВзятьКодСчета(Сч[Iter],"","СЧ8",False);
      z=Search(OWA,1,СчКод);
      if z=0:
	 if ТипСч[Iter]= 1: СчБалСтр="000 000";
	   |ТипСч[Iter]=-1: СчБалСтр="!";
	   |True: if Match(СчКод,"ЗАБ.??.*"): СчБалСтр="!"; else СчБалСтр="000 000"; fi;
	 fi;
	 СчНаим="";
	else
	 if ТипСч[Iter]= 1: СчБалСтр="000 000";
	   |ТипСч[Iter]=-1: СчБалСтр="!";
	   |True: СчБалСтр=GetFieldS(OWA,z,"S05");
	 fi;
	 СчНаим=GetFieldS(OWA,z,"Txt");
      fi;
      TextFileAppendLn(F,Сч[Iter]+" ");
      TextFileAppendLn(F,СчБалСтр+" --");
      TextFileWriteLn(F,СчНаим);
   fi;
  od;
  TextFileClose(F);
  --Добавляем описание групп
  F=TextFileOpenWrite(FNameAG_);
  TextFileGotoEnd(F);
  TextFileWriteLn(F,"СЧЕТА --Добавлено "+DateToString(ToDay)+" "+Str(hh)+":"+Str(mm)+":"+Str(ss)+if(UserName(AliasName("РПО_БЮДЖ_КЛАСС"))="",""," Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"))),True);
  for Iter=1..LengthOfArray(BufCode) do
   ProgressPos(nСч+Iter);
   if not BufTxt[Iter]="":
      TextFileAppendLn(F,"Группа "+BufCode[Iter]);
      TextFileAppendLn(F," --");
      TextFileWriteLn(F,BufTxt[Iter]);
   fi;
  od;
 Finally
  TextFileClose(F);
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 Try
  Flag=AutoRefresh;
  ToggleAutorefresh(False);
  CopyFile(FNameAA0,FNameAA0+".bak");
  CopyFile(FNameAG0,FNameAG0+".bak");
  RenameFile(FNameAA_,FNameAA0);
  RenameFile(FNameAG_,FNameAG0);
 Finally
  ToggleAutorefresh(Flag);
 end;
end;

Proc ВнестиИзмененияКорр;
var Iter,F,t,hh,mm,ss:i;
var FNameAA_,FNameAA0:S;
var Flag:L;
 nКорр=LengthOfArray(Раб.КСА.Корр);
 Iter=1;
 While Iter<=nКорр do
  if Correspond(SubStr(ExtractWord(1,Раб.КСА.Корр[Iter],"/"),2,255),ExtractWord(2,Раб.КСА.Корр[Iter],"/")): DeleteFromArray(Раб.КСА.Корр,Iter); nКорр=nКорр-1; else Iter=Iter+1; fi;
 od;
 if nКорр=0: Exit; fi;
 FNameAA_=Раб.Бюджет2005.Контроль2Слэш(PathAcc+GetGUID);
 FNameAA0=Раб.Бюджет2005.Контроль2Слэш(FNameAA);
 CopyFile(FNameAA0,FNameAA_);
 ShowProgress(nСч+LengthOfArray(BufCode),"Добавление в план счетов....");
 F=TextFileOpenWrite(FNameAA_);
 t=Time;
 hh=Int(Trunc(t/3600));
 mm=Int(Trunc((t-(hh*3600))/60));
 ss=Int(Trunc(t-(hh*3600)-(mm*60)));
 Try
  TextFileGotoEnd(F);
  TextFileWriteLn(F,"КОРРЕСПОНДЕНЦИИ --Добавлено "+DateToString(ToDay)+" "+Str(hh)+":"+Str(mm)+":"+Str(ss)+if(UserName(AliasName("РПО_БЮДЖ_КЛАСС"))="",""," Пользователь: "+UserName(AliasName("РПО_БЮДЖ_КЛАСС"))),True);
  for Iter=1..nКорр do
   ProgressPos(Iter);
   TextFileWriteLn(F,Корр[Iter]);
  od;
 Finally
  TextFileClose(F);
  CloseProgress;
 end;
 Try
  Flag=AutoRefresh;
  ToggleAutorefresh(False);
  CopyFile(FNameAA0,FNameAA0+".bak");
  RenameFile(FNameAA_,FNameAA0);
 Finally
  ToggleAutorefresh(Flag);
 end;
end;

Func Закончить(FlagEnq:L):L;
var n:I;
var tmp:s;
 nСч=LengthOfArray(Раб.КСА.Сч);
 if nСч=0: Очистить; ^False; fi;
 if FlagEnq:
    tmp="Выбраны счета, отсутствующие в плане счетов:"+Chr(13);
    for n=1..nСч do
     tmp=tmp+Сч[n]+Chr(13);
    od;
    if Length(tmp)>255-(Length("Добавить данные счета в план счетов ?")+4): tmp=SubStr(tmp,1,255-(Length("Добавить данные счета в план счетов ?")+4))+"..."+Chr(13); fi;
    tmp=tmp+"Добавить данные счета в план счетов ?";
    if EnqOkCancel(tmp)=cmCancel: Очистить; ^False;  fi;
 fi;
 ВнестиИзменения;
 Очистить;
 ^True;
end;

Func ЗакончитьКорр(FlagEnq:L):L;
var n:I;
var tmp:s;
 nКорр=LengthOfArray(Раб.КСА.Корр);
 if nКорр=0: Очистить; ^False; fi;
 if FlagEnq:
    tmp="Найдены корреспонденции, отсутствующие в плане счетов:"+Chr(13);
    for n=1..nКорр do
     tmp=tmp+Корр[n]+Chr(13);
    od;
    if Length(tmp)>255-(Length("Добавить данные корреспонденции в план счетов ?")+4): tmp=SubStr(tmp,1,255-(Length("Добавить данные корреспонденции в план счетов ?")+4))+"..."+Chr(13); fi;
    tmp=tmp+"Добавить данные корреспонденции в план счетов ?";
    if EnqOkCancel(tmp)=cmCancel: Очистить; ^False;  fi;
 fi;
 ВнестиИзмененияКорр;
 ОчиститьКорр;
end;

Proc Отменить;
 Очистить;
end;

Proc ОтменитьКорр;
 ОчиститьКорр;
end;

Proc Вызов1;
var n,nn:i;
 Начать;
 nn=LengthOfArray(Раб.Обмен.BufS1);
 for n=1..nn do
  ДобавитьСч(Раб.Обмен.BufS1[n],Раб.Обмен.BufS2[n],True);
 od;
 Раб.Обмен.AnswerL=Закончить(True);
end;

Proc OnOpen(Create: Logical);
 if Раб.Обмен.Recipient="РАБ.КСА":
    if Раб.Обмен.Sender="РАБ.КБК": Вызов1; fi;
    Close;
 fi;
end;


Конец
