--
--
-- Разработка бланка: ТБ.БЮДЖЕТ
-- Первый релиз: 20.08.2014

БланкСШаблоном "Акт сверки расчетов (по КБК)";

fНеЗаполКонтр:L;

Учреждение:S;
ИНН:S;
ДолжнРук:S;
ФИОРук:S;
ДолжнРук_Кого:S;
ФИОРук_Кого:S;
ДолжнБух:S;
ФИОБух:S;

var К_ДолжнРук:S;
var К_ФИОРук:S;
var К_ДолжнБух:S;
var К_ФИОБух:S;

ПризнКонтр:S;
Контр:S;
var Контр_:S=Контр;
var К:S="";
Контр_ИНН:S;

ДН:D;
ДК:D;

УслСч:S;
var УслСч_:S=УслСч;
УслАн:S=["~ЗГ"];

var МаскаСч:S="*.?.304.04.*|*.?.401.10.151|*.?.401.10.180|*.?.401.20.241|*.?.401.20.251";

var ТекстАкт1:S=Учреждение+" в лице "+if(ДолжнРук_Кого="","_ _ _ _ _ _ _ _ _ _ _ _ _",ДолжнРук_Кого)+" "+if(ФИОРук_Кого="","_ _ _ _ _ _ _ _ _ _ _ _ _",ФИОРук_Кого)+", с одной стороны,";
var ТекстАкт2:S="и "+Контр+" в лице_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ , с другой стороны, составили настоящий акт о состоянии взаимных расчетов:";

НомДоговор:S;
ДатДоговор:D;

Упр:I;
Упр2:I;
var AA1:S="+";
var DD1:S="-";
var AA2:S="+";
var DD2:S="-";
var пп[]:i=$+1;
ОстДебН:N;
ОстКреН:N;
К_ОстДебН:N;
К_ОстКреН:N;
ДО[]:D;
Содерж[]:S;
СумДеб[]:N;
СумКре[]:N;
К_СумДеб[]:N;
К_СумКре[]:N;
ID[]:I;
KeyDoc[]:S;
ДО_S[]:D;
СЧ_S[]:S;

СчтДок[]:S;
КорДок[]:S;
KeyCMT[]:S;

СчтОбр[]:S;
КорОбр[]:S;
ОбрДеб[]:N;
ОбрКре[]:N;
К_ОбрДеб[]:N;
К_ОбрКре[]:N;
ОбрТхт[]:S;
ОбрKey[]:S;

var ОбДеб:N=SumOfArray(ОбрДеб,Упр2);
var ОбКре:N=SumOfArray(ОбрКре,Упр2);
var К_ОбДеб:N=SumOfArray(К_ОбрДеб,Упр2);
var К_ОбКре:N=SumOfArray(К_ОбрКре,Упр2);
var ОстДебК:N=Deb(ОстДебН-ОстКреН+ОбДеб-ОбКре);
var ОстКреК:N=Cre(ОстДебН-ОстКреН+ОбДеб-ОбКре);
var К_ОстДебК:N=Deb(К_ОстДебН-К_ОстКреН+К_ОбДеб-К_ОбКре);
var К_ОстКреК:N=Cre(К_ОстДебН-К_ОстКреН+К_ОбДеб-К_ОбКре);
var пп2:i=Упр+2;
var пп3[]:i=Упр+2+$;
var пп4:i=Упр+2+Упр2+1;
--
--Процедуры и функции -------------   
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(ОстКреН);
 ClearVariable(К_ОстДебН);
 ClearVariable(К_ОстКреН);
 ClearVariable(ДО);
 ClearVariable(Содерж);
 ClearVariable(СумДеб);
 ClearVariable(СумКре);
 ClearVariable(К_СумДеб);
 ClearVariable(К_СумКре);
 ClearVariable(ID);
 ID[1]=-1;
 ClearVariable(KeyDoc);
 ClearVariable(ДО_S);
 ClearVariable(СЧ_S);
 --
 ClearVariable(Упр2);
 ClearVariable(СчтОбр);
 ClearVariable(КорОбр);
 ClearVariable(ОбрДеб);
 ClearVariable(ОбрКре);
 ClearVariable(К_ОбрДеб);
 ClearVariable(К_ОбрКре);
 ClearVariable(ОбрТхт);
 ClearVariable(ОбрKey);

 ClearVariable(KeyCMT);
end;

Proc ЗаполнитьРекв (Rec:Record);
var ИНН_,КПП_:S;
 if Rec=nil: Exit; fi;
 Учреждение=GetCardFieldS("Контрагент",Rec,"КорИмя");
 ИНН_=GetCardFieldS("Контрагент",Rec,"ИНН");
 КПП_=GetCardFieldS("Контрагент",Rec,"КПП");
 ИНН=if(ИНН_="" and КПП_="","","ИНН:"+ИНН_+" КПП:"+КПП_);
 ДолжнРук=GetCardFieldS("Контрагент",Rec,"ДолжнРук");
 ФИОРук=GetCardFieldS("Контрагент",Rec,"ФИОРук");
 ДолжнБух=GetCardFieldS("Контрагент",Rec,"ДолжнБух");
 ФИОБух=GetCardFieldS("Контрагент",Rec,"ФИОБух");
 --
 ДолжнРук_Кого=GetCardFieldS("Контрагент",Rec,"ДолжнРук");
 ФИОРук_Кого=GetCardFieldS("Контрагент",Rec,"ФИОРук");
 if not ДолжнРук_Кого="" or ФИОРук_Кого="":
    Message("Исправте склонение должности и ФИО, при необходимости",mtWarning);
    Template.Field="ДолжнРук_Кого";
 fi;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func Учреждение_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","Наше",nil,crdRecordOnly);
 if Rec=nil: ^False; fi;
 ЗаполнитьРекв(Rec);
 Return False;
end;

Proc Учреждение_OnExit(FieldName: String; Iter: Integer);
 ИНН="";
end;

Func ФИО_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var v1,v2,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Rec=OpenCardFile("Сотрудники");
 if Rec=nil: ^Cur; fi;
 if Field="ДолжнРук_Кого" or Field="ФИОРук_Кого" or Field="ДолжнРук" or Field="ФИОРук":
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.РПО_ДОЛЖ_КОГО");
    v2=GetCardFieldS("Сотрудники",rec,"ФКого")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    ДолжнРук_Кого=v1;
    ФИОРук_Кого=v2;
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.ДОЛЖ");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    ДолжнРук=v1;
    ФИОРук=v2;
   |Field="ДолжнБух" or Field="ФИОБух":
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.ДОЛЖ");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    ДолжнБух=v1;
    ФИОБух=v2;
 fi;
 Return Cur;
end;

Func Контр_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var ИНН_,КПП_:S;
 if FieldName="Контр_":
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","РПО_ПБС");
   else
    Rec=SignToRecord(ПризнКонтр);
 fi;
 if Rec=nil: ^False; fi;
 ПризнКонтр=CardFileRecSign("КОНТРАГЕНТ","ПРИЗНАК","ПБС",Rec);
 Контр=GetCardFieldS("Контрагент",Rec,"КорИмя");
 ИНН_=GetCardFieldS("Контрагент",Rec,"ИНН");
 КПП_=GetCardFieldS("Контрагент",Rec,"КПП");
 Контр_ИНН=if(ИНН_="" and КПП_="","","ИНН:"+ИНН_+" КПП:"+КПП_);
 К_ДолжнРук=GetCardFieldS("Контрагент",Rec,"ДолжнРук");
 К_ФИОРук=GetCardFieldS("Контрагент",Rec,"ФИОРук");
 К_ДолжнБух=GetCardFieldS("Контрагент",Rec,"ДолжнБух");
 К_ФИОБух=GetCardFieldS("Контрагент",Rec,"ФИОБух");
 if Контр="": Контр=ПризнКонтр; fi;
 Очистить;
 Return False;
end;

Func ПризнКонтр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
var Rec: Record;
var ИНН_,КПП_:S;
 Template.HideEditor(False);
 tmp=AnaElection("ПБС.*",False,False,ПризнКонтр);
 if tmp="": ^Cur; fi;
 ПризнКонтр=tmp;
 Rec=SignToRecord(tmp);
 if not Rec=nil and SignCardFile(tmp)="Контрагент":
    Контр=GetCardFieldS("Контрагент",Rec,"КорИмя");
    ИНН_=GetCardFieldS("Контрагент",Rec,"ИНН");
    КПП_=GetCardFieldS("Контрагент",Rec,"КПП");
    Контр_ИНН=if(ИНН_="" and КПП_="","","ИНН:"+ИНН_+" КПП: "+КПП_);
    К_ДолжнРук=GetCardFieldS("Контрагент",Rec,"ДолжнРук");
    К_ФИОРук=GetCardFieldS("Контрагент",Rec,"ФИОРук");
    К_ДолжнБух=GetCardFieldS("Контрагент",Rec,"ДолжнБух");
    К_ФИОБух=GetCardFieldS("Контрагент",Rec,"ФИОБух");
   else
    Контр=Name_A(tmp);
    Контр_ИНН="";
    К_ДолжнРук="";
    К_ФИОРук="";
    К_ДолжнБух="";
    К_ФИОБух="";
 fi;
 if Контр="": Контр=tmp; fi;
 Очистить;
 Return Cur;
end;

Proc Контр_OnExit(FieldName: String; Iter: Integer);
 ПризнКонтр="";
 Контр="";
 Контр_ИНН="";
end;

Proc Д_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func Д_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var tmp:d;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar(GetVariableD(Field));
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
 Очистить;
 Return Cur;
end;

Func УслСч_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.КБК.Список(МаскаСч,"","СЧ6 ВД+? ИГ");
 if tmp="": ^False; fi;
 if Match(tmp,"?."): tmp="*."+tmp+"???.??.*";
   |Match(tmp,"?.???."): tmp="*."+tmp+"??.*";
   |True: tmp="*."+tmp+".*";
 fi;
 УслСч=Раб.Бюджет2005.Объединить(УслСч,tmp,"|");
 Return False;
end;

Proc УслСч_OnExit(FieldName: String; Iter: Integer);
 УслСч=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог(УслСч,"|");
 Очистить;
end;

Func УслАн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 Cur=AnaElection("*");
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(УслАн,Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: Template.HideEditor(False); УслАн=Cur; Очистить; fi;
 Return Cur;
end;

Func УслАн_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var Res:N;
 Try
  Res=Saldo("{"+Value+"}",1.1.100);
 Except
  Raise;
  ^False;
 end;
 Return True;
end;

Proc УслАн_OnExit(FieldName: String; Iter: Integer);
 Очистить;
end;

Func AA1_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр,Iter+1);
 ID[Iter]=-1;
 Return False;
end;

Func DD1_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр,Iter);
 if Упр<1: InsertFrame(Упр,1); ID[1]=-1; fi;
 Return False;
end;

Func AA2_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр2,Iter+1);
 ^False;
end;

Func DD2_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр2,Iter);
 if Упр2<1: InsertFrame(Упр2,1); fi;
 ^False;
end;

Func Ост_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var УслАн_:S;
 Template.HideEditor(False);
 if ПризнКонтр="": Message("Выберите контрагента",mtError); Template.Field="Контр_"; ^Cur; fi;
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; ^Cur; fi;
 if ДН>ДК: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; ^Cur; fi;
 if УслСч="": Message("Введите условие на счета",mtError); Template.Field="УслСч"; ^Cur; fi;
 if not УслАн="": УслАн_="("+УслАн+")&"+ПризнКонтр; else УслАн_=ПризнКонтр; fi;
 Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Служебные отчеты.lst"."000"',1.1.100,ДН,УслСч,УслАн_);
 Return Cur;
end;

Func Сум_onLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var УслАн_:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if not ID[Iter]=-1:
   TransOpenJur(ID[Iter]);
 else
   if ДО_S[Iter]>1.1.2000 and СЧ_S[Iter]<>"":
     if not УслАн="": УслАн_="("+УслАн+")&"+ПризнКонтр; else УслАн_=ПризнКонтр; fi;
     --Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Отч_набор_001.lst"."По_проводкам_ВСЕ"',ДО_S[Iter],ДО_S[Iter]+1,СЧ_S[Iter],УслАн_);
     Report('"'+PlanVar("Std_Rpo")+'\Общие\Отчеты\Отч_набор_001.lst"."По_счетам_Бал_Заб"',ДО_S[Iter],ДО_S[Iter]+1,СЧ_S[Iter],УслАн_);
   else 
     Message("Ошибка расшифровки!", mtError);
   fi;
 fi;
 ^Cur;
end;

Func ОписаниеДокумента(aKey:String; ROV:Integer; ROI:Integer) :String;
var RES, CRD :String;
var RO, pp :Integer;
var REC :Record;
 RES="";
 CRD=ExtractWord(1, aKey, ":");
 if CRD="РПО_ИЗВЕЩЕНИЯ_ВХ" or CRD="РПО_ИЗВЕЩЕНИЯ_ИСХ":
   if ROV>0 or ROI>0:
     Try REC=StringToRecord(ExtractWord(2, aKey, ":")); Except REC=NIL; end;
     if CRD="РПО_ИЗВЕЩЕНИЯ_ВХ": RO=ROV; else RO=ROI; fi;
     if CRD=Up(WorkAreaCardFile(RO)) and REC<>NIL:
       pp=GetRecordNumber(RO, REC);
       if pp>0:
	 Try RES="Изв. №"+GetFieldS(RO, pp, "НОМЕРБУМ")+" от "+DateToString(GetFieldD(RO, pp,"ДАТАИЗВ")); Except RES=""; end;
       fi;
     fi;
   fi;
 |  CRD="юJUR":
   Try pp=Int(ExtractWord(2, aKey, ":")); Except pp=0; end;
   if pp>0: RES=KeyCMT[pp]; fi;
 |  CRD="яERR": RES="ПРОЧЕЕ";
 fi;
 if RES="": RES="НЕОПРЕДЕЛЕНО"; fi;
 ^RES;
end;

Proc btnРАСЧЕТ_OnClick(Sender: String); -- НОВЫЙ расчет
var CondAna, vCRD, val1, val2, val3, AccDeb, AccCreFull, AccCre, vDOC, vCMT, txtDat :String;
var SumD, SumK, Sum :Numeric;
var ii, ROнфа, OA, ROвхд, ROисх, num, pp, hh, count_CMT :Integer;
var vREC :Record;
var wDat :Date;

 if ПризнКонтр="" : Message("Выберите контрагента",mtError);		  Template.Field="Контр_"; Exit; fi;
 if ДК=1.1.100	  : Message("Введите дату",mtError);			  Template.Field="ДК";	   Exit; fi;
 if ДН>ДК	  : Message("Начальная дата превышает конечную",mtError); Template.Field="ДН";	   Exit; fi;
 if УслСч=""	  : Message("Введите условие на счета",mtError);	  Template.Field="УслСч";  Exit; fi;

 Refresh;
 Очистить;
 count_CMT=0;

 ROнфа=-1; OA=-1; ROвхд=-1; ROисх=-1;
 if ExistsCardFile("РПО_ОПЕРАЦИИДНФА")	: ROнфа = OpenWorkArea("РПО_ОПЕРАЦИИДНФА"  , ""); fi;
 if ExistsCardFile("РПО_ИЗВЕЩЕНИЯ_ВХ")	: ROвхд = OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ВХ"  , ""); fi;
 if ExistsCardFile("РПО_ИЗВЕЩЕНИЯ_ИСХ") : ROисх = OpenWorkArea("РПО_ИЗВЕЩЕНИЯ_ИСХ" , ""); fi;

 Try

   if not УслАн="": CondAna="("+УслАн+")&"+ПризнКонтр; else CondAna=ПризнКонтр; fi;
   Sum=Saldo(УслСч+"{"+CondAna+"}",ДН);
   ОстДебН=Deb(Sum); К_ОстКреН=if(fНеЗаполКонтр, 0.00, ОстДебН);
   ОстКреН=Cre(Sum); К_ОстДебН=if(fНеЗаполКонтр, 0.00, ОстКреН);

   ShowProgress(ДК-ДН,"Поиск информации...");
   Try
     for Transaction ii=УслСч+"{"+CondAna+"}",ДН,ДК do
       ProgressPos((ДК-ДН)-(ДК-TransDate(ii)));
       AccDeb=""; AccCre=""; AccCreFull=""; SumD=0.00; SumK=0.00;
       val1=TransDeb(ii);
       val2=TransCre(ii);
       if РАБ.БЮДЖЕТ2005.MatchMask(val1, УслСч) and not РАБ.БЮДЖЕТ2005.MatchMask(val2, УслСч): 
	 AccDeb=val1;
	 AccCre=РАБ.БЮДЖЕТ2005.ВзятьКодСчета(val2, "", "СЧ9", False);
	 --AccCre=val2;
	 AccCreFull=val2;
	 SumD=TransSum(ii);
	 SumK=0.00;
       |  РАБ.БЮДЖЕТ2005.MatchMask(val2, УслСч) and not РАБ.БЮДЖЕТ2005.MatchMask(val1, УслСч):
	 AccDeb=val2;
	 AccCre=РАБ.БЮДЖЕТ2005.ВзятьКодСчета(val1, "", "СЧ9", False);
	 --AccCre=val1;
	 AccCreFull=val1;
	 SumD=0.00;
	 SumK=TransSum(ii);
       fi;
       if (AccDeb<>"" and AccCre<>"") and (Round(SumD,2)<>0.00 or Round(SumK,2)<>0.00):
	 vCRD=TransCardFile(ii);
	 vREC=TransRecord(ii);
	 vCMT=TransComment(ii);
	 wDat=TransDate(ii);
	 txtDat=Format("%.4d", Year(wDat))+Format("%.2d", Mon(wDat))+Format("%.2d", Day(wDat));
	 vDOC="";
	 if vCRD="РПО_ИЗВЕЩЕНИЯ_ВХ" or vCRD="РПО_ИЗВЕЩЕНИЯ_ИСХ":
	   vDOC=vCRD+":"+RecordToString(vREC);
	 |  vCRD="РПО_ОПЕРАЦИИДНФА":
	   num=GetRecordNumber(ROнфа, vREC);
	   if num>0:
	     if OA=-1: OA=OpenArray(ROнфа, num, "ДОК", "", "not UKEYCRD=0 and (ВИДДОК='ВИДДОК.ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ВХ' or ВИДДОК='ВИДДОК.ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ИСХ')"); fi;
	     if not Records(OA)=0:
	       vDOC=if(GetFieldS(OA, 1, "ВИДДОК")="ВИДДОК.ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ВХ", "РПО_ИЗВЕЩЕНИЯ_ВХ", "РПО_ИЗВЕЩЕНИЯ_ИСХ") + ":{" + Str(GetFieldI(OA, 1, "UKEYCRD"))+"}";
	     fi;
	   fi;
	   if not OA=-1: CloseWorkArea(OA); OA=-1; fi;
	 fi;
	 if vDOC="": 
	   vCMT=TransComment(ii);
	   hh=SearchInArray(KeyCMT, vCMT, False, 1);
	   if not hh>0: 
	     count_CMT=count_CMT+1; 
	     KeyCMT[count_CMT]=vCMT;
	     hh=count_CMT;
	   fi;
	   vDOC="юJUR:"+Str(hh);
	 fi;
	 if vDOC="": vDOC="яERR:0"; fi;
	 val1=txtDat+vDOC+"$ $ $";
	 val2=txtDat+vDOC+"$"+AccDeb+"$"+AccCre+"$";
	 val3=AccDeb+"$"+AccCre;
	 num=-1;
	 num=SearchInArray(KeyDoc, 2val10, True, 1);
	 if not num>0:
	   pp=InsertInArraySort(KeyDoc, 2val10);
	   InsertInArray(ДО,	   pp, wDat);
	   InsertInArray(СчтДок,   pp, ОписаниеДокумента(vDOC, ROвхд, ROисх));
	   InsertInArray(КорДок,   pp, "по документу:");
	   InsertInArray(СумДеб,   pp, SumD);
	   InsertInArray(СумКре,   pp, SumK);
	   InsertInArray(К_СумДеб, pp, if(fНеЗаполКонтр, 0.00, SumK));
	   InsertInArray(К_СумКре, pp, if(fНеЗаполКонтр, 0.00, SumD));
	   InsertInArray(Содерж,   pp, "");
	   InsertInArray(ID,	   pp, ii);
	   InsertInArray(ДО_S,	   pp, wDat);
	   InsertInArray(СЧ_S,	   pp, УслСч);
	 else
	   СумДеб[num]=СумДеб[num]+SumD;
	   СумКре[num]=СумКре[num]+SumK;
	   К_СумДеб[num]=if(fНеЗаполКонтр, 0.00, СумДеб[num]);
	   К_СумКре[num]=if(fНеЗаполКонтр, 0.00, СумКре[num]);
	   if ID[num]>0: ID[num]=-1; fi;
	 fi;
	 num=-1;
	 num=SearchInArray(KeyDoc, 2val20, True, 1);
	 if not num>0:
	   pp=InsertInArraySort(KeyDoc, 2val20);
	   InsertInArray(ДО,	   pp, 1.1.100);
	   InsertInArray(СчтДок,   pp, AccDeb);
	   InsertInArray(КорДок,   pp, AccCre);
	   InsertInArray(СумДеб,   pp, SumD);
	   InsertInArray(СумКре,   pp, SumK);
	   InsertInArray(К_СумДеб, pp, if(fНеЗаполКонтр, 0.00, SumK));
	   InsertInArray(К_СумКре, pp, if(fНеЗаполКонтр, 0.00, SumD));
	   InsertInArray(Содерж,   pp, "");
	   InsertInArray(ID,	   pp, ii);
	   InsertInArray(ДО_S,	   pp, wDat);
	   InsertInArray(СЧ_S,	   pp, AccDeb+"/*."+AccCre);
	 else
	   СумДеб[num]=СумДеб[num]+SumD;
	   СумКре[num]=СумКре[num]+SumK;
	   К_СумДеб[num]=if(fНеЗаполКонтр, 0.00, СумКре[num]);
	   К_СумКре[num]=if(fНеЗаполКонтр, 0.00, СумДеб[num]);
	   if ID[num]>0: ID[num]=-1; fi;
	 fi;
	 num=-1;
	 num=SearchInArray(ОбрKey, 2val30, True, 1);
	 if not num>0:
	   pp=InsertInArraySort(ОбрKey, 2val30);
	   InsertInArray(СчтОбр,   pp, AccDeb);
	   InsertInArray(КорОбр,   pp, AccCreFull);
	   InsertInArray(ОбрДеб,   pp, SumD);
	   InsertInArray(ОбрКре,   pp, SumK);
	   InsertInArray(К_ОбрДеб, pp, if(fНеЗаполКонтр, 0.00, SumK));
	   InsertInArray(К_ОбрКре, pp, if(fНеЗаполКонтр, 0.00, SumD));
	   InsertInArray(ОбрТхт,   pp, "");
	 else
	   ОбрДеб[num]=ОбрДеб[num]+SumD;
	   ОбрКре[num]=ОбрКре[num]+SumK;
	   К_ОбрДеб[num]=if(fНеЗаполКонтр, 0.00, ОбрКре[num]);
	   К_ОбрКре[num]=if(fНеЗаполКонтр, 0.00, ОбрДеб[num]);
	 fi;
       fi; --if (AccDeb<>"" and AccCre<>"") and (Round(SumD,2)<>0.00 or Round(SumK,2)<>0.00):
     od; --for Transaction
     Упр =LengthOfArray(KeyDoc);
     Упр2=LengthOfArray(ОбрKey);
   Finally
     CloseProgress;
   end;
 Finally
   if not ROнфа=-1: CloseWorkArea(ROнфа); fi;
   if not ROвхд=-1: CloseWorkArea(ROвхд); fi;
   if not ROисх=-1: CloseWorkArea(ROисх); fi;
 end;
 Message("Расчет завершен");
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn("","","РПО.КОНТРАГЕНТЫ.АКТСВЕРКИ.000.cfg","",1);
end;

Proc btnОчистить_OnClick(Sender: String);
 Очистить;
end;

Proc btnНастр_OnClick(Sender: String);
 УслСч=МаскаСч;
 УслАн="~ЗГ";
 Очистить;
end;

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

Proc cbНеЗаполКонтр_OnChange(Sender: String);
var Iter:I;
 if fНеЗаполКонтр:
   ClearVariable(К_ОстДебН);
   ClearVariable(К_ОстКреН);
   ClearVariable(К_СумДеб);
   ClearVariable(К_СумКре);

   ClearVariable(К_ОбДеб);
   ClearVariable(К_ОбКре);
   ClearVariable(К_ОбрДеб);
   ClearVariable(К_ОбрКре);

 else
   К_ОстДебН=ОстКреН;
   К_ОстКреН=ОстДебН;
   for Iter=1..Упр do
     К_СумДеб[Iter]=СумКре[Iter];
     К_СумКре[Iter]=СумДеб[Iter];
   od;
 fi;
end;

--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc CopyCfgPrn(Cfg:String);
var OK :Logical;
 OK=ExistFile(РАБ.БЮДЖЕТ2005.Контроль2Слэш(PlanVar("INI")+"\"+Cfg));
 if OK: 
   Try 
     DeleteFile(РАБ.БЮДЖЕТ2005.Контроль2Слэш(PlanVar("INI")+"\"+Cfg));
     РАБ.НАСТР_ПЕЧАТЬ.CreateCfg(PlanVar('Общие')+'\Настройки\', Cfg);
   Except
   end;
 else
   РАБ.НАСТР_ПЕЧАТЬ.CreateCfg(PlanVar('Общие')+'\Настройки\', Cfg);
 fi;
end;

Proc OnOpen(Create: Logical);
 if Учреждение="":
    ЗаполнитьРекв(Раб.Бюджет2005.НашРекв);
 fi;
 if УслСч="": УслСч=МаскаСч; fi;
 if ДК=1.1.100: 
    ДК=ToDay; 
    if Day(ДК)=1 and Mon(ДК)=1: ДН=Dat(1,1,Year(ДК-1)); else ДН=Dat(1,1,Year(ДК)); fi;
 fi;
 CopyCfgPrn("ТББ_STD_Album10_000.cfg");
end;
--Обработчики событий шаблона -----
--






Конец
