-- Шаблон создан мастером бланков
-- 30.11.2002 13:24:02
--
БланкСШаблоном "Денежное обязательство", Редактор РПО_ДО;

var ClosedModFob_:L=ClosedModFob;

var УпрНастр:L;
var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var fJumpOff:L;
var fJumpOff_:S=if(fJumpOff,"Да","Нет");
var fJumpНаимСчет:L;
var fJumpНаимСчет_:S=if(fJumpНаимСчет,"Да","Нет");
var fJumpКоммент:L;
var fJumpКоммент_:S=if(fJumpКоммент,"Да","Нет");
var fJumpПризн:L;
var fJumpПризн_:S=if(fJumpПризн,"Да","Нет");
var fАвтоОбновСпцф:L;
var fАвтоОбновСпцф_:S=if(fАвтоОбновСпцф,"Да","Нет");
var fЗачет_КЗ:L;
var extКлюч:S;

var НастрGUID:S;

var FlagEdit:L;

Страница:I;

var Start:S="";

btnOK	    : Object;
btnОтмена   : Object;
btnНастр    : Object;
btnСписокОпл: Object;
btnОплатить : Object;
btnОплРеестр: Object;
btnРеестр   : Object;
btnУдалить  : Object;
btnЗакрыть  : Object;
cbРег	    : Object;
cbУчетБО    : Object;
cbУчетБО_ФК : Object;
cbАванс     : Object;
cbЦЗ	    : Object;
cbУчетНДС   : Object;
cbАннул     : Object;
cbЗакрДок   : Object;
cbНеПровДО  : Object;
cbЗачет_КЗ  : Object;
btnПлат     : Object;
btnОсн	    : Object;
btnРасшифр  : Object;
btnНДС	    : Object;
btnГЭК1     : Object;
btnАннул    : Object;
btnГЭК2     : Object;
btnСвязДок  : Object;
btnБухСправ : Object;
btnПровДоп  : Object;
btnИспДок   : Object;

var ИсклПризн:S="К.*|ДОГОВОР.*|БО.*|ОКДП.*|ОКДП2.*|ОКПД.*|ПЕРИОД.*|ИСПДОК.*|СОП.*";

--var FlagОКДП:L=((Настр.ДО_УчетОКДП>=0 or (Настр.ДО_УчетОКДП=-1 and (УчетБО or (not УчетБО and not Договор.Учет_Реестр_ОФК)))) and ДатаРег>=1.1.11);
--var FlagТМЦ:L=(Настр.ДО_УчетТМЦ>=0 or (Настр.ДО_УчетТМЦ=-2 and (УчетБО or (not УчетБО and not Договор.Учет_Реестр_ОФК)))) and not Аванс;
var FlagОКДП:L=if(ДатаРег>=1.1.2014,False,((Настр.ДО_УчетОКДП>=0 or (Настр.ДО_УчетОКДП=-1 and (УчетБО or (not УчетБО and not Договор.Учет_Реестр_ОФК)))) and ДатаРег>=1.1.11)); --временная заглушка
var FlagТМЦ:L=(Настр.ДО_УчетТМЦ>=0 or (Настр.ДО_УчетТМЦ=-2 and (УчетБО or (not УчетБО and not Договор.Учет_Реестр_ОФК)))) and not Аванс;

var Секрет_:S=Раб.Договор.Секретность(Секрет,False);

var Учр_Банк_Банк:S=Учр_Банк.Банк+" "+Учр_Банк.Город;
var isФК:L=not (Учр_Банк.РПО_ОФК_Имя="" and Учр_Банк.РПО_ОФК_Код="" and Учр_Банк.РПО_ЛСчет="");

var НаимДок_Наим:S=НаимДок.Наим;
var НомерДок_:S=НомерДок;
var НомерДокДоп_:S=НомерДокДоп;
var ДатаДок_:D=ДатаДок;

var Договор_:S=Договор.НаимДок.Наим+" №"+Договор.НомерДок+" от "+DateToString(Договор.ДатаДок);
var exДоговор:S="";
var Договор_Экз:S=if(not Договор.НаимИзм.Наим="" and not Договор.ДатаДИзм=1.1.100:Договор.НаимИзм.Наим+" №"+Договор.НомерИзм+" от "+DateToString(Договор.ДатаДИзм)|Договор.ТипИзм=4:"Перерегистрация на очередной год"|not Договор.ОснИзм="":Договор.ОснИзм|true:"Текущая");
var Договор_Статус:S=if(not Договор.НеДейств:"Действующая редакция"|Договор.GUID="NEW":"Новая редакция"|True:"Недействующая редакция");

var ДО_:S=ДО.НаимДок.Наим+" №"+ДО.НомерДок+" от "+DateToString(ДО.ДатаДок);
var setЗачет_КЗ:I;
var flagЗачет_КЗ:L=(setЗачет_КЗ<0 and Зачет_КЗ<0) or (setЗачет_КЗ>0 and Зачет_КЗ>0);

var Наличные_:S=if(Наличные,"V","");

var Контр_КорИмя:S=Контр.КорИмя;
var Контр_Телефон:S=if(Контр.Телефон="",Контр.Факс,Контр.Телефон);
var Контр_РПО_Статус:S=Раб.Договор.СтатусКонтрагента(Контр.РПО_Статус,False,"");
var Контр_Банк_Банк:S=Контр_Банк.Банк+" "+Контр_Банк.Город;

var МФ_:S=Месяц(Int(МФ));
var БО_:S=if(УчетБО,if(БО=nil,"<не зарегистрировано>","БО."+БО.Признак+if(БО.Рег," (учетный номер №"+БО.РегНомер+" от "+DateToString(БО.РегДата)+")","")),if(БО_Призн="БО.","<не зарегистрировано>",БО_Призн));
var БО_Изм_:S=if(БО_Изм=nil,"<не зарегистрировано>","БО."+БО_Изм.Признак+"/"+Str(БО_Изм.Изм)+if(БО_Изм.Рег," (учетный номер №"+БО_Изм.РегНомер+" от "+DateToString(БО_Изм.РегДата)+")",""));

var ОчистРасшифр:S=if(Рег,"","Очистить");
var ОбновСпецифик:S=if(Рег,"","Обновить спецификацию договора");

var verОКДП_Гр_:S="в ред. прик. № "+if(verОКДП_Гр=273,"273","601");

var ЗаглГр6:S="По состоянию на "+DateToString(ДатаРег);
var ЗаглГр6_Кол:S=if(УчетТМЦ or flagТМЦ:if(Аванс,if(УчетОКДП or flagОКДП,"по номенклатуре",""),"Количество")|УчетОКДП or flagОКДП:"по номенклатуре"|True:"");

var A:S=if(Рег,"","+");
var AA:S=if(Рег,"","++");
var D:S=if(Рег,"","-");
var пп[]:i=$;
var Призн_[]:S=Расшифр[$].Призн+" "+Расшифр[$].ПризнДоп;
var Предм[]:S=if(Расшифр[$].ТМЦ=nil,Расшифр[$].Предм1+Расшифр[$].Предм2+Расшифр[$].Предм3+Расшифр[$].Предм4,Расшифр[$].ТМЦ.Коммент);
var lenПредм[]:i=if(Расшифр[$].ТМЦ=nil,Length(Расшифр[$].Предм1)+Length(Расшифр[$].Предм2)+Length(Расшифр[$].Предм3)+Length(Расшифр[$].Предм4),Length(Расшифр[$].ТМЦ.Коммент));
var Предм_[]:S=if(lenПредм[$]>255,SubStr(Предм[$],1,252)+">>>",Предм[$]);
var ТМЦ_:S=if(Рег,"","ТМЦ");
var exПредм:S=">>";
var СумДоговор_[]:N=Расшифр[$].СумДоговор;
var КолДоговор_[]:N=Расшифр[$].КолДоговор;
var СумДО_[]:N=Расшифр[$].СумДО;
var КолДО_[]:N=Расшифр[$].КолДО;
var Опер_[]:S=if(Расшифр[$].ВидОпер="00"     :"Остатки"
		|Расшифр[$].ВидОпер="105.31" :"Закупка медик-тов"
		|Расшифр[$].ВидОпер="105.32" :"Закупка продуктов"
		|Расшифр[$].ВидОпер="105.33" :"Закупка ГСМ"
		|Расшифр[$].ВидОпер="105.34" :"Закупка строй. мат."
		|Расшифр[$].ВидОпер="105.35" :"Закупка мягкого инв."
		|Расшифр[$].ВидОпер="105.36" :"Закупка прочих МЗ"
		|Расшифр[$].ВидОпер="105.38" :"Закупка штучной продукции"
		|Расшифр[$].ВидОпер="106.11" :"Вложения в ОС - недвиж. имущ."
		|Расшифр[$].ВидОпер="106.31" :"Вложения в ОС - иное движ. имущ."
		|Расшифр[$].ВидОпер="106.34" :"Вложения в МЗ"
		|Расшифр[$].ВидОпер="109.60" :"Затраты, себестоимость"
		|Расшифр[$].ВидОпер="109.70" :"Затраты, накладные расходы"
		|Расшифр[$].ВидОпер="109.80" :"Затраты, общехоз. расходы"
		|Расшифр[$].ВидОпер="109.90" :"Затраты, издержки обращения"
		|Расшифр[$].ВидОпер="109.61" :"Затраты, себестоимость"
		|Расшифр[$].ВидОпер="109.71" :"Затраты, накладные расходы"
		|Расшифр[$].ВидОпер="109.81" :"Затраты, общехоз. расходы"
		|Расшифр[$].ВидОпер="109.91" :"Затраты, издержки обращения"
		|Расшифр[$].ВидОпер="206"    :"Аванс"
		|Расшифр[$].ВидОпер="304.04" :"Внутриведом- ственные расчеты"
		|Расшифр[$].ВидОпер="304.04_":"Внутриведом. расчеты (без формирования извещения)"
		|Расшифр[$].ВидОпер="401.20" :"Расходы"
		|Расшифр[$].ВидОпер="401.50" :"Расх. будущ. периодов"
		|Расшифр[$].ВидОпер="*"      :"Выбор из плана счетов"
		|Расшифр[$].ВидОпер="730"    :"Зачет увеличения КЗ"
		|Расшифр[$].ВидОпер="730+830":"Зачет увел.КЗ + уменьш.КЗ"
		|True: Расшифр[$].ВидОпер
		);

var Пер_[]:S=if(Int(ТекГод)-Year(ДатаРег)>0 and not Расшифр[$].ВидОпер="00",Str(Min(3,Int(ТекГод)-Year(ДатаРег)+1)),"1");
var СчДеб_ДО[]:S=if(not НеПровДО and not Расшифр[$].ВД="3" and not Расшифр[$].КБК="",SubStr(Расшифр[$].КБК,1,20)+"."+Расшифр[$].ВД+".502."+Пер_[$]+"1."+SubStr(Расшифр[$].КБК,22,3),"");
var СчКре_ДО[]:S=if(not НеПровДО and not Расшифр[$].ВД="3" and not Расшифр[$].КБК="",SubStr(Расшифр[$].КБК,1,20)+"."+Расшифр[$].ВД+".502."+Пер_[$]+"2."+SubStr(Расшифр[$].КБК,22,3),"");

var ИтогСум:N=SumOfArray(Расшифр[].Сум);
var ИтогСумРуб:N=SumOfArray(Расшифр[].СумРуб);
var ИтогСумСНДС:N=SumOfArray(Расшифр[].СумСНДС);
var ИтогСумРубСНДС:N=SumOfArray(Расшифр[].СумРубСНДС);
var ИтогСумНДС:N = ИтогСумСНДС - ИтогСум;
var ИтогСумРубНДС:N = ИтогСумРубСНДС - ИтогСумРуб;
var НДСПризн[]:S=Позиции_НДС[$].Призн;
var НДСИтогСум:N=SumOFarray(Позиции_НДС[].Сум,Позиции_НДС);
var НДСИтогСумРуб:N=SumOFarray(Позиции_НДС[].СумРуб,Позиции_НДС);
var НДСИтогСумСНДС:N=SumOFarray(Позиции_НДС[].СумСНДС,Позиции_НДС);
var НДСИтогСумРубСНДС:N=SumOFarray(Позиции_НДС[].СумРубСНДС,Позиции_НДС);

var ИтогСум_Аннул:N=SumOfArray(Расшифр[].Сум_Аннул);
var ИтогСумРуб_Аннул:N=SumOfArray(Расшифр[].СумРуб_Аннул);

var nРасшифр:I=Расшифр;
var nПозиции_НДС:I=Позиции_НДС;
var nСвертка:I=Свертка;

var Buf[]:S;
var Buf2[]:S;
var Buf3[]:S;
var BufF[]:S;

var crdНастр	  :S=if(Настр.crdНастр="",Раб.Договор.crdНастр,Настр.crdНастр);
var crdДоговор_Признак:S=Раб.Договор.crdДоговор_Признак;
var crdДоговор	  :S=if(Настр.crdДоговор="",Раб.Договор.crdДоговор,Настр.crdДоговор);
var crdДоговор_КБК:S=if(Настр.crdДоговор_КБК="",Раб.Договор.crdДоговор_КБК,Настр.crdДоговор_КБК);
var crdДоговор_ТМЦ:S=if(Настр.crdДоговор_ТМЦ="",Раб.Договор.crdДоговор_ТМЦ,Настр.crdДоговор_ТМЦ);
var crdДО	  :S=if(Настр.crdДО="",Раб.Договор.crdДО,Настр.crdДО);
var crdБО	  :S=if(Настр.crdБО="",Раб.Договор.crdБО,Настр.crdБО);

var blnНастр	  :S=if(Настр.blnНастр="",Раб.Договор.blnНастр,Настр.blnНастр);
var blnДоговор	  :S=if(Настр.blnДоговор="",Раб.Договор.blnДоговор,Настр.blnДоговор);
var blnДО	  :S=if(Настр.blnДО="",Раб.Договор.blnДО,Настр.blnДО);
var blnБО	  :S=if(Настр.blnБО="",Раб.Договор.blnБО,Настр.blnБО);

hЦЗ:L;
hПрефиксНомСвед:S;
hОбщ_Призн1:S;
hОбщ_Призн2:S;
hНаимСчет: Record;
var hПризн:S;
var hПризн2:S;
hНДС:S;
var hВыделятьНДС:L;
var hСчФ_Ном:S;
var hСчФ_Дат:D;
var hСчДеб:S;
var hСчКре:S;
var hСчКорр_Аннул:S;
var hСчДеб2:S;
var hСчКре2:S;
var hСчКорр_Аннул2:S;

var fОКВ:I;
var fОКДП:I;
var fОКЕИ:I;

var nГЭК:I;
var РедГЭК:S=if(Рег,"Просмотр","Сканировать \ Редактировать");
var СканГЭК:S=if(Рег or not nГЭК=0,"","Сканировать");
var СканГЭКD:S=if(Рег or not nГЭК=0 or not Раб.Вспом.Сканер.enableDuplex,"","Скан. две стороны");
var ОбновитьГЭК:S="Обновить";
var ГЭКвPDF:S="Выгрузить в PDF";
    ПутьPDF:S;
var MaxЛистГЭК:I=30;
var ЛистГЭК[]:S;
var ФайлГЭК[]:S;
var storeY:I;

var ОбновСвязДок:S="Обновить";

var УпрДок:I;
var ДокCU[]:S;
var ДокMU[]:S;
var ДокОпр[]:D;
var ДокНаим[]:S;
var ДокНом[]:S;
var ДокДат[]:D;
var ДокКмнт[]:S;
var ДокТекРед[]:S;
var ДокTr[]:I;
var ДокRec[]:Record;
var ДокCrd[]:S;

var СканГЭК2:S=if(Рег,"","Сканировать (диалог)");
var СканГЭК2_:S=if(Рег,"","Сканировать");
var СканГЭК2D:S=if(Рег or not Раб.Вспом.Сканер.enableDuplex,"","Скан. две стороны");
var ОбновГЭК2:S="Обновить";
var ГЭК2вPDF:S="Выгрузить в PDF";

var УпрГЭК2:I;
var ГЭК2Дат[]:D;
var ГЭК2Лист[]:S;
var ГЭК2Кмнт[]:S;
var ГЭК2Rec[]:Record;

var ОбновБухСправ:S="Обновить";
var СоздатьБухСправ:S="Создать";

var УпрБух:I;
var БухДат[]:D;
var БухКмнт[]:S;
var БухRec[]:Record;
var БухCrd[]:S;
var БухАннул[]:L;

var ОчисПров:S=if(Рег,"","Очистить");
var ПризнПров_[]:S=ПровДоп[$].Призн;
var ПризнПров__:S="";
var ИтогСумПров:N=SumOfArray(ПровДоп[].Сум);
var ИтогСумРубПров:N=SumOfArray(ПровДоп[].СумРуб);
var ИтогСум_АннулПров:N=SumOfArray(ПровДоп[].Сум_Аннул);
var ИтогСумРуб_АннулПров:N=SumOfArray(ПровДоп[].СумРуб_Аннул);

var СоздатьИспДок:S=if(Рег or not Исп_Док=nil or not Договор=nil,"","Создать");
var Исп_Док_Признак_:S=if(Исп_Док=nil,"","ИСПДОК."+Исп_Док.Признак);
var ОтчИспДок:S=if(Исп_Док=nil,"","Отчет");
var ОтчИспДок2:S=if(Исп_Док=nil,"","Отчет по проводкам");

var BufField[]:S;
var BufColorBg[]:I;
var BufColorFo[]:I;
var FlagInit:L;

var ОКДП_Гр_:S;
var ОКДП_:S;

var nS:I=7;

S0: Section;
S1: Section;
S2: Section;
S3: Section;
S4: Section;
S5: Section;
S6: Section;
S7: Section;
S8: Section;
S9: Section;

S13: Section; --ГЭК1
S14: Section;

S15: Section; --Список связных документов
S16: Section;
S17: Section;

S18: Section; --ГЭК2
S19: Section;
S20: Section;

S21: Section; --Бух.справка
S22: Section;
S23: Section;
S24: Section;

S25: Section; --Доп.проводки
S26: Section;
S27: Section;

S28: Section; --Исп.Документы


Picture1 : Object; Label1 : Object; Bevel1 : Object;
Picture2 : Object; Label2 : Object; Bevel2 : Object;
Picture3 : Object; Label3 : Object; Bevel3 : Object;
Picture4 : Object; Label4 : Object; Bevel4 : Object;
Picture5 : Object; Label5 : Object; Bevel5 : Object;
Picture6 : Object; Label6 : Object; Bevel6 : Object;
Picture7 : Object; Label7 : Object; Bevel7 : Object;
Picture8 : Object; Label8 : Object; Bevel8 : Object;
Picture9 : Object; Label9 : Object; Bevel9 : Object;
Picture10: Object; Label10: Object; Bevel10: Object;
Picture11: Object; Label11: Object; Bevel11: Object;
Picture12: Object; Label12: Object; Bevel12: Object;
Picture13: Object; Label13: Object; Bevel13: Object;
Picture14: Object; Label14: Object; Bevel14: Object;
Picture15: Object; Label15: Object; Bevel15: Object;
Picture16: Object; Label16: Object; Bevel16: Object;
Picture17: Object; Label17: Object; Bevel17: Object;
Picture18: Object; Label18: Object; Bevel18: Object;
Picture19: Object; Label19: Object; Bevel19: Object;
Picture20: Object; Label20: Object; Bevel20: Object;
Picture21: Object; Label21: Object; Bevel21: Object;
Picture22: Object; Label22: Object; Bevel22: Object;
Picture23: Object; Label23: Object; Bevel23: Object;
Picture24: Object; Label24: Object; Bevel24: Object;
Picture25: Object; Label25: Object; Bevel25: Object;
Picture26: Object; Label26: Object; Bevel26: Object;
Picture27: Object; Label27: Object; Bevel27: Object;
Picture28: Object; Label28: Object; Bevel28: Object;
Picture29: Object; Label29: Object; Bevel29: Object;
Picture30: Object; Label30: Object; Bevel30: Object;

var ЗКР_ДатаДок:D;
var ЗКР_ДатаПодписи:D;
var ЗКР_ДолжнРук:S;
var ЗКР_ФИОРук:S;
var ЗКР_ДолжнБух:S;
var ЗКР_ФИОБух:S;

var Self:Record;

--
--Процедуры и функции -------------			      
Proc СверткаПроводок;
var Iter,z:i;
var Key,Призн_,Mask:S;
 ClearVariable(Свертка);
 ClearVariable(Buf);
 for Iter=1..Расшифр do
  Призн_=Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп);
  if not Расшифр[Iter].ОКДП_Призн="":
     Mask=Раб.Бюджет2005.Объединить(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,"|");
     Mask=Раб.Бюджет2005.СписокСправ(Mask,1,"");
     if Раб.Бюджет2005.MatchMask(Расшифр[Iter].ОКДП_Призн,Mask):
	Призн_=Trim(Призн_+" "+Расшифр[Iter].ОКДП_Призн);
     fi;
  fi;
  Key=Расшифр[Iter].СчДеб+"#"+Расшифр[Iter].СчКре+"#"+Призн_+"#"+Расшифр[Iter].ВидОпер+"#"+if(Расшифр[Iter].ВыделятьНДС,"1","0")+"#"+if(Расшифр[Iter].НеПров,"1","0");
  z=SearchInArray(Buf,Key,True);
  if z=-1:
     z=InsertInArraySort(Buf,Key);
     z=InsertFrame(Свертка,z);
     Свертка[z].Признаки=Призн_;
     Свертка[z].ВыделятьНДС=Расшифр[Iter].ВыделятьНДС;
     Свертка[z].ВидОпер=Расшифр[Iter].ВидОпер;
     Свертка[z].СчДеб=Расшифр[Iter].СчДеб;
     Свертка[z].СчКре=Расшифр[Iter].СчКре;
     Свертка[z].СчКорр_Аннул=Расшифр[Iter].СчКорр_Аннул;
     Свертка[z].НеПров=Расшифр[Iter].НеПров;
  fi;
  Свертка[z].Сум=Свертка[z].Сум+Расшифр[Iter].Сум;
  Свертка[z].СумРуб=Свертка[z].СумРуб+Расшифр[Iter].СумРуб;
  Свертка[z].СумСНДС=Свертка[z].СумСНДС+Расшифр[Iter].СумСНДС;
  Свертка[z].СумРубСНДС=Свертка[z].СумРубСНДС+Расшифр[Iter].СумРубСНДС;
  Свертка[z].Сум_Аннул=Свертка[z].Сум_Аннул+Расшифр[Iter].Сум_Аннул;
  Свертка[z].СумРуб_Аннул=Свертка[z].СумРуб_Аннул+Расшифр[Iter].СумРуб_Аннул;
 od;
end;

Proc Настр_(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(blnДО,0,0,"",НастрGUID):
    Раб.Настр.Добавить("fJumpOff","L");
    Раб.Настр.Добавить("fJumpНаимСчет","L");
    Раб.Настр.Добавить("fJumpКоммент","L");
    Раб.Настр.Добавить("fJumpПризн","L");
    Раб.Настр.Добавить("fАвтоОбновСпцф","L");
    Раб.Настр.Добавить("fЗачет_КЗ","L");
    Раб.Настр.Добавить("extКлюч","S");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
	  Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
end;

Proc ОткрНастр (Flag:L);
 btnOK.Visible=not Flag;
 btnОтмена.Visible=not Flag;
 btnНастр.Visible=not Flag;
 btnСписокОпл.Visible=not Flag;
 btnОплатить.Visible=not Flag;
 btnОплРеестр.Visible=not Flag;
 btnРеестр.Visible=not Flag;
 btnУдалить.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 cbРег.Visible=not Flag;
 cbУчетБО.Visible=not Flag;
 cbУчетБО_ФК.Visible=not Flag;
 cbАннул.Visible=not Flag;
 cbАванс.Visible=not Flag;
 cbЦЗ.Visible=not Flag;
 cbУчетНДС.Visible=not Flag;
 btnУдалить.Visible=not Flag;
 btnПлат.Visible=not Flag;
 btnОсн.Visible=not Flag;
 btnРасшифр.Visible=not Flag;
 btnНДС.Visible=not Flag;
 btnГЭК1.Visible=not Flag;
 btnАннул.Visible=not Flag;
 btnСвязДок.Visible=not Flag;
 btnГЭК2.Visible=not Flag;
 btnБухСправ.Visible=not Flag;
 btnПровДоп.Visible=not Flag;
 btnИспДок.Visible=not Flag;
 cbЗакрДок.Visible=not Flag and Раб.Бюджет2005.Сетевая;
 cbНеПровДО.Visible=not Flag;
 cbЗачет_КЗ.Visible=not Flag and (not setЗачет_КЗ=0 or not Зачет_КЗ=0 or fЗачет_КЗ);
 УпрНастр=Flag;
 if Flag=True: Template.Field="extКлюч"; Template.Frame=1; fi;
end;

Func ПолучитьНастр:Record;
var OWA,nr:I;
-- OWA=OpenWorkArea(crdНастр,"Дата","ObjCrd='"+crdДоговор+"' and ТипДок="+Str(Договор.ТипДок));
 OWA=OpenWorkArea(crdНастр,"Дата","ObjCrd='"+crdДоговор+"'");
 Try
  nr=Records(OWA);
  if not nr=0: ^GetRecordKey(OWA,nr); fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^nil;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor,i,x:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..nS do
  if FindObject("S"+Str(if(s=6:26|s=7:28|true:s)),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
       Try
	BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
	if BgColor=coAqua or BgColor=coTeal or BgColor=coLime:
	   Field=asString(Obj.Cell(r,c,CellContents,""));
	   if SearchInArray(BufField,Field,True)=-1:
	      n=InsertInArraySort(BufField,Field);
	      InsertInArray(BufColorBg,n,BgColor);
	   fi;
	fi;
       Except
       end;
      od;
     od;
  fi;
 od;
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
 --
 x=110;
 for i=1..MaxЛистГЭК do
  if i=1 or i=7 or i=13 or i=19 or i=25: x=110; fi;
  if FindObject("Picture"+Str(i),Obj): Obj.Left=X; fi;
  if FindObject("Bevel"+Str(i),Obj): Obj.Left=X; fi;
  if FindObject("Label"+Str(i),Obj): Obj.Left=X;fi;
  x=x+310;
 od;
end;

Func ЗапретитьПоле (Field:S):L;
 if Field="ОКВ": ^not УчетБО;
   |Field="Учр.КорИмя": ^not УчетБО;
   |Field="Контр_Банк.БанкИмя": ^not УчетБО and Настр.ДО_ВыборКонтрБанк=-1;
   |Field="Договор_": ^УчетБО;
--   |Field="Контр_КорИмя": ^not УчетБО;
   |Field="Общ_Призн1": ^not УчетБО;
   |Field="Общ_Призн2": ^not УчетБО;
   |Field="verОКДП_Гр_": ^not УчетБО;
   |Field="ВД": ^not УчетБО;
   |Field="Исп_Док_Признак_": ^not Договор=nil;
 fi;
 ^False;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
var Flag:L;
btnОплатить.Enabled=Рег;
btnОплатить.Caption="Оплатить "+if(isФК,"ЗКР","ПП");
btnОплРеестр.Enabled=Рег and isФК;
cbУчетБО.Enabled=not Рег;
cbУчетБО_ФК.Enabled=not Рег and УчетБО;
cbАванс.Enabled=not Рег and Зачет_КЗ=0;
cbЦЗ.Enabled=not Рег and not Аванс and not Зачет_КЗ=1;
cbЗакрДок.Visible=Раб.Бюджет2005.Сетевая;
cbУчетНДС.Enabled=not Рег;
btnУдалить.Enabled=not Рег;
cbЗачет_КЗ.Enabled=not Рег and not Аванс;
cbЗачет_КЗ.Visible=not setЗачет_КЗ=0 or not Зачет_КЗ=0 or fЗачет_КЗ;
cbЗачет_КЗ.Caption=if(setЗачет_КЗ=-1,"К зачету кредиторской задолженности","Зачет кредиторской задолженности");
for s=1..nS do
 if FindObject("S"+Str(if(s=6:26|s=7:28|true:s)),Obj):
    rr=asInteger(Obj.RowsCount);
    cc=asInteger(Obj.ColsCount);
    for r=1 .. rr do
     for c=1 .. cc do
      Try
       Field=asString(Obj.Cell(r,c,CellContents,""));
       n=SearchInArray(BufField,Field,True);
       if n=-1:
	  if Field="Договор_Статус": Obj.Cell(r,c,CellFontColor,if(not Договор.НеДейств,coGreen,coRed)); fi;
	 else
	  if (Рег or ЗапретитьПоле(Field)) and (not (Field="СчКорр_Аннул" or Field="Кол_Аннул" or Field="Сум_Аннул" or Field="СумРуб_Аннул" or Field="Аннул_Дата" or Field="СумДок_Аннул" or Field="СумРубДок_Аннул" or Field="Аннул_Кмнт" or Field="Аннул_ДолжнРук" or Field="Аннул_ФИОРук" or Field="Аннул_ДатаСвед" or Field="Аннул_ДатаРук") or ((Field="СчКорр_Аннул" or Field="Кол_Аннул" or Field="Сум_Аннул" or Field="СумРуб_Аннул" or Field="Аннул_Дата" or Field="СумДок_Аннул" or Field="СумРубДок_Аннул"  or Field="Аннул_Кмнт" or Field="Аннул_ДолжнРук" or Field="Аннул_ФИОРук" or Field="Аннул_ДатаСвед" or Field="Аннул_ДатаРук") and Аннул)):
	     Obj.Cell(r,c,CellFontColor,coBlack);
	     Obj.Cell(r,c,CellBgColor,coTransparent);
	     Obj.Cell(r,c,CellReadOnly,True);
	    else
	     Flag=False;
	     if Field="Предм_" : if Аванс or УчетБО: 
				    BufColorFo[n]=coBlack;
				    BufColorBg[n]=coAqua; 
				   else 
				    BufColorFo[n]=coWhite; 
				    BufColorBg[n]=coTeal; 
				 fi;
	       |Field="ОКДП_Гр": if УчетБО: 
				    BufColorFo[n]=coBlack; 
				    BufColorBg[n]=coAqua;
				   else 
				    if (УчетТМЦ or flagТМЦ) and not Аванс:
				       BufColorFo[n]=coBlack;
				       BufColorBg[n]=coTransparent;
				       Flag=True;
				      else
				       BufColorFo[n]=coWhite; 
				       BufColorBg[n]=coTeal;
				    fi;
				 fi;
	       |Field="ОКДП"   : if УчетБО:
				    if Аванс:
				       BufColorFo[n]=coBlack;
				       BufColorBg[n]=coTransparent;
				       Flag=True;
				      else
				       BufColorFo[n]=coBlack;
				       BufColorBg[n]=coAqua;
				    fi;
				   else
				    if (УчетТМЦ or flagТМЦ) or Аванс:
				       BufColorFo[n]=coBlack;
				       BufColorBg[n]=coTransparent;
				       Flag=True;
				      else
				       BufColorFo[n]=coWhite;
				       BufColorBg[n]=coTeal;
				    fi;
				 fi;
	       |Field="ЕдИзм"  : if УчетБО: 
				    BufColorBg[n]=coAqua; 
				   else 
				    BufColorBg[n]=coTransparent; 
				    Flag=True; 
				 fi;
	     fi;
	     Obj.Cell(r,c,CellFontColor,BufColorFo[n]);
	     Obj.Cell(r,c,CellBgColor,BufColorBg[n]);
	     Obj.Cell(r,c,CellReadOnly,Flag);
	  fi;
       fi;
      Except
      end;
     od;
     if Field="@ФК": Obj.Row(r,RowVisible,isФК);
       |Field="@Руб": Obj.Row(r,RowVisible,not (ОКВ="643" or ОКВ="RUB") and not ОКВ="");
       |Field="@Договор": Obj.Row(r,RowVisible,not УчетБО);
       |Field="@УчетБО": Obj.Row(r,RowVisible,УчетБО);
       |Field="@УчетБОНеАванс": Obj.Row(r,RowVisible,УчетБО and not Аванс);
       |Field="@Общ_Справ1": Obj.Row(r,RowVisible,not Настр.Общ_Справ1="" or not Общ_Призн1="");
       |Field="@Общ_Справ2": Obj.Row(r,RowVisible,not Настр.Общ_Справ2="" or not Общ_Призн2="");
       |Field="@Зачет": Obj.Row(r,RowVisible,Зачет_КЗ>0 or setЗачет_КЗ>0);
       |Field="@ЦЗ": Obj.Row(r,RowVisible,ЦЗ and not Аванс);
       |Field="@Нал": Obj.Row(r,RowVisible,not Наличные);
     fi;
    od;
  fi;
 od;
 cc=asInteger(S4.ColsCount);
 for c=1..cc do
  Field=asString(S4.Cell(1,c,CellContents,""));
  n=1;
  if Field="@Предм":   Flag=FlagТМЦ or УчетТМЦ;
    |Field="@ТМЦ":     Flag=(FlagТМЦ or УчетТМЦ) and not Аванс;
    |Field="@ОКДП":    Flag=FlagОКДП or УчетОКДП;
    |Field="@Договор": Flag=not УчетБО;
    |Field="@Руб":     Flag=(not ОКВ="" and not (ОКВ="643" or ОКВ="RUB"));
    |Field="@РубНДС":  Flag=(not ОКВ="" and not (ОКВ="643" or ОКВ="RUB") and УчетНДС);
    |Field="@НДС":     Flag=УчетНДС;
    |True: n=0;
  fi;
  if n=1:
     S4.Column(c,ColVisible,Flag);
     S5.Column(c,ColVisible,Flag);
     S6.Column(c,ColVisible,Flag);
  fi;
 od;
 cc=asInteger(S7.ColsCount);
 for c=1..cc do
  Field=asString(S7.Cell(1,c,CellContents,""));
  n=1;
  if Field="@Руб": Flag=(not ОКВ="" and not (ОКВ="643" or ОКВ="RUB"));
    |True: n=0;
  fi;
  if n=1:
     S7.Column(c,ColVisible,Flag);
     S8.Column(c,ColVisible,Flag);
     S9.Column(c,ColVisible,Flag);
  fi;
 od;
 --Доп.Пров
 cc=asInteger(S25.ColsCount);
 for c=1..cc do
  Field=asString(S25.Cell(1,c,CellContents,""));
  n=1;
  if Field="@Руб": Flag=(not ОКВ="" and not (ОКВ="643" or ОКВ="RUB"));
    |True: n=0;
  fi;
  if n=1:
     S25.Column(c,ColVisible,Flag);
     S26.Column(c,ColVisible,Flag);
     S27.Column(c,ColVisible,Flag);
  fi;
 od;
end;

Proc НеПустаяТаблица;
 if Расшифр<1: 
    InsertFrame(Расшифр,1);
    if hНДС="": Расшифр[1].НДС=-1; else Расшифр[1].НДС=Int(hНДС); fi;
 fi;
end;

Proc НеПустаяТаблица2;
 if ПровДоп<1:
    InsertFrame(ПровДоп,1);
 fi;
end;

Proc Очистить;
 ClearVariable(Расшифр);
 ClearVariable(Позиции_НДС);
 НеПустаяТаблица;
end;

Proc УдалитьПустыеСтроки;
var n:i;
 n=1; 
 While n<=Расшифр do
  if Расшифр[n].КБК="" and Round(Расшифр[n].СумСНДС,2)=0 and Round(Расшифр[n].Кол,2)=0: DeleteFrame(Расшифр,n);
    else
     n=n+1;
  fi;
 od;
 n=1; 
 While n<=ПровДоп do
  if Round(ПровДоп[n].Сум,2)=0 and Round(ПровДоп[n].Кол,2)=0 and ПровДоп[n].СчДеб="" and ПровДоп[n].СчКре="" and ПровДоп[n].Призн="" and ПровДоп[n].Предм1="": DeleteFrame(ПровДоп,n);
    else
     n=n+1;
  fi;
 od;
end;

Func ПолучитьМаскуСчетов(Iter:I; Val:S):S;
var БК_,КОСГУ_,ВД_,Пер_,tmp:S;
 tmp="";
 БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","БК",False);
 КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","КОСГУ",False);
 ВД_=Расшифр[Iter].ВД;
 Пер_=if(Int(ТекГод)-Year(ДатаРег)>0 and not Расшифр[Iter].ВидОпер="00",Str(Min(3,Int(ТекГод)-Year(ДатаРег)+1)),"1");
 if Val="НДС": tmp=БК_+"."+Расшифр[Iter].ВД+".210.01.560|"+Расшифр[Iter].СчКре;
   |Val="БО" and Расшифр[Iter].ВД="1": tmp=БК_+".1.501."+Пер_+"3."+КОСГУ_+"|"+БК_+".1.502."+Пер_+"1."+КОСГУ_+"|"+БК_+".1.502."+Пер_+"2."+КОСГУ_;
   |Val="БО" and not Расшифр[Iter].ВД="3": tmp=БК_+"."+ВД_+".506."+Пер_+"0."+КОСГУ_+"|"+БК_+"."+ВД_+".502."+Пер_+"1."+КОСГУ_+"|"+БК_+"."+ВД_+".502."+Пер_+"2."+КОСГУ_;
   |True: tmp=Раб.Бюджет2005.Объединить(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,"|");
	  if Расшифр[Iter].ВыделятьНДС: 
	     tmp=Раб.Бюджет2005.Объединить(tmp,БК_+"."+ВД_+".210.01.560","|");
	  fi;
	  if УчетБО:
	     if Расшифр[Iter].ВД="1": tmp=Раб.Бюджет2005.Объединить(tmp,БК_+".1.501."+Пер_+"3."+КОСГУ_+"|"+БК_+".1.502."+Пер_+"1."+КОСГУ_+"|"+БК_+".1.502."+Пер_+"2."+КОСГУ_,"|");
	       |not Расшифр[Iter].ВД="3": tmp=Раб.Бюджет2005.Объединить(tmp,БК_+"."+ВД_+".506."+Пер_+"0."+КОСГУ_+"|"+БК_+"."+ВД_+".502."+Пер_+"1."+КОСГУ_+"|"+БК_+"."+ВД_+".502."+Пер_+"2."+КОСГУ_,"|");
	     fi;
	    else
	     if Расшифр[Iter].ВД="1": tmp=Раб.Бюджет2005.Объединить(tmp,БК_+".1.502."+Пер_+"1."+КОСГУ_+"|"+БК_+".1.502."+Пер_+"2."+КОСГУ_,"|");
	       |not Расшифр[Iter].ВД="3": tmp=Раб.Бюджет2005.Объединить(tmp,БК_+"."+ВД_+".502."+Пер_+"1."+КОСГУ_+"|"+БК_+"."+ВД_+".502."+Пер_+"2."+КОСГУ_,"|");
	     fi;
	  fi;
 fi;
 ^tmp;
end;

Func ОбновКлСФ:L;
var Res:L;
var n,k,OWA:I;
  Res=False;
  OWA=OpenWorkArea("СЧЕТФАКТПОСТ","","1=0");
  try
     for n = 1 to Позиции_НДС do
       SetFilter(OWA,"НОМЕРБУМ='"+Позиции_НДС[n].СчФНом+"'and ДАТА="+DateToString(Позиции_НДС[n].СчФДат)+"and АнКодПост='К."+GetCardFieldS("Контрагент",Контр,"ПРИЗНАК")+"'");
       if Records(OWA)=0 then k=0;
	 |records(OWA)=1 then k=RecordToInteger(GetRecordKey(OWA,1));
	 else
	  Trace(Позиции_НДС[n].СчФНом+DateToString(Позиции_НДС[n].СчФДат)+Str(Records(OWA)))	   ;
       fi;
       if Позиции_НДС[n].СЧФ_Ключ<>k then
	  Позиции_НДС[n].СЧФ_Ключ=k;
	  Res=True;
       fi;
     od;
  finally
    CloseWorkArea(OWA);
  end;
^Res;
end;

Proc РасчетНДС;
var Key,Призн_,tmp:S;
var СчНДС_:S;
var Iter,z:I;
 ClearVariable(Позиции_НДС);
 ClearVariable(Buf);
 for Iter=1..Расшифр do
  if not Расшифр[Iter].СчФ_Ном=""  and not Расшифр[Iter].СчФ_Дат=1.1.100 and not Расшифр[Iter].СчКре="":
     СчНДС_=""; Призн_="";
     if Расшифр[Iter].ВыделятьНДС:
	СчНДС_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","БК",False)+"."+Расшифр[Iter].ВД+".210.01.560";
	if Name_S(СчНДС_)=" ": 
	   СчНДС_="";
	  else
	   if Расшифр[Iter].ОКДП_Гр="":
	      tmp="";
	     else
	      tmp=Раб.Бюджет2005.Объединить(if(verОКДП_Гр=273,"ОКДП2.","ОКДП.")+Расшифр[Iter].ОКДП_Гр,Расшифр[Iter].ОКДП,".");
	   fi;
	   tmp=Раб.Бюджет2005.Объединить(tmp,Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп)," ");
	   Призн_=Раб.Бюджет2005.СортироватьНаборСлов(tmp," ",True);
	   tmp=Раб.Бюджет2005.СписокСправ(СчНДС_+"|"+Расшифр[Iter].СчКре,0,"");
	   Призн_=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Призн_," ",tmp,"|");
	fi;
     fi;
     Key=Расшифр[Iter].СчФ_Ном+"#"+Раб.Формат.DateToSQLStr(Расшифр[Iter].СчФ_Дат)+"#"+Str(Расшифр[Iter].НДС)+"#"+СчНДС_+"#"+Призн_;
     z=SearchInArray(Buf,Key,True);
     if z=-1:
	z=InsertInArraySort(Buf,Key);
	z=InsertFrame(Позиции_НДС,z);
	Позиции_НДС[z].СчФНом=Расшифр[Iter].СчФ_Ном;
	Позиции_НДС[z].СчФДат=Расшифр[Iter].СчФ_Дат;
	Позиции_НДС[z].Сум=Расшифр[Iter].Сум;
	Позиции_НДС[z].СумРуб=Расшифр[Iter].СумРуб;
	Позиции_НДС[z].НДС=Расшифр[Iter].НДС;
	Позиции_НДС[z].СумСНДС=Расшифр[Iter].СумСНДС;
	Позиции_НДС[z].СумРубСНДС=Расшифр[Iter].СумРубСНДС;
	Позиции_НДС[z].Призн=Призн_;
	Позиции_НДС[z].СчДеб=СчНДС_;
	Позиции_НДС[z].СчКре=if(СчНДС_="","",Расшифр[Iter].СчКре);
       else
	Позиции_НДС[z].Сум=Позиции_НДС[z].Сум+Расшифр[Iter].Сум;
	Позиции_НДС[z].СумРуб=Позиции_НДС[z].СумРуб+Расшифр[Iter].СумРуб;
	Позиции_НДС[z].СумСНДС=Позиции_НДС[z].СумСНДС+Расшифр[Iter].СумСНДС;
	Позиции_НДС[z].СумРубСНДС=Позиции_НДС[z].СумРубСНДС+Расшифр[Iter].СумРубСНДС;
     fi;
  fi;
 od;
 ОбновКлСФ;
end;

Proc ПолучитьДопАн(Iter:I);
var Справ,ТипБК,ПризнБК,ПризнКОСГУ,ИсклПризн_,tmp:S;
 if not Расшифр[Iter].КБК="" and (not Name_S(Расшифр[Iter].СчДеб)=" " or not Name_S(Расшифр[Iter].СчКре)=" "):
    tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Расшифр[Iter].Призн+" "+Общ_Призн1+" "+Общ_Призн2)," ",".*");
    tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
    ИсклПризн_=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
    tmp=ПолучитьМаскуСчетов(Iter,"");
    Справ=Раб.Бюджет2005.СписокСправ(tmp,0,ИсклПризн_);
    ТипБК=Раб.Бюджет2005.ТипКБКСчета(Расшифр[Iter].КБК);
    if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|",ТипБК+".*","")="":
       ПризнБК="";
      else
       ПризнБК=ТипБК+".";
    fi;
    if not ПризнБК="":
       ПризнБК=ПризнБК+Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипБК,"БК",False);
       Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].ПризнДоп," ",ПризнБК,"ФКР.*|КД.*|КИФД.*","|");
    fi;
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
       ПризнКОСГУ="КОСГУ."+Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","КОСГУ",False);
       tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Расшифр[Iter].ПризнДоп," ","КОСГУ.*","");
       if not Match(tmp,ПризнКОСГУ+"!"):
	  Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].ПризнДоп," ",ПризнКОСГУ,"КОСГУ.*","|");
       fi;
    fi;
 fi;
end;

Proc ОбновитьПризн(Iter:I);
var tmp:S;
var n1,n2:i;
 if Iter=-1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 for Iter=n1..n2 do
  if (Аванс and not Name_S(Расшифр[Iter].СчДеб)=" ") or (not Name_S(Расшифр[Iter].СчДеб)=" " and not Name_S(Расшифр[Iter].СчКре)=" "):
     tmp=ПолучитьМаскуСчетов(Iter,"");
     tmp=Раб.Бюджет2005.СписокСправ(tmp,0,"");
     if УчетБО:
	Расшифр[Iter].Призн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].Призн," ",tmp,"|");
     fi;
     ПолучитьДопАн(Iter);
  fi;
 od;
end;

Func ОперВКоррСчет(aВД:S; aБК:S; aКОСГУ:S; aОпер:S):S;
var Ret:S;
var vКОСГУ:S;
 vКОСГУ=if(aКОСГУ="310":"271"|aКОСГУ="320":"271"|aКОСГУ="340":"272"|True:aКОСГУ);
 if aОпер="00"	  : Ret="00";
   |aОпер="105.31": Ret=aБК+"."+aВД+".105.31.340";
   |aОпер="105.32": Ret=aБК+"."+aВД+".105.32.340";
   |aОпер="105.33": Ret=aБК+"."+aВД+".105.33.340";
   |aОпер="105.34": Ret=aБК+"."+aВД+".105.34.340";
   |aОпер="105.35": Ret=aБК+"."+aВД+".105.35.340";
   |aОпер="105.36": Ret=aБК+"."+aВД+".105.36.340";
   |aОпер="105.38": Ret=aБК+"."+aВД+".105.38.340";
   |aОпер="106.11": Ret=aБК+"."+aВД+".106.11.310";
   |aОпер="106.31": Ret=aБК+"."+aВД+".106.31.310";
   |aОпер="106.34": Ret=aБК+"."+aВД+".106.34.340";
   |aОпер="109.61": Ret=aБК+"."+aВД+".109.61."+vКОСГУ;
   |aОпер="109.71": Ret=aБК+"."+aВД+".109.71."+vКОСГУ;
   |aОпер="109.81": Ret=aБК+"."+aВД+".109.81."+vКОСГУ;
   |aОпер="109.91": Ret=aБК+"."+aВД+".109.91."+vКОСГУ;
   |aОпер="109.60": Ret=aБК+"."+aВД+".109.60."+vКОСГУ;
   |aОпер="109.70": Ret=aБК+"."+aВД+".109.70."+vКОСГУ;
   |aОпер="109.80": Ret=aБК+"."+aВД+".109.80."+vКОСГУ;
   |aОпер="109.90": Ret=aБК+"."+aВД+".109.90."+vКОСГУ;
   |aОпер="304.04": Ret=aБК+"."+aВД+".304.04."+aКОСГУ;
   |aОпер="304.04_":Ret=aБК+"."+aВД+".304.04."+aКОСГУ;
   |aОпер="401.20": Ret=aБК+"."+aВД+".401.20."+vКОСГУ;
   |aОпер="401.50": Ret=aБК+"."+aВД+".401.50."+vКОСГУ;
   |True: Ret="";
 fi;
 ^Ret;
end;

Proc ОбновитьСч (Iter:I);
var n1,n2,Iter_:i;
var БК_,КОСГУ_,Сч_,Пер_:S;
 Iter_=Iter;
 if Iter=-1: n1=1; n2=Расшифр; else n1=Iter; n2=Iter; fi;
 Раб.КСА.Начать;
 for Iter=n1..n2 do
  if Расшифр[Iter].КБК="":
     Расшифр[Iter].СчДеб="";
     Расшифр[Iter].СчКре="";
    else
     БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","БК",False);
     КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","КОСГУ",False);
     if Аванс:
	if not Расшифр[Iter].ВидОпер="206" and not Расшифр[Iter].ВидОпер="00" and not Расшифр[Iter].ВидОпер="*":
	   Расшифр[Iter].ВидОпер="206";
	fi;
	Расшифр[Iter].СчДеб=БК_+"."+Расшифр[Iter].ВД+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".560";
	if Расшифр[Iter].ВидОпер="*":
	   if Расшифр[Iter].СчКре="" and not hСчКре="":
	      if Correspond(Расшифр[Iter].СчДеб,hСчКре): Расшифр[Iter].СчКре=hСчКре; fi;
	   fi;
	  else
	   Расшифр[Iter].СчКре=ОперВКоррСчет(Расшифр[Iter].ВД,БК_,КОСГУ_,Расшифр[Iter].ВидОпер);
	fi;
	Сч_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","АН",True)+".660";
       |Зачет_КЗ=1:
	if Расшифр[Iter].ВидОпер="":
	   Расшифр[Iter].ВидОпер="730+830";
	fi;
	Расшифр[Iter].СчКре=БК_+"."+Расшифр[Iter].ВД+".302."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ_)+".730";
	Расшифр[Iter].СчДеб=Расшифр[Iter].СчКре;
	Сч_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","АН",True)+".830";
       |True:
	if Расшифр[Iter].ВидОпер="":
	   if КОСГУ_="310" : Расшифр[Iter].ВидОпер="106.31";
	     |КОСГУ_="340" : if ЦЗ: Расшифр[Iter].ВидОпер="106.34"; fi;
	     |not КОСГУ_="": if not Расшифр[Iter].ВД="2": Расшифр[Iter].ВидОпер="401.20"; fi;
	   fi;
	fi;
	if Расшифр[Iter].ВидОпер="*":
	   if Расшифр[Iter].СчДеб="" and not hСчДеб="":
	      if Correspond(hСчДеб,Расшифр[Iter].СчКре): Расшифр[Iter].СчДеб=hСчДеб; fi;
	   fi;
	  else
	   Расшифр[Iter].СчДеб=ОперВКоррСчет(Расшифр[Iter].ВД,БК_,КОСГУ_,Расшифр[Iter].ВидОпер);
	fi;
	Расшифр[Iter].СчКре=БК_+"."+Расшифр[Iter].ВД+".302."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ_)+".730";
	Сч_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","АН",True)+".830";
     fi;
     Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
     Раб.КСА.Добавить(Расшифр[Iter].СчКре);
     Раб.КСА.Добавить(Сч_);
     Пер_=if(Int(ТекГод)-Year(ДатаРег)>0 and not Расшифр[Iter].ВидОпер="00",Str(Min(3,Int(ТекГод)-Year(ДатаРег)+1)),"1");
     if УчетБО: 
	if Расшифр[Iter].ВД="1": Раб.КСА.Добавить(БК_+".1.501."+Пер_+"3."+КОСГУ_); Раб.КСА.Добавить(БК_+".1.502."+Пер_+"1."+КОСГУ_); Раб.КСА.Добавить(БК_+".1.502."+Пер_+"2."+КОСГУ_);
	  |not Расшифр[Iter].ВД="3": Раб.КСА.Добавить(БК_+"."+Расшифр[Iter].ВД+".506."+Пер_+"0."+КОСГУ_); Раб.КСА.Добавить(БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_); Раб.КСА.Добавить(БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"2."+КОСГУ_);
	fi;
       else
	if Расшифр[Iter].ВД="1": Раб.КСА.Добавить(БК_+".1.502."+Пер_+"1."+КОСГУ_); Раб.КСА.Добавить(БК_+".1.502."+Пер_+"2."+КОСГУ_);
	  |not Расшифр[Iter].ВД="3": Раб.КСА.Добавить(БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_); Раб.КСА.Добавить(БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"2."+КОСГУ_);
	fi;
     fi;
     if Расшифр[Iter].ВыделятьНДС: Раб.КСА.Добавить(БК_+"."+Расшифр[Iter].ВД+".210.01.560"); fi;
  fi;
 od;
 if Раб.КСА.Закончить(True):
    Message("Добавление счетов завершено");
 fi;
 ОбновитьПризн(Iter_);
end;

Func ПризнакИспользуется(Field:S):L;
var tmp:S;
 if not CurrentState=CrdusInserted and	not Признак="" and (not Договор=nil and not ДатаДок=1.1.100 and (not УчетБО or Field="cbУчетБО")) and not КодДок="" and not Контр=nil:
    Refresh;
    tmp=Раб.Бюджет2005.КартПризнакИспользуется(crdДО,"ПРИЗНАК",Current,"*");
    if not tmp="": 
       if Field="cbУчетБО": Field="статуса документа как бюджетного обязательства";
	 |Field="НаимДок_Наим": Field="наименования документа основания";
	 |Field="НомерДок_": Field="номера документа";
	 |Field="НомерДокДоп_": Field="номера документа";
	 |Field="ДатаДок_": Field="даты документа";
	 |Field="Договор_": Field="договора";
	 |Field="Контр_КорИмя": Field="поставщика";
	 |True: Field="";
       fi;
       if not Field="":
	  Message("Признак документа ("+tmp+") используется в проводках"+Chr(13)+"Изменение "+Field+" невозможно",mtError);
       fi;
       ^True;
    fi;
 fi;
 ^False;
end;

Func РасчетГЭК:L;
var Y,i:I;
var Txt:S;
var Obj:Object;
var Flag,Vs:L;
 ClearVariable(ЛистГЭК);
 ClearVariable(ФайлГЭК);
 nГЭК=0;
 if Страница=5: nГЭК=Max(Раб.Вспом.Сканер.ЧитатьГЭК(crdДО,RecordToInteger(Current),"jpg",true),0); fi;
 CopyArray(Раб.Вспом.Сканер.ФайлГЭК,ФайлГЭК);
 y=AsInteger(S14.Row(1,RowTop,""));
 y=y+10;
 storeY=y;
 for i=1..MaxЛистГЭК do
  Txt="<нет изображения>";
  Flag=(Страница=5 and (nГЭК>=i or i=1));
  ЛистГЭК[i]=if(Flag,"Лист №"+Str(i),"");
  if FindObject("Picture"+Str(i),Obj):
     Vs=(Flag and not ФайлГЭК[i]="");
     if not AsLogical(Obj.Visible)=Vs: Obj.Visible=Vs; fi;
     if Vs:
	if not AsInteger(Obj.Top)=Y: Obj.Top=Y; fi;
	Try
	 Obj.LoadPicture(ФайлГЭК[i]);
	 Txt=" ";
	Except
	 Trace("Не удалось загрузить изображение листа №"+Str(i)+". ("+ФайлГЭК[i]+")");
	 Obj.Visible=False;
	 Txt="<файл не найден>";
	end;
     fi;
  fi;
  if FindObject("Bevel"+Str(i),Obj):
     if not AsLogical(Obj.Visible)=Flag: Obj.Visible=Flag; fi;
     if Flag:
	if not AsInteger(Obj.Top)=Y: Obj.Top=Y; fi;
     fi;
  fi;
  if FindObject("Label"+Str(i),Obj):
     if not AsLogical(Obj.Visible)=Flag: Obj.Visible=Flag; fi;
     if Flag:
	if not AsInteger(Obj.Top)=Y: Obj.Top=Y; fi;
	if not AsString(Obj.Caption)=Txt: Obj.Caption=Txt; fi;
     fi;
  fi;
  if i=6 : Y=Y+480;
    |i=12: Y=Y+480;
    |i=18: Y=Y+480;
    |i=24: Y=Y+480;
  fi;
 od;
 if not AsLogical(S14.Row(4 ,RowVisible,""))=(nГЭК>6):	S14.Row(4 ,RowVisible,nГЭК>6);	fi; --2 линия
 if not AsLogical(S14.Row(5 ,RowVisible,""))=(nГЭК>6):	S14.Row(5 ,RowVisible,nГЭК>6);	fi;
 if not AsLogical(S14.Row(6 ,RowVisible,""))=(nГЭК>6):	S14.Row(6 ,RowVisible,nГЭК>6);	fi;
 if not AsLogical(S14.Row(7 ,RowVisible,""))=(nГЭК>12): S14.Row(7 ,RowVisible,nГЭК>12); fi; --3 линия
 if not AsLogical(S14.Row(8 ,RowVisible,""))=(nГЭК>12): S14.Row(8 ,RowVisible,nГЭК>12); fi;
 if not AsLogical(S14.Row(9 ,RowVisible,""))=(nГЭК>12): S14.Row(9 ,RowVisible,nГЭК>12); fi;
 if not AsLogical(S14.Row(10,RowVisible,""))=(nГЭК>18): S14.Row(10,RowVisible,nГЭК>18); fi; --4 линия
 if not AsLogical(S14.Row(11,RowVisible,""))=(nГЭК>18): S14.Row(11,RowVisible,nГЭК>18); fi;
 if not AsLogical(S14.Row(12,RowVisible,""))=(nГЭК>18): S14.Row(12,RowVisible,nГЭК>18); fi;
 if not AsLogical(S14.Row(13,RowVisible,""))=(nГЭК>24): S14.Row(13,RowVisible,nГЭК>24); fi; --5 линия
 if not AsLogical(S14.Row(14,RowVisible,""))=(nГЭК>24): S14.Row(14,RowVisible,nГЭК>24); fi;
 if not AsLogical(S14.Row(15,RowVisible,""))=(nГЭК>24): S14.Row(15,RowVisible,nГЭК>24); fi;
 Flag=IsReadOnly(crdДО) or ClosedModFob;
 S13.Cell(3,3,CellReadOnly,Flag); --РедГЭК
 S13.Cell(3,9,CellReadOnly,Flag); --ОбновитьГЭК
 S13.Cell(5,3,CellReadOnly,Flag); --ГЭКвPDF
 S13.Cell(5,5,CellReadOnly,Flag); --ПутьPDF
 ^True;
end;

Proc РасчетСвязДок;
var t,tt,z,y,i,ii,OWA,x,n,c,cc,f,ff:i;
var Rec: Record;
var Crd,tmp,Призн_,sss,Sender:S;
var tДат,ДК:D;
var First,isNet,Flag:L;
 if not Страница=7:
    Exit;
 fi;
 ClearVariable(УпрДок);
 ClearVariable(ДокCU);
 ClearVariable(ДокMU);
 ClearVariable(ДокОпр);
 ClearVariable(ДокНаим);
 ClearVariable(ДокНом);
 ClearVariable(ДокДат);
 ClearVariable(ДокКмнт);
 ClearVariable(ДокТекРед);
 ClearVariable(ДокTr);
 ClearVariable(ДокRec);
 ClearVariable(ДокCrd);
 Refresh;
 if Name_A("ДОГОВОР."+Признак)=" ": Exit; fi;
 Sender=AsString(Template.Object) ;
 isNet=Раб.Бюджет2005.Сетевая;
 Раб.ИмяПолеКарт.Инициализация;
 Раб.ИмяПолеКарт.Начать;
 ShowProgress(1,"Сбор данных...");
 Try
  ClearVariable(Buf);
  Призн_="";
  OWA=OpenWorkArea(crdБО,"Признак","ДО="+RecordToString(Current));
  Try
   tt=Records(OWA);
   for t=1..tt do
    tmp=GetFieldS(OWA,t,"Признак");
    if not tmp="" and not Name_A("БО."+tmp)=" ":
       AddInArray(Buf,True,False,"БО."+tmp);
    fi;
   od;
  Finally
   CloseWorkArea(OWA);
  end;
  tt=LengthOfArray(Buf);
  for t=1..tt do
   Призн_=Призн_+"|"+Buf[t];
  od;
  Призн_=SubStr(Призн_,2,255);
  Призн_=Раб.Бюджет2005.Объединить(Призн_,"ДОГОВОР."+Признак,"|");
  ClearVariable(Buf);
  First=True;
  ДК=Dat(1,1,Year(ToDay)+1);
  for Transaction t="{"+Призн_+"}",1.1.100,ДК do
   if First:
      tt=ДК-TransDate(t);
      ShowProgress(tt*2,"Сбор данных...");
      First=False;
   fi;
   Rec=TransRecord(t);
   Crd=TransCardFile(t);
   tДат=TransDate(t);
   if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","ДОГОВОР."+Признак,"")="": sss="Б"; else sss=""; fi;
   ProgressPos(tt-(ДК-tДат));
   if Rec=nil or Crd="Table_OPER":
      tmp=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#Table_OPER#"+Str(t);
      z=InsertInArraySort(Buf,tmp);
      InsertFrame(УпрДок,z);
      ДокОпр[z]=tДат;
      ДокНаим[z]="Журнал операций, проводка №";
      ДокНом[z]=Str(t);
      ДокДат[z]=tДат;
      ДокКмнт[z]=TransComment(t);
      if Crd="Table_OPER":
	 OWA=OpenWorkArea(Crd,"","UKey="+RecordToString(Rec));
	 Try
	  ДокCU[z]=DateToString(GetFieldD(OWA,1,"CreateTime"))+if(isNet," "+GetFieldS(OWA,1,"CreatedUser"),"");
	  ДокMU[z]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,1,"ModifiedUser"),"");
	 Finally
	  CloseWorkArea(OWA);
	 end;
      fi;
      ДокTr[z]=t;
      ДокТекРед[z]=sss;
     else
      if not Crd=crdДО and not Rec=Current:
	 tmp=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#"+Crd+"#"+RecordToString(Rec);
	 z=SearchInArray(Buf,tmp,True);
	 if z=-1:
	    z=InsertInArraySort(Buf,tmp);
	    InsertFrame(УпрДок,z);
	    ДокОпр[z]=tДат;
	    ДокНаим[z]=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"ДОК",Rec);
	    if ДокНаим[z]="": ДокНаим[z]=Раб.ИмяПолеКарт.ИмяДокумента(Crd); fi;
	    ДокНом[z]=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"НОМЕР",Rec);
	    ДокДат[z]=Раб.ИмяПолеКарт.ЗначПоляД(Crd,"ДАТА",Rec);
	    ДокКмнт[z]=Раб.ИмяПолеКарт.ЗначПоляС(Crd,"КОММЕНТ",Rec);
	    x=SearchInArray(Раб.ИмяПолеКарт.Crd,Crd,True);
	    if not x=-1:
	       n=GetRecordNumber(Раб.ИмяПолеКарт.OWA[x],Rec);
	       if n=0:
		  x=-1;
		 else
		  ДокCU[z]=DateToString(GetFieldD(Раб.ИмяПолеКарт.OWA[x],n,"CreateTime"))+if(isNet," "+GetFieldS(Раб.ИмяПолеКарт.OWA[x],n,"CreatedUser"),"");
		  ДокMU[z]=DateToString(GetFieldD(Раб.ИмяПолеКарт.OWA[x],n,"UpdateTime"))+if(isNet," "+GetFieldS(Раб.ИмяПолеКарт.OWA[x],n,"ModifiedUser"),"");
	       fi;
	    fi;
	    if x=-1:
	       OWA=OpenWorkArea(Crd,"","UKey="+RecordToString(Rec));
	       Try
		ДокCU[z]=DateToString(GetFieldD(OWA,1,"CreateTime"))+if(isNet," "+GetFieldS(OWA,1,"CreatedUser"),"");
		ДокMU[z]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,1,"ModifiedUser"),"");
	       Finally
		CloseWorkArea(OWA);
	       end;
	    fi;
	    ДокTr[z]=t;
	    ДокТекРед[z]=sss;
	    ii=GetCardFileFields(Crd,BufF,mtlREF);
	    for i=1..ii do
	     if GetCardFileByRefField(Crd,BufF[i])=crdДО:
		if not x=-1 and not n=0:
		   if GetFieldR(Раб.ИмяПолеКарт.OWA[x],n,BufF[i])=Current: ДокТекРед[z]="*"; fi;
		  else
		   if GetCardFieldR(Crd,Rec,BufF[i])=Current: ДокТекРед[z]="*"; fi;
		fi;
	     fi;
	    od;
	 fi;
      fi;
   fi;
  od;
  --
  ClearVariable(Buf2);
  ClearVariable(Buf3);
  for z=1..УпрДок do
   Buf2[z]=ExtractWords(2,2,Buf[z],"#");
   Buf3[z]=Buf[z];
  od;
  SortArray(Buf2);
  ClearVariable(Buf);
  ClearVariable(BufF);
  cc=GetCardFileNames("*",Buf,False,True,crdДО);
  cc=cc+1; AddInArray(Buf,True,False,"РПО_ДО -- Принятые денежные обязательства"); --ссылка на самого себя не показыается (GetCardFileNames) ?
  cc=cc+1; AddInArray(Buf,True,False,"РПО_ИЗВЕЩЕНИЯ_ИСХ -- Извещения отправленные"); --мягкая сцылка на извещения
  ShowProgress(cc*2,"Сбор данных...");
  for c=1..cc do
   ProgressPos(cc+c);
   tmp=Trim(SubStr(Buf[c],Pos("--",Buf[c])+2,255));
   Buf[c]=Trim(SubStr(Buf[c],1,Pos("--",Buf[c])-1));
   ff=GetCardFileFields(Buf[c],BufF,mtlREF);
   if Buf[c]="РПО_Извещения_Исх": ff=1; fi;
   if not ff=0:
      OWA=OpenWorkArea(Buf[c],"","1=0");
      Try
       for f=1..ff do
	if GetCardFileByRefField(Buf[c],BufF[f])=crdДО or Buf[c]="РПО_ИЗВЕЩЕНИЯ_ИСХ":
	   if Buf[c]="РПО_Извещения_Исх":
	      SetFilter(OWA,"Crd='"+crdДО+"' and RecCrd="+Str(RecordToInteger(Current)));
	     else
	      SetFilter(OWA,BufF[f]+"="+RecordToString(Current));
	   fi;
	   tt=Records(OWA);
	   for t=1..tt do
	    Rec=GetRecordKey(OWA,t);
	    z=SearchInArray(Buf2,Buf[c]+"#"+RecordToString(Rec),False);
	    if z=-1:
	       z=InsertInArraySort(Buf2,Buf[c]+"#"+RecordToString(Rec));
	       tДат=Раб.ИмяПолеКарт.ЗначПоляД(Buf[c],"ДАТА",Rec);
	       if tДат=1.1.100:
		  InsertFrame(УпрДок,УпрДок+1);
		  z=УпрДок;
		 else
		  z=InsertInArraySort(Buf3,Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#"+Buf[c]+"#"+RecordToString(Rec));
		  InsertFrame(УпрДок,z);
	       fi;
	       ДокОпр[z]=Раб.ИмяПолеКарт.ЗначПоляД(Buf[c],"ДАТА",Rec);
	       ДокТекРед[z]="*";
	       ДокНаим[z]=Раб.ИмяПолеКарт.ЗначПоляС(Buf[c],"ДОК",Rec);
	       if ДокНаим[z]="": ДокНаим[z]=Раб.ИмяПолеКарт.ИмяДокумента(Buf[c]); fi;
	       ДокНом[z]=Раб.ИмяПолеКарт.ЗначПоляС(Buf[c],"НОМЕР",Rec);
	       ДокДат[z]=Раб.ИмяПолеКарт.ЗначПоляД(Buf[c],"ДАТА",Rec);
	       ДокКмнт[z]=Раб.ИмяПолеКарт.ЗначПоляС(Buf[c],"КОММЕНТ",Rec);
	       if ДокНаим[z]="": ДокНаим[z]=Buf[c]; fi;
	       if ДокНом[z]="": ДокНом[z]=RecordToString(Rec); fi;
	       if ДокКмнт[z]="": ДокКмнт[z]=tmp; fi;
	       ДокCU[z]=DateToString(GetFieldD(OWA,t,"CreateTime"))+if(isNet," "+GetFieldS(OWA,t,"CreatedUser"),"");
	       ДокMU[z]=DateToString(GetFieldD(OWA,t,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,t,"ModifiedUser"),"");
	       ДокTr[z]=-1;
	       ДокRec[z]=Rec;
	       ДокCrd[z]=Buf[c];
	    fi;
	   od;
	fi;
       od;
      Finally
       CloseWorkArea(OWA);
      end;
   fi;
  od;
 Finally
  CloseProgress;
  Flag=IsReadOnly(crdДО) or ClosedModFob;
  S15.Cell(2,3,CellReadOnly,Flag); --ОбновСвязДок
  for c=2..12 do
   S16.Cell(1,c,CellReadOnly,Flag);
  od;
  Раб.ИмяПолеКарт.Закончить;
 end;
end;

Proc РасчетГЭК2;
var OWA,n,nn,i1,i2,c:I;
var isNet,Flag:L;
var Rec: Record;
 if not Страница=8:
    Exit;
 fi;
 isNet=Раб.Бюджет2005.Сетевая;
 ClearVariable(УпрГЭК2);
 ClearVariable(ДокCU);
 ClearVariable(ДокMU);
 ClearVariable(ГЭК2Дат);
 ClearVariable(ГЭК2Лист);
 ClearVariable(ГЭК2Кмнт);
 ClearVariable(ГЭК2Rec);
 OWA=OpenWorkArea("РПО_СКАН_ДОК","Дата","Док='"+crdДО+"' and Запись="+Str(RecordToInteger(Current)));
 Try
  nn=Records(OWA);
  ShowProgress(nn,"Расчет...");
  for n=1..nn do
   ProgressPos(n);
   Rec=GetRecordKey(OWA,n);
   i1=Раб.Вспом.Сканер.ЧитатьГЭК("РПО_СКАН_ДОК",RecordToInteger(Rec),"jpg",True);
   i2=Раб.Вспом.Файлы.ПоказСписок("РПО_СКАН_ДОК",RecordToInteger(Rec),"","","","","","",0);
   if not i1=0 or not i2=0:
      InsertFrame(УпрГЭК2,УпрГЭК2+1);
      ГЭК2Дат[УпрГЭК2]=GetFieldD(OWA,n,"Дата");
      ГЭК2Лист[УпрГЭК2]=Str(i1)+" / "+Str(i2);
      ГЭК2Кмнт[УпрГЭК2]=GetFieldS(OWA,n,"Кмнт");
      ДокCU[УпрГЭК2]=DateToString(GetFieldD(OWA,n,"CreateTime"))+if(isNet," "+GetFieldS(OWA,n,"CreatedUser"),"");
      ДокMU[УпрГЭК2]=DateToString(GetFieldD(OWA,n,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,n,"ModifiedUser"),"");
      ГЭК2Rec[УпрГЭК2]=Rec;
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
  Flag=IsReadOnly(crdДО) or ClosedModFob;
  S18.Cell(2,3,CellReadOnly,Flag); --СканГЭК2
  S18.Cell(4,3,CellReadOnly,Flag); --ОбновитьГЭК
  S18.Cell(4,7,CellReadOnly,Flag); --ГЭКвPDF
  S18.Cell(4,10,CellReadOnly,Flag); --ПутьPDF
  for c=2..7 do
   S19.Cell(1,c,CellReadOnly,Flag);
  od;
  CloseProgress;
 end;
end;

Proc БухСправка (Sender:S; isАннул:L);
var Crd,tmp,F:S;
var OWA,n,nr,OA,i,ii,Iter,c:I;
var ИтогСум:N;
var Rec: Record;
var isLink:L;
 Crd="РПО_БУХСПРАВКА";
 if not ExistsCardFile(Crd):
    if Sender="СоздатьБухСправ": Message("Картотека '"+Crd+"' не найдена",mtError); fi;
    Exit;
 fi;
 ИтогСум=0;
 isLink=False;
 F="Crd='"+crdДО+"' and RecCrd="+Str(RecordToInteger(Current))+" and "+if(isАннул,"","not ")+"Режим='АННУЛ'";
 --Исчем прилинкованные бух.справки
 if not isАннул:
    OWA=OpenWorkArea(crdДО,"","Рег and Аннул and Аннул_Дата="+DateToString(ДатаРег)+" and НаимДок="+RecordToString(НаимДок)+" and НомерДок='"+НомерДок+"' and ДатаДок="+DateToString(ДатаДок)+" and not Ukey="+RecordToString(Current));
    Try
     nr=Records(OWA);
     if not nr=0: 
	Rec=GetRecordKey(OWA,nr);
	F="("+F+") or (Crd='"+crdДО+"' and RecCrd="+Str(RecordToInteger(Rec))+" and Режим='АННУЛ')";
     fi;
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 OWA=OpenWorkArea(Crd,"ДатаСпр",F);
 Try
  nr=Records(OWA);
  if not Sender="СоздатьБухСправ" and nr=0: Exit; fi;
  BeginChanging(OWA,False);
  Try
   if nr=0:
      n=InsertRecord(OWA);
      n=PutFieldI(OWA,n,"RECCRD",RecordToInteger(Current));
      n=PutFieldS(OWA,n,"CRD",CrdДО);
      n=PutFieldS(OWA,n,"BLNCRD",BlnДО);
      n=PutFieldI(OWA,n,"НОМЕР",Раб.Обл.СледСУчетомДаты(Crd,"Номер","ДатаСпр",ДатаРег));
     else
      n=nr;
      isLink=GetFieldS(OWA,n,"Режим")="АННУЛ" and not GetFieldI(OWA,n,"RecCrd")=RecordToInteger(Current);
   fi;
   Rec=GetRecordKey(OWA,n);
   n=PutFieldD(OWA,n,"ДАТАСПР",if(isАннул,Аннул_Дата,ДатаРег));
   n=PutFieldR(OWA,n,"РЕКВ",Учр);
   if Настр.Общ_Справ1="П.*": n=PutFieldS(OWA,n,"ПРИЗНПОДР",Общ_Призн1); n=PutFieldS(OWA,n,"НАИМПОДР",Name_A(Общ_Призн1)); fi;
   if Настр.Общ_Справ2="П.*": n=PutFieldS(OWA,n,"ПРИЗНПОДР",Общ_Призн2); n=PutFieldS(OWA,n,"НАИМПОДР",Name_A(Общ_Призн2)); fi;
   OA=OpenArray(OWA,n,"ПОЗИЦИИ","","Key='"+crdДО+"="+Str(RecordToInteger(Current))+"'");
   DeleteAllRecords(OA);
   for Iter=1..Расшифр do
    tmp=Trim(Общ_Призн1+" "+Общ_Призн2);
    tmp=Trim(Контр_Призн+" "+tmp);
    tmp=Trim(tmp+" "+Призн_[Iter]);
    tmp=Trim(tmp+" ДОГОВОР."+Признак);
    if ЦЗ: tmp=Trim(tmp+" "+ГП_Призн); fi;
    if (not Аванс or (Аванс and not Расшифр[Iter].СчКре="")) and (not Аннул or (Аннул and not Расшифр[Iter].Сум_Аннул=0) or not Аннул_Часть):
       i=InsertRecord(OA);
       i=PutFieldS(OA,i,"СОДЕРЖ",if(isАннул,"Аннулирование ДО ","Принятие к учету ДО ")+"("+НаимДок.НаимК+" №"+НомерДок+" от "+DateToString(ДатаДок)+")"+if(isАннул," "+Аннул_Кмнт,"")+" "+if(Предм_[Iter]="",Содерж,Предм_[Iter]));
       i=PutFieldS(OA,i,"НОМДОК",НаимДок.НаимК+" №"+НомерДок);
       i=PutFieldD(OA,i,"ДАТАДОК",ДатаДок);
       i=PutFieldS(OA,i,"СЧДЕБ",Расшифр[Iter].СчДеб);
       i=PutFieldS(OA,i,"СЧКРЕ",Расшифр[Iter].СчКре);
       i=PutFieldN(OA,i,"СУММА",if(isАннул and Аннул_Часть:-Расшифр[Iter].Сум_Аннул|isАннул and not Аннул_Часть:-Расшифр[Iter].СумСНДС|True:Расшифр[Iter].СумСНДС)); --проводки по НДС надо показать?
       i=PutFieldS(OA,i,"ПРИЗН",tmp);
       i=PutFieldS(OA,i,"ПРИЗНДЕБ"," ");
       i=PutFieldS(OA,i,"ПРИЗНКРЕ"," ");
       i=PutFieldS(OA,i,"ПРИЗНКОЛ","");
       i=PutFieldN(OA,i,"КОЛ",0);
       i=PutFieldS(OA,i,"Key",crdДО+"="+Str(RecordToInteger(Current)));
    fi;
    if not НеПровДО and (not Аннул or (Аннул and not Расшифр[Iter].Сум_Аннул=0) or not Аннул_Часть):
       i=InsertRecord(OA);
       i=PutFieldS(OA,i,"СОДЕРЖ",if(isАннул,"Аннулирование ДО ","Принятие к учету ДО ")+"("+НаимДок.НаимК+" №"+НомерДок+" от "+DateToString(ДатаДок)+")"+if(isАннул," "+Аннул_Кмнт,"")+" "+if(Предм_[Iter]="",Содерж,Предм_[Iter]));
       i=PutFieldS(OA,i,"НОМДОК",НаимДок.НаимК+" №"+НомерДок);
       i=PutFieldD(OA,i,"ДАТАДОК",ДатаДок);
       i=PutFieldS(OA,i,"СЧДЕБ",СчДеб_ДО[Iter]);
       i=PutFieldS(OA,i,"СЧКРЕ",СчКре_ДО[Iter]);
       i=PutFieldN(OA,i,"СУММА",if(isАннул and Аннул_Часть:-Расшифр[Iter].Сум_Аннул|isАннул and not Аннул_Часть:-Расшифр[Iter].СумСНДС|True:Расшифр[Iter].СумСНДС)); --проводки по НДС надо показать?
       i=PutFieldS(OA,i,"ПРИЗН",tmp);
       i=PutFieldS(OA,i,"ПРИЗНДЕБ"," ");
       i=PutFieldS(OA,i,"ПРИЗНКРЕ"," ");
       i=PutFieldS(OA,i,"ПРИЗНКОЛ","");
       i=PutFieldN(OA,i,"КОЛ",0);
       i=PutFieldS(OA,i,"Key",crdДО+"="+Str(RecordToInteger(Current)));
    fi;
   od;
   for Iter=1..ПровДоп do
    tmp=Trim(Общ_Призн1+" "+Общ_Призн2);
    tmp=Trim(Контр_Призн+" "+tmp);
    tmp=Trim(tmp+" "+ПровДоп[Iter].Призн);
    tmp=Trim(tmp+" ДОГОВОР."+Признак);
    if ЦЗ: tmp=Trim(tmp+" "+ГП_Призн); fi;
    if not Аннул or ((Аннул and not ПровДоп[Iter].Сум_Аннул=0) or not Аннул_Часть):
       i=InsertRecord(OA);
       i=PutFieldS(OA,i,"СОДЕРЖ",if(isАннул,"Аннулирование ДО ","Принятие к учету ДО ")+"("+НаимДок.НаимК+" №"+НомерДок+" от "+DateToString(ДатаДок)+")"+if(isАннул," "+Аннул_Кмнт,"")+" "+if(ПровДоп[Iter].Предм1="",Содерж,ПровДоп[Iter].Предм1));
       i=PutFieldS(OA,i,"НОМДОК",НаимДок.НаимК+" №"+НомерДок);
       i=PutFieldD(OA,i,"ДАТАДОК",ДатаДок);
       i=PutFieldS(OA,i,"СЧДЕБ",ПровДоп[Iter].СчДеб);
       i=PutFieldS(OA,i,"СЧКРЕ",ПровДоп[Iter].СчКре);
       i=PutFieldN(OA,i,"СУММА",if(isАннул and Аннул_Часть:-ПровДоп[Iter].Сум_Аннул|isАннул and not Аннул_Часть:-ПровДоп[Iter].Сум|True:ПровДоп[Iter].Сум));
       i=PutFieldS(OA,i,"ПРИЗН",tmp);
       i=PutFieldS(OA,i,"ПРИЗНДЕБ"," ");
       i=PutFieldS(OA,i,"ПРИЗНКРЕ"," ");
       i=PutFieldS(OA,i,"ПРИЗНКОЛ","");
       i=PutFieldN(OA,i,"КОЛ",0);
       i=PutFieldS(OA,i,"Key",crdДО+"="+Str(RecordToInteger(Current)));
    fi;
   od;
   CloseWorkArea(OA);
   if not isLink:
      n=PutFieldS(OWA,n,"КМНТ",if(isАннул,"Аннулирование ДО ","Принятие к учету ДО ")+"("+НаимДок.НаимК+" №"+НомерДок+" от "+DateToString(ДатаДок)+")"+if(isАннул," "+Аннул_Кмнт,""));
   fi;
   n=PutFieldS(OWA,n,"РЕЖИМ",if(isАннул or isLink,"АННУЛ",""));
   if not УчетБО:
      n=PutFieldS(OWA,n,"ФИОРУК",ФИОРук);
   fi;
--   n=PutFieldS(OWA,n,"ФИОБУХ",ФИОБух);
--   n=PutFieldS(OWA,n,"ДОЛЖНИСП",ДолжнИсп);
--   n=PutFieldS(OWA,n,"ФИОИСП",ФИОИсп);
   n=PutFieldD(OWA,n,"ДАТАИСП",if(isАннул,Аннул_Дата,ДатаРег));
   n=PutFieldL(OWA,n,"ПРОВОДИТЬ",Рег);
   n=PutFieldS(OWA,n,"РПО_КЛЮЧ",РПО_Ключ);
   n=PutFieldL(OWA,n,"CLOSEDMODFOB",ClosedModFob);
   EndChanging(OWA);
   OA=OpenArray(OWA,n,"ПОЗИЦИИ","","");
   ii=Records(OA);
   for i=1..ii do
    ИтогСум=ИтогСум+GetFieldN(OA,i,"СУММА");
   od;
   BeginChanging(OWA,False);
   n=PutFieldN(OWA,n,"ИТОГСУММА",ИтогСум);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 if Sender="СоздатьБухСправ":
    OpenBlank("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА",True,Rec);
 fi;
end;

Proc РасчетБухСправ;
var OWA,OA,OWA2,n,nn,n2,nn2,c:I;
var isNet,Flag:L;
var Rec: Record;
 if not Страница=9: Exit; fi;
 isNet=Раб.Бюджет2005.Сетевая;
 ClearVariable(УпрБух);
 ClearVariable(ДокCU);
 ClearVariable(ДокMU);
 ClearVariable(БухДат);
 ClearVariable(БухКмнт);
 ClearVariable(БухRec);
 ClearVariable(БухCrd);
 ClearVariable(БухАннул);
 OA=0;
 OWA=OpenWorkArea("РПО_БУХСПРАВКА","ДатаСпр","Crd='"+crdДО+"' and RecCrd="+Str(RecordToInteger(Current)));
 Try
  nn=Records(OWA);
  ShowProgress(nn,"Расчет...");
  for n=1..nn do
   ProgressPos(n);
   Rec=GetRecordKey(OWA,n);
   InsertFrame(УпрБух,УпрБух+1);
   БухДат[УпрБух]=GetFieldD(OWA,n,"ДатаСпр");
   БухКмнт[УпрБух]=GetFieldS(OWA,n,"Кмнт");
   ДокCU[УпрБух]=DateToString(GetFieldD(OWA,n,"CreateTime"))+if(isNet," "+GetFieldS(OWA,n,"CreatedUser"),"");
   ДокMU[УпрБух]=DateToString(GetFieldD(OWA,n,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,n,"ModifiedUser"),"");
   БухRec[УпрБух]=Rec;
   БухCrd[УпрБух]="РПО_БУХСПРАВКА";
   БухАннул[УпрБух]=GetFieldS(OWA,n,"Режим")="Аннул";
  od;
  if not nn=0: OA=OpenArray(OWA,nn,"ПОЗИЦИИ","","Key='"+crdДО+"="+Str(RecordToInteger(Current))+"'"); fi;
  --Исчем прилинкованные бух.справки
  OWA2=OpenWorkArea(crdДО,"","Рег and Аннул and Аннул_Дата="+DateToString(ДатаРег)+" and НаимДок="+RecordToString(НаимДок)+" and НомерДок='"+НомерДок+"' and ДатаДок="+DateToString(ДатаДок)+" and not Ukey="+RecordToString(Current));
  Try
   nn2=Records(OWA2);
   for n2=1..nn2 do
    Rec=GetRecordKey(OWA2,n2);
    SetFilter(OWA,"Режим='АННУЛ' and Crd='"+crdДО+"' and RecCrd="+Str(RecordToInteger(Rec)));
    nn=Records(OWA);
    for n=1..nn do
     Rec=GetRecordKey(OWA,n);
     if OA=0: OA=OpenArray(OWA,nn,"ПОЗИЦИИ","","Key='"+crdДО+"="+Str(RecordToInteger(Current))+"'"); fi;
     if not Records(OA)=0:
	InsertFrame(УпрБух,УпрБух+1);
	БухДат[УпрБух]=GetFieldD(OWA,n,"ДатаСпр");
	БухКмнт[УпрБух]=GetFieldS(OWA,n,"Кмнт");
	ДокCU[УпрБух]=DateToString(GetFieldD(OWA,n,"CreateTime"))+if(isNet," "+GetFieldS(OWA,n,"CreatedUser"),"");
	ДокMU[УпрБух]=DateToString(GetFieldD(OWA,n,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,n,"ModifiedUser"),"");
	БухRec[УпрБух]=Rec;
	БухCrd[УпрБух]="РПО_БУХСПРАВКА";
	БухАннул[УпрБух]=False;
     fi;
    od;
   od;
  Finally
   CloseWorkArea(OWA2);
  end;
 Finally
  CloseWorkArea(OWA);
  SortSection(УпрБух,"БухДат");
  БухДат[1]=БухДат[1];
  Flag=IsReadOnly(crdДО) or ClosedModFob;
  S21.Cell(2,3,CellReadOnly,Flag); --ОбновБухСправ
  S21.Cell(2,5,CellReadOnly,Flag); --СоздатьБухСправ
  for c=2..6 do
   S23.Cell(1,c,CellReadOnly,Flag);
  od;
  CloseProgress;
 end;
end;

Proc ВывестиСтраницу;
var y,z:i;
var s,start_:s;
var Obj: Object;
 Template.Freeze(0,0);
 if Страница=0: Страница=2; fi;
 --Покупатель
 if not AsLogical(S1.Visible)=(Страница=1):
    S1.Visible=Страница=1;
 fi;
 btnПлат.Enabled=not Страница=1;
 --Основание
 if not AsLogical(S2.Visible)=(Страница=2):
    S2.Visible=Страница=2;
 fi;
 btnОсн.Enabled=not Страница=2;
 --Расшифровка
 if not AsLogical(S4.Visible)=(Страница=3):
    S4.Visible=Страница=3;
    S5.Visible=Страница=3;
    S6.Visible=Страница=3;
 fi;
 btnРасшифр.Enabled=not Страница=3;
 --НДС
 if not AsLogical(S7.Visible)=(Страница=4):
    S7.Visible=Страница=4;
    S8.Visible=Страница=4;
    S9.Visible=Страница=4;
 fi;
 btnНДС.Enabled=not Страница=4 and УчетНДС;
 btnНДС.Caption=if(УчетНДС,"НДС","");
 if Страница=4 and not Рег: РасчетНДС; fi;
 --ГЭК 1
 if not AsLogical(S13.Visible)=(Страница=5):
    S13.Visible=Страница=5;
    S14.Visible=Страница=5;
 fi;
 btnГЭК1.Enabled=not Страница=5;
 РасчетГЭК;
 --Аннулирование
 if not AsLogical(S3.Visible)=(Страница=6):
    S3.Visible=Страница=6;
 fi;
 btnАннул.Enabled=not Страница=6;
 --Связанные документы
 if not AsLogical(S15.Visible)=(Страница=7):
    S15.Visible=Страница=7;
    S16.Visible=Страница=7;
    S17.Visible=Страница=7;
    РасчетСвязДок;
 fi;
 btnСвязДок.Enabled=not Страница=7;
 --ГЭК 2
 if not AsLogical(S18.Visible)=(Страница=8):
    S18.Visible=Страница=8;
    S19.Visible=Страница=8;
    S20.Visible=Страница=8;
    РасчетГЭК2;
 fi;
 btnГЭК2.Enabled=not Страница=8;
 --Бух.Справ
 if not AsLogical(S21.Visible)=(Страница=9):
    S21.Visible=Страница=9;
    S22.Visible=Страница=9;
    S23.Visible=Страница=9;
    S24.Visible=Страница=9;
    РасчетБухСправ;
 fi;
 btnБухСправ.Enabled=not Страница=9;
 --Доп.проводки
 if not AsLogical(S25.Visible)=(Страница=10):
    S25.Visible=Страница=10;
    S26.Visible=Страница=10;
    S27.Visible=Страница=10;
 fi;
 btnПровДоп.Enabled=not Страница=10;
 --Исп.док
 if not AsLogical(S28.Visible)=(Страница=11):
    S28.Visible=Страница=11;
 fi;
 btnИспДок.Enabled=not Страница=11;
 --
 if Страница=1: s="s1";  z=55;
   |Страница=2: s="s2";  z=55;
   |Страница=3: s="s5";  z=0;
   |Страница=4: s="s8";  z=0;
   |Страница=5: s="s14"; z=3;
   |Страница=6: s="s3";  z=55;
   |Страница=7: s="s16"; z=0;
   |Страница=8: s="s19"; z=0;
   |Страница=9: s="s23"; z=0;
   |Страница=10:s="s26"; z=0;
   |True: s="";
 fi;
 if FindObject(s,Obj):
    start_=AsString(Template.Field);
    Template.Field="start";
    y=AsInteger(Obj.Row(1,RowTop,""))+z;
    Template.Freeze(1,y);
    Template.Field=start_;
 fi;
end;

Proc УдалитьЗаписи(vCrd:String);
var F :String;
var OWA:Integer;
 if vCrd="РПО_Извещения_Исх":
    F="Crd='"+crdДО+"' and RecCrd="+Str(RecordToInteger(Current));
   else
    F=if(vCrd=crdДО,"UKey=","ДО=")+RecordToString(Current);
 fi;
 OWA=OpenWorkArea(vCrd,"",F);
 try
  if Records(OWA)=0: Exit; fi;
  BeginChanging(OWA);
  try
   DeleteAllRecords(OWA);
   EndChanging(OWA);
  except
   CancelChanging(OWA);
   Raise;
  end;
 finally
  CloseWorkArea(OWA);
 end;
end;

Proc Переход (FieldName:S; Iter:I);
 if fJumpOff: Exit; fi;
 if FieldName="Учр.КорИмя":	   FieldName="ДолжнРук";
   |FieldName="ДолжнРук":	   FieldName="ФИОРук";
   |FieldName="ФИОРук": 	   FieldName="ДатаРук";
   |FieldName="ДатаРук":	   FieldName="Учр_Банк_Банк";
   |FieldName="ДатаРег":	   FieldName="НаимДок_Наим";
   |FieldName="ТекГод": 	   FieldName="НаимДок_Наим";
   |FieldName="НаимДок_Наим":	   FieldName="НомерДок_";
   |FieldName="НомерДок_":	   FieldName="ДатаДок_";
   |FieldName="НомерДокДоп_":	   FieldName="ДатаДок_";
   |FieldName="ДатаДок_":	   FieldName="СумДок";
   |FieldName="СумДок": 	   FieldName=if(УчетБО,if(ОКВ="":"ОКВ"|ОКВ="643":"Контр_КорИмя"),if(ОКВ="" or ОКВ="643","Договор_","ОКВ"));
   |FieldName="ОКВ":		   FieldName=if(ОКВ="643":if(УчетБО,"Контр_КорИмя","Договор_")|True:"СумРубДок");
   |FieldName="СумРубДок":	   FieldName=if(УчетБО,"Контр_КорИмя","Договор_");
   |FieldName="Договор_":	   FieldName=if(Контр_Банк=nil,"Контр_Банк.БанкИмя",if(not Настр.Общ_Справ1="" and УчетБО,"Общ_Призн1",if(not Настр.Общ_Справ2="" and УчетБО,"Общ_Призн2",if(ЦЗ,"ГП.КорИмя","Содерж"))));
   |FieldName="Контр_КорИмя":	   FieldName=if(Контр_Банк=nil,"Контр_Банк.БанкИмя",if(not Настр.Общ_Справ1="","Общ_Призн1",if(not Настр.Общ_Справ2="","Общ_Призн2",if(ЦЗ,"ГП.КорИмя","Содерж"))));
   |FieldName="Контр_Банк.БанкИмя":FieldName=if(not Настр.Общ_Справ1="","Общ_Призн1",if(not Настр.Общ_Справ2="","Общ_Призн2",if(ЦЗ,"ГП.КорИмя","Содерж")));
   |FieldName="Общ_Призн1":	   FieldName=if(not Настр.Общ_Справ2="","Общ_Призн2",if(ЦЗ,"ГП.КорИмя","Содерж"));
   |FieldName="Общ_Призн2":	   FieldName=if(ЦЗ,"ГП.КорИмя","Содерж");
   |FieldName="ГП.КорИмя":	   FieldName="Содерж";
   |FieldName="Содерж": 	   FieldName=if(УчетБО,"ДатаН",if(fJumpНаимСчет:"НаимСчет.Наим"|fJumpКоммент:"Коммент"|True:if(УчетБО,"ВД","КБК"))); if not УчетБО and not fJumpНаимСчет and not fJumpКоммент: Страница=3; ВывестиСтраницу; fi;
   |FieldName="ДатаН":		   FieldName="ДатаК";
   |FieldName="ДатаК":		   FieldName="МФ_";
   |FieldName="МФ_":		   FieldName=if(fJumpНаимСчет:"НаимСчет.Наим"|fJumpКоммент:"Коммент"|True:if(УчетБО,"ВД","КБК")); if not fJumpНаимСчет and not fJumpКоммент: Страница=3; ВывестиСтраницу; fi;
   |FieldName="НаимСчет.Наим":	   FieldName="НомерСчет";
   |FieldName="НомерСчет":	   FieldName="ДатаСчет";
   |FieldName="ДатаСчет":	   FieldName=if(fJumpКоммент,"Коммент",if(УчетБО,"ВД","КБК")); if not fJumpКоммент: Страница=3; ВывестиСтраницу; fi;
   |FieldName="Коммент":	   FieldName=if(УчетБО,"ВД","КБК"); Страница=3; ВывестиСтраницу;
   |FieldName="ВД":		   FieldName="КБК";
   |FieldName="КБК":		   FieldName=if(fJumpПризн,"Призн_",if(flagТМЦ,"Предм_",if(flagОКДП,"ОКДП_Гр","СумСНДС")));
   |FieldName="Призн_": 	   FieldName=if(flagТМЦ,"Предм_",if(flagОКДП,"ОКДП_Гр","СумСНДС"));
   |FieldName="Предм_": 	   FieldName=if(УчетБО,if(flagОКДП,"ОКДП_Гр","Цена"),if(Аванс and flagОКДП,"ОКДП_Гр","Кол"));
   |FieldName="ТМЦ_":		   FieldName=if(УчетБО,if(flagОКДП,"ОКДП_Гр","Цена"),if(Аванс and flagОКДП,"ОКДП_Гр","Кол"));
   |FieldName="ОКДП_Гр":	   FieldName=if(Аванс,"СумСНДС","ОКДП");
   |FieldName="ОКДП":		   FieldName="Цена";
   |FieldName="Цена":		   FieldName="Кол";
   |FieldName="Кол":		   FieldName=if(УчетБО,"ЕдИзм",if(ОКВ="643","НДС","СумРуб"));
   |FieldName="ЕдИзм":		   FieldName=if(ОКВ="643","НДС","СумРуб");
   |FieldName="Сум":		   FieldName=if(ОКВ="643","НДС","СумРуб");
   |FieldName="СумРуб": 	   FieldName="НДС";
   |FieldName="СумСНДС":	   FieldName="НДС";
   |FieldName="НДС":		   FieldName=if(УчетНДС and Расшифр[Iter].ВД="2","ВыделятьНДС",if(Расшифр=Iter,"A",if(УчетБО,"ВД","КБК"))); Iter=Iter+if(Расшифр=Iter,0,1);
   |FieldName="СумРубСНДС":	   FieldName=if(УчетНДС and Расшифр[Iter].ВД="2","ВыделятьНДС",if(Расшифр=Iter,"A",if(УчетБО,"ВД","КБК"))); Iter=Iter+if(Расшифр=Iter,0,1);
   |FieldName="ВыделятьНДС":	   FieldName="СчФ_Ном";
   |FieldName="СчФ_Ном":	   FieldName="СчФ_Дат";
   |FieldName="СчФ_Дат":	   FieldName="A";
   |FieldName="Опер_":		   FieldName=if(Аванс,"СчКре","СчДеб");
   |FieldName="Аннул_Дата":	   FieldName="Аннул_Кмнт";
   |FieldName="Аннул_Кмнт":	   FieldName=if(УчетБО,"Аннул_ДолжнРук","");
   |FieldName="Аннул_ДолжнРук":    FieldName="Аннул_ФИОРук";
   |FieldName="Аннул_ФИОРук":	   FieldName="Аннул_ДатаСвед";
   |FieldName="Аннул_ДатаСвед":    FieldName="Аннул_ДатаРук";
   |True: Exit;
 fi;
 Template.Field=FieldName;
 Template.Frame=Iter;
end;

Proc ПересчетСум (FieldName:S; Iter:I);
 if FieldName="Цена" or FieldName="Кол": Расшифр[Iter].Сум=Round(Расшифр[Iter].Цена*Расшифр[Iter].Кол,2); FieldName="Сум";
   |FieldName="Сум":			 Расшифр[Iter].Цена=Round(Расшифр[Iter].Сум/Расшифр[Iter].Кол,2);
 fi;
 if FieldName="СумСНДС" or FieldName="НДС":
    if Расшифр[Iter].НДС>0:
       if FieldName="СумСНДС" and Abs(Round(Расшифр[Iter].СумСНДС-(Расшифр[Iter].Сум+Round(Расшифр[Iter].Сум*Расшифр[Iter].НДС/100,2)),2))<=0.02: Exit; fi;
       Расшифр[Iter].Сум=Расшифр[Iter].СумСНДС-Round(Расшифр[Iter].СумСНДС*Расшифр[Iter].НДС/(100+Расшифр[Iter].НДС),2);
      else
       Расшифр[Iter].Сум=Расшифр[Iter].СумСНДС;
    fi;
    Расшифр[Iter].Цена=Round(Расшифр[Iter].Сум/Расшифр[Iter].Кол,2);
 fi;
 if FieldName="СумРубСНДС" or FieldName="НДС":
    if Расшифр[Iter].НДС>0:
       if FieldName="СумРубСНДС" and Abs(Round(Расшифр[Iter].СумРубСНДС-(Расшифр[Iter].СумРуб+Round(Расшифр[Iter].СумРуб*Расшифр[Iter].НДС/100,2)),2))<=0.02: Exit; fi;
       Расшифр[Iter].СумРуб=Расшифр[Iter].СумРубСНДС-Round(Расшифр[Iter].СумРубСНДС*Расшифр[Iter].НДС/(100+Расшифр[Iter].НДС),2);
      else
       Расшифр[Iter].СумРуб=Расшифр[Iter].СумРубСНДС;
    fi;
 fi;
 if FieldName="Сум":
    if Расшифр[Iter].НДС>0:
       Расшифр[Iter].СумСНДС=Расшифр[Iter].Сум+Round(Расшифр[Iter].Сум*Расшифр[Iter].НДС/100,2);
      else
       Расшифр[Iter].СумСНДС=Расшифр[Iter].Сум;
    fi;
 fi;
 if FieldName="СумРуб":
    if Расшифр[Iter].НДС>0:
       Расшифр[Iter].СумРубСНДС=Расшифр[Iter].СумРуб+Round(Расшифр[Iter].СумРуб*Расшифр[Iter].НДС/100,2);
      else
       Расшифр[Iter].СумРубСНДС=Расшифр[Iter].СумРуб;
    fi;
 fi;
end;

Func СведБО_(OWA:I; n:i; aУчет:L; parentБО:Record):Record;
var OA,n2,Iter,Номер_,ТекГод_,z,Изм_Номер_,БО_ФорматНомер_,БО_ДлинаНомер_,Изм_ФорматНомер_:i;
var Rec: Record;
var val,СчДеб_,СчКре_,Призн_,ПризнОбщ_,КБК_,БК_,КОСГУ_,Пер_,ТипКБК_,Key,FieldSum,FieldSum2,tmp,Изм_Префикс_,Изм_НомерДок_,Изм_Сепаратор_,БО_Сепаратор_,БО_Признак_:S;
var newНомер,setЗаполР1_Гр8,f20130901:L;
var Изм_ДатаДок_:D;
 newНомер=False;
 Раб.Договор.НачатьИндексацию;
 Rec=nil;
 if aУчет or not n=0:
    if aУчет:
       БО_ФорматНомер_=0;
       БО_Сепаратор_="/";
       БО_ДлинаНомер_=5;
       setЗаполР1_Гр8=True;
       f20130901=True;
       if Раб.Настр.Начать(blnБО,0,0,"",GetGUID):
	  val=Раб.Настр.ВзятьЗначение("setФорматНомер");
	  if val="": БО_ФорматНомер_=0; else БО_ФорматНомер_=Int(val); fi;
	  val=Раб.Настр.ВзятьЗначение("setСепаратор");
	  if val="": БО_Сепаратор_="/"; else БО_Сепаратор_=val; fi;
	  val=Раб.Настр.ВзятьЗначение("setДлинаНомер");
	  if val="": БО_ДлинаНомер_=5; else БО_ДлинаНомер_=Int(val); fi;
	  val=Раб.Настр.ВзятьЗначение("setЗаполР1_Гр8");
	  setЗаполР1_Гр8=(val="True");
	  val=Раб.Настр.ВзятьЗначение("f20130901");
	  f20130901=(val="True");
       fi;
       ТекГод_=Int(ТекГод);
       if n=0:
	  n=InsertRecord(OWA);
	  newНомер=True;
	 else
	  if parentБО=nil:
	     newНомер=(not ТекГод_=GetFieldI(OWA,n,"ТЕКГОД") or not ПрефиксНомСвед=GetFieldS(OWA,n,"Префикс"));
	    else
	     Изм_ДатаДок_=GetFieldD(OWA,n,"Изм_ДатаДок");
	     Изм_ФорматНомер_=GetFieldI(OWA,n,"Изм_ФорматНомер");
	     Изм_Номер_=GetFieldI(OWA,n,"Изм_Номер");
	     Изм_Префикс_=GetFieldS(OWA,n,"Изм_Префикс");
	     Изм_Сепаратор_=GetFieldS(OWA,n,"Изм_Сепаратор");
	     Изм_НомерДок_=GetFieldS(OWA,n,"Изм_НомерДок");
	     if not Изм_ДатаДок_=Аннул_ДатаСвед and Аннул or not Изм_Префикс_=ПрефиксНомСвед or not Изм_ФорматНомер_=БО_ФорматНомер_:
		 Изм_ДатаДок_=Аннул_ДатаСвед;
		 Изм_ФорматНомер_=БО_ФорматНомер_;
		 Изм_Номер_=Раб.Обл.СледСУчетомДатыФ(crdБО,"Изм_Номер","Изм_ДатаДок",Изм_ДатаДок_,"(ТипДок=1 or OverrideТипДок='1')"+if(БО_ФорматНомер_=0,""," and Изм_Префикс='"+ПрефиксНомСвед+"'"));
		 Изм_Префикс_=ПрефиксНомСвед;
		 Изм_Сепаратор_=БО_Сепаратор_;
		 Изм_НомерДок_=Str(Изм_Номер_);
	     fi;
	  fi;
       fi;
       ClearVariable(Buf);
       if newНомер:
	  if parentБО=nil:
	     Номер_=Раб.Обл.СледСУчетомДатыФ(crdБО,"Номер","ДатаДок",if(ДатаСвед=1.1.100,ДатаРук,ДатаСвед),"(ТипДок=0 or ТипДок=2 or OverrideТипДок='0' or OverrideТипДок='2')"+if(БО_ФорматНомер_=0,""," and Префикс='"+ПрефиксНомСвед+"'"));
	     n=PutFieldI(OWA,n,"ФорматНомер",БО_ФорматНомер_);
	     n=PutFieldI(OWA,n,"Номер",Номер_);
	     n=PutFieldS(OWA,n,"Префикс",ПрефиксНомСвед);
	     n=PutFieldS(OWA,n,"Сепаратор",БО_Сепаратор_);
	     n=PutFieldS(OWA,n,"Номердок",Format("%."+Str(БО_ДлинаНомер_)+"D",Номер_));
	    else
	     Изм_ДатаДок_=Аннул_Дата;
	     Изм_ФорматНомер_=БО_ФорматНомер_;
	     Изм_Префикс_=ПрефиксНомСвед;
	     Изм_Сепаратор_=БО_Сепаратор_;
	     Изм_Номер_=Раб.Обл.СледСУчетомДатыФ(crdБО,"Изм_Номер","Изм_ДатаДок",Изм_ДатаДок_,"(ТипДок=1 or OverrideТипДок='1')"+if(БО_ФорматНомер_=0,""," and Изм_Префикс='"+ПрефиксНомСвед+"'"));
	     Изм_НомерДок_=Str(Изм_Номер_);
	  fi;
       fi;
       n=PutFieldI(OWA,n,"ТИПДОК",if(parentБО=nil,0,1));
       n=PutFieldI(OWA,n,"ТЕКГОД",ТекГод_);
       n=PutFieldD(OWA,n,"ДАТАДОК",ДатаСвед);
       if not parentБО=nil:
	  z=GetRecordNumber(OWA,parentБО);
	  n=PutFieldI(OWA,n,"ФОРМАТНОМЕР",GetFieldI(OWA,z,"ФОРМАТНОМЕР"));
	  n=PutFieldI(OWA,n,"НОМЕР",GetFieldI(OWA,z,"НОМЕР"));
	  n=PutFieldS(OWA,n,"ПРЕФИКС",GetFieldS(OWA,z,"ПРЕФИКС"));
	  n=PutFieldS(OWA,n,"СЕПАРАТОР",GetFieldS(OWA,z,"СЕПАРАТОР"));
	  n=PutFieldS(OWA,n,"НОМЕРДОК",GetFieldS(OWA,z,"НОМЕРДОК"));
	  n=PutFieldI(OWA,n,"ИЗМ_НОМЕР",Изм_Номер_);
	  n=PutFieldI(OWA,n,"ИЗМ_ФОРМАТНОМЕР",Изм_ФорматНомер_);
	  n=PutFieldS(OWA,n,"ИЗМ_ПРЕФИКС",Изм_Префикс_);
	  n=PutFieldS(OWA,n,"ИЗМ_СЕПАРАТОР",Изм_Сепаратор_);
	  n=PutFieldS(OWA,n,"ИЗМ_НОМЕРДОК",Изм_НомерДок_);
	  n=PutFieldD(OWA,n,"ИЗМ_ДАТАДОК",Изм_ДатаДок_);
	  n=PutFieldI(OWA,n,"ИЗМ",GetFieldI(OWA,z,"Изм")+1);
	  if GetFieldS(OWA,n,"РегНомер")="":
	     n=PutFieldS(OWA,n,"РегНомер",GetFieldS(OWA,z,"РегНомер"));
	    else
	     if not GetFieldS(OWA,n,"РегНомер")=GetFieldS(OWA,z,"РегНомер") and not GetFieldS(OWA,z,"РегНомер")="":
		Trace("Внимание! Обнаружено несовпадение учетного номера БО: "+GetFieldS(OWA,n,"РегНомер")+" <> "+GetFieldS(OWA,z,"РегНомер"));
	     fi;
	  fi;
       fi;
       БО_Признак_=Str(ТекГод_);
       БО_Признак_=БО_Признак_+if(БО_ФорматНомер_=0,"","."+Раб.Договор.ConvertStr(ПрефиксНомСвед));
--	 БО_Признак_=БО_Признак_+"."+Раб.Договор.ConvertStr(RepStr("0",Max(БО_ДлинаНомер_-Length(GetFieldS(OWA,n,"НомерДок")),0))+GetFieldS(OWA,n,"НомерДок"));
       БО_Признак_=БО_Признак_+"."+Раб.Договор.ConvertStr(GetFieldS(OWA,n,"НомерДок"));
       n=PutFieldS(OWA,n,"ПРИЗНАК",БО_Признак_);
       n=PutFieldS(OWA,n,"ПРИЗНАК_КМНТ",if(not GetFieldS(OWA,n,"РегНомер")="","Учетный номер "+GetFieldS(OWA,n,"РегНомер")+" ","")+НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Контр.КорИмя);
       n=PutFieldR(OWA,n,"РЕКВ",Учр);
       n=PutFieldR(OWA,n,"БАНК",if(Учр_Банк_Свед=nil,Учр_Банк,Учр_Банк_Свед));
       n=PutFieldS(OWA,n,"ГРБС",Раб.Бюджет.НаимКБК("ППП2006",Учр.РПО_ППП));
       n=PutFieldS(OWA,n,"ГЛАВА",Учр.РПО_ППП);
       n=PutFieldS(OWA,n,"ОСН_ДОКВИД","");
       n=PutFieldS(OWA,n,"ОСН_ДОКНАИМ",НаимДок.Наим);
       n=PutFieldS(OWA,n,"ОСН_ДОКНОМ",НомерДок);
       n=PutFieldD(OWA,n,"ОСН_ДОКДАТ",ДатаДок);
       n=PutFieldD(OWA,n,"ОСН_ДОКДН",ДатаН);
       n=PutFieldD(OWA,n,"ОСН_ДОКДК",ДатаК);
       n=PutFieldN(OWA,n,"ОСН_ДОКСУМ",СумДок);
       n=PutFieldS(OWA,n,"ОСН_ДОКОКВ",ОКВ);
       n=PutFieldN(OWA,n,"ОСН_ДОКСУМРУБ",if(not ОКВ='643' or (ДатаСвед>=1.7.2013 and (setЗаполР1_Гр8 or f20130901)),СумДок,0));
       n=PutFieldN(OWA,n,"ОСН_ДОКПРОЦАВ",0);
       n=PutFieldN(OWA,n,"ОСН_ДОКСУМАВ",if(Аванс,СумДок,0));
       n=PutFieldR(OWA,n,"РЕКВП",Контр);
       n=PutFieldR(OWA,n,"БАНКП",Контр_Банк);
       --Раздел3
       n=PutFieldR(OWA,n,"Исп_Док",Исп_Док);
       n=PutFieldS(OWA,n,"Исп_ДокНом",Исп_Док.Ном);
       n=PutFieldD(OWA,n,"Исп_ДокДат",Исп_Док.Дат);
       n=PutFieldS(OWA,n,"Исп_Орган",Исп_Док.Суд_Орган);
       n=PutFieldN(OWA,n,"Исп_ДокСум",Исп_Док.Сум);
       n=PutFieldS(OWA,n,"Исп_УведНом",Исп_Док.УведНом);
       n=PutFieldD(OWA,n,"Исп_УведДат",Исп_Док.УведДат);
       --Раздел4
       n=PutFieldS(OWA,n,"ДОП_РАЗМЕЩЗАКАЗ","");
       n=PutFieldD(OWA,n,"ДОП_ДАТАИТОГ",1.1.100);
       n=PutFieldS(OWA,n,"ДОП_ВИДДОКОСН","");
       n=PutFieldS(OWA,n,"ДОП_НОМДОКОСН","");
       n=PutFieldS(OWA,n,"ДОП_СТАТУС",if(parentБО=nil,"","2"));
       n=PutFieldD(OWA,n,"ДОП_ДАТАДОКОСН",1.1.100);
       n=PutFieldS(OWA,n,"ДОП_НОМ_РЕЕСТР","");
       OA=OpenArray(OWA,n,"РАСШИФР","");
       DeleteAllRecords(OA);
       ПризнОбщ_=Trim(Общ_Призн1+" "+Общ_Призн2);
       for Iter=1..Расшифр do
	КБК_=Раб.Формат.ReplaceSubStr(Расшифр[Iter].КБК,".","");
	ТипКБК_=Раб.Бюджет2005.ТипКБКСчета(Расшифр[Iter].КБК);
	БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипКБК_,"БК",False);
	КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипКБК_,"КОСГУ",False);
	if ТипКБК_="ФКР": ТипКБК_="10";
	  |ТипКБК_="КИФД": ТипКБК_=if(Раб.Бюджет2005.ВзятьТипКИФД(Расшифр[Iter].КБК)="КИВнФ","32","31");
	  |True: ТипКБК_="";
	fi;
	Пер_="1";
	СчДеб_=if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".501."+Пер_+"3."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".506."+Пер_+"0."+КОСГУ_|True:"");
	СчКре_=if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_|True:"");
	tmp=Раб.Бюджет2005.СписокСправ(СчДеб_+"|"+СчКре_,0,"");
	tmp=Раб.Бюджет2005.Объединить(tmp,"ИСПДОК.*","|");
	Призн_=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп)," ",tmp,"|");
	Призн_=Раб.Бюджет2005.Объединить(ПризнОбщ_,Призн_," ");
	Призн_=Раб.Бюджет2005.СортироватьНаборСлов(Призн_," ",True);
	Раб.Договор.idxЗнач[1]=Расшифр[Iter].Предм1;
	Раб.Договор.idxЗнач[2]=Расшифр[Iter].Предм2;
	Раб.Договор.idxЗнач[3]=Расшифр[Iter].Предм3;
	Раб.Договор.idxЗнач[4]=Расшифр[Iter].Предм4;
	Key=Расшифр[Iter].ВД+"#"+ТипКБК_+"#"+КБК_+"#"+Призн_+"#"+Раб.Договор.ПолучитьИндекс(4,3);
	z=SearchInArray(Buf,Key,True);
	if z=-1:
	   z=InsertInArraySort(Buf,Key);
	   n2=InsertRecord(OA,z);
	   n2=PutFieldR(OA,n2,"ФАИП",nil);
	   n2=PutFieldS(OA,n2,"ИСТ",Расшифр[Iter].ВД);
	   n2=PutFieldS(OA,n2,"ТИПКБК",ТипКБК_);
	   n2=PutFieldS(OA,n2,"КБК",КБК_);
	   n2=PutFieldS(OA,n2,"ПРИЗН",Призн_);
	   n2=PutFieldS(OA,n2,"ПРЕДМ1",if(Расшифр[Iter].Предм1="" and Расшифр[Iter].Предм2="" and Расшифр[Iter].Предм3="" and Расшифр[Iter].Предм4="",Содерж,Расшифр[Iter].Предм1));
	   n2=PutFieldS(OA,n2,"ПРЕДМ2",if(Расшифр[Iter].Предм1="" and Расшифр[Iter].Предм2="" and Расшифр[Iter].Предм3="" and Расшифр[Iter].Предм4="","",Расшифр[Iter].Предм2));
	   n2=PutFieldS(OA,n2,"ПРЕДМ3",if(Расшифр[Iter].Предм1="" and Расшифр[Iter].Предм2="" and Расшифр[Iter].Предм3="" and Расшифр[Iter].Предм4="","",Расшифр[Iter].Предм3));
	   n2=PutFieldS(OA,n2,"ПРЕДМ4",if(Расшифр[Iter].Предм1="" and Расшифр[Iter].Предм2="" and Расшифр[Iter].Предм3="" and Расшифр[Iter].Предм4="","",Расшифр[Iter].Предм4));
	   n2=PutFieldS(OA,n2,"ПРИМЕЧ","");
	   n2=PutFieldS(OA,n2,"ДОПКЛ","");
	   n2=PutFieldS(OA,n2,"СЧДЕБ1",СчДеб_);
	   n2=PutFieldS(OA,n2,"СЧКРЕ1",СчКре_);
	   n2=PutFieldS(OA,n2,"СЧДЕБ2",if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".501.23."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".506.20."+КОСГУ_|True:""));
	   n2=PutFieldS(OA,n2,"СЧКРЕ2",if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502.21."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".502.22."+КОСГУ_|True:""));
	   n2=PutFieldS(OA,n2,"СЧДЕБ3",if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".501.33."+КОСГУ_|True:""));
	   n2=PutFieldS(OA,n2,"СЧКРЕ3",if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502.31."+КОСГУ_|True:""));
	fi;
	n2=z;
	Пер_=if(Int(ТекГод)-Year(ДатаРег)>0 and not Расшифр[Iter].ВидОпер="00",Str(Min(3,Int(ТекГод)-Year(ДатаРег)+1)),"1");

       if Пер_="1":
	   FieldSum="СУМ1_"+Str(Int(МФ));
	   FieldSum2="СУМ_ПРЕ1_"+Str(Int(МФ));
	  else
	   FieldSum="СУМ"+Пер_;
	   FieldSum2="СУМ_ПРЕ"+Пер_;
	fi;
	if parentБО=nil:
	   n2=PutFieldN(OA,n2,FieldSum,GetFieldN(OA,n2,FieldSum)+Расшифр[Iter].СумСНДС);
	  else
	   n2=PutFieldN(OA,n2,FieldSum2,GetFieldN(OA,n2,FieldSum2)+Расшифр[Iter].СумСНДС);
	   n2=PutFieldN(OA,n2,FieldSum,0);
	fi;
       od;
       n=PutFieldL(OWA,n,"УчетФК",УчетБО_ФК);
       n=PutFieldS(OWA,n,"GUID_FK",БО_GUID_FK);
       n=PutFieldS(OWA,n,"ВАЛ",Вал);
       n=PutFieldS(OWA,n,"ДОЛЖНРУК",if(parentБО=nil,ДолжнРук,Аннул_ДолжнРук));
       n=PutFieldS(OWA,n,"ФИОРУК",if(parentБО=nil,ФиоРук,Аннул_ФиоРук));
       n=PutFieldD(OWA,n,"ДАТАПОДПИСИ",if(parentБО=nil,ДатаРук,Аннул_ДатаРук));
       n=PutFieldL(OWA,n,"ЭТОАССИГН",False);
       n=PutFieldS(OWA,n,"ПРИЗН_К",Контр_Призн);
       n=PutFieldS(OWA,n,"ПРИЗН_К_ПРЕ",Контр_Призн);
       n=PutFieldS(OWA,n,"ПРИЗН_ДОГОВОР","ДОГОВОР."+Признак);
       n=PutFieldI(OWA,n,"СЕКРЕТ",Секрет);
       n=PutFieldR(OWA,n,"ДО",Current);
       n=PutFieldR(OWA,n,"БО",parentБО);
       n=PutFieldR(OWA,n,"БО_Пре",parentБО);
       n=PutFieldS(OWA,n,"OverrideТипДок","");
       n=PutFieldS(OWA,n,"OverrideЗнач","");
       n=PutFieldS(OWA,n,"РПО_Ключ",РПО_Ключ);
    fi; --if aУчет:
    n=PutFieldL(OWA,n,"Учитывать",aУчет);
    Rec=GetRecordKey(OWA,n);
 fi;
 ^Rec;
end;

Func СведБО(aУчет:L):L;
var OWA,nr,i,n1,n2:i;
var Rec,Rec2: Record;
 if CurrentState=CrdusInserted: EditorApply; fi;
 OWA=OpenWorkArea(crdБО,"ТипДок;Доп_Статус","ДО="+RecordToString(Current));
 Try
  nr=Records(OWA);
  if not aУчет and nr=0: ^True; fi;
  for i=1..nr do
   if GetFieldI(OWA,i,"ТипДок")=0: n1=i;
     |GetFieldI(OWA,i,"ТипДок")=1 and not GetFieldS(OWA,i,"Доп_Статус")="": n2=i;
   fi;
  od;
  BeginChanging(OWA);
  Try
   Rec=СведБО_(OWA,n1,aУчет,nil);
   Rec2=СведБО_(OWA,n2,aУчет and Аннул,Rec);
  EndChanging(OWA);
 Except
  CancelChanging(OWA);
  Raise;
 end;
 Finally
  CloseWorkArea(OWA);
 end;
 if not aУчет: Rec=nil; fi;
 if not aУчет or not Аннул: Rec2=nil; fi;
 БО=Rec;
 БО_Изм=Rec2;
 ^True;
end;

var СФКлюч[]:S;
var СФНом[]:S;
var СФДат[]:D;
var СФДат_О[]:D;
var ВсегоПок[]:N; --Всего покупок включая НДС
var СТО1[]    :N; --Стоимость покупок без НДС 10%
var СУМ1[]    :N; --сумма НДС 10%
var СТО18[]   :N; --Стоимость покупок без НДС 18%
var СУМ18[]   :N; --суммаНДС 18% и остальных ставок
var СУМ3[]    :N; --сумма по ставке НСД 0%

Proc СборСФ;
var n,nn,p:I;
var Rec:Record;
var Ключ:S;
  ClearVariable(СФКлюч);
  ClearVariable(СФНом);
  ClearVariable(СФДат);
  ClearVariable(ВсегоПок);
  ClearVariable(СТО1);
  ClearVariable(СУМ1);
  ClearVariable(СТО18);
  ClearVariable(СУМ18);
  ClearVariable(СУМ3);
  for n = 1 to Позиции_НДС do
     if trim(Позиции_НДС[n].СчФНом)<>'' and Позиции_НДС[n].СчФДат<>1.1.100 then
	Ключ=Позиции_НДС[n].СчФНом+DateToString(Позиции_НДС[n].СчФДат);
	if SearchInArray(СФКлюч,Ключ)=-1 then
	   p=InsertInArraySort(СФКлюч,Ключ);
	   InsertInArray(СФНом,p,Позиции_НДС[n].СчФНом);
	   InsertInArray(СФДат,p,Позиции_НДС[n].СчФДат);
	   InsertInArray(СФДат_О,p,ДатаРег);
	   InsertInArray(ВСЕГОПОК,p,-1);ВСЕГОПОК[p]=0;
	   InsertInArray(СТО1	 ,p,-1);СТО1	[p]=0;
	   InsertInArray(СУМ1	 ,p,-1);СУМ1	[p]=0;
	   InsertInArray(СТО18	 ,p,-1);СТО18	[p]=0;
	   InsertInArray(СУМ18	 ,p,-1);СУМ18	[p]=0;
	   InsertInArray(СУМ3	 ,p,-1);СУМ3	[p]=0;
	fi;
     fi;
     Rec=IntegerToRecord(Позиции_НДС[n].СЧФ_Ключ);
     if RecordExists("СЧЕТФАКТПОСТ",rec) then
	Ключ=GetCardFieldS("СЧЕТФАКТПОСТ",Rec,"НОМЕРБУМ")+DateToString(GetCardFieldD("СЧЕТФАКТПОСТ",Rec,"ДАТА"));
	if SearchInArray(СФКлюч,Ключ)=-1 then
	   p=InsertInArraySort(СФКлюч,Ключ);
	   InsertInArray(СФНом,p,GetCardFieldS("СЧЕТФАКТПОСТ",Rec,"НОМЕРБУМ"));
	   InsertInArray(СФДат,p,GetCardFieldD("СЧЕТФАКТПОСТ",Rec,"ДАТА"));
	   InsertInArray(СФДат_О,p,GetCardFieldD("СЧЕТФАКТПОСТ",Rec,"ДАТАОприх"));
	   InsertInArray(ВСЕГОПОК,p,-1);ВСЕГОПОК[p]=0;
	   InsertInArray(СТО1	 ,p,-1);СТО1	[p]=0;
	   InsertInArray(СУМ1	 ,p,-1);СУМ1	[p]=0;
	   InsertInArray(СТО18	 ,p,-1);СТО18	[p]=0;
	   InsertInArray(СУМ18	 ,p,-1);СУМ18	[p]=0;
	   InsertInArray(СУМ3	 ,p,-1);СУМ3	[p]=0;
	fi;
     fi;
  od;
end;

Proc СверткаСФ;
var OWA,OA,n,nn,n1,nn1,p:I;
var Ключ:S;
  --Добавить привязаные счета-фактуры.
  OWA=OpenWorkArea(crdДО,"","КОНТР="+RecordToString(Контр)+"AND Учр="+RecordToString(Учр)+" and Рег and ДатаРег>"+DateToString(ДатаРег-6)+" and ДатаРег<"+DateToString(ДатаРег+5));
  try
    nn=Records(OWA);
    for n= 1 to nn do
      OA=OpenArray(OWA,n,"Позиции_НДС","");
      try
	nn1= Records(OA);
	for n1=1 to nn1 do
	  Ключ=GetFieldS(OA,n1,"СчФНом")+DateToString(GetFieldD(OA,n1,"СчФДат"));
	  p=SearchInArray(СФКлюч,Ключ);
	  if p<>-1 then
	     ВСЕГОПОК[p]=ВСЕГОПОК[p]+GetFieldN(OA,n1,"СумСНДС");
	     if GetFieldN(OA,n1,"НДС")=10 then
		СТО1	[p]=СТО1    [p]+GetFieldN(OA,n1,"Сум");
		СУМ1	[p]=СУМ1    [p]+GetFieldN(OA,n1,"СумСНДС")-GetFieldN(OA,n1,"Сум");
	       |GetFieldN(OA,n1,"НДС")=18 then
		СТО18	[p]=СТО18   [p]+GetFieldN(OA,n1,"Сум");
		СУМ18	[p]=СУМ18   [p]+GetFieldN(OA,n1,"СумСНДС")-GetFieldN(OA,n1,"Сум");
	       |GetFieldN(OA,n1,"НДС")=0 then
		СУМ3	[p]=СУМ3    [p]+GetFieldN(OA,n1,"Сум");
	     fi;
	  fi;
	od;
      finally
	CloseWorkArea(OA);
      end;
    od;
  finally
    CloseWorkArea(OWA);
  end;
end;

Func ОбновСФ:L;
var OWA,n,n1,nn:I;
var Ключ:S;
var Res,Upd:L;
  Res=False;
  nn=LengthOfArray(СФКлюч);
  for n=1 to nn do
    OWA=OpenWorkArea("СЧЕТФАКТПОСТ","","ДАТА="+DateToString(СФДат[n])+" AND НОМЕРБУМ='"+СФНом[n]+"' AND РЕКВП="+RecordToString(Контр)+"AND Рекв="+RecordToString(Учр));
    try
      if Records(OWA)=0 then
	 BeginChanging(OWA);
	 try
	   n1=InsertRecord(OWA);
	   n1=PutFieldR(OWA,n1,"РЕКВП",Контр);
	   n1=PutFieldS(OWA,n1,"НАИМПОСТ",GetCardFieldS("КОНТРАГЕНТ",Контр,"КорИмя"));
	   n1=PutFieldS(OWA,n1,"ИНН",GetCardFieldS("Контрагент",Контр,"ИНН"));
	   n1=PutFieldS(OWA,n1,"АнКодПост","К."+GetCardFieldS("Контрагент",Контр,"ПРИЗНАК"));
	   n1=PutFieldR(OWA,n1,"РЕКВ",Учр);
	   n1=PutFieldD(OWA,n1,"ДАТА",СФДат[n]);
	   n1=PutFieldD(OWA,n1,"ДАТАОприх",СФДат_О[n]);
--	     n1=PutFieldD(OWA,n1,"НОМЕР",СФ_Дат[n]);
	   n1=PutFieldS(OWA,n1,"НОМЕРБУМ",СФНом[n]);
	   n1=PutFieldN(OWA,n1,"ВСЕГОПОК",ВСЕГОПОК[n]);
	   n1=PutFieldN(OWA,n1,"СТО1",СТО1[n]);
	   n1=PutFieldN(OWA,n1,"СУМ1",СУМ1[n]);
	   n1=PutFieldN(OWA,n1,"СТО18",СТО18[n]);
	   n1=PutFieldN(OWA,n1,"СУМ18",СУМ18[n]);
	   n1=PutFieldN(OWA,n1,"СУМ3",СУМ3[n]);
	   n1=PutFieldL(OWA,n1,"Проводить",True);
	   EndChanging(OWA);
	   Res=True;
	 Except
	   CancelChanging(OWA);
	 end;
	else
	 Upd=GetFieldN(OWA,1,"ВСЕГОПОК")<>ВСЕГОПОК[n];
	 Upd=Upd or GetFieldN(OWA,1,"СТО1")<>СТО1[n];
	 Upd=Upd or GetFieldN(OWA,1,"СУМ1")<>СУМ1[n];
	 Upd=Upd or GetFieldN(OWA,1,"СТО18")<>СТО18[n];
	 Upd=Upd or GetFieldN(OWA,1,"СУМ18")<>СУМ18[n];
	 Upd=Upd or GetFieldN(OWA,1,"СУМ3")<>СУМ3[n];
	 --Если ВсегоПок=0 то удалить.
	 if Upd then
	    BeginChanging(OWA);
	    try
	      if ВСЕГОПОК[n]=0 then
		 DeleteRecord(OWA,1);
		else
		 n1=PutFieldN(OWA,1,"ВСЕГОПОК",ВСЕГОПОК[n]);
		 n1=PutFieldN(OWA,1,"СТО1",СТО1[n]);
		 n1=PutFieldN(OWA,1,"СУМ1",СУМ1[n]);
		 n1=PutFieldN(OWA,1,"СТО18",СТО18[n]);
		 n1=PutFieldN(OWA,1,"СУМ18",СУМ18[n]);
		 n1=PutFieldN(OWA,1,"СУМ3",СУМ3[n]);
	      fi;
	      Res=True;
	      EndChanging(OWA);
	    except
	      CancelChanging(OWA);
	    end;
	 fi;
      fi;
    finally
      CloseWorkArea(OWA);
    end;
  od;
  ^Res;
end;

Func НаОшибку(Msg:LongString; mt:I; Page:i; Field:S; Iter:I):L;
 if not Msg="":
    Message(Msg,mt);
 fi;
 if not Страница=Page: Страница=Page; ВывестиСтраницу; fi;
 if not Field="": Template.Field=Field; fi;
 if not Iter=0: Template.Frame=Iter; fi;
 ^False;
end;

Func ОбновитьСпецификацию(aErr:I):L;
var Iter,n,nn,z:i;
var Key,Режим:S;
var Flag:L;
 Flag=False;
 for Iter=1..Расшифр do
  Расшифр[Iter].СумДоговор=0;
  Расшифр[Iter].КолДоговор=0;
  Расшифр[Iter].СумДО=0;
  Расшифр[Iter].КолДО=0;
  if not Расшифр[Iter].КБК="" or Расшифр[Iter].ТМЦ16>0 or not Расшифр[Iter].ОКДП_Гр="":
     Flag=True;
  fi;
 od;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 if УчетБО or Договор=nil or ДатаРег=1.1.100 or ТекГод="" or Расшифр=0 or Flag=False: ^True; fi;
 Flag=False;
 ShowProgress(4,"Расчет...");
 --КБК
 Try
  ProgressPos(1);
  --nn=Раб.Договор.Договор_КБК("Рег and ДатаРег<="+DateToString(if(Day(ДатаРег)=31 and Mon(ДатаРег)=12,ДатаРег+1,ДатаРег))+" and Договор="+RecordToString(Договор),ТекГод,False);
  --дата больше не нужна для выбора номеклатуры, т.к. rec(Договор) теперь одназначно указывет на экземпляр договора
  if Зачет_КЗ>0:
     nn=Раб.Договор.ДО_КБК("Рег and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and UKey="+RecordToString(ДО),"",ДатаРег,False,False);
    else
     nn=Раб.Договор.Договор_КБК("Рег and Договор="+RecordToString(Договор),ТекГод,False);
  fi;
  if not nn=0 or not aErr=0:
     for Iter=1..Расшифр do
      Key=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн;
      Buf[Iter]=Key;
      n=SearchInArray(Раб.Договор.LstКлюч,Key,True);
      if n=-1:
	 if aErr= 1: ^НаОшибку("Не найдено в спецификации договора:^MВид деятельности: "+Расшифр[Iter].ВД+", КБК: "+Расшифр[Iter].КБК+if(Расшифр[Iter].Призн="",""," {"+Расшифр[Iter].Призн+"}"),mtError,3,"КБК",Iter);
	   |aErr=-1: Расшифр[Iter].ВД=""; Расшифр[Iter].КБК=""; Расшифр[Iter].Призн="";
	 fi;
	else
	 Расшифр[Iter].СумДоговор=Раб.Договор.LstСум[n];
      fi;
     od;
  fi;
  --Предмет
  ProgressPos(2);
  if (FlagТМЦ and not Аванс) or FlagОКДП:
     if Аванс:
	Режим="ОКДП_Гр";
       else
	if FlagТМЦ and FlagОКДП: Режим="";
	  |FlagТМЦ: Режим="ТМЦ";
	  |FlagОКДП: Режим="ОКДП";
	fi;
     fi;
     --nn=Раб.Договор.Договор_Предм("Рег and ДатаРег<="+DateToString(if(Day(ДатаРег)=31 and Mon(ДатаРег)=12,ДатаРег+1,ДатаРег))+" and Договор="+RecordToString(Договор),Режим,False);
     --дата больше не нужна для выбора номеклатуры, т.к. rec(Договор) теперь одназначно указывет на экземпляр договора
     if Зачет_КЗ>0:
	nn=Раб.Договор.ДО_Предм("Рег and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and UKey="+RecordToString(ДО),"",ДатаРег,Режим,False,False);
       else
	nn=Раб.Договор.Договор_Предм("Рег and Договор="+RecordToString(Договор),Режим,False);
     fi;
     if not nn=0 or not aErr=0:
	verОКДП_Гр=Раб.Договор.verОКДП_Гр;
	if verОКДП_Гр=-1: verОКДП_Гр=Договор.verОКДП_Гр; fi;
	for Iter=1..Расшифр do
	 Flag=True;
	 Key="";
	 if Режим="ОКДП_Гр": 
	    Key=Расшифр[Iter].ОКДП_Гр; 
	    if Расшифр[Iter].ОКДП_Гр="": Flag=False; fi;
	 fi;
	 if Режим="ОКДП" or Режим="": 
	    Key=Расшифр[Iter].ОКДП_Гр+"."+Расшифр[Iter].ОКДП+if(Режим="","#","");
	    if	Расшифр[Iter].ОКДП_Гр="" or Расшифр[Iter].ОКДП="": Flag=False; fi;
	 fi;
	 if (Режим="ТМЦ" or Режим="") and Flag:
	    if Предм_[Iter]="":
	       Flag=False;
	      else
	       if Расшифр[Iter].ТМЦ=nil:
		  if Расшифр[Iter].ТМЦ16=0:
		     Расшифр[Iter].ТМЦ16=Раб.Crc16.Crc16_(0,Расшифр[Iter].Предм1);
		     Расшифр[Iter].ТМЦ16=Раб.Crc16.Crc16_(Расшифр[Iter].ТМЦ16,Расшифр[Iter].Предм2);
		     Расшифр[Iter].ТМЦ16=Раб.Crc16.Crc16_(Расшифр[Iter].ТМЦ16,Расшифр[Iter].Предм3);
		     Расшифр[Iter].ТМЦ16=Раб.Crc16.Crc16_(Расшифр[Iter].ТМЦ16,Расшифр[Iter].Предм4);
		  fi;
		  Key=Key+Str(Расшифр[Iter].ТМЦ16)+"#"+Up(Расшифр[Iter].ЕдИзм)+"#"+Format("%.2F",Расшифр[Iter].ЦенаДоговор);
		 else
		  Key=Key+RecordToString(Расшифр[Iter].ТМЦ)+"#"+Up(Расшифр[Iter].ЕдИзм)+"#"+Format("%.2F",Расшифр[Iter].ЦенаДоговор);
	       fi;
	    fi; --if Предм_[Iter]="":
	 fi; --(Режим="ТМЦ" or Режим="") and Flag:
	 if Flag:
	    Buf2[Iter]=Key;
	    n=SearchInArray(Раб.Договор.LstКлюч,Key,True);
	    if not n=-1 and (Режим="ТМЦ" or Режим="") and Расшифр[Iter].ТМЦ=nil:
	       if not (Расшифр[Iter].Предм1=Раб.Договор.lstПредм1[n] and Расшифр[Iter].Предм2=Раб.Договор.lstПредм2[n] and Расшифр[Iter].Предм3=Раб.Договор.lstПредм3[n] and Расшифр[Iter].Предм4=Раб.Договор.lstПредм4[n]):
		  n=-1;
	       fi;
	    fi;
	    if n=-1:
	       if aErr= 1: ^НаОшибку("Не найдено в спецификации договора:^M"+Предм_[Iter]+"^MЕдиница измерения: "+Up(Расшифр[Iter].ЕдИзм)+"^MЦена: "+Format("%.2N",Расшифр[Iter].Цена),mtError,3,"Предм_",Iter);
		 |aErr=-1: Расшифр[Iter].ТМЦ=nil; Расшифр[Iter].Предм1=""; Расшифр[Iter].Предм2=""; Расшифр[Iter].Предм3=""; Расшифр[Iter].Предм4="";
	       fi;
	      else
	       Расшифр[Iter].КолДоговор=if(Режим="ТМЦ" or Режим="",Раб.Договор.LstКол[n],Раб.Договор.LstСум[n]);
	    fi;
	 fi;
	od;
     fi;
  fi; --if (FlagТМЦ and not Аванс) or FlagОКДП:
  --Принятые обязательcтва,КБК
  ProgressPos(3);
  --nn=Раб.Договор.ДО_КБК("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"","not ")+"Аванс","",False,False);
  if Зачет_КЗ>0:
     nn=Раб.Договор.ДО_КБК("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and ДО="+RecordToString(ДО),"",ДатаРег,False,False);
    else
     nn=Раб.Договор.ДО_КБК("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"","not ")+"Аванс","",ДатаРег,False,False);
  fi;
  for Iter=1..Расшифр do
   Key=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн;
   if not nn=0:
      n=SearchInArray(Раб.Договор.LstКлюч1,Key,True,1);
      While not n=-1 do
       Расшифр[Iter].СумДО=Расшифр[Iter].СумДО+Раб.Договор.LstСум[n];
       n=SearchInArray(Раб.Договор.LstКлюч1,Key,True,n+1);
      od;
   fi;
   n=SearchInArray(Buf,Key,False,Iter+1);
   While not n=-1 do
    Расшифр[n].СумДО=Расшифр[n].СумДО+Расшифр[Iter].СумСНДС;
    n=SearchInArray(Buf,Key,False,n+1);
   od;
  od;
  --Принятые обязательcтва,Предмет
  ProgressPos(4);
  if (FlagТМЦ and not Аванс) or FlagОКДП:
     --nn=Раб.Договор.ДО_Предм("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"","not ")+"Аванс","",Режим,False,False);
     if Зачет_КЗ>0:
	nn=Раб.Договор.ДО_Предм("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and ДО="+RecordToString(ДО),"",ДатаРег,Режим,False,False);
       else
	nn=Раб.Договор.ДО_Предм("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"","not ")+"Аванс","",ДатаРег,Режим,False,False);
     fi;
     for Iter=1..Расшифр do
      if not Buf2[Iter]="":
	 if not nn=0:
	    n=SearchInArray(Раб.Договор.LstКлюч,Buf2[Iter],True,1);
	    While not n=-1 do
	     Расшифр[Iter].КолДО=Расшифр[Iter].КолДО+if(Режим="ТМЦ" or Режим="",Раб.Договор.LstКол[n],Раб.Договор.LstСум[n]);
	     n=SearchInArray(Раб.Договор.LstКлюч,Buf2[Iter],True,n+1);
	    od;
	 fi;
	 n=SearchInArray(Buf2,Buf2[Iter],False,Iter+1);
	 While not n=-1 do
	  Расшифр[n].КолДО=Расшифр[n].КолДО+if(Режим="ТМЦ" or Режим="",Расшифр[Iter].Кол,Расшифр[Iter].СумСНДС);
	  n=SearchInArray(Buf2,Buf2[Iter],False,n+1);
	 od;
      fi;
     od;
  fi;
 Finally
  CloseProgress;
 end;
 ^True;
end;

Func ПроверитьУникальность:L;
var Iter1,Iter2:i;
 ClearVariable(Buf);
 for Iter1=1..Расшифр do
  Расшифр[Iter1].Призн=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter1].Призн," ",True);
  Расшифр[Iter1].ПризнДоп=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter1].ПризнДоп," ",True);
  for Iter2=Iter1+1..Расшифр do
   if Расшифр[Iter1].ВД=Расшифр[Iter2].ВД and
      Расшифр[Iter1].КБК=Расшифр[Iter2].КБК and
      Расшифр[Iter1].Призн=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter2].Призн," ",True) and
      Расшифр[Iter1].ПризнДоп=Раб.Бюджет2005.СортироватьНаборСлов(Расшифр[Iter2].ПризнДоп," ",True) and
      Расшифр[Iter1].ВидОпер=Расшифр[Iter2].ВидОпер and
      Расшифр[Iter1].НДС=Расшифр[Iter2].НДС and
      Расшифр[Iter1].ВыделятьНДС=Расшифр[Iter2].ВыделятьНДС and
      Расшифр[Iter1].СчФ_Ном=Расшифр[Iter2].СчФ_Ном and
      Расшифр[Iter1].СчФ_Дат=Расшифр[Iter2].СчФ_Дат and
      ((flagТМЦ and
      Расшифр[Iter1].ТМЦ=Расшифр[Iter2].ТМЦ and
      Расшифр[Iter1].Предм1=Расшифр[Iter2].Предм1 and
      Расшифр[Iter1].Предм2=Расшифр[Iter2].Предм2 and
      Расшифр[Iter1].Предм3=Расшифр[Iter2].Предм3 and
      Расшифр[Iter1].Предм4=Расшифр[Iter2].Предм4 and
      Расшифр[Iter1].Цена=Расшифр[Iter2].Цена and
      Расшифр[Iter1].ЕдИзм=Расшифр[Iter2].ЕдИзм) or
      not flagТМЦ) and
      ((flagОКДП and
      Расшифр[Iter1].ОКДП_Гр=Расшифр[Iter2].ОКДП_Гр and
      Расшифр[Iter1].ОКДП=Расшифр[Iter2].ОКДП) or
      not flagОКДП):
      ^НаОшибку("Повторный ввод (строка №"+Str(Iter1)+" = №"+Str(Iter2)+")^MВД: "+Расшифр[Iter1].ВД+"^MКБК: "+Расшифр[Iter1].КБК+"^MПризнаки: "+Trim(Расшифр[Iter1].Призн+" "+Расшифр[Iter1].ПризнДоп)+if(Предм_[Iter1]="" or not flagТМЦ,"","^M"+Предм_[Iter1])+"^MОКДП "+Расшифр[Iter1].ОКДП_Гр+"."+Расшифр[Iter1].ОКДП,mtError,3,"КБК",Iter2);
   fi;
  od;
 od;
 ^True;
end;

Func ПроверитьНаборСправ:L;
var Iter,z:I;
var tmp,Призн1_,Призн2_:S;
 ClearVariable(Buf);
 for Iter=1..Расшифр do
  tmp=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК;
  Buf[Iter]=tmp;
 od;
 for Iter=1..Расшифр do
  tmp=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК;
  z=SearchInArray(Buf,tmp,False);
  Призн1_=Раб.Бюджет2005.СортироватьНаборСлов(Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп)," ",True);
  Призн2_=Раб.Бюджет2005.СортироватьНаборСлов(Trim(Расшифр[z].Призн+" "+Расшифр[z].ПризнДоп)," ",True);
  if not z=-1 and not Раб.Бюджет2005.ПризнВСправ(Призн1_," ",".*")=Раб.Бюджет2005.ПризнВСправ(Призн2_," ",".*"):
     Message("Различный набор справочников",mtError);
     Template.Field="Призн_";
     Template.Frame=Iter;
     ^False;
  fi;
 od;
 ^True;
end;

Func ПроверитьАннул:L;
var Page,n,Iter, БО_ФорматНомер_:i;
var sum:n;
var tmp,Сч_:S;
 Page=1;
 if Раб.Настр.Начать(blnБО,0,0,"",GetGUID):
    БО_ФорматНомер_=Int(Раб.Настр.ВзятьЗначение("setФорматНомер"));
 fi;
 if not БО_ФорматНомер_=0:
    if ПрефиксНомСвед="": ^НаОшибку("Заполните префикс номера сведений",mtError,Page,"ПрефиксНомСвед",0); fi;
 fi;
 Page=6;
 if Аннул_Дата=1.1.100: ^НаОшибку("Введите дату аннулирования документа",mtError,Page,"Аннул_Дата",1); fi;
 if Аннул_Дата<ДатаРег: ^НаОшибку("Дата аннулирования не может быть ранее даты принятия к учету",mtError,Page,"Аннул_Дата",1); fi;
 if Round(СумДок_Аннул,4)=0:  ^НаОшибку("Введите сумму аннулирования документа",mtError,Page,"СумДок_Аннул",1); fi;
 if Round(СумРубДок_Аннул,2)=0 and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку("Введите сумму аннулирования документа в рублях",mtError,Page,"СумРубДок_Аннул",1); fi;
 if Round(Abs(СумДок_Аннул),4)>Round(Abs(СумДок),4): ^НаОшибку("Сумма аннулирования документа не может превышать сумму документа",mtError,Page,"СумДок_Аннул",1); fi;
 if Round(Abs(СумРубДок_Аннул),2)>Round(Abs(СумРубДок),2): ^НаОшибку("Сумма аннулирования документа в рублях не может превышать сумму документа в рублях",mtError,Page,"СумРубДок_Аннул",1); fi;
 if Аннул_Кмнт="": ^НаОшибку("Введите причину аннулирования",mtError,Page,"Аннул_Кмнт",1); fi;
 if УчетБО:
    if Аннул_ФИОРук="": ^НаОшибку("Введите ФИО руководителя",mtError,Page,"Аннул_ФИОРук",1); fi;
    if Аннул_ДатаСвед=1.1.100: ^НаОшибку("Введите дату формирования сведений",mtError,Page,"Аннул_ДатаСвед",0); fi;
--    if Аннул_ДатаСвед<Аннул_Дата: ^НаОшибку("Дата сведений не может быть ранее даты аннулирования",mtError,Page,"Аннул_ДатаСвед",0); fi;
    if not Year(Аннул_ДатаСвед)=Year(ДатаРег): ^НаОшибку("Дата сведений должна находиться в пределах "+Str(Year(ДатаРег))+" года",mtError,Page,"Аннул_ДатаСвед",0); fi;
    if Аннул_ДатаРук=1.1.100: ^НаОшибку("Введите дату подписи сведений руководителем",mtError,Page,"Аннул_ДатаРук",1); fi;
    if Аннул_ДатаСвед>Аннул_ДатаРук:  ^НаОшибку("Дата подписи сведений не может быть, чем дата формирования сведенй",mtError,Page,"Аннул_ДатаРук",0); fi;
 fi;
 Refresh(False);
 Page=3;
 for Iter=1..Расшифр do
  if FlagТМЦ and Round(Abs(Расшифр[Iter].Кол_Аннул),14)>Round(Abs(Расшифр[Iter].Кол),14): ^НаОшибку("Количество аннулирования не может превышать количество по КБК",mtError,Page,"Кол_Аннул",Iter); fi;
  if Round(Abs(Расшифр[Iter].Сум_Аннул),4)>Round(Abs(Расшифр[Iter].СумСНДС),4): ^НаОшибку("Сумма аннулирования не может превышать сумму по КБК",mtError,Page,"Сум_Аннул",Iter); fi;
  if Round(Abs(Расшифр[Iter].СумРуб_Аннул),2)>Round(Abs(Расшифр[Iter].СумРубСНДС),2): ^НаОшибку("Сумма аннулирования в рублях не может превышать сумму по КБК в рублях",mtError,Page,"СумРуб_Аннул",Iter); fi;
 od;
 if not Round(СумДок_Аннул,4)=Round(ИтогСум_Аннул,4): ^НаОшибку("Сумму аннулирования документа отличается от итоговой суммы аннулирования по КБК",mtError,Page,"ИтогСум_Аннул",1); fi;
 if not Round(СумРубДок_Аннул,2)=Round(ИтогСумРуб_Аннул,4) and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку("Сумма аннулирования документа в рублях отличается от итоговой суммы аннулирования по КБК в рублях",mtError,Page,"ИтогСумРуб_Аннул",1); fi;
 Раб.Договор.ДО_Оплата(Current,Dat(1,1,Year(ToDay)+1),"","","",False,False,False);
 if Round(СумДок_Аннул,4)>Round(СумДок-Раб.Договор.lstСум[1],2):
    if EnqOkCancel("Внимание! Сумма аннулирования документа "+Format("%.2N",СумДок_Аннул)+" превышает не оплаченный остаток документа "+Format("%.2N",СумДок-Раб.Договор.lstСум[1])+"^MИгнорировать данное предупреждение ?",mtWarning)=cmCancel:
       ^НаОшибку("",mtError,6,"СумДок_Аннул",1);
    fi;
 fi;
 Раб.КСА.Начать;
 for Iter=1..Расшифр do
  Раб.КСА.Добавить(Расшифр[Iter].СчКорр_Аннул);
 od;
 if Раб.КСА.Закончить(True):
    Message("Добавление счетов завершено");
 fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Расшифр do
  if Расшифр[Iter].ВидОпер="206" and Расшифр[Iter].СчКорр_Аннул="": ^НаОшибку("Задайте корреспондирующий счет при аннулировании '"+Расшифр[Iter].СчКорр_Аннул+"'",mtError,Page,"СчКорр_Аннул",Iter); fi;
  if not Расшифр[Iter].СчКорр_Аннул="" and not Расшифр[Iter].ВидОпер="206":
     if Name_S(Расшифр[Iter].СчКорр_Аннул)=" ": ^НаОшибку("Неизвестный корреспондирующий счет при аннулировании '"+Расшифр[Iter].СчКорр_Аннул+"'",mtError,Page,"СчКорр_Аннул",Iter); fi;
     if Аванс:
	if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКорр_Аннул): ^НаОшибку("Счета не могут корреспондировать "+Расшифр[Iter].СчДеб+"/"+Расшифр[Iter].СчКорр_Аннул,mtError,Page,"СчКорр_Аннул",Iter); fi;
       else
	if not Correspond(Расшифр[Iter].СчКорр_Аннул,Расшифр[Iter].СчКре): ^НаОшибку("Счета не могут корреспондировать "+Расшифр[Iter].СчКорр_Аннул+"/"+Расшифр[Iter].СчКре,mtError,Page,"СчКорр_Аннул",Iter); fi;
     fi;
     tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Общ_Призн1+" "+Общ_Призн2)," ",".*");
     tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
     tmp=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
     if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Расшифр[Iter].СчКорр_Аннул,"",Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп),tmp): ^НаОшибку("",mtError,Page,"Призн_",Iter); fi;
     if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Расшифр[Iter].СчКорр_Аннул,"",Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп),tmp): ^НаОшибку("",mtError,Page,"Призн_",Iter); fi;
  fi;
 od;
 Page=10;
 for Iter=1..ПровДоп do
  if Round(Abs(ПровДоп[Iter].Сум_Аннул),4)>Round(Abs(ПровДоп[Iter].Сум),4): ^НаОшибку("Сумма аннулирования не может превышать сумму проводки",mtError,Page,"Сум_Аннул ",Iter); fi;
  if Round(Abs(ПровДоп[Iter].СумРуб_Аннул),2)>Round(Abs(ПровДоп[Iter].СумРуб),2): ^НаОшибку("Сумма аннулирования в рублях не может превышать сумму проводки",mtError,Page,"СумРуб_Аннул ",Iter); fi;
 od;
 Аннул_Часть=(not Round(СумДок_Аннул,4)=Round(СумДок,4) or not Round(СумРубДок_Аннул,4)=Round(СумРубДок,4)) or (not Round(ИтогСум_АннулПров,4)=Round(ИтогСумПров,4) or not Round(ИтогСумРуб_АннулПров,4)=Round(ИтогСумРубПров,4)) ;
 ^True;
end;

Func ПроверитьСохр:L;
var ГодДок,Mask,tmp:S;
var Iter:I;
var Flag,isОст:L;
 РасчетНДС;
 if Вал="": Вал=BaseCurrency; fi;
 if УчетБО:
    ГодДок=Str(Year(ДатаДок));
    Код=Up(if(ГодДок="",GetGUID,ГодДок)+"@"+if(Контр=nil,GetGUID,SubStr(Контр_Призн,Pos(".",Контр_Призн)+1,255))+"@"+КодДок+if(НомерДок="",GetGUID,НомерДок))+if(НомерДокДоп="","","_"+НомерДокДоп);
   else 
    Код=Up(Договор.Код+"@"+КодДок+if(НомерДок="",GetGUID,НомерДок)+if(НомерДокДоп="","","_"+НомерДокДоп));
 fi;
 if ТекГод="": ТекГод=Str(Year(ДатаРег)); fi;
 Признак=Раб.Договор.КодВПризнак(Код);
 Признак_Кмнт=НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Содерж;
 НаимДок_=НаимДок.Наим;
 if УчетБО_ФК and БО_GUID_FK="":
    БО_GUID_FK=Раб.Бюджет2005.MyGUID("FK");
 fi;
 if not Зачет_КЗ=0 and Аванс: Аванс=False; fi;
 if (Аванс or Зачет_КЗ>0) and ЦЗ: ЦЗ=False; fi;
 ClearVariable(Buf);
 if Рег: RefreshAna; fi;
 Flag=False;
 isОст=False;
 for Iter=1..Расшифр do
  Mask=Раб.Бюджет2005.СписокСправ(if(Аванс,Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре),0,"");
  Mask=Раб.Бюджет2005.Объединить(Mask,"ИСПДОК.*","|");
  Расшифр[Iter].ПризнНорм=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Расшифр[Iter].ПризнДоп," ",Mask,"|");
  if Рег:
     Расшифр[Iter].ОКДП_Призн=Раб.Договор.ОКДП_В_Признак(Расшифр[Iter].ОКДП_Гр,Расшифр[Iter].ОКДП,False,verОКДП_Гр);
     if not Расшифр[Iter].ОКДП_Призн="": Flag=True; fi;
  fi;
  if Расшифр[Iter].ВидОпер="00": isОст=True; fi;
 od;
 if Flag:
    RefreshAna;
    for Iter=1..Расшифр do
     if not Расшифр[Iter].ОКДП_Гр="":
	if Name_A(Расшифр[Iter].ОКДП_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак номенклатурной группы '"+Расшифр[Iter].ОКДП_Призн+"'",mtError,3,"ОКДП_Гр",Iter); Рег=False; ^False; fi;
     fi;
    od;
 fi;
 GUID=GetGUID;
 if (not УчетТМЦ=flagТМЦ or not УчетОКДП=flagОКДП):
    УчетТМЦ=flagТМЦ;
    УчетОКДП=flagОКДП;
    Оформление;
 fi;
 СверткаПроводок;
 ДатаДО=ДатаРег;
 if Day(ДатаРег)=31 and Mon(ДатаРег)=12 and isОст:
    ДатаДО=ДатаРег+1;

 fi;
 Return True;
end;

Proc СинхроПризнИспДок;
var Iter:I;
 if Исп_Док=nil:
    for Iter=1..Расшифр do
     Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].ПризнДоп," ","ИСПДОК.*","");
    od;
   else
    for Iter=1..Расшифр do
     Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].ПризнДоп," ",Исп_Док_Признак_,"ИСПДОК.*","");
    od;
 fi;
end;

Proc ОбновДоговор (Rec:Record);
var i:i;
var Flag:L;
  --if Договор=Rec: ОбновитьСпецификацию(-1); else ClearVariable(Расшифр); ClearVariable(Позиции_НДС); fi;
  if Договор=Rec: ОбновитьСпецификацию(-1); fi; --все равно будет проверка
  Раб.Договор.Договор_СуммаСроки(Rec,ДатаРег);
  Договор=Rec;
  Договор_GUID=Договор.GUID;
  Учр=Договор.Учр;
  Учр_Банк=Договор.Учр_Банк;
  if (not Договор.Контр2=0 or not Договор.Контр_Банк2=0):
     if not Контр=nil:
	ClearVariable(Buf);
	if not Договор.Контр=nil:
	   AddInArray(Buf,True,False,RecordToString(Договор.Контр));
	fi;
	for i=1..Договор.Контр2 do
	 if not Договор.Контр2[i].Контр=nil:
	    AddInArray(Buf,True,False,RecordToString(Договор.Контр2[i].Контр));
	 fi;
	od;
	if SearchInArray(Buf,RecordToString(Контр),True)=-1:
	   Контр=nil;
	   Контр_Призн="";
	   Контр_Банк=nil;
	fi;
     fi;
     if Контр=nil:
	Message("Выберите контрагента");
	Flag=ExecuteFuncL("Контр_OnEnter","",1);
     fi;
    else
     if not Контр=Договор.Контр:
	Контр=Договор.Контр;
	Контр_Призн=Договор.Контр_Призн;
	Контр_Банк=Раб.Договор.Контр_Банк;
     fi;
  fi;
  Общ_Призн1=Договор.Общ_Призн1;
  Общ_Призн2=Договор.Общ_Призн2;
  if not ОКВ=Договор.ОКВ:
     ОКВ=Договор.ОКВ;
     ExecuteProc("ОКВ_OnExit","",1);
  fi;
  if Содерж="": Содерж=Договор.Содерж; fi;
  if not ДОГОВОР.УчетБО: Message("В карточке договора должен установлен флаг 'Учитывать как бюдж. обязательство'",mtWarning); fi;
  БО_Призн="БО."+ДОГОВОР.БО.Признак;
  Секрет=Договор.Секрет;
  Исп_Док=Договор.Исп_Док;
  СинхроПризнИспДок;
end;

Func Проверить:L;
var Iter,Page,nn,БО_ФорматНомер_,i:i;
var tmp:S;
var Flag,ИгнорАванс:L;
var res:N;
var ТипКБК_,БК_,КОСГУ_,Пер_,СчД_,СчК_,СчДО_:S;
var OWA:I;
 RefreshAna;
 Page=1;
 if ТекГод="": ТекГод=Str(Year(ДатаРег)); fi;
 if ДатаСвед=1.1.100: ДатаСвед=ДатаРег; fi;
 if УчетБО:
    if Учр=nil: ^НаОшибку("Выберите покупателя",mtError,Page,"Учр.КорИмя",1); fi;
    if Учр.ПолнИмя="" and Учр.РПО_ПолнИмя2="": ^НаОшибку("Введите полное наименование покупателя",mtError,Page,"Учр.КорИмя",1); fi;
    if Учр.ИНН="": ^НаОшибку("Введите ИНН покупателя",mtError,Page,"Учр.ИНН",1); fi;
    if Учр.КПП="": ^НаОшибку("Введите КПП покупателя",mtError,Page,"Учр.КПП",1); fi;
    if Учр.РПО_ППП="": ^НаОшибку("Введите код ведомства покупателя",mtError,Page,"Учр.РПО_ППП",1); fi;
    if Учр.РПО_КБП="": ^НаОшибку("Введите КБП покупателя",mtError,Page,"Учр.РПО_КБП",1); fi;
    if ДолжнРук="": ^НаОшибку("Введите должность руководителя",mtError,Page,"ДолжнРук",1); fi;
    if ФИОРук="": ^НаОшибку("Введите ФИО руководителя",mtError,Page,"ФИОРук",1); fi;
    if ДатаСвед=1.1.100: ^НаОшибку("Введите дату формирования сведений (о принятом бюджетном обязательстве)",mtError,Page,"ДатаСвед",0); fi;
    if ДатаРук=1.1.100: ^НаОшибку("Введите дату подписи сведений руководителем",mtError,Page,"ДатаРук",1); fi;
    if ДатаСвед>ДатаРук:  ^НаОшибку("Дата подписи сведений не может быть чем дата формирования сведенй",mtError,Page,"ДатаРук",0); fi;
    if Раб.Настр.Начать(blnБО,0,0,"",GetGUID):
       БО_ФорматНомер_=Int(Раб.Настр.ВзятьЗначение("setФорматНомер"));
    fi;
    if БО_ФорматНомер_=0:
       ПрефиксНомСвед="";
      else
       if ПрефиксНомСвед="": ^НаОшибку("Заполните префикс номера сведений",mtError,Page,"ПрефиксНомСвед",0); fi;
    fi;
    if not Учр_Банк_Свед=nil and (Учр.РПО_ТипУчр="КУ" or  Учр.РПО_ТипУчр=""):
       if Учр_Банк_Свед.РПО_ОФК_Имя="": ^НаОшибку("Наименование органа ФК заказчика",mtError,Page,"Учр_Банк_Свед.РПО_ОФК_Имя",0); fi;
       if Учр_Банк_Свед.РПО_ОФК_Код="": ^НаОшибку("Код органа ФК заказчика",mtError,Page,"Учр_Банк_Свед.РПО_ОФК_Код",0); fi;
       if Учр_Банк_Свед.РПО_ЛСчет="":	^НаОшибку("Введите лицевой счет заказчика",mtError,Page,"Учр_Банк_Свед.РПО_ЛСчет",0); fi;
    fi;
 fi;
 if Учр_Банк=nil: ^НаОшибку("Выберите банковский счет покупателя",mtError,1,"Учр_Банк_Банк",1); fi;
 if УчетБО and isФК:
    if Учр_Банк.РПО_ОФК_Имя="": ^НаОшибку("Наименование органа ФК покупателя",mtError,Page,"Учр_Банк.РПО_ОФК_Имя",1); fi;
    if Учр_Банк.РПО_ОФК_Код="": ^НаОшибку("Код органа ФК покупателя",mtError,Page,"Учр_Банк.РПО_ОФК_Код",1); fi;
 fi;
 Page=2;
 if ДатаРег=1.1.100: ^НаОшибку("Введите дату регистрации документа",mtError,Page,"ДатаРег",1); fi;
 if Year(ДатаРег)<Int(ТекГод):	
    if EnqOkCancel("Выбранный год обязательства "+ТекГод+" превышает текущий год "+Str(Year(ДатаРег))+"^MВы уверены, что хотите принять обязательство, на учет, плановым периодом ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"ТекГод",1); fi;
 fi;
 if Name_A("ПЕРИОД."+ТекГод)=" ": ^НаОшибку("Неизвестный идентификатор аналитического признака 'ПЕРИОД."+ТекГод+"'",mtError,Page,"ТекГод",1); fi;
 if not Year(ДатаСвед)=Year(ДатаРег) and УчетБО: ^НаОшибку("Дата формирования сведений должна находиться в пределах текущего года договора ("+Str(Year(ДатаРег))+")",mtError,1,"ДатаСвед",0); fi;
 if НаимДок=nil: ^НаОшибку("Выберите наименование документа основания",mtError,Page,"НаимДок_Наим",1); fi;
 if НомерДок="": ^НаОшибку("Введите номер документа",mtError,Page,"НомерДок_",1); fi;
 if ДатаДок=1.1.100: ^НаОшибку("Введите дату документа",mtError,Page,"ДатаДок_",1); fi;
 if ДатаРег<ДатаДок: ^НаОшибку("Дата регистрации не может быть ранее даты документа",mtError,Page,"ДатаРег",1); fi;
 if Round(СумДок,2)=0: ^НаОшибку("Введите сумму документа",mtError,Page,"СумДок",1); fi;
 if ОКВ="": ^НаОшибку("Введите код валюты по ОКВ",mtError,Page,"ОКВ",1); fi;
 if Round(СумРубДок,2)=0 and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку("Введите сумму документа в рублях",mtError,Page,"СумРубДок",1); fi;
 if УчетБО:
    if Контр=nil: ^НаОшибку("Выберите поставщика, исполнителя...",mtError,Page,"Контр_КорИмя",1); fi;
    if Name_A(Контр_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак поставщика '"+Контр_Призн+"'",mtError,Page,"Контр_Призн",1); fi;
    if Контр.ИНН="": ^НаОшибку("Введите ИНН поставщика",mtError,Page,"Контр.ИНН",1); fi;
    if Контр.КПП="" and Контр.Тип=0: ^НаОшибку("Введите КПП поставщика",mtError,Page,"Контр.КПП",1); fi;
    if Контр.РПО_Страна="": ^НаОшибку("Введите наименование страны",mtError,Page,"Контр.РПО_Страна",1); fi;
    if Контр.РПО_ОКСМ="": ^НаОшибку("Введите код страны по ОКСМ",mtError,Page,"Контр.РПО_ОКСМ",1); fi;
    if Контр.ЮрАдрес="": ^НаОшибку("Введите юридический адрес",mtError,Page,"Контр.ЮрАдрес",1); fi;
    if Контр.ПочтАдрес="": ^НаОшибку("Введите почтовый адрес",mtError,Page,"Контр.ПочтАдрес",1); fi;
    if not Наличные:
       if Контр_Банк=nil: ^НаОшибку("Выберите банковские реквизиты контрагента",mtError,Page,"Контр_Банк.БанкИмя",1); fi;
       if Контр_Банк.БанкИмя="": ^НаОшибку("Введите имя контрагента для банка",mtError,Page,"Контр_Банк.БанкИмя",1); fi;
       if Trim(Контр_Банк_Банк)="": ^НаОшибку("Введите наименование банка",mtError,Page,"Контр_Банк_Банк",1); fi;
       if Контр_Банк.БИК="": ^НаОшибку("Введите БИК",mtError,Page,"Контр_Банк.БИК",1); fi;
       if Контр_Банк.РСчет="": ^НаОшибку("Введите расчетный счет",mtError,Page,"Контр_Банк.РСчет",1); fi;
       i=Раб.Вспом.Справ_БИК.Контроль(Контр_Банк,"банковских реквизитов контрагента");
       if i=-2: ^НаОшибку("",mtError,Page,"Контр_Банк.БИК",1);
	 |i=-6: ^НаОшибку("",mtError,Page,"Контр_Банк.Ксчет",1);
	 |i< 0: ^НаОшибку("",mtError,Page,"Контр_Банк_Банк",1);
       fi;
    fi;
    if not Настр.Общ_Справ1="" and Общ_Призн1="": ^НаОшибку("Введите "+Настр.Общ_Справ_Наим1,mtError,Page,"Общ_Призн1",1); fi;
    if not Настр.Общ_Справ2="" and Общ_Призн2="": ^НаОшибку("Введите "+Настр.Общ_Справ_Наим2,mtError,Page,"Общ_Призн2",1); fi;
    if not Аванс:
       if ДатаН=1.1.100: ^НаОшибку("Введите начало срока действия обязательства",mtError,Page,"ДатаН",1); fi;
--	 if ДатаК=1.1.100: ^НаОшибку("Введите конец срока действия обязательства",mtError,Page,"ДатаК",1); fi;
       if МФ="": ^НаОшибку("Введите месяц оплаты обязательства",mtError,Page,"МФ",1); fi;
    fi;
   else
    if Договор=nil: ^НаОшибку("Выберите договор, контракт...",mtError,Page,"Договор_",1); fi;
    ОбновДоговор(Договор);
    Раб.Договор.Договор_СуммаСроки(Договор,ДатаРег);
    if not Раб.Договор.Рег: ^НаОшибку("Договор не зарегистрован",mtError,Page,"Договор_",1); fi;
    if ДатаРег<Договор.ДатаРег and not if(Day(ДатаРег)=31 and Mon(ДатаРег)=12,ДатаРег+1,ДатаРег)=Договор.ДатаРег: ^НаОшибку("Дата регистрации обязательства "+DateToString(ДатаРег)+" не может быть ранее даты регистрации договора "+DateToString(Договор.ДатаРег),mtError,Page,"ДатаРег",1); fi;
    if Раб.Договор.Статус=-1:
       ^НаОшибку("Зарегистровать обязательство невозможно т.к. статус договора :АННУЛИРОВАН",mtError,Page,"Договор_",1);
    fi;
    if Раб.Договор.Статус=1:
       if EnqOkCancel("Внимение! Статус договора: ИСПОЛЕНЕН, регистрация обязательства может привести к искажению данных. Вы уверены ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Договор_",1); fi;
    fi;
    if Контр=nil: ^НаОшибку("Не указан поставщик, исполнитель...",mtError,Page,"Контр_КорИмя",1); fi;
    if not Контр=Договор.Контр:
       for Iter=1..Договор.Контр2 do
	if Контр=Договор.Контр2[Iter].Контр: Break; fi;
       od;
       if Iter>Договор.Контр2: ^НаОшибку("Поставщик указынный в обязательстве отличен от поставщика указанного в договоре",mtError,Page,"Контр_КорИмя",1); fi;
    fi;
    if not Контр_Призн=Договор.Контр_Призн and Договор.Контр2=0: ^НаОшибку("Аналитический признак поставщика указынный в обязательстве ("+Контр_Призн+") отличен от поставщика указанного в договоре ("+Договор.Контр_Призн+")",mtError,Page,"Контр_КорИмя",1); fi;
    if Name_A(Контр_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак поставщика '"+Контр_Призн+"'",mtError,Page,"Контр_Призн",1); fi;
    if not Наличные:
       if Контр_Банк=nil: ^НаОшибку("Выберите банковские реквизиты контрагента",mtError,Page,"Контр_Банк.БанкИмя",1); fi;
       if Договор.Контр2=0:
	  if not Контр_Банк=Договор.Контр_Банк and Настр.ДО_ВыборКонтрБанк=-1: Контр_Банк=Договор.Контр_Банк; fi;
	  if not Контр_Банк=Договор.Контр_Банк and Настр.ДО_ВыборКонтрБанк=0:
	     if EnqOkCancel("Банковский счет контрагента отличен от указанного в договоре. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Контр_Банк.БанкИмя",1); fi;
	  fi;
	 else
	  for Iter=1..Договор.Контр2 do
	   if Контр=Договор.Контр2[Iter].Контр: 
	      if not Контр_Банк=Договор.Контр2[Iter].Контр_Банк and Настр.ДО_ВыборКонтрБанк=-1: Контр_Банк=Договор.Контр2[Iter].Контр_Банк; fi;
	      if not Контр_Банк=Договор.Контр2[Iter].Контр_Банк and Настр.ДО_ВыборКонтрБанк=0:
		 if EnqOkCancel("Банковский счет контрагента отличен от указанного в договоре. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Контр_Банк.БанкИмя",1); fi;
	      fi;
	      Break;
	   fi;
	  od;
       fi;
    fi;
    if not Настр.Общ_Справ1="" and Общ_Призн1="": ^НаОшибку("Не указано "+Настр.Общ_Справ_Наим1+"^MПеревыберите договор",mtError,Page,"Договор_",1); fi;
    if not Настр.Общ_Справ2="" and Общ_Призн2="": ^НаОшибку("Не указано "+Настр.Общ_Справ_Наим2+"^MПеревыберите договор",mtError,Page,"Договор_",1); fi;
--    if ТекГод>Договор.ТекГод: ^НаОшибку("Текущий год обязательства "+ТекГод+" превышает текущий год договора "+Договор.ТекГод,mtError,Page,"ТекГод",1); fi;
    ИгнорАванс=False;
    if Аванс:
       if Round(Раб.Договор.СумАванс,2)=0:
	  if EnqOkCancel("Аванс по договору не предусмотрен, игнорировать ?",mtWarning)=cmCancel: Template.Object="cbАванс"; ^False; fi;
	  ИгнорАванс=True;
       fi;
       if not Контр_Банк.РПО_ТипСчета=2:
	  if EnqOkCancel("В соответствии с п.П. РФ №1563 от 27.12.14 п.29(1), перечисление аванса, возможно только на счет поставщика, открытого в органе федерального казначейства^MИгнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Контр_Банк.БанкИмя",1); fi;
       fi;
    fi;
    if ДатаДок<Раб.Договор.ДН: ^НаОшибку("Дата обязательства "+DateToString(ДатаДок)+" не может быть ранее даты начала действия договора "+DateToString(Раб.Договор.ДН),mtError,Page,"ДатаДок_",1); fi;
    if ДатаДок>Раб.Договор.ДК and not Раб.Договор.ДК=1.1.100: 
       if EnqOkCancel("Внимание! Дата обязательства "+DateToString(ДатаДок)+" не может быть позже даты окончания договора "+DateToString(Раб.Договор.ДК)+"^MИгнорировать ?",mtWarning)=cmCancel:
	  ^НаОшибку("",mtError,Page,"ДатаДок_",1);
       fi;
    fi;
    if Аванс and not ИгнорАванс:
       --nn=Раб.Договор.ДО_СумКол("Аванс and Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+"))","","Сум",False);
       nn=Раб.Договор.ДО_СумКол("Аванс and Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+"))","",ДатаРег,"Сум",False);
       res=SumOfArray(Раб.Договор.lstСум,nn);
       if Round(res+СумДок,2)>Round(Раб.Договор.СумАванс,2): ^НаОшибку("Сумма зарегистрованных авансов по договору "+Format("%.2N",Res)+" и сумма текущего аванса "+Format("%.2N",СумДок)+" превышает сумму аванса "+Format("%.2N",Раб.Договор.СумАванс)+" предусмотренного договором на "+Format("%.2N",Раб.Договор.СумАванс-Res-СумДок),mtError,Page,"СумДок",1); fi;
    fi;
 fi;
 if not Настр.Общ_Справ1="" and not Общ_Призн1="" and Name_A(Общ_Призн1)=" ": ^НаОшибку("Неизвестный аналитический признак '"+Общ_Призн1+"'",mtError,Page,"Общ_Призн1",1); fi;
 if not Настр.Общ_Справ2="" and not Общ_Призн2="" and Name_A(Общ_Призн2)=" ": ^НаОшибку("Неизвестный аналитический признак '"+Общ_Призн2+"'",mtError,Page,"Общ_Призн2",1); fi;
 if Зачет_КЗ>0:
    if ДО=nil: ^НаОшибку("Выберите обязательство для зачета",mtError,Page,"ДО_",1); fi;
    if Name_A(ДО_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак обязательства для зачета '"+ДО_Призн+"'",mtError,Page,"ДО_",1); fi;
    if not ДО.Рег: ^НаОшибку("Обязательство для зачета не зарегистровано",mtError,Page,"ДО_",1); fi;
    if ДатаРег<ДО.ДатаРег: НаОшибку("Дата регистрации обязательства "+DateToString(ДатаРег)+" не может быть ранее даты регистрации обязательства для зачета "+DateToString(ДО.ДатаРег),mtError,Page,"ДатаРег",1); fi;
    if not Контр_Призн=ДО.Контр_Призн: ^НаОшибку("Аналитический признак поставщика указынный в обязательстве ("+Контр_Призн+") отличен от поставщика указанного в обязательстве для зачета ("+ДО.Контр_Призн+")",mtError,Page,"Контр_КорИмя",1); fi;
    if ЦЗ: Message("Документ предназначен к зачету кредиторской задолженности и не может быть централизованной закупкой",mtError); Template.Object="cbЦЗ"; ^False; fi;
 fi;
 if not Зачет_КЗ=0 and Аванс: Message("Документ предназначен к зачету кредиторской задолженности и не может быть авансом",mtError); Template.Object="cbАванс"; ^False; fi;
 if ЦЗ and not Аванс:
    if ГП=nil: ^НаОшибку("Выберите грузополучателя",mtError,Page,"ГП.КорИмя",1); fi;
    if Name_A(ГП_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак грузополучателя '"+ГП_Призн+"'^MПеревыберите грузополучателя",mtError,Page,"ГП_Призн",1); fi;
 fi;
 if Содерж="": ^НаОшибку("Введите предмет обязательства",mtError,Page,"Содерж",1); fi;
 if not НаимСчет=nil or not НомерСчет="" or not ДатаСчет=1.1.100:
    if НаимСчет=nil: ^НаОшибку("Выберите документ для оплаты (счет)",mtError,Page,"НаимСчет.Наим",1); fi;
    if НомерСчет="": ^НаОшибку("Введите номер документа для оплаты (счета)",mtError,Page,"НомерСчет",1); fi;
    if ДатаСчет=1.1.100: ^НаОшибку("Введите дату документа для оплаты (счета)",mtError,Page,"ДатаСчет",1); fi;
 fi;
 Page=3;
 if Вал="": ^НаОшибку("Введите валюту документа",mtError,Page,"Вал",1); fi;
 if Name_C(Вал)=" ":  ^НаОшибку("Неизвестный идентификатор  валюты '"+Вал+"'^MПеревыберите валюту",mtError,Page,"Вал",1); fi;
 УдалитьПустыеСтроки;
 if Расшифр<1: ^НаОшибку("Заполните расшифровку обязательства",mtError,Page,"КБК",1); fi;
 if УчетНДС:
    if not Round(СумДок,2)=Round(ИтогСумСНДС,2): ^НаОшибку ("Итоговая сумма с НДС расшифровки должна быть равна сумме документа",mtError,Page,"ИтогСумСНДС",1);  fi;
    if not Round(СумРубДок,2)=Round(ИтогСумРубСНДС,2) and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку ("Итоговая сумма в рублях с НДС расшифровки должна быть равна сумме документа в рублях",mtError,Page,"ИтогСумРубСНДС",1);  fi;
   else
    if not Round(СумДок,2)=Round(ИтогСумСНДС,2): ^НаОшибку ("Итоговая сумма расшифровки должна быть равна сумме документа",mtError,Page,"ИтогСумСНДС",1);  fi;
    if not Round(СумРубДок,2)=Round(ИтогСумРуб,2) and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку ("Итоговая сумма в рублях расшифровки должна быть равна сумме документа в рублях",mtError,Page,"ИтогСумРуб",1);  fi;
 fi;
 Раб.КСА.Начать;
 for Iter=1..Расшифр do
  Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
  Раб.КСА.Добавить(Расшифр[Iter].СчКре);
  Раб.КСА.Добавить(Расшифр[Iter].СчКорр_Аннул);
  if Аванс:
     Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","АН",True)+".660");
    else
     Раб.КСА.Добавить(Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","АН",True)+".830");
  fi;
  if not Расшифр[Iter].КБК="":
     ТипКБК_=Раб.Бюджет2005.ТипКБКСчета(Расшифр[Iter].КБК);
     БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипКБК_,"БК",False);
     КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипКБК_,"КОСГУ",False);
     Пер_=if(Int(ТекГод)-Year(ДатаРег)>0 and not Расшифр[Iter].ВидОпер="00",Str(Min(3,Int(ТекГод)-Year(ДатаРег)+1)),"1");
     if УчетБО:
	Раб.КСА.Добавить(if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".501."+Пер_+"3."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".506."+Пер_+"0."+КОСГУ_|True:""));
     fi;
     Раб.КСА.Добавить(if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_|True:""));
     Раб.КСА.Добавить(if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"2."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"2."+КОСГУ_|True:""));
  fi;
 od;
 for Iter=1..Позиции_НДС do
  Раб.КСА.Добавить(Позиции_НДС[Iter].СчДеб);
 od;
 for Iter=1..ПровДоп do
  Раб.КСА.Добавить(ПровДоп[Iter].СчДеб);
  Раб.КСА.Добавить(ПровДоп[Iter].СчКре);
 od;
 if Раб.КСА.Закончить(True):
    Message("Добавление счетов завершено");
 fi;
 Flag=True;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Расшифр do
  if Расшифр[Iter].ВД="": ^НаОшибку("Введите вид деятельности",mtError,Page,"ВД",Iter); fi;
  if Расшифр[Iter].КБК="": ^НаОшибку("Введите КБК",mtError,Page,"КБК",Iter); fi;
  if Расшифр[Iter].СчДеб="": ^НаОшибку("Введите счет дебета",mtError,Page,"СчДеб",Iter); fi;
  if Name_S(Расшифр[Iter].СчДеб)=" ": ^НаОшибку("Неизвестный счет дебета '"+Расшифр[Iter].СчДеб+"'",mtError,Page,"СчДеб",Iter); fi;
 if Зачет_КЗ>0:
     if not Расшифр[Iter].ВидОпер="730" and not Расшифр[Iter].ВидОпер="730+830": ^НаОшибку("Должна быть выбрана операция 'Зачет увеличения КЗ' или 'Зачет увел.КЗ + уменьш.КЗ'",mtError,Page,"Опер_",Iter); fi;
    else
     if Расшифр[Iter].ВидОпер="730" or Расшифр[Iter].ВидОпер="730+830": ^НаОшибку("Недопустимая операция",mtError,Page,"Опер_",Iter); fi;
  fi;
  if not Аванс or Расшифр[Iter].ВидОпер="00":
     if Расшифр[Iter].СчКре="": ^НаОшибку("Введите счет кредита",mtError,Page,"СчКре",Iter); fi;
     if Name_S(Расшифр[Iter].СчКре)=" ": ^НаОшибку("Неизвестный счет кредита '"+Расшифр[Iter].СчКре+"'",mtError,Page,"СчКре",Iter); fi;
     if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): ^НаОшибку("Счета не могут корреспондировать "+Расшифр[Iter].СчДеб+"/"+Расшифр[Iter].СчКре,mtError,Page,"СчДеб",Iter); fi;
  fi;
  if (Расшифр[Iter].ВидОпер="304.04" or Расшифр[Iter].ВидОпер="304.04") and not ЦЗ: Message("Для выбранной операции (Внутриведомственные расчеты) требуется установить флаг 'Централизованная закупка'",mtError); Template.Object="cbЦЗ"; ^False; fi;
  tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Общ_Призн1+" "+Общ_Призн2)," ",".*");
  tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
  tmp=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
  if ЦЗ:
     tmp=Раб.Бюджет2005.Объединить("ПБС.*",tmp,"|");
  fi;
  tmp=Раб.Бюджет2005.Объединить(ГП_Призн,tmp,"|");
  if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп),tmp): ^НаОшибку("",mtError,Page,"Призн_",Iter); fi;
  if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп),tmp): ^НаОшибку("",mtError,Page,"Призн_",Iter); fi;
  if FlagТМЦ:
     if Настр.ДО_УчетТМЦ=0 and Flag and Предм_[Iter]="":
	Flag=EnqOkCancel("Не заполнено наименование товара, работ, услуг^MИгнорировать ?",mtWarning)=cmCancel;
	if Flag: Flag=False; fi;
     fi;
     if Flag and Предм_[Iter]="" and not Расшифр[Iter].ОКДП_Гр="000" and not Расшифр[Iter].ОКДП="0000000": ^НаОшибку("Введите наименование товара, работ, услуг",mtError,Page,"Предм_",Iter); fi;
  fi;
  if FlagОКДП:
     if Length(Расшифр[Iter].ОКДП)=6: ^НаОшибку("Требуется код ОКДП, а не ОКП",mtError,Page,"ОКДП",Iter); fi;
     if Расшифр[Iter].ОКДП_Гр="": ^НаОшибку("Введите номенклатурную группу товаров, работ, услуг для нужд заказчиков",mtError,Page,"ОКДП_Гр",Iter); fi;
     if Расшифр[Iter].ОКДП="" and not Аванс: ^НаОшибку("Введите код ОКДП",mtError,Page,"ОКДП",Iter); fi;
     if Аванс:
	if Раб.Договор.ОКДП_Гр_В_Запись(Расшифр[Iter].ОКДП_Гр,"",verОКДП_Гр)=nil: ^НаОшибку("Недопустимый код номеклатурная группы "+Расшифр[Iter].ОКДП_Гр+"^MВерсия номеклатурной группы "+verОКДП_Гр_,mtError,Page,"ОКДП_Гр",Iter); fi;
       else
	tmp=Раб.Договор.ВзятьЗначОКДП(Расшифр[Iter].ОКДП,if(verОКДП_Гр=273,"ГР273","ГР"));
	if tmp="": tmp="000"; fi;
	if not tmp=Расшифр[Iter].ОКДП_Гр: ^НаОшибку("Недопустимый код номеклатурная группы "+Расшифр[Iter].ОКДП_Гр+", должен быть "+tmp+"^MВерсия номеклатурной группы "+verОКДП_Гр_,mtError,Page,"ОКДП_Гр",Iter); fi;
     fi;
  fi;
  if FlagТМЦ and (not Расшифр[Iter].Кол=0 or not Расшифр[Iter].Цена=0):
     if Предм_[Iter]="": ^НаОшибку("Введите наименование товара, работ, услуг",mtError,Page,"Предм_",Iter); fi;
     if Расшифр[Iter].Цена=0: ^НаОшибку("Введите цену",mtError,Page,"Цена",Iter); fi;
     if not УчетБО and Расшифр[Iter].Цена>Расшифр[Iter].ЦенаДоговор: ^НаОшибку("Цена "+Format("%.2N",Расшифр[Iter].Цена)+" не может превышать цену по договору "+Format("%.2N",Расшифр[Iter].ЦенаДоговор),mtError,Page,"Цена",Iter); fi;
     if Расшифр[Iter].Кол=0: ^НаОшибку("Введите количество",mtError,Page,"Кол",Iter); fi;
     if Расшифр[Iter].ЕдИзм="": ^НаОшибку("Введите единицу измерения",mtError,Page,"ЕдИзм",Iter); fi;
  fi;
  if Расшифр[Iter].СумСНДС=0: ^НаОшибку("Введите сумму с НДС",mtError,Page,"СумСНДС",Iter); fi;
  if Расшифр[Iter].СумРубСНДС=0 and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку("Введите сумму с НДС в рублях",mtError,Page,"СумРубСНДС",Iter); fi;
  if Расшифр[Iter].ВидОпер="": ^НаОшибку("Выберите операцию",mtError,Page,"Опер_",Iter); fi;
  ТипКБК_=Раб.Бюджет2005.ТипКБКСчета(Расшифр[Iter].КБК);
  БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипКБК_,"БК",False);
  КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,ТипКБК_,"КОСГУ",False);
  Пер_=if(Int(ТекГод)-Year(ДатаРег)>0 and not Расшифр[Iter].ВидОпер="00",Str(Min(3,Int(ТекГод)-Year(ДатаРег)+1)),"1");
  СчК_ =if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"1."+КОСГУ_|True:"");
  СчДО_=if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"2."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".502."+Пер_+"2."+КОСГУ_|True:"");
  if УчетБО:
     СчД_=if(Расшифр[Iter].ВД="1":БК_+"."+Расшифр[Iter].ВД+".501."+Пер_+"3."+КОСГУ_|not Расшифр[Iter].ВД="3":БК_+"."+Расшифр[Iter].ВД+".506."+Пер_+"0."+КОСГУ_|True:"");
     if not СчД_="" and not not СчК_="":
	if Name_S(СчД_)=" ": ^НаОшибку("Неизвестный счет дебета (бюджетное обязательство)'"+СчД_+"'",mtError,Page,"КБК",Iter); fi;
	if Name_S(СчК_)=" ": ^НаОшибку("Неизвестный счет кредита (бюджетное обязательство)'"+СчК_+"'",mtError,Page,"КБК",Iter); fi;
	if not Correspond(СчД_,СчК_) : ^НаОшибку("Счета не могут корреспондировать "+СчД_+"/"+СчК_,mtError,Page,"КБК",Iter); fi;
     fi;
  fi;
  if not СчК_="" and not СчДО_="":
     if Name_S(СчК_)=" ": ^НаОшибку("Неизвестный счет дебета (денежное обязательство)'"+СчК_+"'",mtError,Page,"СчДеб_ДО",Iter); fi;
     if Name_S(СчДО_)=" ": ^НаОшибку("Неизвестный счет кредита (денежное обязательство)'"+СчДО_+"'",mtError,Page,"СчКре_ДО",Iter); fi;
     if not Correspond(СчК_,СчДО_): ^НаОшибку("Счета не могут корреспондировать (денежное обязательство)"+СчК_+"/"+СчДО_,mtError,Page,"СчДеб_ДО",Iter); fi;
  fi;
  if not ПроверитьУникальность: ^False; fi;
 od;
 if not ПроверитьНаборСправ: ^НаОшибку("",mtError,Page,"",0); fi;
 if not ОбновитьСпецификацию(1): ^False; fi;
 if not УчетБО:
    if FlagОКДП :
       if not verОКДП_Гр=Договор.verОКДП_Гр: ^НаОшибку("Номер редакции номеклатурной группы "+Str(if(verОКДП_Гр=0,601,verОКДП_Гр))+" отличен от номера редакции "+Str(if(Договор.verОКДП_Гр=0,601,Договор.verОКДП_Гр))+" по договору",mtError,Page,"verОКДП_Гр_",1); fi;
    fi;
    for Iter=1..Расшифр do
     res=Round(Расшифр[Iter].СумДоговор-Расшифр[Iter].СумДО-Расшифр[Iter].СумСНДС,2);
     if res<0: ^НаОшибку("Сумма обязательства "+Format("%.2N",Расшифр[Iter].СумСНДС)+" превышает сумму договора "+Format("%.2N",Расшифр[Iter].СумДоговор)+" (с учетом принятых ранее обязательств "+Format("%.2N",Расшифр[Iter].СумДО)+"), на "+Format("%.2N",-res),mtError,Page,if(УчетНДС,"СумСНДС","Сум"),Iter); fi;
     if not Расшифр[Iter].Кол=0 and FlagТМЦ:
	res=Round(Расшифр[Iter].КолДоговор-Расшифр[Iter].КолДО-Расшифр[Iter].Кол,2);
	if res<0: ^НаОшибку("Количество по обязательству "+Format("%.2N",Расшифр[Iter].Кол)+" превышает количество по договору "+Format("%.2N",Расшифр[Iter].КолДоговор)+" (с учетом принятых ранее обязательств "+Format("%.2N",Расшифр[Iter].КолДО)+"), на "+Format("%.2N",-res),mtError,Page,"Кол",Iter); fi;
     fi;
    od;
 fi;
 if УчетНДС:
    Page=4;
    Раб.Бюджет.ПроверитьПризнакиНачать;
    tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Общ_Призн1+" "+Общ_Призн2)," ",".*");
    tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
    tmp=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
    for Iter=1..Позиции_НДС do
     if not Позиции_НДС[Iter].СчДеб="" or not Позиции_НДС[Iter].СчКре="":
	if Позиции_НДС[Iter].СчДеб="": ^НаОшибку("Введите счет дебета",mtError,Page,"СчДеб",Iter); fi;
	if Name_S(Позиции_НДС[Iter].СчДеб)=" ": ^НаОшибку("Неизвестный счет дебета '"+Позиции_НДС[Iter].СчДеб+"'",mtError,Page,"СчДеб",Iter); fi;
	if Позиции_НДС[Iter].СчКре="": ^НаОшибку("Введите счет кредита",mtError,Page,"СчКре",Iter); fi;
	if Name_S(Позиции_НДС[Iter].СчКре)=" ": ^НаОшибку("Неизвестный счет кредита '"+Позиции_НДС[Iter].СчКре+"'",mtError,Page,"СчКре",Iter); fi;
	if not Correspond(Позиции_НДС[Iter].СчДеб,Позиции_НДС[Iter].СчКре): ^НаОшибку("Счета не могут корреспондировать "+Позиции_НДС[Iter].СчДеб+"/"+Позиции_НДС[Iter].СчКре,mtError,Page,"СчДеб",Iter); fi;
	if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Позиции_НДС[Iter].СчДеб,Позиции_НДС[Iter].СчКре,Позиции_НДС[Iter].Призн,tmp): ^НаОшибку("",mtError,Page,"НДСПризн",Iter); fi;
	if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Позиции_НДС[Iter].СчДеб,Позиции_НДС[Iter].СчКре,Позиции_НДС[Iter].Призн,tmp): ^НаОшибку("",mtError,Page,"НДСПризн",Iter); fi;
     fi;
    od;
 fi;
 Page=10;
 for Iter=1..ПровДоп do
  if ПровДоп[Iter].СчДеб="": ^НаОшибку("Введите счет дебета",mtError,Page,"СчДеб ",Iter); fi;
  if Name_S(ПровДоп[Iter].СчДеб)=" ": ^НаОшибку("Неизвестный счет дебета '"+ПровДоп[Iter].СчДеб+"'",mtError,Page,"СчДеб ",Iter); fi;
  if ПровДоп[Iter].СчКре="": ^НаОшибку("Введите счет кредита",mtError,Page,"СчКре ",Iter); fi;
  if Name_S(ПровДоп[Iter].СчКре)=" ": ^НаОшибку("Неизвестный счет кредита '"+ПровДоп[Iter].СчКре+"'",mtError,Page,"СчКре ",Iter); fi;
  if not Correspond(ПровДоп[Iter].СчДеб,ПровДоп[Iter].СчКре): ^НаОшибку("Счета не могут корреспондировать "+ПровДоп[Iter].СчДеб+"/"+ПровДоп[Iter].СчКре,mtError,Page,"СчДеб ",Iter); fi;
  tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Общ_Призн1+" "+Общ_Призн2)," ",".*");
  tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
  tmp=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
  if ЦЗ:
     tmp=Раб.Бюджет2005.Объединить("ПБС.*",tmp,"|");
  fi;
  tmp=Раб.Бюджет2005.Объединить(ГП_Призн,tmp,"|");
  if not Раб.Бюджет.ПроверитьПризнакиОбязательные(ПровДоп[Iter].СчДеб,ПровДоп[Iter].СчКре,ПровДоп[Iter].Призн,tmp): ^НаОшибку("",mtError,Page,"ПризнПров_",Iter); fi;
  if not Раб.Бюджет.ПроверитьПризнакиСвязанные(ПровДоп[Iter].СчДеб,ПровДоп[Iter].СчКре,ПровДоп[Iter].Призн,tmp): ^НаОшибку("",mtError,Page,"ПризнПров_",Iter); fi;
  if ПровДоп[Iter].Сум=0: ^НаОшибку("Введите сумму",mtError,Page,"Сум ",Iter); fi;
  if ПровДоп[Iter].СумРуб=0 and not (ОКВ="643" or ОКВ="RUB"): ^НаОшибку("Введите сумму в рублях",mtError,Page,"СумРуб ",Iter); fi;
 od;
 Page=11;
 if not Исп_Док=nil:
    if Исп_Док.Ном="": ^НаОшибку("Введите номер исполнительного документа",mtError,Page,"Исп_Док.Ном",0); fi;
    if Исп_Док.Дат=1.1.100: ^НаОшибку("Введите дату исполнительного документа",mtError,Page,"Исп_Док.Дат",0); fi;
    if Исп_Док.Суд_Орган="": ^НаОшибку("Введите наименование судебного органа",mtError,Page,"Исп_Док.Суд_Орган",0); fi;
    if Round(Исп_Док.Сум,2)=0: ^НаОшибку("Введите сумму исполнительного документа",mtError,Page,"Исп_Док.Сум",0); fi;
    if Исп_Док.УведНом="": ^НаОшибку("Введите номер уведомления о поступлении исполнительного документа",mtError,Page,"Исп_Док.УведНом",0); fi;
    if Исп_Док.УведДат=1.1.100: ^НаОшибку("Введите дату уведомления о поступлении исполнительного документа",mtError,Page,"Исп_Док.УведДат",0); fi;
    if not Round(Исп_Док.Сум,2)=Round(СумДок,2) and УчетБО: ^НаОшибку("Сумма документа всего "+Format("%2.N",СумДок)+" должна быть равна сумме исполнительного документа "+Format("%2.N",Исп_Док.Сум),mtError,Page,"Исп_Док.Сум",0); fi;
    if Name_A(Исп_Док_Признак_)=" " or Исп_Док_Признак_="ИСПДОК.": ^НаОшибку("Неизвестный идентификатор аналитического признака исполнительного документа '"+Исп_Док_Признак_+"'",mtError,Page,"Исп_Док_Признак_",0); fi;
    if not Контр=Исп_Док.Контр: ^НаОшибку("Контрагент по исполнительному документу 'К."+Исп_Док.Контр.Признак+" отличен от контрагента по бюджетному обязательству '"+Контр_Призн+"'",mtError,Page,"Исп_Док_Признак_",0); fi;
 fi;
 if Аннул:
    if not ПроверитьАннул: ^False; fi;
 fi;
 if not ПроверитьСохр then ^False; fi;
 flag=True;
 OWA=OpenWorkArea(crdДО,"","Признак='"+Признак+"'");
 try
   if Records(OWA)>0 then
      if GetRecordKey(OWA,1)<>Current then
	 Message("Документ "+Признак_Кмнт+" уже находится в картотеке",mtError);
	 Flag=False;
      fi;
   fi;
 finally
   CloseWorkArea(OWA);
 end;
 ^Flag;
end;

Func ПроверитьКакДО:L;
 if УчетБО:
    if Year(ДатаРег)=Int(ТекГод):
       if БО=nil: ^НаОшибку("Заполните бюджетное обязательство",mtError,2,"БО_",1); fi;
       БО_Призн="БО."+БО.Признак;
      else
       БО_Призн="БО.000";
    fi;
   else
    if not ДОГОВОР.УчетБО: 
       if EnqOkCancel("В карточке договора должен установлен флаг 'Учитывать как бюдж. обязательство'^MИгнорировать ?",mtWarning)=cmCancel:
	  ^НаОшибку("",mtError,2,"Договор_",1);
       fi;
      else
       if ДОГОВОР.БО=nil:
	  if EnqOkCancel("Заполните бюджетное обязательство в карточке договора^MИгнорировать ?",mtWarning)=cmCancel:
	     ^НаОшибку("",mtError,2,"Договор_",1);
	  fi;
       fi;
    fi;
    БО_Призн="БО."+if(ДОГОВОР.БО.Признак="","000",ДОГОВОР.БО.Признак);
 fi;
 RefreshAna;
 if Name_A(БО_Призн)=" ": ^НаОшибку("Неизвестный аналитичесикй признак бюджетного обязательства '"+БО_Призн+"'",mtError,2,"БО_",1); fi;
 ^True;
end;

Func ЗКР_ТипКБК(aКБК:S):S;
 if Match(aКБК,"???.????.*"): ^"10";
   |Match(aКБК,"???.?.*"):    ^"20";
   |Match(aКБК,"???.01.*"):   ^"31";
   |Match(aКБК,"???.02.*"):   ^"32";
 fi;
 ^"";
end;

Func ТекЗапись:Record;
 ^Current;
end;

Func КонвОКДП_Гр(flГр:S):S;
var Iter:I;
var tmp:S;
var Flag:L;
 Flag=False;
 for Iter=1..Расшифр do
  tmp=Раб.Договор.ВзятьЗначОКДП(Расшифр[Iter].ОКДП,flГр);
  if not Расшифр[Iter].ОКДП_Гр=tmp: Расшифр[Iter].ОКДП_Гр=tmp; Flag=True; fi;
  Расшифр[Iter].ОКДП_Призн="";
 od;
 tmp="";
 if Flag: tmp="Внимание! Значения номенклатурных групп ОКДП приведены в соотвествие с прик. МЭР РФ от "+if(flГр="ГР273","07.06.2011 г. N 273","01.12.2010 г. N 601"); fi;
 ^tmp;
end;

Proc ОбновВерсиюОКДП_Гр;
var v:i;
var msg:s;
 if not ДатаДок=1.1.100:
    v=if(ДатаДок>8.8.2011,273,0);
    if not verОКДП_Гр=v:
       msg=КонвОКДП_Гр(if(v=273,"ГР273","ГР"));
       verОКДП_Гр=v;
    fi;
    if not msg="": Message(msg,mtWarning); fi;
 fi;
end;

Func СоздатьИзв(isАннул:L):I;
var OWA,n,nr,z,OA,i,ii,fИзв,Iter:i;
var Подр,Содерж,Содерж2,Призн:S;
var Сумма:N;
var Rec: Record;
var New,Upd:L;
 fИзв=SearchInArray(Расшифр[].ВидОпер,"304.04",False);
 if not fИзв=-1:
    fИзв=0;
    for Iter=1..Расшифр do
     if Расшифр[Iter].ВидОпер="304.04" and (not isАннул or (isАннул and not Round(Расшифр[Iter].Сум_Аннул,2)=0)): fИзв=fИзв+1; fi;
    od;
 fi;
 OWA=OpenWorkArea("РПО_Извещения_Исх","","Crd='"+crdДО+"' and RecCrd="+if(isАннул,"-","")+Str(RecordToInteger(Current)));
 Try
  nr=Records(OWA);
  if nr=0:
     if not fИзв=-1 and Рег:
	Rec=ExecuteFuncR("Документы.ЦентрСнаб.Извещ_Исх_69Н.СоздатьДокИз","",crdДО,if(isАннул,IntegerToRecord(-RecordToInteger(Current)),Current),blnДО,nil);
	if Rec=nil: Message("Ошибка создания исходящего извещения"); ^-1; fi;
	if not GetRecordKey(OWA,1)=Rec: Message("Ошибка создания исходящего извещения"); ^-1; fi;
	new=True;
       else
	^0;
     fi;
  fi;
  BeginChanging(OWA);
  Try
   z=nr;
   for n=2..nr do
    DeleteRecord(OWA,z);
    z=z-1;
   od;
   n=1;
   if fИзв=-1 or not Рег:
      if GetFieldL(OWA,n,"Проводить"): n=PutFieldL(OWA,n,"Проводить",False); fi;
     else
      if isАннул:
	 if not GetFieldD(OWA,n,"ДатаИзв")=Аннул_Дата: n=PutFieldD(OWA,n,"ДатаИзв",Аннул_Дата); fi;
	else
	 if not GetFieldD(OWA,n,"ДатаИзв")=ДатаРег: n=PutFieldD(OWA,n,"ДатаИзв",ДатаРег); fi;
      fi;
      if not GetFieldR(OWA,n,"ОтправРекв")=Учр: n=PutFieldR(OWA,n,"ОтправРекв",Учр); fi;
      Призн=CardFileRecSign("Контрагент","Признак","ПБС",Учр,"");
      if Name_A(Призн)=" ": Призн=""; fi;
      if not GetFieldS(OWA,n,"ОтправПризнак")=Призн: n=PutFieldS(OWA,n,"ОтправПризнак",Призн); fi;
      if not GetFieldR(OWA,n,"ПолучРекв")=ГП: n=PutFieldR(OWA,n,"ПолучРекв",ГП); fi;
      if not GetFieldS(OWA,n,"ПолучПризнак")=ГП_Призн: n=PutFieldS(OWA,n,"ПолучПризнак",ГП_Призн); fi;
      if Match(Общ_Призн1,"П.*"): Подр=Общ_Призн1;
	|Match(Общ_Призн2,"П.*"): Подр=Общ_Призн2;
	|True: Подр="";
      fi;
      if not GetFieldS(OWA,n,"Подр")=Подр: n=PutFieldS(OWA,n,"Подр",Подр); fi;
      if not GetFieldD(OWA,n,"ДатаОрд")=ДатаРег: n=PutFieldD(OWA,n,"ДатаОрд",ДатаРег); fi;
      OA=OpenArray(OWA,n,"Позиции","");
      ii=Records(OA);
      if fИзв>ii:
	 for i=ii+1..fИзв do
	  i=InsertRecord(OA,i);
	 od;
	|fИзв<ii:
	 for i=fИзв..ii do
	  DeleteRecord(OA,ii-(i-1));
	 od;
      fi;
      i=0;
      Сумма=0;
      Содерж=НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Контр.КорИмя+if(Подр="",""," ("+Name_A(Подр)+")");
      Содерж2=if(УчетБО,"",Договор.НаимДок.Наим+" №"+Договор.НомерДок+" от "+DateToString(Договор.ДатаДок));
      for Iter=1..Расшифр do
       if Расшифр[Iter].ВидОпер="304.04" and (not isАннул or (isАннул and not Round(Расшифр[Iter].Сум_Аннул,2)=0)):
	  i=i+1;
	  if not GetFieldS(OA,i,"Содерж")=Содерж: n=PutFieldS(OA,i,"Содерж",Содерж); fi;
	  if not GetFieldS(OA,i,"Содерж2")=Содерж2: n=PutFieldS(OA,i,"Содерж2",Содерж2); fi;
	  if not GetFieldS(OA,i,"Содерж3")="": n=PutFieldS(OA,i,"Содерж3",""); fi;
	  if not GetFieldS(OA,i,"Содерж4")="": n=PutFieldS(OA,i,"Содерж4",""); fi;
	  if not GetFieldS(OA,i,"СчДеб")=Расшифр[Iter].СчДеб: n=PutFieldS(OA,i,"СчДеб",Расшифр[Iter].СчДеб); fi;
	  if not GetFieldS(OA,i,"СчКре")=Расшифр[Iter].СчКре: n=PutFieldS(OA,i,"СчКре",Расшифр[Iter].СчКре); fi;
	  Призн=Trim(if(Match(Общ_Призн1,"П.*"),"",Общ_Призн1)+" "+if(Match(Общ_Призн2,"П.*"),"",Общ_Призн2));
	  Призн=Trim(Призн+" "+Контр_Призн);
	  Призн=Trim(Призн+" "+Призн_[Iter]);
	  Призн=Trim(Призн+" ДОГОВОР."+Признак);
	  if not GetFieldS(OA,i,"Призн")=Призн: n=PutFieldS(OA,i,"Призн",Призн); fi;
	  if not GetFieldS(OA,i,"ПризнДеб")="": n=PutFieldS(OA,i,"ПризнДеб",""); fi;
	  if not GetFieldS(OA,i,"ПризнКре")="": n=PutFieldS(OA,i,"ПризнКре",""); fi;
	  if isАннул:
	     if not GetFieldN(OA,i,"Сум")=-Расшифр[Iter].Сум_Аннул: n=PutFieldN(OA,i,"Сум",-Расшифр[Iter].Сум_Аннул); fi;
	     Сумма=Сумма+(-Расшифр[Iter].Сум_Аннул);
	    else
	     if not GetFieldN(OA,i,"Сум")=Расшифр[Iter].СумСНДС: n=PutFieldN(OA,i,"Сум",Расшифр[Iter].СумСНДС); fi;
	     Сумма=Сумма+Расшифр[Iter].СумСНДС;
	  fi;
	  if GetFieldS(OA,i,"GUID")="": n=PutFieldS(OA,i,"GUID",GetGUID); fi;
       fi;
      od;
      if not GetFieldL(OWA,n,"Проводить")=Рег: n=PutFieldL(OWA,n,"Проводить",Рег); fi;
      if not GetFieldS(OWA,n,"Валюта")=Вал: n=PutFieldS(OWA,n,"Валюта",Вал); fi;
      if not GetFieldN(OWA,n,"Сумма")=Сумма: n=PutFieldN(OWA,n,"Сумма",Сумма); fi;
      upd=True;
   fi;
   Rec=GetRecordKey(OWA,n);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 if not Rec=nil and (Upd or New):
    Message("Исходящие извещение успешно "+if(new,"создано","обновлено"));
    PutVariableL("Документы.ЦентрСнаб.Извещ_Исх_69Н.RefreshTurnOnRead",True);
    OpenBlank("Документы.ЦентрСнаб.Извещ_Исх_69Н",True,Rec);
 fi;
 ^RecordToInteger(Rec);
end;

Func ЗаполнитьКлючДок:L;
var Flag:L;
 Flag=True;
 if FuncExists(extКлюч): 
    Flag=ExecuteFuncL(extКлюч);
    if not Flag and Рег:
       Рег=Flag;
       cbРег.State=Рег;
       Оформление;
       СведБО(Рег);
       СборСФ;
       СверткаСФ;
       if ОбновСФ:
	  ОбновКлСФ;
       fi;
    fi;
 fi;
 ^Flag;
end;

Proc ВызватьКарт (aRec:Record; aFilter:S; aЗачет_КЗ:I);
 setЗачет_КЗ=aЗачет_КЗ;
 if not aFilter="": aFilter=aFilter; fi;
 OpenCardFile("РПО_ДО",aFilter,aRec);
end;
--Процедуры и функции -------------
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 fJumpOff=False;
 fJumpНаимСчет=False;
 fJumpКоммент=False;
 fJumpПризн=True;
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр_(True);
 Return False;
end;

Func Flags_OnEnter(FieldName: String; Iter: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Return False;
end;

Func extFunc_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    if not FuncExists(Value): Message("Функция '"+Value+"' не найдена",mtError); ^False; fi;
 fi;
 Return True;
end;

Proc Field_OnExit (FieldName: String; Iter: Integer);
 Переход(FieldName,Iter);
end;

Func Учр_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент","--Наше",Учр,crdRecordOnly);
 if not Rec=nil:
    Учр=Rec;
    ДолжнРук=Учр.ДолжнРук;
    ФИОРук=Учр.ФИОРук;
    Учр_Банк=Раб.Бюджет2005.БанкСчет(Учр,False);
    Оформление;
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Proc Контр_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Bln,msg,ff:S;
var Rec: Record;
var p:i;
 Field=AsString(Template.Field);
 if Match(Field,"Учр*"): Rec=Учр; msg="покупателя"; ff="Учр.КорИмя"; p=5;
   |Match(Field,"Контр*"): Rec=Контр; msg="поставщика, исполнителя..."; ff="Контр_КорИмя"; p=7;
 fi;
 if Rec=nil: Message("Выберите "+msg,mtError); Template.Field=ff; Exit; fi;
 if Field="Контр_Призн": Field="Контр_Признак_"; fi;
 if Double:
    if Field="Учр.РПО_ППП" or Field="Контр.РПО_Страна" or Field="Контр.РПО_ОКСМ" or Field="Контр_РПО_Статус": Bln="РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП"; fi;
    Field=SubStr(Field,p,255);
    ExecuteProc("Инфо.Контрагент.Вызвать",Rec,Bln,Field,0);
 fi;
end;

Func ФИОРук_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
var Rec: Record;
var Field,Prefix:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 if Match(Field,"Аннул*"): prefix="Аннул_"; else prefix=""; fi;
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    PutVariableS(prefix+"ДолжнРук",GetCardFieldS("Сотрудники",Rec,"ДОЛЖНОСТЬ.Долж"));
    PutVariableS(prefix+"ФИОРук",GetCardFieldS("Сотрудники",Rec,"ФИОТ"));
 fi;
 Return Cur;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp :Date;
var Field:s;
var Iter:I;
 Template.HideEditor(False);
 tmp=Calendar(ToDay);
 if not tmp=1.1.100:
    Field=AsString(Template.Field);
    Iter=AsInteger(Template.Frame);
    if Field="ДатаДок_": ДатаДок=tmp;
      |Field="СчФ_Дат": Расшифр[Iter].СчФ_Дат=tmp; hСчФ_Дат=tmp;
      |True: PutVariableD(Field,tmp);
    fi;
    if Field="ДатаРег": 
       if ТекГод="":
	  ТекГод=Str(Year(ДатаРег));
       fi;
       --ОбновитьСпецификацию(-1);
       if not Договор=nil then
	  ОбновДоговор(Договор);
       fi;
       Оформление; 
    fi;
    Переход(Field,1);
 fi;
 ^Cur;
end;

Func ПрефиксНомСвед_OnEnter(FieldName: String; Iter: Integer): logical;
var БО_ФорматНомер_:I;
 if Раб.Настр.Начать(blnБО,0,0,"",GetGUID):
    БО_ФорматНомер_=Int(Раб.Настр.ВзятьЗначение("setФорматНомер"));
 fi;
 if БО_ФорматНомер_=0:
    Message("Заполнять префикс номера сведений не требуется",mtWarning);
    ПрефиксНомСвед="";
    hПрефиксНомСвед="";
    ^False;
 fi;
 Return True;
end;

Proc ПрефиксНомСвед_OnExit(FieldName: String; Iter: Integer);
 hПрефиксНомСвед=ПрефиксНомСвед;
end;

Func Секрет_OnEnter(FieldName: String; Iter: Integer): logical;
 Секрет=Int(Раб.Договор.Секретность(Секрет,True));
 Return False;
end;

Func Учр_Банк_onEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Учр=nil: Message("Выберите покупателя",mtError); Template.Field="Учр.КорИмя"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Учр),if(FieldName="Учр_Банк_БанкИмя",Учр_Банк,Учр_Банк_Свед),crdRecordOnly);
 if not Rec=nil:
    if FieldName="Учр_Банк_БанкИмя":
       Учр_Банк=Rec;
      else
       Учр_Банк_Свед=Rec;
    fi;
    Оформление;
 fi;
 Return False;
end;

Proc Банк_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,tmp,ff:S;
var p:i;
var Rec: Record;
 Field=AsString(Template.Field);
 if Match(Field,"Учр_Банк_Свед*"): Rec=Учр_Банк_Свед; tmp="покупателя (для сведений)"; ff="Учр_Банк_Банк"; p=10;
   |Match(Field,"Учр_Банк*"): Rec=Учр_Банк; tmp="покупателя (для оплаты)"; ff="Учр_Банк_Банк"; p=10;
   |Match(Field,"Контр*"): Rec=Контр_Банк; tmp="поставщика, исполнителя..."; ff="Контр_Банк.БанкИмя"; p=12;
 fi;
 if Rec=nil: Message("Выберите банковский счет "+tmp,mtError); Template.Field=ff; Exit; fi;
 Field=AsString(Template.Field);
 if Double:
    Field=SubStr(Field,p,255);
    ExecuteProc("Инфо.БанкСчета.Вызвать",Rec,Field,0);
 fi;
end;

Proc ДатаРег_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ДатаРег":
    ТекГод=Str(Year(ДатаРег));
 fi;
 ОбновитьСпецификацию(-1);
 if not Договор=nil then
    ОбновДоговор(Договор);
 fi;
 ОбновВерсиюОКДП_Гр;
 Переход(FieldName,Iter);
 Оформление;
end;

Func ТекГод_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var tmp:S;
 if УчетБО:
    tmp=AnaElection("ПЕРИОД.????",False,False,"ПЕРИОД."+Str(Year(ДатаРег)));
    if not tmp="":
       ТекГод=SubStr(tmp,8,4);
    fi;
   else
    ClearVariable(Buf);
    if Зачет_КЗ>0:
       if ДО=nil: Message("Выберите обязательство для зачета",mtError); Template.Field="ДО_"; ^False; fi;
       AddInArray(Buf,True,False,ДО.ТекГод);
      else
       if Договор=nil: Message("Выберите договор",mtError); Template.Field="Договор_"; ^False; fi;
       for n=1..6 do
	tmp=GetCardFieldS(crdДоговор,Договор,"Год"+Str(n));
	if not tmp="":
	   AddInArray(Buf,True,False,tmp);
	fi;
       od;
       tmp=GetCardFieldS(crdДоговор,Договор,"ТекГод");
       AddInArray(Buf,True,False,tmp);
    fi;
    n=Alternate("Года договора",Buf,-1,SearchInArray(Buf,tmp),12);
    if not n=0:
       if Buf[n]>Договор.ТекГод: 
	  if EnqOkCancel("Выбранный год "+Buf[n]+" превышает текущий год договора "+Договор.ТекГод+"^MВы уверены, что хотите принять обязательство, на учет, плановым периодом ?",mtWarning)=cmCancel: ^False; fi;
       fi;
       ТекГод=Buf[n];
       ОбновитьСпецификацию(-1);
       Переход(FieldName,Iter);
    fi;
 fi;
 Return False;
end;

Func НаимДок_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if ПризнакИспользуется(FieldName): ^False; fi;
 Rec=Раб.Вспом.Договор_Наим.Выполнить(Договор.ТипДок);
 if not Rec=nil: 
    НаимДок=Rec; 
    КодДок=НаимДок.Код;
    Переход(FieldName,1);
 fi;
 Return False;
end;

Func НомерДок_OnEnter(FieldName: String; Iter: Integer): logical;
 FlagEdit=not ПризнакИспользуется(FieldName);
 if FieldName="НомерДокДоп_":
    if НомерДок="": Message("Заполните номер документа",mtError); Template.Field="НомерДок_"; ^False; fi;
 fi;
 Return FlagEdit;
end;

Func НомерДок_OnVerify(FieldName: String; Iter: Integer; Value: String): logical;
 if not Pos("@",Value)=0: Message("Запрещено использовать символ '@' в номере документа",mtError); ^False; fi;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableS(FieldName,Value);
 Return True;
end;

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit:
    FlagEdit=False;
    Переход(FieldName,Iter);
   else
    if НомерДок_OnEnter(FieldName,Iter):
       FieldName=SubStr(FieldName,1,Length(FieldName)-1);
       PutVariableS(FieldName,"");
    fi;
 fi;
end;

Func НомерДокДоп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var crc:I;
  crc = Раб.CRC16.CRC16_(0,DateToString(ДатаРег));
  crc = Раб.CRC16.CRC16_(crc,Контр_КорИмя);
  crc = Раб.CRC16.CRC16_(crc,Содерж);
  НомерДокДоп = Str(crc);
  Template.HideEditor(True);
  Return cur;
end;

Func ДатаДок_OnVerify(FieldName: String; Iter: Integer; Value: Date): Logical;
 ДатаДок=Value;
 FlagEdit=True;
 Return True;
end;

Proc ДатаДок_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit:
    FlagEdit=False;
   else
    if НомерДок_OnEnter(FieldName,Iter):
       ДатаДок=1.1.100;
    fi;
 fi;
 Переход(FieldName,Iter);
end;

Proc ОКВ_OnExit(FieldName: String; Iter: Integer);
var OWA:I;
 if ОКВ="643" or ОКВ="RUB":
    Вал=""; 
   else
    Вал=Раб.Договор.ВзятьЗначОКВ(ОКВ,"Код","Имя");
 fi;
 Оформление;
end;

Func ОКВ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if fОКВ=0: fОКВ=Раб.Договор.ЗагрузСправ("РПО_ОКВ",PlanVar("Std_Rpo")+"\DBF\РПО_ОКВ",ieCRD,"Загрузить справочник видов валют ОКВ ?"); fi;
 if fОКВ=1:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор валюты","РПО_ОКВ","КОД|ИМЯ|НАИМЕНОВАНИЕ","Цифровой код|Буквенный код|Наименование","");
    if not Rec=nil:
       ОКВ=GetCardFieldS("РПО_ОКВ",Rec,"КОД");
    fi;
 fi;
 ОКВ_OnExit(ОКВ,1);
 Return Cur;
end;

Func Вал_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var Cur:S;
 if ОКВ="": Message("Заполните код валюты по ОКВ",mtError); Template.Field="ОКВ"; ^False; fi;

 ClearVariable(Buf);
 n=0;
 for Currencies Cur="*" do
  n=n+1;
  Buf[n]=Up(Cur)+" --"+Name_C(Cur);
 od;
 n=Alternate("Валюта",Buf,-1,1,12);
 if not n=0:
    Вал=SubStr(Buf[n],1,3);
    Оформление;
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Func Договор_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var tmp:S;
var Flag:L;
 if not FieldName="Договор_Экз":
    if ПризнакИспользуется(FieldName):
       if EnqOkCancel("Открыть карточку договора ?")=cmOk:
	  OpenBlank(blnДоговор,True,Договор);
	 else
	  ^False;
       fi;
    fi;
 fi;
 if FieldName="Договор_Экз" and Договор=nil: Message("Выберите договор, контракт...",mtError); Template.Field="Договор_"; ^False; fi;
 if Договор=nil:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...",crdДоговор,"НомерДок","Номер документа","Рег and not НеДейств");
   else
    if FieldName="Договор_Экз":
       if Договор.Признак_Ref=nil:
	  tmp=" and UKey="+RecordTOString(Договор);
	 else
	  tmp=" and Признак_Ref="+RecordTOString(Договор.Признак_Ref);
       fi;
      else
       tmp=" and not НеДейств";
    fi;
    Rec=OpenCardFile(crdДоговор,"Рег"+tmp,Договор);
 fi;
 if not Rec=nil:
    Flag=GetCardFieldL(crdДоговор,Rec,"Недейств");
    if Flag:
       Message("Внимание! Выбранная версия договора НЕ ДЕЙСТВУЕТ на дату денежного обязательства^MВыберите действующую редакцию",mtWarning);
    fi;
    if not Flag and not Раб.Договор.Изменение(Rec)=nil:
       Message("Внимание! К выбранной версии договора существует НЕ ЗАРЕГИСТРИРОВАННОЕ изменение. Возможно необходимо ВНАЧАЛЕ зарегистровать изменение договора и выбрать его",mtWarning);
    fi;
    Наличные=Договор.Наличные;
    ОбновДоговор(Rec);
    if (not УчетТМЦ=flagТМЦ or not УчетОКДП=flagОКДП):
       УчетТМЦ=flagТМЦ;
       УчетОКДП=flagОКДП;
    fi;
    Оформление;
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Proc Договор_OnExit(FieldName: String; Iter: Integer);
 if ПризнакИспользуется(FieldName): Exit; fi;
 Договор=nil;
 Договор_GUID="";
 Контр=nil;
 Контр_Призн="";
 Общ_Призн1="";
 Общ_Призн2="";
 Оформление;
end;

Proc Договор_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if Договор=nil and not Рег:
    Договор_OnEnter("Договор_",1);
 fi;
 if not Договор=nil:
    OpenBlank(blnДоговор,True,Договор);
 fi;
end;

Func ДО_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var F:S;
 if УчетБО:
    if Контр=nil: Message("Выберите поставщика, исполнителя...",mtError); Template.Field="Контр.КорИмя"; ^False; fi;
    F="Рег and Контр="+RecordToString(Контр)+" and Зачет_КЗ<0";
   else
    if Договор=nil: Message("Выберите договор, контракт...",mtError); Template.Field="Договор_"; ^False; fi;
    F="Рег and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and Зачет_КЗ<0";
 fi;
 if ДО=nil:
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор обязательства",crdДО,"НомерДок","Номер документа",F);
   else
    Rec=OpenCardFile(crdДО,F,ДО);
 fi;
 if not Rec=nil:
    ДО=Rec;
    ДО_Призн="ДОГОВОР."+ДО.Признак;
    ДО_Призн_Ref=ДО.Признак_Ref;
    ДО_GUID=ДО.GUID;
    ТекГод=ДО.ТекГод;
    if ДО=Rec or (ДО.Договор.Признак_Ref=GetCardFieldR(crdДО,Rec,"Договор.Признак_Ref") and not ДО.Договор=nil):
       ОбновитьСпецификацию(-1); 
    fi;
    Зачет_КЗ=1;
    Аванс=False;
    ЦЗ=False;
 fi;
 Return False;
end;

Func Контр_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
var ff:s;
var rec:record;
var Flag:L;
 if УчетБО:
    if ПризнакИспользуется(FieldName): ^False; fi;
    if not Контр=nil:
       Rec=OpenCardFile("Контрагент","",Контр,crdRecordOnly);
      else
       Rec=Раб.Поиск.ВыборИзКартотеки("Выбор контрагента","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН","Код|Полное имя|Краткое имя|ИНН","");
    fi;
   else
    if Договор=nil: Message("Выберите договор, контракт...",mtError); Template.Field="Договор_"; ^False; fi;
    if Договор.Контр2=0:
       Rec=Договор.Контр;
      else
       ff="--UKey="+RecordToString(Договор.Контр);
       for n=1..Договор.Контр2 do
	ff=Раб.Бюджет2005.Объединить(ff,"UKey="+RecordToString(Договор.Контр2[n].Контр),"or ");
       od;
       Rec=OpenCardFile("Контрагент",ff,Контр,crdRecordOnly);
    fi;
 fi;
 if not Rec=nil:
    Контр=Rec;
    Контр_Призн=CardFileRecSign("Контрагент","Признак","К",Rec);
    Контр_Банк=nil;
    if not УчетБО and Контр=Договор.Контр:
       if Договор.Контр_Банк2=0:
	  Контр_Банк=Раб.Договор.Контр_Банк;
	 else
	  Message("Выберите банковские реквизиты");
	  Flag=ExecuteFuncL("Контр_Банк_onEnter",FieldName,Iter);
       fi;
      else
       Контр_Банк=Раб.Бюджет2005.БанкСчет(Контр,False);
    fi;
    Переход(FieldName,Iter);
 fi;
 Return  False;
end;

Proc Контр_OnExit(FieldName: String; Iter: Integer);
 if ПризнакИспользуется(FieldName): Exit; fi;
 ClearVariable(Контр);
 ClearVariable(Контр_Призн);
 ClearVariable(Контр_Банк);
end;

Func Наличные_OnEnter(FieldName: String; Iter: Integer): logical;
 Наличные=not Наличные;
 Оформление;
 Return False;
end;

Func Контр_Банк_onEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var ff:S;
var Rec: Record;
 if Настр.ДО_ВыборКонтрБанк=0 and not УчетБО and Договор.Контр_Банк2=0:
    if EnqOkCancel("Вы уверены, что хотите изменить банковский счет контрагента на отличный от указанного в договоре ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 if Контр=nil: Message("Выберите поставщика, исполнителя...",mtError); Template.Field="Контр.КорИмя"; ^False; fi;
 if not УчетБО and Контр=Договор.Контр and not Договор.Контр_Банк2=0:
    ff="--UKey="+RecordToString(Договор.Контр_Банк);
    for n=1..Договор.Контр_Банк2 do
     ff=Раб.Бюджет2005.Объединить(ff,"UKey="+RecordToString(Договор.Контр_Банк2[n].Контр_Банк),"or ");
    od;
   else
    ff="--Контрагент="+RecordToString(Контр);
 fi;
 Rec=OpenCardFile("Банк_Счета",ff,Контр_Банк,crdRecordOnly);
 if not Rec=nil:
    Контр_Банк=Rec;
 fi;
 Return False;
end;

Func Общ_Призн1_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Настр.Общ_Справ1="": ^False; fi;
 if Общ_Призн1="": tmp=hОбщ_Призн1; else tmp=Общ_Призн1; fi;
 tmp=AnaElection(Настр.Общ_Справ1,False,False,tmp);
 if tmp="": ^False; fi;
 Общ_Призн1=tmp;
 hОбщ_Призн1=tmp;
 Переход(FieldName,Iter);
 Return False;
end;

Func Общ_Призн2_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Настр.Общ_Справ2="": ^False; fi;
 if Общ_Призн2="": tmp=hОбщ_Призн2; else tmp=Общ_Призн2; fi;
 tmp=AnaElection(Настр.Общ_Справ2,False,False,tmp);
 if tmp="": ^False; fi;
 Общ_Призн2=tmp;
 hОбщ_Призн2=tmp;
 Переход(FieldName,Iter);
 Return False;
end;

Proc Общ_Призн_OnClick(Row: Integer; Col: Integer; Double: Logical);
 Template.Field="Договор_";
end;

Func ГП_OnEnter(FieldName: String; Iter: Integer): logical;
var rec:record;
 if not ГП=nil:
    rec=OpenCardFile("Контрагент","РПО_ПБС",ГП,crdAnyRecord);
   else
    rec=Раб.Поиск.ВыборИзКартотеки("Выбор грузополучателя","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН|КБП","Код|Полное имя|Краткое имя|ИНН|Код бюджетополучателя","РПО_ПБС");
 fi;
 if not Rec=nil:
    ГП=Rec;
    ГП_Призн=CardFileRecSign("Контрагент","Признак","ПБС",Rec);
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Proc ГП_OnExit(FieldName: String; Iter: Integer);
 ГП=nil;
 ГП_Призн="";
end;

Func Осн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Раб.Вспом.Основание.Выполнить(crdДО+"."+Field);
 PutVariableS(Field,tmp);
 if ProcExists(Field+"_OnExit"):
    ExecuteProc(Field+"_OnExit",Field,AsInteger(Template.Frame));
 fi;
 Return Cur;
end;

Func МФ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 for n=1..12 do
  Buf[n]=Месяц(n);
 od;
 n=Alternate("Месяц оплаты обязательства",Buf,-1,Mon(ДатаРег),12);
 if not n=0:
    if n<Mon(ДатаРег): Message("Месяц оплаты обязательства не может быть ранее месяца принятия к учету",mtError); ^False; fi;
    МФ=Format("%.2D",n);
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Func БО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Crd:S;
var БО_:Record;
 Template.HideEditor(False);
 if УчетБО:
    БО_=if(AsString(Template.Field)="БО_",БО,БО_Изм);
    if БО_=nil: Message("Бюджетное обязательство не зарегистрировано"); ^Cur; fi;
    if not RecordExists(crdБО,БО_): Message("Бюджетное обязательство не найдено",mtError); ^Cur; fi;
    if ModalMode and isBlankOpen(BlnБО): Message("Бланк бюджетного обязательства уже открыт. Для возврата закройте текущий бланк",mtWarning); ^Cur; fi;
    if isBlankOpen(blnБО): Close(blnБО); fi;
    OpenBlank(blnБО,True,БО_);
   else
    RefreshAna;
    if БО_Призн="": Message("Бюджетное обязательство не зарегистрировано"); ^Cur; fi;
    if Name_A(БО_Призн)=" ": Message("Неизвестный аналитичесикй признак бюджетного обязательства '"+БО_Призн+"'",mtError); ^Cur; fi;
    if Договор.БО=nil:
       БО_=SignToRecord(БО_Призн);
       Crd=SignCardFile(БО_Призн);
      else
       БО_=Договор.БО;
       Crd=crdБО;
    fi;
    if Crd=crdБО:
       if ModalMode and isBlankOpen(BlnБО): Message("Бланк бюджетного обязательства уже открыт. Для возврата закройте текущий бланк",mtWarning); ^Cur; fi;
       if isBlankOpen(blnБО): Close(blnБО); fi;
       OpenBlank(blnБО,True,БО_);
      else
       OpenCardFile(crd,"",БО_);
    fi;
 fi;
 Return Cur;
end;

Func БО_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if not (Рег or УчетБО or Договор=nil):
    if not ДОГОВОР.УчетБО: Message("В карточке договора должен установлен флаг 'Учитывать как бюдж. обязательство'",mtWarning); ^False; fi;
    tmp="БО."+ДОГОВОР.БО.Признак;
    if not tmp="БО.":
       if not БО_Призн=tmp:
	  if not БО_Призн="":
	     if EnqOkCancel("Текущий признак обязательства (бюджетного) "+БО_Призн+" отличается от признака обязательства (бюджетного) договора "+tmp+"^M Обновить ?",mtWarning)=cmCancel: ^False; fi;
	  fi;
	  БО_Призн="БО."+ДОГОВОР.БО.Признак;
	  БО=Договор.БО;
	  ^False;
       fi;
    fi;
 fi;
 БО_OnLookup("S2",1,1,"");
 Return False;
end;

Func НаимСчет_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if НаимСчет=nil and not hНаимСчет=nil:
    НаимСчет=hНаимСчет;
    Переход(FieldName,1);
    ^False;
 fi;
 Rec=Раб.Вспом.Договор_Наим.Выполнить(Договор.ТипДок);
 if not Rec=nil: 
    hНаимСчет=Rec;
    НаимСчет=Rec;
    Переход(FieldName,1);
 fi;
 Return False;
end;

Func Счет_OnEnter(FieldName: String; Iter: Integer): logical;
 if НаимСчет=nil: НаимСчет=hНаимСчет; fi;
 Return True;
end;

Proc СумДок_Аннул_OnExit(FieldName: String; Iter: Integer);
 if FieldName="СумДок_Аннул" and СумДок_Аннул=СумДок:
    for Iter=1..Расшифр do
     Расшифр[Iter].Кол_Аннул=Расшифр[Iter].Кол;
     Расшифр[Iter].Сум_Аннул=Расшифр[Iter].СумСНДС;
     Расшифр[Iter].СумРуб_Аннул=Расшифр[Iter].СумРубСНДС;
    od;
 fi;
end;

Func СумДок_Аннул_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 СумДок_Аннул=СумДок;
 СумРубДок_Аннул=СумРубДок;
 СумДок_Аннул_OnExit(AsString(Template.Field),1);
 Return Cur;
end;

Func ОчистРасшифр_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Рег:
    if EnqOkCancel("Очистить таблицу расшифровки ?",mtWarning)=cmOk:
       ClearVariable(Расшифр);
    fi;
 fi;
 Return False;
end;

Func ОбновСпецифик_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Рег and not УчетБО:
    if ДатаРег=1.1.100:
       if FieldName="ОбновСпецифик": ^НаОшибку("Введите дату регистрации документа",mtError,2,"ДатаРег",1); fi;
       ^False;
    fi;
    if Договор=nil: 
       if FieldName="ОбновСпецифик": ^НаОшибку("Выберите договор, контракт...",mtError,2,"Договор_",1); fi;
       ^False;
    fi;
    ОбновитьСпецификацию(0);
 fi;
 Return False;
end;

Func verОКДП_Гр_OnEnter(FieldName: String; Iter: Integer): logical;
var i,v:i;
var msg:s;
 if ДатаРег=1.1.100: Message("Введите дату принятия к учету",mtError); Template.Field="ДатаРег"; ^False; fi;
 ClearVariable(Buf);
 Buf[1]="Приказ Минэкономразвития РФ от 1 декабря 2010 г. N 601";
 Buf[2]="Приказ Минэкономразвития РФ от 7 июня 2011 г. N 273";
 i=Alternate("Выберите редакцию номеклатуры",Buf,-1,if(verОКДП_Гр=273,2,1),12);
 if i=1: v=601;
   |i=2: v=273;
   |true: ^False;
 fi;
 if not v=verОКДП_Гр:
    if (v=273 and ДатаДок<9.8.2011) or (v=601 and ДатаДок>8.8.2011):
       if EnqOkCancel("Внимание! На дату документа "+DateToString(ДатаДок)+" выбранная редакция ("+Str(v)+") не действует^MИгнорировать ?",mtWarning)=cmCancel: ^False; fi;
    fi;
    msg=КонвОКДП_Гр(if(v=273,"ГР273","ГР"));
    verОКДП_Гр=if(v=601,0,v);
    if not msg="": Message(msg,mtWarning); fi;
 fi;
 Return False;
end;

Func A_onEnter (Field:S; Iter:I):L;
var i:i;
 if Рег: ^False; fi;
 i=Iter;
 Iter=InsertFrame(Расшифр,Iter+1);
 if Field="A" or Расшифр<=1:
    if hНДС="": Расшифр[Iter].НДС=-1; else Расшифр[Iter].НДС=Int(hНДС); fi;
    if УчетНДС:
       Расшифр[Iter].ВыделятьНДС=hВыделятьНДС;
       Расшифр[Iter].СчФ_Ном=hСчФ_Ном;
       Расшифр[Iter].СчФ_Дат=hСчФ_Дат;
    fi;
   else
    Расшифр[Iter].ВД=Расшифр[i].ВД;
    Расшифр[Iter].КБК=Расшифр[i].КБК;
    Расшифр[Iter].Призн=Расшифр[i].Призн;
    Расшифр[Iter].ПризнДоп=Расшифр[i].ПризнДоп;
    Расшифр[Iter].ТМЦ=Расшифр[i].ТМЦ;
    Расшифр[Iter].Предм1=Расшифр[i].Предм1;
    Расшифр[Iter].Предм2=Расшифр[i].Предм2;
    Расшифр[Iter].Предм3=Расшифр[i].Предм3;
    Расшифр[Iter].Предм4=Расшифр[i].Предм4;
    Расшифр[Iter].ТМЦ16=Расшифр[i].ТМЦ16;
    Расшифр[Iter].ОКДП_Гр=Расшифр[i].ОКДП_Гр;
    Расшифр[Iter].ОКДП=Расшифр[i].ОКДП;
    Расшифр[Iter].СумДоговор=Расшифр[i].СумДоговор;
    Расшифр[Iter].КолДоговор=Расшифр[i].КолДоговор;
    Расшифр[Iter].ЦенаДоговор=Расшифр[i].ЦенаДоговор;
    Расшифр[Iter].СумДО=Расшифр[i].СумДО;
    Расшифр[Iter].КолДО=Расшифр[i].КолДО;
    Расшифр[Iter].Цена=Расшифр[i].Цена;
    Расшифр[Iter].Кол=Расшифр[i].Кол;
    Расшифр[Iter].ЕдИзм=Расшифр[i].ЕдИзм;
    Расшифр[Iter].Сум=Расшифр[i].Сум;
    Расшифр[Iter].СумРуб=Расшифр[i].СумРуб;
    Расшифр[Iter].СумСНДС=Расшифр[i].СумСНДС;
    Расшифр[Iter].НДС=Расшифр[i].НДС;
    Расшифр[Iter].СумРубСНДС=Расшифр[i].СумРубСНДС;
    Расшифр[Iter].ВыделятьНДС=Расшифр[i].ВыделятьНДС;
    Расшифр[Iter].СчФ_Ном=Расшифр[i].СчФ_Ном;
    Расшифр[Iter].СчФ_Дат=Расшифр[i].СчФ_Дат;
    Расшифр[Iter].ВидОпер=Расшифр[i].ВидОпер;
    Расшифр[Iter].СчДеб=Расшифр[i].СчДеб;
    Расшифр[Iter].СчКре=Расшифр[i].СчКре;
    ОбновСпецифик_OnEnter(Field,Iter);
 fi;
 ^False;
end;

Func D_onEnter (Field:S; Iter:I):L;
 if Рег: ^False; fi;
 DeleteFrame(Расшифр,Iter);
 ОбновСпецифик_OnEnter(Field,Iter);
 ^False;
end;

Func ВД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,Store,БК_,КОСГУ_:S;
 НеПустаяТаблица;
 Store=Расшифр[Iter].ВД;
 tmp=Раб.КБК.Список(Раб.Договор.МаскаСчКБК,"","ВД");
 if tmp="": ^False; fi;
 Расшифр[Iter].ВД=tmp;
 if not Store=tmp and not Расшифр[Iter].КБК="":
    БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","КБК",False);
    КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","КОСГУ",False);
    if not Раб.Бюджет2005.ЕстьСчетПоМаске(БК_+"."+Расшифр[Iter].ВД+".206.??."+КОСГУ_+"|"+БК_+"."+Расшифр[Iter].ВД+".302.??."+КОСГУ_): Расшифр[Iter].КБК=""; fi;
 fi;
 ОбновитьСч(Iter);
 Переход(FieldName,Iter);
 Return False;
end;

Func Опер_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var КОСГУ:S;
 НеПустаяТаблица;
 if Расшифр[Iter].КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 if Аванс:
    Buf[1]="206"; Buf2[1]="Аванс";
   |Зачет_КЗ>0:
    Buf[1]="730+830"; Buf2[1]="Зачет увел.КЗ + уменьш.КЗ";
    Buf[2]="730";     Buf2[2]="Зачет увеличения КЗ";
   |True:
    КОСГУ=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","КОСГУ",False);
    if КОСГУ="310":	     n=n+1; Buf[n]="106.11"; Buf2[n]="Вложения в ОС - недвижимое имущество (106.11)";
			     n=n+1; Buf[n]="106.31"; Buf2[n]="Вложения в ОС - иное движимое имущество (106.31)";
			     n=n+1; Buf[n]="401.20"; Buf2[n]="Расходы (401.20)";
      |КОСГУ="340":	     if not ЦЗ:
				n=n+1; Buf[n]="105.31"; Buf2[n]="Закупка медикаментов (105.31)";
				n=n+1; Buf[n]="105.32"; Buf2[n]="Закупка продуктов (105.32)";
				n=n+1; Buf[n]="105.33"; Buf2[n]="Закупка ГСМ (105.33)";
				n=n+1; Buf[n]="105.34"; Buf2[n]="Закупка строительных материалов (105.34)";
				n=n+1; Buf[n]="105.35"; Buf2[n]="Закупка мягкого инвенторя (105.35)";
				n=n+1; Buf[n]="105.36"; Buf2[n]="Закупка прочих материальных запасов (105.36)";
				n=n+1; Buf[n]="105.38"; Buf2[n]="Закупка штучной продукции (105.38)";
			     fi;
			     n=n+1; Buf[n]="106.34"; Buf2[n]="Вложения в МЗ (106.34)";
			     n=n+1; Buf[n]="401.20"; Buf2[n]="Расходы (401.20)";
      |Расшифр[Iter].ВД="1": n=n+1; Buf[n]="401.20"; Buf2[n]="Расходы (401.20)";
			     n=n+1; Buf[n]="106.11"; Buf2[n]="Вложения в ОС - недвижимое имущество (106.11)";
			     n=n+1; Buf[n]="106.31"; Buf2[n]="Вложения в ОС - иное движимое имущество (106.31)";
			     n=n+1; Buf[n]="106.34"; Buf2[n]="Вложения в МЗ (106.34)";
			     n=n+1; Buf[n]="304.04"; Buf2[n]="Внутриведомств. расчеты (304.04)";
			     n=n+1; Buf[n]="304.04_";Buf2[n]="Внутриведомств. расчеты (304.04) без формирования извещения";
      |true:		     n=n+1; Buf[n]="401.20"; Buf2[n]="Расходы (401.20)";
			     n=n+1; Buf[n]="401.50"; Buf2[n]="Расходы будущих периодов (401.50)";
			     n=n+1; Buf[n]="109.60"; Buf2[n]="Затраты, себестоимость (109.60)";
			     n=n+1; Buf[n]="109.70"; Buf2[n]="Затраты, накладные расходы (109.70)";
			     n=n+1; Buf[n]="109.80"; Buf2[n]="Затраты, общехозяйственные расходы (109.80)";
			     n=n+1; Buf[n]="109.90"; Buf2[n]="Затраты, издержки обращения (109.90)";
			     n=n+1; Buf[n]="106.11"; Buf2[n]="Вложения в ОС - недвижимое имущество (106.11)";
			     n=n+1; Buf[n]="106.31"; Buf2[n]="Вложения в ОС - иное движимое имущество (106.31)";
			     n=n+1; Buf[n]="106.34"; Buf2[n]="Вложения в МЗ (106.34)";
			     n=n+1; Buf[n]="304.04"; Buf2[n]="Внутриведомств. расчеты (304.04)";
			     n=n+1; Buf[n]="304.04_";Buf2[n]="Внутриведомств. расчеты (304.04) без формирования извещения";
    fi;
 fi;
 n=LengthOfArray(Buf);
 if Зачет_КЗ<=0:
    n=n+1;
    Buf[n]="00"; Buf2[n]="Остатки";
    n=n+1; Buf[n]="*"; Buf2[n]="Выбор из плана счетов";
 fi;
 n=LengthOfArray(Buf)+1;
 n=Alternate("Виды операций",Buf2,-1,SearchInArray(Buf,Расшифр[Iter].ВидОпер),12);
 if not n=0:
    Расшифр[Iter].ВидОпер=Buf[n];
    ОбновитьСч(Iter);
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var n,n1,nn,i,z:i;
var tmp:S;
 НеПустаяТаблица;
 if УчетБО:
    if Расшифр[Iter].ВД="": Message("Выберите вид деятельности",mtError); Template.Field="ВД"; Template.Frame=Iter; ^False; fi;
    tmp=Раб.Бюджет2005.Объединить(Раб.Договор.МаскаСчКБК,"*."+Расшифр[Iter].ВД+"."+Раб.Бюджет2005.МаскаСч8,"&");
    Раб.КБК.Список_КБК_РазрДобав=True;
    Раб.КБК.Список_КБК_КодСч=Расшифр[Iter].ВД+".???.??";
    Раб.КБК.Список_КБК_РазрКОСГУ=true;
    tmp=Раб.КБК.Список(tmp,"","КБК+КОСГУ И");
    if not tmp="":
       Расшифр[Iter].КБК=tmp;
       Расшифр[Iter].Призн="";
       Расшифр[Iter].ВидОпер="";
       if Расшифр[Iter].ВД="2" or Match(Расшифр[Iter].КБК,"*.340"):
	  if not ЦЗ:
	     Опер_OnEnter(FieldName,Iter);
	  fi;
       fi;
       if not Расшифр[Iter].ВД="2": Расшифр[Iter].ВыделятьНДС=False; fi;
       ОбновитьСч(Iter);
       Переход(FieldName,Iter);
    fi;
   else
    if ДатаРег=1.1.100: ^НаОшибку("Введите дату регистрации документа",mtError,2,"ДатаРег",1); fi;
    Раб.Договор.AltЗнач=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн;
    Раб.Договор.AltВсе=1;
    if Зачет_КЗ>0:
       if ДО=nil: ^НаОшибку("Выберите обязательство для зачета...",mtError,2,"ДО_",1); fi;
       Раб.Договор.AltЗагл="Спецификация зачета";
       nn=Раб.Договор.ДО_КБК("Рег and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and UKey="+RecordToString(ДО),"",ДатаРег,False,True);
      else
       if Договор=nil: ^НаОшибку("Выберите договор, контракт...",mtError,2,"Договор_",1); fi;
       Раб.Договор.AltЗагл="Спецификация договора";
       --nn=Раб.Договор.Договор_КБК("Рег and ДатаРег<="+DateToString(if(Day(ДатаРег)=31 and Mon(ДатаРег)=12,ДатаРег+1,ДатаРег))+" and Договор="+RecordToString(Договор),ТекГод,True);
       nn=Раб.Договор.Договор_КБК("Рег and Договор="+RecordToString(Договор),ТекГод,True);
    fi;
    if not nn=0:
       i=Iter;
       if Раб.Договор.AltВсе=-1: 
	  n1=1; 
	 else 
	  if Раб.Договор.AltВсе=0 and nn>1: nn=nn-1; fi;
	  n1=nn;
       fi;
       for n=n1..nn do
	if n>n1: Iter=InsertFrame(Расшифр,Iter+1); fi;
	Расшифр[Iter].ВД=Раб.Договор.LstВД[n];
	Расшифр[Iter].КБК=Раб.Договор.LstКБК[n];
	Расшифр[Iter].Призн=Раб.Договор.LstПризн[n];
	tmp=Раб.Бюджет2005.ПризнВСправ(Расшифр[Iter].Призн," ",".*");
	Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Расшифр[Iter].ПризнДоп," ",tmp," ");
	Расшифр[Iter].СумДоговор=Раб.Договор.LstСум[n];
	Расшифр[Iter].ВидОпер="";
	if n1=nn:
	   if Match(Расшифр[Iter].КБК,"*.340") and not ЦЗ: Опер_OnEnter(FieldName,Iter); fi;
	fi;
	if not Расшифр[Iter].ВД="2": Расшифр[Iter].ВыделятьНДС=False; fi;
	if n1=nn: 
	   --z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"Аванс","not Аванс"),"ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'","Сум",False);
	   if Зачет_КЗ>0:
	      z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and not UKey="+RecordToString(Current)+" and ДО="+RecordToString(ДО),"ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'",ДатаРег,"Сум",False);
	     else
	      z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"Аванс","not Аванс"),"ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'",ДатаРег,"Сум",False);
	   fi;
	   if z=0:
	      Расшифр[Iter].СумДО=0;
	     else
	      Расшифр[Iter].СумДО=SumOfArray(Раб.Договор.LstСум,z);
	   fi;
	   for z=1..Iter-1 do
	    if Расшифр[Iter].ВД=Расшифр[z].ВД and Расшифр[Iter].КБК=Расшифр[z].КБК and Расшифр[Iter].Призн=Расшифр[z].Призн: 
	       Расшифр[Iter].СумДО=Расшифр[Iter].СумДО+Расшифр[z].СумСНДС; 
	    fi;
	   od;
	   ОбновитьСч(Iter);
	fi;
       od;
       if not n1=nn: 
	  if fАвтоОбновСпцф: ОбновитьСпецификацию(0); fi;
	  ОбновитьСч(-1);
       fi;
       Iter=i;
       Переход(FieldName,Iter);
    fi;
 fi;
 ^False;
end;

Func Призн_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,ИсклПризн_,:S;
 НеПустаяТаблица;
 if Расшифр[Iter].КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 ОбновитьСч(Iter);
 if Расшифр[Iter].СчДеб="": Message("Выберите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; ^False; fi;
 if not Аванс:
    if Расшифр[Iter].СчКре="": Message("Выберите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; ^False; fi;
 fi;
 tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Расшифр[Iter].Призн+" "+Общ_Призн1+" "+Общ_Призн2)," ",".*");
 tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
 ИсклПризн_=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
 tmp=ПолучитьМаскуСчетов(Iter,"");
 tmp=Раб.Бюджет2005.СписокСправ(tmp,0,ИсклПризн_);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 ПолучитьДопАн(Iter);
 tmp=AnaElection(tmp+"|*&~*.*",False,False,hПризн);
 if not tmp="":
    hПризн=tmp;
    tmp=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Расшифр[Iter].ПризнДоп," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    Расшифр[Iter].ПризнДоп=tmp;
    Переход(FieldName,Iter);
 fi;
 Return False;
end;

Proc Призн_OnExit(FieldName: String; Iter: Integer);
 НеПустаяТаблица;
 Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(Расшифр[Iter].ПризнДоп," ","Name_A");
 if not Исп_Док=nil:
    СинхроПризнИспДок;
 fi;
end;

Func Предм_OnEnter(FieldName: String; Iter: Integer): logical;
var n,n1,nn,i,z:i;
 НеПустаяТаблица;
 if УчетБО or Аванс:
    if FieldName="exПредм" or LenПредм[Iter]>255:
       ClearVariable(Раб.Договор.BufLS);
       Раб.Договор.BufLS[1]=Расшифр[Iter].Предм1;
       Раб.Договор.BufLS[2]=Расшифр[Iter].Предм2;
       Раб.Договор.BufLS[3]=Расшифр[Iter].Предм3;
       Раб.Договор.BufLS[4]=Расшифр[Iter].Предм4;
       Раб.Договор.ВводДлинСтр("Наименование товара, работ, услуг",4,Рег);
       if not Рег:
	  if not Расшифр[Iter].Предм1=Раб.Договор.BufLS[1]: Расшифр[Iter].Предм1=Раб.Договор.BufLS[1]; fi;
	  if not Расшифр[Iter].Предм2=Раб.Договор.BufLS[2]: Расшифр[Iter].Предм2=Раб.Договор.BufLS[2]; fi;
	  if not Расшифр[Iter].Предм3=Раб.Договор.BufLS[3]: Расшифр[Iter].Предм3=Раб.Договор.BufLS[3]; fi;
	  if not Расшифр[Iter].Предм4=Раб.Договор.BufLS[4]: Расшифр[Iter].Предм4=Раб.Договор.BufLS[4]; fi;
	  Расшифр[Iter].ТМЦ16=Раб.CRC16.CRC16_(0,Расшифр[Iter].Предм1);
	  Расшифр[Iter].ТМЦ16=Раб.CRC16.CRC16_(Расшифр[Iter].ТМЦ16,Расшифр[Iter].Предм2);
	  Расшифр[Iter].ТМЦ16=Раб.CRC16.CRC16_(Расшифр[Iter].ТМЦ16,Расшифр[Iter].Предм3);
	  Расшифр[Iter].ТМЦ16=Раб.CRC16.CRC16_(Расшифр[Iter].ТМЦ16,Расшифр[Iter].Предм4);
       fi;
       ^False;
    fi;
    if Рег: ^False; fi;
    FlagEdit=True;
    ^True;
   else
    if not Рег:
       if ДатаРег=1.1.100: Message("Введите дату принятия к учету",mtError); Template.Field="ДатаРег"; ^False; fi;
       if Договор=nil: Message("Выберите договор",mtError); Template.Field="Договор_"; ^False; fi;
       Раб.Договор.AltЗагл="Предмет договора";
       Раб.Договор.AltВсе=1;
       --nn=Раб.Договор.Договор_Предм("Рег and ДатаРег<="+DateToString(if(Day(ДатаРег)=31 and Mon(ДатаРег)=12,ДатаРег+1,ДатаРег))+" and Договор="+RecordToString(Договор),"",True);
       nn=Раб.Договор.Договор_Предм("Рег and Договор="+RecordToString(Договор),"",True);
       if not nn=0:
	  i=Iter;
	  if Раб.Договор.AltВсе=-1:
	     n1=1;
	    else
	     if Раб.Договор.AltВсе=0 and nn>1: nn=nn-1; fi;
	     n1=nn;
	  fi;
	  for n=n1..nn do
	   if n>n1: 
	      Iter=InsertFrame(Расшифр,Iter+1);
	      Расшифр[Iter].ВД=Расшифр[i].ВД;
	      Расшифр[Iter].КБК=Расшифр[i].КБК;
	      Расшифр[Iter].Призн=Расшифр[i].Призн;
	      Расшифр[Iter].ПризнДоп=Расшифр[i].ПризнДоп;
	      Расшифр[Iter].СумДоговор=Расшифр[i].СумДоговор;
	      Расшифр[Iter].ВыделятьНДС=Расшифр[i].ВыделятьНДС;
	      Расшифр[Iter].ВидОпер=Расшифр[i].ВидОпер;
	      Расшифр[Iter].СчДеб=Расшифр[i].СчДеб;
	      Расшифр[Iter].СчКре=Расшифр[i].СчКре;
	   fi;
	   Расшифр[Iter].ТМЦ=Раб.Договор.lstТМЦ[n];
	   if Расшифр[Iter].ТМЦ=nil:
	      Расшифр[Iter].Предм1=Раб.Договор.lstПредм1[n];
	      Расшифр[Iter].Предм2=Раб.Договор.lstПредм2[n];
	      Расшифр[Iter].Предм3=Раб.Договор.lstПредм3[n];
	      Расшифр[Iter].Предм4=Раб.Договор.lstПредм4[n];
	      Расшифр[Iter].ТМЦ16=Раб.Договор.lstТМЦ16[n];
	     else
	      Расшифр[Iter].Предм1="";
	      Расшифр[Iter].Предм2="";
	      Расшифр[Iter].Предм3="";
	      Расшифр[Iter].Предм4="";
	      Расшифр[Iter].ТМЦ16=0;
	   fi;
	   if FlagОКДП:
	      Расшифр[Iter].ОКДП_Гр=Раб.Договор.lstОКДП_Гр[n];
	      Расшифр[Iter].ОКДП=Раб.Договор.lstОКДП[n];
	     else
	      Расшифр[Iter].ОКДП_Гр="";
	      Расшифр[Iter].ОКДП="";
	   fi;
	   Расшифр[Iter].КолДоговор=Раб.Договор.lstКол[n];
	   if Раб.Договор.lstЦена[n]=0:
	      Расшифр[Iter].ЦенаДоговор=0;
	      Расшифр[Iter].Кол=0;
	      Расшифр[Iter].Цена=0;
	      Расшифр[Iter].СумСНДС=Раб.Договор.lstСум[n];
	      ПересчетСум("СумСНДС",Iter);
	     else
	      if Расшифр[Iter].Кол>Раб.Договор.lstКол[n]: Расшифр[Iter].Кол=0; fi;
	      Расшифр[Iter].ЦенаДоговор=Раб.Договор.lstЦена[n];
	      Расшифр[Iter].Цена=Раб.Договор.lstЦена[n];
	      if Расшифр[Iter].НДС>0:
		 Расшифр[Iter].Цена=Расшифр[Iter].Цена-Round(Расшифр[Iter].Цена*Расшифр[Iter].НДС/(100+Расшифр[Iter].НДС),2);
	      fi;
	      ПересчетСум("Цена",Iter);
	   fi;
	   Расшифр[Iter].ЕдИзм=Lo(Раб.Договор.lstЕдИзм[n]);
	   Расшифр[Iter].СумРуб=0;
	   verОКДП_Гр=Раб.Договор.verОКДП_Гр;
	   if verОКДП_Гр=-1: verОКДП_Гр=Договор.verОКДП_Гр; fi;
	   if n1=nn:
	      --z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"Аванс","not Аванс"),"ТМЦ="+RecordToString(Расшифр[Iter].ТМЦ)+" and ТМЦ16="+Str(Расшифр[Iter].ТМЦ16)+if(FlagОКДП," and ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"' and ОКДП='"+Расшифр[Iter].ОКДП+"'","")+" and ЕдИзм='"+Расшифр[Iter].ЕдИзм+"' and Цена="+Str(Расшифр[Iter].ЦенаДоговор,2),"Кол",False);
	      z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"Аванс","not Аванс"),"ТМЦ="+RecordToString(Расшифр[Iter].ТМЦ)+" and ТМЦ16="+Str(Расшифр[Iter].ТМЦ16)+if(FlagОКДП," and ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"' and ОКДП='"+Расшифр[Iter].ОКДП+"'","")+" and ЕдИзм='"+Расшифр[Iter].ЕдИзм+"' and Цена="+Str(Расшифр[Iter].ЦенаДоговор,2),ДатаРег,"Кол",False);
	      Расшифр[Iter].КолДО=Раб.Договор.lstКол[z];
	      for z=1..Iter-1 do
	       if Расшифр[Iter].ТМЦ=Расшифр[z].ТМЦ and
		  Расшифр[Iter].Предм1=Расшифр[z].Предм1 and
		  Расшифр[Iter].Предм2=Расшифр[z].Предм2 and
		  Расшифр[Iter].Предм3=Расшифр[z].Предм3 and
		  Расшифр[Iter].Предм4=Расшифр[z].Предм4 and
		  ((FlagОКДП and
		  Расшифр[Iter].ОКДП_Гр=Расшифр[z].ОКДП_Гр and
		  Расшифр[Iter].ОКДП=Расшифр[z].ОКДП) or 
		  not FlagОКДП) and
		  Расшифр[Iter].ЦенаДоговор=Расшифр[z].ЦенаДоговор and
		  Расшифр[Iter].ЕдИзм=Расшифр[z].ЕдИзм: Расшифр[Iter].КолДО=Расшифр[Iter].КолДО+Расшифр[z].Кол;
	       fi;
	      od;

	   fi;
	  od;
	  if not n1=nn: 
	     if fАвтоОбновСпцф: ОбновитьСпецификацию(0); fi;
	  fi;
	  Переход(FieldName,i);
       fi;
    fi;
    ^False;
 fi;
end;

Func Предм_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 Расшифр[Iter].Предм1=Value;
 Расшифр[Iter].Предм2="";
 Расшифр[Iter].Предм3="";
 Расшифр[Iter].Предм4="";
 Расшифр[Iter].ТМЦ=nil;
 Расшифр[Iter].ТМЦ16=Раб.CRC16.CRC16_(0,Расшифр[Iter].Предм1);
 Return True;
end;

Proc Предм_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit: 
    FlagEdit=False;
    Переход(FieldName,Iter);
   else
    Расшифр[Iter].Предм1="";
    Расшифр[Iter].Предм2="";
    Расшифр[Iter].Предм3="";
    Расшифр[Iter].Предм4="";
    Расшифр[Iter].ТМЦ=nil;
    if not УчетБО:
       Расшифр[Iter].ОКДП_Гр="";
       Расшифр[Iter].ОКДП="";
    fi;
    Расшифр[Iter].ТМЦ16=0;
 fi;
end;

Func ТМЦ_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if not Рег:
    if Расшифр[Iter].ТМЦ=nil:
       Rec=Раб.Документы.ВыборСФильтром("ТМЦ","КОММЕНТ","");
      else
       Rec=OpenCardFile("ТМЦ","",Расшифр[Iter].ТМЦ,crdRecordOnly);
    fi;
    if not Rec=nil:
       Расшифр[Iter].ТМЦ=Rec;
       Расшифр[Iter].Предм1=Расшифр[Iter].ТМЦ.Коммент;
       Расшифр[Iter].Предм2="";
       Расшифр[Iter].Предм3="";
       Расшифр[Iter].Предм4="";
       Расшифр[Iter].ЕдИзм=Lo(Расшифр[Iter].ТМЦ.ЕдИзм);
       Переход(FieldName,Iter);
    fi;
 fi;
 Return False;
end;

Func ОКДП_OnEnter(FieldName: String; Iter: Integer): logical;
var n,nn,i,n1,z:i;
 if not УчетБО:
    if ДатаРег=1.1.100: Message("Введите дату принятия к учету",mtError); Template.Field="ДатаРег"; ^False; fi;
    if Договор=nil: Message("Выберите договор",mtError); Template.Field="Договор_"; ^False; fi;
    Раб.Договор.AltЗагл="Предмет договора";
    Раб.Договор.AltВсе=1;
    --nn=Раб.Договор.Договор_Предм("Рег and ДатаРег<="+DateToString(if(Day(ДатаРег)=31 and Mon(ДатаРег)=12,ДатаРег+1,ДатаРег))+" and Договор="+RecordToString(Договор),if(Аванс,"ОКДП_Гр","ОКДП"),True);
    nn=Раб.Договор.Договор_Предм("Рег and Договор="+RecordToString(Договор),if(Аванс,"ОКДП_Гр","ОКДП"),True);
    if not nn=0:
       i=Iter;
       if Раб.Договор.AltВсе=-1:
	  n1=1;
	 else
	  if Раб.Договор.AltВсе=0 and nn>1: nn=nn-1; fi;
	  n1=nn;
       fi; --if Раб.Договор.AltВсе=-1:
       for n=n1..nn do
	if n>n1:
	   Iter=InsertFrame(Расшифр,Iter+1);
	   Расшифр[Iter].ВД=Расшифр[i].ВД;
	   Расшифр[Iter].КБК=Расшифр[i].КБК;
	   Расшифр[Iter].Призн=Расшифр[i].Призн;
	   Расшифр[Iter].ПризнДоп=Расшифр[i].ПризнДоп;
	   Расшифр[Iter].СумДоговор=Расшифр[i].СумДоговор;
	   Расшифр[Iter].ВыделятьНДС=Расшифр[i].ВыделятьНДС;
	   Расшифр[Iter].ВидОпер=Расшифр[i].ВидОпер;
	   Расшифр[Iter].СчДеб=Расшифр[i].СчДеб;
	   Расшифр[Iter].СчКре=Расшифр[i].СчКре;
	fi; --if n>n1:
	Расшифр[Iter].ТМЦ=nil;
	Расшифр[Iter].Предм1="";
	Расшифр[Iter].Предм2="";
	Расшифр[Iter].Предм3="";
	Расшифр[Iter].Предм4="";
	Расшифр[Iter].ТМЦ16=0;
	Расшифр[Iter].ОКДП_Гр=Раб.Договор.lstОКДП_Гр[n];
	if Аванс:
	   Расшифр[Iter].ОКДП="";
	  else
	   Расшифр[Iter].ОКДП=Раб.Договор.lstОКДП[n];
	fi; --if Аванс:
	Расшифр[Iter].КолДоговор=Раб.Договор.lstСум[n];
       od;
       verОКДП_Гр=Раб.Договор.verОКДП_Гр;
       if verОКДП_Гр=-1: verОКДП_Гр=Договор.verОКДП_Гр; fi;
       if n1=nn:
	  --z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"","not ")+"Аванс","ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"'"+if(Аванс,""," and ОКДП='"+Расшифр[Iter].ОКДП+"'"),"Сум",False);
	  z=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"","not ")+"Аванс","ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"'"+if(Аванс,""," and ОКДП='"+Расшифр[Iter].ОКДП+"'"),ДатаРег,"Сум",False);
	  Расшифр[Iter].КолДО=Раб.Договор.lstСум[z];
	  for z=1..Iter-1 do
	   if Расшифр[Iter].ОКДП_Гр=Расшифр[z].ОКДП_Гр and
	      Расшифр[Iter].ОКДП=Расшифр[z].ОКДП: Расшифр[Iter].КолДО=Расшифр[Iter].КолДО+Расшифр[z].СумСНДС;
	   fi;
	  od;
	 else
	  if fАвтоОбновСпцф: ОбновитьСпецификацию(0); fi;
       fi; --if n1=nn:
       Переход(FieldName,Iter);
    fi; --if not nn=0:
    ^False;
 fi; --if not УчетБО:
 Return True;
end;

Func ОКДП_Гр_OnVerify(FieldName: String; Iter: Integer; Value: String): logical;
 ОКДП_=Расшифр[Iter].ОКДП;
 Return Раб.Договор.ОКДП_Гр_Verify(blnДО+".ОКДП_",Value,verОКДП_Гр);
end;

Proc ОКДП_Гр_OnExit(FieldName: String; Iter: Integer);
 ОКДП_Гр_=Расшифр[Iter].ОКДП_Гр;
 Раб.Договор.ОКДП_Гр_Exit(blnДО+".ОКДП_Гр_");
 Расшифр[Iter].ОКДП_Гр=ОКДП_Гр_;
end;

Func ОКДП_Гр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var rec: Record;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 ОКДП_Гр_=Расшифр[Iter].ОКДП_Гр;
 ОКДП_=Расшифр[Iter].ОКДП;
 rec=Раб.Договор.ОКДП_Гр_Lookup(blnДО+".ОКДП_Гр_",blnДО+".ОКДП_",verОКДП_Гр);
 if not rec=nil:
    Расшифр[Iter].ОКДП_Гр=ОКДП_Гр_;
    Расшифр[Iter].ОКДП=ОКДП_;
    Переход(AsString(Template.Field),Iter);
 fi;
 Return Cur;
end;

Func ОКДП_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var rec: Record;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 ОКДП_Гр_=Расшифр[Iter].ОКДП_Гр;
 ОКДП_=Расшифр[Iter].ОКДП;
 rec=Раб.Договор.ОКДП_Lookup(blnДО+".ОКДП_Гр_",blnДО+".ОКДП_",blnДО+".fОКДП",verОКДП_Гр);
 if not rec=nil:
    Расшифр[Iter].ОКДП_Гр=ОКДП_Гр_;
    Расшифр[Iter].ОКДП=ОКДП_;
    Переход(AsString(Template.Field),Iter);
 fi;
 Return Cur;
end;

Func ОКДП_OnVerify(FieldName: String; Iter: Integer; Value: String): logical;
 ОКДП_Гр_=Расшифр[Iter].ОКДП_Гр;
 if Раб.Договор.ОКДП_Verify(blnДО+".ОКДП_Гр_",Value,verОКДП_Гр):
    Расшифр[Iter].ОКДП_Гр=ОКДП_Гр_;
    ^True;
   else
    ^False;
 fi;
end;

Proc ОКДП_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Name,tmp:s;
var Iter:I;
var Obj: Object;
 Iter=AsInteger(Template.Frame);
 Name=AsString(Template.Name);
 if FindObject(Name,Obj):
    Field=AsString(Obj.Cell(Row,Col-1,CellContents,"",False));
    tmp=GetVariableS("Расшифр["+Str(Iter)+"]."+Field);
    if tmp="": Message("Введите код "+if(Field="ОКДП","ОКДП","номенклатурной группы"),mtError); Template.Field=Field; Template.Frame=Iter; Exit; fi;
    if Field="ОКДП" and not tmp="0000000":  tmp=Раб.Договор.ВзятьЗначОКДП(tmp,"Наим");
      |Field="ОКДП_Гр": tmp=Раб.Бюджет.НаимКБК(if(verОКДП_Гр=273,"ОКДП_ГР273","ОКДП_ГР"),tmp);
      |true: tmp="";
    fi;
    if not tmp="":
       Message(tmp);
    fi;
 fi;
end;

Func СумКолДоговор_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var Режим_,Фильтр_:S;
 Раб.Договор.altЗагл="Зарегистрированные договоры";
 if FieldName="СумДоговор_":
    if Зачет_КЗ>0:
       n=Раб.Договор.ДО_СумКол("Рег and UKey="+RecordToString(ДО),"ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'",ДатаРег,"Сум",True);
      else
       n=Раб.Договор.Договор_Сум("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'",ТекГод,True);
    fi;
   else
    if Аванс:
       if УчетОКДП or flagОКДП: Фильтр_="ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"'"; else ^False; fi;
       Режим_="Сум";
      else
       Режим_="Кол";
       if (УчетТМЦ or flagТМЦ) and (УчетОКДП or flagОКДП):
	  Фильтр_=if(Расшифр[Iter].ТМЦ=nil,"ТМЦ16="+Str(Расшифр[Iter].ТМЦ16),"ТМЦ="+RecordToString(Расшифр[Iter].ТМЦ))+" and ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"' and ОКП='"+Расшифр[Iter].ОКДП+"' and ЕдИзм='"+Расшифр[Iter].ЕдИзм+"' and Цена="+Str(Расшифр[Iter].ЦенаДоговор,2);
	 |УчетТМЦ or flagТМЦ: 
	  Фильтр_=if(Расшифр[Iter].ТМЦ=nil,"ТМЦ16="+Str(Расшифр[Iter].ТМЦ16),"ТМЦ="+RecordToString(Расшифр[Iter].ТМЦ))+" and ЕдИзм='"+Расшифр[Iter].ЕдИзм+"' and Цена="+Str(Расшифр[Iter].ЦенаДоговор,2);
	 |УчетОКДП or flagОКДП:
	  Фильтр_="ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"' and ОКП='"+Расшифр[Iter].ОКДП+"'"; Режим_="Сум";
       fi;
    fi;
    if Зачет_КЗ>0:
       n=Раб.Договор.ДО_СумКол("Рег and UKey="+RecordToString(ДО),"ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'",ДатаРег,"Кол",True);
      else
       n=Раб.Договор.Договор_Кол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and "+Фильтр_,Режим_,True);
    fi;
 fi;
 if not n=0:
    OpenBlank(if(Зачет_КЗ>0,blnДО,blnДоговор),True,Раб.Договор.lstДок[n]);
 fi;
 ^False;
end;

Func СумКолДО_OnEnter(FieldName: String; Iter: Integer): logical;
var n,nn:i;
var Режим_,СубФильтр_,Key_:S;
var isКол:L;
 Режим_=SubStr(FieldName,1,3);
 if Режим_="Сум":
    СубФильтр_="ВД='"+Расшифр[Iter].ВД+"' and КБК='"+Расшифр[Iter].КБК+"' and Призн='"+Расшифр[Iter].Призн+"'";
   else
    if Аванс:
       if flagОКДП: СубФильтр_="ОКДП_Гр='"+Расшифр[Iter].ОКДП_Гр+"'"; else ^False; fi;
       Режим_="Сум";
       isКол=True;
      else
       if Расшифр[Iter].ТМЦ=nil:
	  СубФильтр_="ТМЦ16="+Str(Расшифр[Iter].ТМЦ16)+" and ЕдИзм='"+Расшифр[Iter].ЕдИзм+"' and Цена="+Str(Расшифр[Iter].ЦенаДоговор,2);
	 else
	  СубФильтр_="ТМЦ="+RecordToString(Расшифр[Iter].ТМЦ)+" and ЕдИзм='"+Расшифр[Iter].ЕдИзм+"' and Цена="+Str(Расшифр[Iter].ЦенаДоговор,2);
       fi;
    fi;
 fi;
 --nn=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Договор="+RecordToString(Договор)+" and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"Аванс","not Аванс"),СубФильтр_,Режим_,False);
 if Зачет_КЗ>0:
    nn=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and not UKey="+RecordToString(Current)+" and ДО="+RecordToString(ДО),СубФильтр_,ДатаРег,Режим_,False);
   else
    nn=Раб.Договор.ДО_СумКол("Рег and ДатаРег<="+DateToString(ДатаРег)+" and Pos('"+Up(Договор.Признак)+".',Up(Признак))=1 and not UKey="+RecordToString(Current)+" and (ТекГод='"+ТекГод+"' or (ТекГод='' and Year(ДатаРег)="+ТекГод+")) and "+if(Аванс,"Аванс","not Аванс"),СубФильтр_,ДатаРег,Режим_,False);
 fi;
 for n=1..Iter-1 do
  if Режим_="Сум" and not isКол:
     if Расшифр[Iter].ВД=Расшифр[n].ВД and
	Расшифр[Iter].КБК=Расшифр[n].КБК and
	Расшифр[Iter].Призн=Расшифр[n].Призн:
	nn=nn+1;
	Раб.Договор.lstТекст[nn]="+ Текущий документ, строка";
	Раб.Договор.lstСум[nn]=Расшифр[n].СумСНДС;
	Раб.Договор.lstНомДок[nn]=Str(n);
     fi;
    else
     if ((flagТМЦ and
	Расшифр[Iter].ТМЦ=Расшифр[n].ТМЦ and
	Расшифр[Iter].Предм1=Расшифр[n].Предм1 and
	Расшифр[Iter].Предм2=Расшифр[n].Предм2 and
	Расшифр[Iter].Предм3=Расшифр[n].Предм3 and
	Расшифр[Iter].Предм4=Расшифр[n].Предм4 and
	Расшифр[Iter].ЦенаДоговор=Расшифр[n].ЦенаДоговор and
	Расшифр[Iter].ЕдИзм=Расшифр[n].ЕдИзм) or
	not flagТМЦ) and
	((Аванс and 
	Расшифр[Iter].ОКДП_Гр=Расшифр[n].ОКДП_Гр) or
	(not Аванс and 
	((flagОКДП and
	Расшифр[Iter].ОКДП_Гр=Расшифр[n].ОКДП_Гр and 
	Расшифр[Iter].ОКДП=Расшифр[n].ОКДП) or
	not flagОКДП))):
	nn=nn+1;
	Раб.Договор.lstТекст[nn]="+ Текущий документ, строка";
	if Режим_="Сум":
	   Раб.Договор.lstСум[nn]=Расшифр[n].СумСНДС;
	  else
	   Раб.Договор.lstКол[nn]=Расшифр[n].Кол;
	   Раб.Договор.lstЕдИзм[nn]=Lo(Расшифр[n].ЕдИзм);
	fi;
	Раб.Договор.lstНомДок[nn]=Str(n);
     fi;
  fi;
 od;
 if nn=0:
    Message("Зарегистрованных обязательств на дату "+DateToString(ДатаРег)+" не найдено");
    ^False;
 fi;
 ClearVariable(Buf);
 for n=1..nn do
  Buf[n]=Раб.Договор.LstТекст[n]+" №"+Раб.Договор.lstНомДок[n]+if(Раб.Договор.lstДатДок[n]=1.1.100,""," от "+DateToString(Раб.Договор.lstДатДок[n]))+" =";
  if Режим_="Кол":
     Buf[n]=Buf[n]+Format("%.2N",Раб.Договор.lstКол[n])+" "+Раб.Договор.lstЕдИзм[n];
    else
     Buf[n]=Buf[n]+Format("%.2N",Раб.Договор.lstСум[n])+" "+Вал;
  fi;
 od;
 n=Alternate("Принятые обязательства на "+DateToString(ДатаРег),Buf,-1,1,12);
 if not n=0:
    if Раб.Договор.lstДок[n]=nil: 
       Template.Field=Режим_;
       Template.Frame=Int(Раб.Договор.lstНомДок[n]);
      else
       if EnqOkCancel("Перейти на выбранный документ ?",mtWarning)=cmOk:
	  OpenBlank(blnДО,False,Раб.Договор.lstДок[n]);
       fi;
    fi;
 fi;
 Return False;
end;

Func ЦенаКол_OnEnter(FieldName: String; Iter: Integer): logical;
 if Аванс: Message("Для аванса указывать "+if(FieldName="Цена":"цену"|FieldName="Кол":"количество"|True:"единицу измерения")+" не требуется"); fi;
 Return not Аванс;
end;

Proc ЕдИзм_OnExit(FieldName: String; Iter: Integer);
 Расшифр[Iter].ЕдИзм=Lo(Расшифр[Iter].ЕдИзм);
 Переход(FieldName,Iter);
end;

Func ЕдИзм_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Iter:I;
 Template.HideEditor(False);
 if fОКЕИ=0: fОКЕИ=Раб.Договор.ЗагрузСправ("РПО_ОКЕИ",PlanVar("Std_Rpo")+"\DBF\РПО_ОКЕИ",ieCRD,"Загрузить справочник единиц измерений ОКЕИ ?"); fi;
 if fОКЕИ=1:
    Iter=AsInteger(Template.Frame);
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор из классификатора ОКЕИ","РПО_ОКЕИ","ВИД|КОД|НАИМЕНОВАНИЕ|НУО|МУО|НКБО|МКБО","Группа (длина,площадь,объем,масса,техн,время,экон)|Код|Наименование|Нацинальное условное обозначение|Международное условное обозначение|Национальное кодовое буквенное обозначение|Международное кодовое буквенное обозначение","");
    if Rec=nil: ^Cur; fi;
    Расшифр[Iter].ЕдИзм=Lo(GetCardFieldS("РПО_ОКЕИ",Rec,"НКБО"));
    Переход(AsString(Template.Field),Iter);
 fi;
 Return Cur;
end;

Func СумСНДС_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 if Расшифр=1 and Расшифр[1].СумСНДС=0:
    Cur=Str(СумДок,2);
   else
    Cur=Str(Calculator,2);
 fi;
 Return Cur;
end;

Proc Сум_OnExit(FieldName: String; Iter: Integer);
 ПересчетСум(FieldName,Iter);
 Переход(FieldName,Iter);
end;

Func НДС_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 НеПустаяТаблица;
 ClearVariable(Buf);
 Buf[1]="НДС=18 %";
 Buf[2]="НДС=10 %";
 Buf[3]="НДС=0 %";
 Buf[4]="Без НДС";
 n=Alternate("Ставка НДС",Buf,20,1,12);
 if n=1: Расшифр[Iter].НДС=18;
   |n=2: Расшифр[Iter].НДС=10;
   |n=3: Расшифр[Iter].НДС=0;
   |n=4: Расшифр[Iter].НДС=-1;
   |True: ^False;
 fi;
 hНДС=Str(Расшифр[Iter].НДС,2);
 ПересчетСум(FieldName,Iter);
 Переход(FieldName,Iter);
 Return False;
end;

Proc НДС_OnExit(FieldName: String; Iter: Integer);
 Расшифр[Iter].НДС=-1;
 hНДС="-1";
 ПересчетСум(FieldName,Iter);
 Переход(FieldName,Iter);
end;

Func ВыделятьНДС_OnEnter(FieldName: String; Iter: Integer): logical;
 НеПустаяТаблица;
 if Расшифр[Iter].КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 if not Расшифр[Iter].ВД="2": Message("Выделять НДС для данного вида деятельности ("+Расшифр[Iter].ВД+") не требуется"); ^False; fi;
 Расшифр[Iter].ВыделятьНДС=not Расшифр[Iter].ВыделятьНДС;
 hВыделятьНДС=Расшифр[Iter].ВыделятьНДС;
 Переход(FieldName,Iter);
 Return False;
end;

Proc СчФ_Ном_OnExit(FieldName: String; Iter: Integer);
 hСчФ_Ном=Расшифр[Iter].СчФ_Ном;
 Переход(FieldName,Iter);
end;

Proc СчФ_Дат_OnExit(FieldName: String; Iter: Integer);
 hСчФ_Дат=Расшифр[Iter].СчФ_Дат;
 Переход(FieldName,Iter);
end;

Proc СчФ_Ном_OnClick(Row: Integer; Col: Integer; Double: Logical);
var i:I;
 i=AsInteger(Template.Frame);
 if Позиции_НДС[i].СЧФ_Ключ<>0 then
    OpenBlank("Документы.Счета.СчетаФактПост",True,IntegerToRecord(Позиции_НДС[i].СЧФ_Ключ));
 fi;
end;

Func СчДеб_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Расшифр[Iter].КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 if Аванс: Template.Field="Опер_"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].СчДеб="" and not Расшифр[Iter].ВидОпер="*" and not Расшифр[Iter].ВидОпер="": ОбновитьСч(Iter); fi;
 if not Расшифр[Iter].ВидОпер="*": Message("Для выбора вручную счета дебета выберите в тип операции 'Выбор из плана счетов'",mtError); Template.Field="Опер_"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].СчДеб="" and not hСчДеб="":
    if Correspond(hСчДеб,Расшифр[Iter].СчКре): Расшифр[Iter].СчДеб=hСчДеб; fi;
 fi;
 tmp=PickCorrAccount(Расшифр[Iter].СчКре,True);
 if not tmp="":
    Расшифр[Iter].СчДеб=tmp;
    hСчДеб=Расшифр[Iter].СчДеб;
 fi;
 Return False;
end;

Func СчКре_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Расшифр[Iter].КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; ^False; fi;
 if not Аванс: Template.Field="Опер_"; Template.Frame=Iter; ^False; fi;
 if Аванс and not Расшифр[Iter].ВидОпер="00" and not Расшифр[Iter].ВидОпер="*": Message("Для аванса счет кредита указывать не требуется",mtError); Template.Field="Опер_"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].СчКре="" and not Расшифр[Iter].ВидОпер="*" and not Расшифр[Iter].ВидОпер="": ОбновитьСч(Iter); fi;
 if not Расшифр[Iter].ВидОпер="*": Message("Для выбора вручную счета кредита выберите в тип операции 'Выбор из плана счетов'",mtError); Template.Field="Опер_"; Template.Frame=Iter; ^False; fi;
 if Расшифр[Iter].СчКре="" and not hСчКре="":
    if Correspond(Расшифр[Iter].СчДеб,hСчКре): Расшифр[Iter].СчКре=hСчКре; fi;
 fi;
 tmp=PickCorrAccount(Расшифр[Iter].СчДеб,False);
 if not tmp="":
    Расшифр[Iter].СчКре=tmp;
    hСчКре=Расшифр[Iter].СчКре;
 fi;
 Return False;
end;

Func СчКорр_Аннул_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Аванс:
    if Расшифр[Iter].СчДеб="": Message("Введите счет дебета",mtError); Template.Field="СчДеб"; Template.Frame=Iter; fi;
    if Расшифр[Iter].СчКорр_Аннул="" and not hСчКорр_Аннул="":
       if Correspond(Расшифр[Iter].СчДеб,hСчКорр_Аннул): Расшифр[Iter].СчКорр_Аннул=hСчКорр_Аннул; ^False; fi;
    fi;
    tmp=PickCorrAccount(Расшифр[Iter].СчДеб,False);
   else
    if Расшифр[Iter].СчДеб="": Message("Введите счет кредита",mtError); Template.Field="СчКре"; Template.Frame=Iter; fi;
    if Расшифр[Iter].СчКорр_Аннул="" and not hСчКорр_Аннул="":
       if Correspond(hСчКорр_Аннул,Расшифр[Iter].СчКре): Расшифр[Iter].СчКорр_Аннул=hСчКорр_Аннул; ^False; fi;
    fi;
    tmp=PickCorrAccount(Расшифр[Iter].СчКре,True);
 fi;
 if not tmp="":
    Расшифр[Iter].СчКорр_Аннул=tmp;
    hСчКорр_Аннул=Расшифр[Iter].СчКорр_Аннул;
 fi;
 Return False;
end;

Proc Сч_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Сч_,Field:S;
var Iter:I;
 Iter=AsInteger(Template.Frame);
 Field=AsString(Template.Field);
 if Расшифр[Iter].КБК="": Message("Выберите КБК",mtError); Template.Field="КБК"; Template.Frame=Iter; Exit; fi;
 if Field="СчКре" and Аванс and not Расшифр[Iter].ВидОпер="00" and not Расшифр[Iter].ВидОпер="*": Message("Для аванса счет кредита указывать не требуется",mtError); Template.Field="Опер_"; Template.Frame=Iter; Exit; fi;
 if (Field="СчДеб_ДО" or Field="СчКре_ДО") and НеПровДО: Message("Проводки по ДО (502.x1/502.x2) не формируются, т.к. установлен флаг 'Не формировать проводки по денежным обязательствам'",mtWarning); Template.Object="cbНеПровДО"; Exit; fi;
 Раб.КСА.Начать;
 Раб.КСА.Добавить(Расшифр[Iter].СчДеб);
 Раб.КСА.Добавить(Расшифр[Iter].СчКре);
 Раб.КСА.Добавить(Расшифр[Iter].СчКорр_Аннул);
 if Аванс:
    Сч_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчДеб,"","АН",True)+".660";
   else
    Сч_=Раб.Бюджет2005.ВзятьКодСчета(Расшифр[Iter].СчКре,"","АН",True)+".830";
 fi;
 Раб.КСА.Добавить(Сч_);
 Раб.КСА.Добавить(СчДеб_ДО[Iter]);
 Раб.КСА.Добавить(СчКре_ДО[Iter]);
 if Раб.КСА.Закончить(True):
    Message("Добавление счетов завершено");
 fi;
end;

Func Сум_Аннул_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter: I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 Расшифр[Iter].Кол_Аннул=Расшифр[Iter].Кол;
 Расшифр[Iter].Сум_Аннул=Расшифр[Iter].СумСНДС;
 Расшифр[Iter].СумРуб_Аннул=Расшифр[Iter].СумРубСНДС;
 Return Cur;
end;

Func РедГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="СканГЭК" and СканГЭК="":
    Template.Field="РедГЭК";
    ^False;
 fi;
 if not Рег:
    if not Настр.Общ_Справ1="" and Общ_Призн1="": Страница=0; ВывестиСтраницу; Message("Введите "+Настр.Общ_Справ_Наим1,mtError); Template.Field="Общ_Призн1"; ^False; fi;
    if not Настр.Общ_Справ2="" and Общ_Призн2="": Страница=0; ВывестиСтраницу; Message("Введите "+Настр.Общ_Справ_Наим2,mtError); Template.Field="Общ_Призн2"; ^False; fi;
    if not CurrentState=CrdusUnmodified:
       EditorApply;
    fi;
 fi;
 Раб.Вспом.Сканер.extПапка=if(not Настр.Общ_Справ1="" and Настр.Общ_Справ_ГЭК1,Up(Общ_Призн1)+"\","");
 Раб.Вспом.Сканер.vКлюч=if(not Настр.Общ_Справ1="" and Настр.Общ_Справ_ГЭК1,Up(Общ_Призн1),"");
 Раб.Вспом.Сканер.extПапка=Раб.Бюджет2005.Объединить(Раб.Вспом.Сканер.extПапка,if(not Настр.Общ_Справ2="" and Настр.Общ_Справ_ГЭК2,Up(Общ_Призн2)+"\",""),"\");
 Раб.Вспом.Сканер.vКлюч=Раб.Бюджет2005.Объединить(Раб.Вспом.Сканер.vКлюч,if(not Настр.Общ_Справ1="" and Настр.Общ_Справ_ГЭК1,Up(Общ_Призн1),""),"#");
 Раб.Вспом.Сканер.Exec=if(FieldName="СканГЭК" or FieldName="СканГЭКD","btnСканСлед_onClick","");
 Раб.Вспом.Сканер.ExecSender=if(FieldName="СканГЭК":"btnСканСлед"|FieldName="СканГЭКD":"btnСканСлед2"|True:"");
 Раб.Вспом.Сканер.Вызвать("Сканирование денежного обязательства",crdДО,RecordToInteger(Current),"",Рег,FieldName="РедГЭК");
 УпрНастр=УпрНастр;
 РасчетГЭК;
 Return False;
end;

Func ОбновГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетГЭК;
 Return False;
end;

Func ГЭКвPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var nn,i:i;
var File:S;
 nn=Раб.Вспом.Сканер.ЧитатьГЭК(crdДО,RecordToInteger(Current),"jpg",True);
 if nn=0: Message("Нет данных для формирования PDF"); ^False; fi;
 if ПутьPDF="":
    if ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF")=cmCancel: ^False; fi;
    File=ПутьPDF;
    ПутьPDF="";
   else
    File=ПутьPDF;
 fi;
 File=Раб.Бюджет2005.Контроль2Слэш(File+"\"+НаимДок.Наим+" №"+Раб.Договор.ConvertStr(НомерДок)+" от "+Раб.Договор.ConvertStr(DateToString(ДатаДок))+".pdf");
 if ExistFile(File):
    if EnqOkCancel("Файл "+File+" уже существет. Перезаписать ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 i=Раб.Вспом.Сканер.JpegToPdf(File,False);
 if i=1: 
    ExecuteProgram('"'+File+'"'); 
   else
    Message("Ошибка создания PDF файла ("+Str(i)+")");
 fi;
 Return False;
end;

Func ПутьPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var i:I;
 if AsLogical(S13.Cell(5,5,CellReadOnly,"")):
    i=ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF");
    ^False;
 fi;
 Return True;
end;

Func ПутьPDF_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var i:i;
 Template.HideEditor(False);
 i=ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF");
 Return Cur;
end;

Func ОбновСвязДок_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетСвязДок;
 Return False;
end;

Func СвязДок_onEnter(FieldName: String; Iter: Integer): logical;
 if ДокTr[Iter]=-1:
    OpenCardFile(ДокCrd[Iter],"",ДокRec[Iter]);
   else
    TransOpenJur(ДокTr[Iter]);
 fi;
 Return False;
end;

Proc СвязДок_onClick(Row: Integer; Col: Integer; Double: Logical);
 СвязДок_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
end;

hПривязкаСканГЭК2:I;

Func СканГЭК2_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
var Bln,Crd,НаимДок_,НомДок_,Кмнт_:S;
var ДатДок_:D;
var Rec: Record;
 if Рег and Match(FieldName,"СканГЭК2*"): ^False; fi;
 if not Настр.Общ_Справ1="" and Общ_Призн1="": ^НаОшибку("Введите "+Настр.Общ_Справ_Наим1,mtError,2,"Общ_Призн1",1); fi;
 if not Настр.Общ_Справ2="" and Общ_Призн2="": ^НаОшибку("Введите "+Настр.Общ_Справ_Наим2,mtError,2,"Общ_Призн2",1); fi;
 if Match(FieldName,"СканГЭК2*"): EditorApply; fi;
 if УчетБО or Рег or not Match(FieldName,"СканГЭК2*"):
    Crd=crdДО; Rec=Current; НаимДок_=НаимДок.Наим; НомДок_=НомерДок; ДатДок_=ДатаДок;
   else
    if Договор=nil: ^НаОшибку("Выберите договор, контракт...",mtError,2,"Договор_",1); fi;
    if FieldName="СканГЭК2" or (Match(FieldName,"СканГЭК2*") and hПривязкаСканГЭК2=0):
       ClearVariable(Buf);
       Buf[1]="Привязать сканирование к текущему документу";
       Buf[2]="Привязать сканирование к "+Договор_;
       n=Alternate("Выберите документ",Buf,-1,1,12);
      else
       n=hПривязкаСканГЭК2;
    fi;
    if n=1: Crd=crdДО; Rec=Current; НаимДок_=НаимДок.Наим; НомДок_=НомерДок; ДатДок_=ДатаДок;
      |n=2: Crd=crdДоговор_Признак; Rec=Договор.Признак_Ref; НаимДок_=Договор.НаимДок.Наим; НомДок_=Договор.НомерДок; ДатДок_=Договор.ДатаДок;
      |True: ^False;
    fi;
    hПривязкаСканГЭК2=n;
 fi;
 bln="Раб.Вспом.Скан_Док";
 if ModalMode and isBlankOpen(bln): Message("Бланк сканирование уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
 if isBlankOpen(bln): Close(bln); fi;
 if FieldName="СканГЭК2_" or FieldName="СканГЭК2D":
    Кмнт_=GetVariableS(bln+".hКмнт");
    if Кмнт_="":
       Message("Необходимо ввести хотя бы один раз комментарий",mtError);
      else
       PutVariableL(bln+".Auto",True);
    fi;
    PutVariableS(bln+".hСканГЭК",if(FieldName="СканГЭК2_","СканГЭК","СканГЭК2"));
 fi;
 ExecuteProc(bln+".Вызвать",Рег,ToDay,Crd,Rec,НаимДок_,НомДок_,ДатДок_,Кмнт_,True,if(Match(FieldName,"СканГЭК2*"),nil,ГЭК2Rec[Iter]));
 РасчетГЭК2;
 Return False;
end;

Func ОбновГЭК2_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетГЭК2;
 Return False;
end;

Func ГЭК2вPDF_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
var File:S;
 РасчетГЭК2;
 if УпрГЭК2=0: Message("Нет данных для формирования PDF"); ^False; fi;
 for Iter=1..УпрГЭК2 do
  i=Раб.Вспом.Сканер.ЧитатьГЭК("РПО_СКАН_ДОК",RecordToInteger(ГЭК2Rec[Iter]),"jpg",Iter=1);
 od;
 if i=0: Message("Нет данных для формирования PDF"); ^False; fi;
 if ПутьPDF="":
    if ChooseFolder(ПутьPDF,"Выберите папку для хранения PDF")=cmCancel: ^False; fi;
    File=ПутьPDF;
    ПутьPDF="";
   else
    File=ПутьPDF;
 fi;
 File=Раб.Бюджет2005.Контроль2Слэш(File+"\"+НаимДок.Наим+" №"+Раб.Договор.ConvertStr(НомерДок)+" от "+Раб.Договор.ConvertStr(DateToString(ДатаДок))+".pdf");
 if ExistFile(File):
    if EnqOkCancel("Файл "+File+" уже существет. Перезаписать ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 i=Раб.Вспом.Сканер.JpegToPdf(File,False);
 if i=1: 
    ExecuteProgram('"'+File+'"'); 
   else
    Message("Ошибка создания PDF файла ("+Str(i)+")");
 fi;
 Return False;
end;

Func ГЭК2_onEnter(FieldName: String; Iter: Integer): logical;
 СканГЭК2_OnEnter(FieldName,Iter);
 Return False;
end;

Proc ГЭК2_onClick(Row: Integer; Col: Integer; Double: Logical);
 СканГЭК2_OnEnter(AsString(Template.Field),AsInteger(Template.Frame));
end;

Func ОбновБухСправ_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетБухСправ;
 Return False;
end;

Func СоздатьБухСправ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var isАннул,isДО:L;
 if not Рег: Message("Вначале необходимо принять денежное обязательство к учету",mtError); Template.Object="cbРег"; ^False; fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 РасчетБухСправ;
 isАннул=False; isДО=False;
 for n=1..УпрБух do
  if БухАннул[n]: isАннул=True; else isДО=True; fi;
 od;
 Buf[1]="Д";   Buf2[1]="Сформировать бух.справку на принятие к учету денежного обязательства";
 Buf[2]="А";   Buf2[2]="Сформировать бух.справку на аннулирование денежного обязательства";
 Buf[3]="Д+А"; Buf2[3]="Сформировать бух.справку на принятие к учету ДО + аннулирование";
 if isАннул or not Аннул: DeleteFromArray(Buf,3); DeleteFromArray(Buf,2); DeleteFromArray(Buf2,3); DeleteFromArray(Buf2,2);
   |isДО: DeleteFromArray(Buf,1); DeleteFromArray(Buf2,1); DeleteFromArray(Buf,2); DeleteFromArray(Buf2,2);
 fi;
 n=Alternate("Выберите режим формирования справки",Buf2,-1,1,12);
 if n=0: ^False;
   |Buf[n]="Д": БухСправка("СоздатьБухСправ",False);
   |Buf[n]="А": БухСправка("СоздатьБухСправ",True);
   |Buf[n]="Д+А":  БухСправка("СоздатьБухСправ",False); БухСправка("СоздатьБухСправ",True);
 fi;
 РасчетБухСправ;
 Return False;
end;

Func БухСправ_onEnter(FieldName: String; Iter: Integer): logical;
 if isBlankOpen("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА"):
    if ModalMode: Message("Бухгалтерская справка уже открыта. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
    Close("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА");
 fi;
 OpenBlank("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА",True,БухRec[Iter]);
 Return False;
end;

Proc БухСправ_onClick(Row: Integer; Col: Integer; Double: Logical);
 БухСправ_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
end;

Func ОчистПров_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Рег:
    if EnqOkCancel("Очистить таблицу дополнительных проводок ?",mtWarning)=cmOk:
       ClearVariable(ПровДоп);
    fi;
 fi;
 ^False;
end;

Func Aпров_onEnter (Field:S; Iter:I):L;
var i:i;
 if Рег: ^False; fi;
 i=Iter;
 Iter=InsertFrame(ПровДоп,Iter+1);
 if Field="AA":
    ПровДоп[Iter].Сум=ПровДоп[i].Сум;
    ПровДоп[Iter].СумРуб=ПровДоп[i].СумРуб;
    ПровДоп[Iter].СчДеб=ПровДоп[i].СчДеб;
    ПровДоп[Iter].СчКре=ПровДоп[i].СчКре;
    ПровДоп[Iter].Призн=ПровДоп[i].Призн;
    ПровДоп[Iter].ПризнКол=ПровДоп[i].ПризнКол;
    ПровДоп[Iter].Предм1=ПровДоп[i].Предм1;
    ПровДоп[Iter].Кол=ПровДоп[i].Кол;
 fi;
 ^False;
end;

Func Dпров_onEnter (Field:S; Iter:I):L;
 if Рег: ^False; fi;
 DeleteFrame(ПровДоп,Iter);
 ^False;
end;

Func СчДебПров_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица2;
 if ПровДоп[Iter].СчДеб="" and not hСчДеб2="":
    if Correspond(hСчДеб2,ПровДоп[Iter].СчКре): ПровДоп[Iter].СчДеб=hСчДеб2; fi;
 fi;
 tmp=PickCorrAccount(ПровДоп[Iter].СчКре,True);
 if not tmp="":
    ПровДоп[Iter].СчДеб=tmp;
    hСчДеб2=ПровДоп[Iter].СчДеб;
 fi;
 if not ПровДоп[Iter].СчДеб="" and not ПровДоп[Iter].СчКре="":
    tmp=Раб.Бюджет.НаборПризнаков(ПровДоп[Iter].СчДеб,ПровДоп[Iter].СчКре,"");
    ПровДоп[Iter].Призн=Раб.Бюджет.МухиОтКотлет(ПровДоп[Iter].Призн,tmp);
 fi;
 Return False;
end;

Func СчКреПров_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 НеПустаяТаблица2;
 if ПровДоп[Iter].СчКре="" and not hСчКре2="":
    if Correspond(ПровДоп[Iter].СчДеб,hСчКре2): ПровДоп[Iter].СчКре=hСчКре2; fi;
 fi;
 tmp=PickCorrAccount(ПровДоп[Iter].СчДеб,False);
 if not tmp="":
    ПровДоп[Iter].СчКре=tmp;
    hСчКре2=ПровДоп[Iter].СчКре;
 fi;
 if not ПровДоп[Iter].СчДеб="" and not ПровДоп[Iter].СчКре="":
    tmp=Раб.Бюджет.НаборПризнаков(ПровДоп[Iter].СчДеб,ПровДоп[Iter].СчКре,"");
    ПровДоп[Iter].Призн=Раб.Бюджет.МухиОтКотлет(ПровДоп[Iter].Призн,tmp);
 fi;
 Return False;
end;

Func ПризнПров_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var tmp:S;
 НеПустаяТаблица2;
 if ПровДоп[Iter].СчДеб="": Message("Выберите счет дебета",mtError); Template.Field="СчДеб "; Template.Frame=Iter; ^False; fi;
 if ПровДоп[Iter].СчКре="": Message("Выберите счет кредита",mtError); Template.Field="СчКре "; Template.Frame=Iter; ^False; fi;
 if FieldName="ПризнПров__":
    if Расшифр=0: ^НаОшибку("Заполните расшифровку обязательства",mtError,3,"КБК",1); fi;
    ClearVariable(Buf);
    for n=1..Расшифр do
     if not Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп)="":
	AddInArray(Buf,True,False,Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнДоп));
     fi;
    od;
    if Buf[1]="": ^НаОшибку("Заполните расшифровку обязательства",mtError,3,"КБК",1); fi;
    n=Alternate("Выберите аналит. признаки",Buf,-1,1,12);
    if not n=0:
       tmp=Раб.Бюджет.НаборПризнаков(ПровДоп[Iter].СчДеб,ПровДоп[Iter].СчКре,"");
       ПровДоп[Iter].Призн=Раб.Бюджет.МухиОтКотлет(Buf[n],tmp);
    fi;
   else
    tmp=Раб.Бюджет2005.ПризнВСправ(Trim(Общ_Призн1+" "+Общ_Призн2)," ",".*");
    tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
    tmp=Раб.Бюджет2005.Объединить(ИсклПризн,tmp,"|");
    tmp=Раб.Бюджет2005.СписокСправ(ПровДоп[Iter].СчДеб+"|"+ПровДоп[Iter].СчКре,0,tmp);
    if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
    tmp=AnaElection(tmp+"|*&~*.*",False,False,hПризн2);
    if not tmp="":
       hПризн2=tmp;
       tmp=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(ПровДоп[Iter].Призн," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
       ПровДоп[Iter].Призн=tmp;
    fi;
 fi;
 Return False;
end;

Proc ПризнПров_OnExit(FieldName: String; Iter: Integer);
 НеПустаяТаблица2;
 ПровДоп[Iter].Призн=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(ПровДоп[Iter].Призн," ","Name_A");
end;

Func Сум_АннулПров_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter: I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 ПровДоп[Iter].Кол_Аннул=ПровДоп[Iter].Кол;
 ПровДоп[Iter].Сум_Аннул=ПровДоп[Iter].Сум;
 ПровДоп[Iter].СумРуб_Аннул=ПровДоп[Iter].СумРуб;
 Return Cur;
end;

Proc СоздатьИспДок_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Rec: Record;
 if Рег or not Исп_Док=nil or not Договор=nil: Exit; fi;
 if EnqOkCancel("Создать карточку исполнительного документа ?")=cmOk:
    PutVariableR("Инфо.ИспДок.inКонтр",Контр);
    PutVariableR("Инфо.ИспДок.inКонтр_Банк",Контр_Банк);
    OpenBlank("ИНФО.ИСПДОК",True,nil);
    Rec=GetVariableR("ИНФО.ИСПДОК.SelfRecord");
    if not Rec=nil:
       Исп_Док=Rec;
       СинхроПризнИспДок;
    fi;
 fi;
end;

Func Исп_Док_Признак_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор исполнительного документа...","РПО_ИСПДОК","НомДок|НомУвед","Номер документа|Номер уведомления","not Признак=''");
 if not Rec=nil:
    Исп_Док=Rec;
    СинхроПризнИспДок;
 fi;
 Return False;
end;

Proc Исп_Док_Признак_OnExit(FieldName: String; Iter: Integer);
 Исп_Док=nil;
 СинхроПризнИспДок;
end;

Proc Исп_Док_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if Double and not Исп_Док=nil:
    OpenBlank("ИНФО.ИСПДОК",True,Исп_Док);
 fi;
end;

Proc ОтчИспДок_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:S;
 if Исп_Док_Признак_="":
    Message("Выберите аналитический признак исполнительного документа",mtWarning); Template.Field="Исп_Док_Признак_";
   else
    bln="ОТЧЕТЫ.СПРАВКИ.ИСПДОК";
    PutVariableD(bln+".ДК",ToDay+1);
    PutVariableS(bln+".ПризнДоп",Исп_Док_Признак_);
    PutVariableL(bln+".Run",True);
    OpenBlank(bln,True);
 fi;
end;

Proc ОтчИспДок2_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if Исп_Док_Признак_="":
    Message("Выберите аналитический признак исполнительного документа",mtWarning); Template.Field="Исп_Док_Признак_";
   else
    Refresh;
    Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"",Исп_Док_Признак_);
 fi;
end;

Proc Field_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
var Iter:I;
var Flag:L;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 if Double:
    Flag=ExecuteFuncL(Field+"_onEnter",Field,Iter);
 fi;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnНастр_OnClick(Sender: String);
 ОткрНастр(True);
end;

Proc cbРег_onChange(Sender: String);
var Удачно:L;
var Msg:S;
 if Рег:
    if not УчетТМЦ=flagТМЦ or not УчетОКДП=flagОКДП:
       УчетТМЦ=flagТМЦ;
       УчетОКДП=flagОКДП;
    fi;
    Удачно=True;
    Рег=Проверить;
    if УчетБО and Удачно=Рег and Year(ДатаРег)=Int(ТекГод):
       Рег=СведБО(Рег);
    fi;
    if Рег:
       Рег=ПроверитьКакДО;
    fi;
    Удачно=Рег;
   else
    if Страница=7: РасчетСвязДок; else Страница=7; ВывестиСтраницу; fi;
    if not УпрДок=0: Message("Признак документа (ДОГОВОР."+Признак+") используется в проводках"+Chr(13)+"Исключение документа из обработки может привести к ошибке",mtWarning); fi;
    if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
       EditorCancel;
       cbРег.State=Рег;
       Exit;
      else
       Рег=not СведБО(Рег);
    fi;
    Удачно=not Рег;
    if УпрДок=0: Страница=2; ВывестиСтраницу; fi;
 fi;
 cbРег.State=Рег;
 Оформление;
 if Удачно then
    СборСФ;
    EditorApply;
    СверткаСФ;
    if ОбновСФ:
       ОбновКлСФ;
    fi;
    EditorApply;
 fi;

end;

Proc cbУчетБО_OnChange(Sender: String);
var Iter:I;
 if ПризнакИспользуется(Sender):
    УчетБО=not УчетБО;
    cbУчетБО.State=УчетБО;
    Exit;
 fi;
 if УчетБО:
    if not Договор=nil:
       if EnqOkCancel("Документ будет переведен из режима 'От договора' в режим 'Бюджетного обязательства', часть данных будет очищена^MВы уверены ?",mtWarning)=cmCancel: УчетБО=not УчетБО; cbУчетБО.State=УчетБО; Exit; fi;
    fi;
    ТекГод=Str(Year(ДатаРег));
    Договор=nil;
    Договор_GUID="";
    if Учр=nil:
       Учр=Настр.Учр;
       Учр_Банк=Настр.Учр_Банк;
       ДолжнРук=Настр.ДолжнРук;
       ФиоРук=Настр.ФиоРук;
       if Учр=nil: Учр=Раб.Бюджет2005.НашРекв; fi;
       if not Учр=nil:
	  if Учр_Банк=nil: Учр_Банк=Раб.Бюджет2005.БанкСчет(Учр,False); fi;
	  if ДолжнРук="": ДолжнРук=GetCardFieldS("Контрагент",Учр,"ДолжнРук"); fi;
	  if ФИОРук="": ФИОРук=GetCardFieldS("Контрагент",Учр,"ФИОРук"); fi;
       fi;
    fi;
   else
    if EnqOkCancel("Документ будет переведен из режима 'Бюджетного обязательства' в режим 'От договора', часть данных будет очищена^MВы уверены ?",mtWarning)=cmCancel: УчетБО=not УчетБО; cbУчетБО.State=УчетБО; Exit; fi;
    Контр=nil;
    Контр_Призн="";
    Контр_Банк=nil;
 fi;
 for Iter=1..Расшифр do
  if УчетБО:
     Расшифр[Iter].ПризнДоп=Раб.Бюджет2005.Объединить(Расшифр[Iter].Призн,Расшифр[Iter].ПризнДоп," ");
     Расшифр[Iter].Призн="";
  fi;
 od;
 ОбновитьСч(-1);
 Оформление;
end;

Proc cbУчетБО_ФК_OnChange(Sender: String);
 if УчетБО_ФК and БО_GUID_FK="":
    БО_GUID_FK=Раб.Бюджет2005.MyGUID("FK");
    EditorApply;
 fi;
end;

Proc cbАннул_OnChange(Sender: String);
var Flag:L;
 if Рег:
    if Аннул:
       Flag=True;
       Аннул=ПроверитьАннул;
       if Аннул and УчетБО and Year(ДатаРег)=Year(Аннул_ДатаСвед): Аннул=СведБО(True); fi;
      else
       Flag=False;
       if УчетБО: Аннул=not СведБО(True); fi;
    fi;
    cbАннул.State=Аннул;
    if Flag=Аннул:
       EditorApply;
       if Flag and УчетБО and Year(ДатаРег)=Year(Аннул_ДатаСвед): НаОшибку("",0,6,"БО_Изм_",1); fi;
    fi;
    Оформление;
 fi;
end;

Proc cbАванс_OnChange(Sender: String);
var Iter:I;
 for Iter=1..Расшифр do
  if Аванс: 
     Расшифр[Iter].ТМЦ=nil;
     Расшифр[Iter].Предм1="";
     Расшифр[Iter].Предм2="";
     Расшифр[Iter].Предм3="";
     Расшифр[Iter].Предм4="";
     Расшифр[Iter].ТМЦ16=0;
     Расшифр[Iter].ОКДП="";
     Расшифр[Iter].СумДоговор=0;
     Расшифр[Iter].КолДоговор=0;
     Расшифр[Iter].ЦенаДоговор=0;
     Расшифр[Iter].СумДО=0;
     Расшифр[Iter].КолДО=0;
     Расшифр[Iter].Цена=0;
     Расшифр[Iter].Кол=0;
     Расшифр[Iter].ЕдИзм="";
     Расшифр[Iter].ВыделятьНДС=False;
     ЦЗ=False;
     cbЦЗ.State=ЦЗ;
    else
     Расшифр[Iter].ВидОпер="";
  fi;
 od;
 Оформление;
 ОбновитьСч(-1);
end;

Proc cbЦЗ_OnChange(Sender: String);
var Iter:I;
 hЦЗ=ЦЗ;
 if ЦЗ:
    for Iter=1..Расшифр do
     if Match(Расшифр[Iter].ВидОпер,"105.??"):
	Расшифр[Iter].ВидОпер="106.34";
     fi;
    od;
 fi;
 Оформление;
 ОбновитьСч(-1);
end;

Proc cbУчетНДС_OnChange(Sender: String);
var Iter:I;
 if not УчетНДС:
    УчетНДС=EnqOkCancel("Данные по НДС будут очищены. Продолжить ?",mtWarning)=cmCancel;
    if not УчетНДС:
       for Iter=1..Расшифр do
	Расшифр[Iter].ВыделятьНДС=False;
	Расшифр[Iter].СчФ_Ном="";
	Расшифр[Iter].СчФ_Дат=1.1.100;
       od;
       ClearVariable(Позиции_НДС);
    fi;
    cbУчетНДС.State=УчетНДС;
 fi;
 Оформление;
 ВывестиСтраницу;
end;

Proc cbЗакрДок_OnChange(Sender: String);
 if not CurrentState=CrdusUnmodified: EditorApply; fi;
 Раб.Договор.УстанCMF("",crdДО,Current,not ClosedModFob,True);
 FlagInit=FlagInit;
 cbЗакрДок.State=ClosedModFob_;
 Оформление;
end;

Proc btnOK_onEnter (Obj:S);
 EditorApply;
end;

Proc btnОтмена_onEnter (Obj:S);
 if EnqOkCancel("Отменить внесенные изменения ?",mtWarning)=cmOk:
    Рег=Рег;
    EditorCancel;
 fi;
end;

Proc btnСписокОпл_OnClick(Sender: String);
var n:i;
 Раб.Договор.altЗагл="Список зарегистрированных оплат";
 Refresh(false);
 n=Раб.Договор.ДО_Оплата(Current,Dat(31,12,Year(ToDay)),"","","",True,True,True);
 if n=-1:
    Message("Зарегистрированных оплат не найдено");
   else
    if not n=0:
       if Раб.Договор.lstКарт[n]="":
	  TransOpenJur(RecordToInteger(Раб.Договор.lstДок[n]));
	 else
	  OpenCardFile(Раб.Договор.lstКарт[n],"",Раб.Договор.lstДок[n]);
       fi;
    fi;
 fi;
end;

Proc ОплатитьЗКР(Sender:S; ВД_:S; НДС_:S);
var OWA,OA,n,i,ii,Iter,verЗКР:I;
var Rec: Record;
var ПДИ:I;
var tmp,Key,ВДз:S;
var New,fGUID_FK,fРегБО:L;
var ДокОпл_,ДокОплРуб_:N;
 Refresh(False);
 ДокОпл_=Раб.Договор.lstСум[1];
 ДокОплРуб_=Раб.Договор.lstСумРуб[1];
 ПДИ=0;
 verЗКР=12;
 fGUID_FK=False;

 ВДз=if(ВД_='1':'1'|ВД_='5':'3'|True:'6');
 fРегБО=False;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР",0,0,"",GetGUID):
    ПДИ=Int(Раб.Настр.ВзятьЗначение("ПДИ"));
    fРегБО=(Раб.Настр.ВзятьЗначение("fРегБО")="True");
 fi;
 if Раб.Настр.Начать("УПРАВЛЕНИЕ.БАНК",0,0,"",GetGUID):
    if Int(Раб.Настр.ВзятьЗначение("Ver"))>=12: verЗКР=12; else verЗКР=7; fi;
 fi;
 if Раб.Настр.Начать(blnБО,0,0,"",GetGUID):
    fGUID_FK=(Раб.Настр.ВзятьЗначение("fGUID_FK")="True");
 fi;
 if fРегБО and ((УчетБО and БО.УчетФК and (БО.РегНомер="" or not БО.Рег)) or (not УчетБО and Договор.БО.УчетФК and (Договор.БО.РегНомер="" or not Договор.БО.Рег))):
    if EnqOkCancel("Для формирования ЗКР, бюджетное обязательство должно быть зарегистрировано в ФК (получен учетный номер)^MПродолжить формирование ЗКР ?",mtWarning)=cmCancel: Template.Field="БО_"; Exit; fi;
 fi;
 Rec=nil;
 New=False;
 n=Раб.Вспом.Заявка_КР_Реестр_Осн_Док.ВзятьЗКР(Current,НаимДок,НаимСчет,НомерСчет,ДатаСчет,Договор,Контр,Договор.БО,НДС_,ВДз,ЗКР_ДатаДок);
 Rec=IntegerToRecord(Abs(n));
 if n<0:
    Message("Текущий документ уже добавлен в реестр документов оснований ЗКР №"+GetCardFieldS("РПО_Заявка_КР",Rec,"НомерДок")+" от "+DateToString(GetCardFieldD("РПО_Заявка_КР",Rec,"ДатаДок")),mtError);
    Template.Object="btnРеестр";
    Exit;
 fi;
 if Sender="btnОплатить": Rec=nil; fi;
 if Rec=nil:
    i=Раб.Обл.СледСУчетомДаты("РПО_Заявка_КР","Номер","ДатаДок",ЗКР_ДатаДок);
 fi;
 OWA=OpenWorkArea("РПО_Заявка_КР","",if(Rec=nil,"1=0","UKey="+RecordToString(Rec)));
 Try
  BeginChanging(OWA,False);
  Try
   n=1;
   if Rec=nil:
      New=True;
      n=InsertRecord(OWA);
      Rec=GetRecordKey(OWA,n);
      n=PutFieldI(OWA,n,"Номер",i);
      n=PutFieldS(OWA,n,"НомерДок",Str(i));
      n=PutFieldD(OWA,n,"ДатаДок",ЗКР_ДатаДок);
      n=PutFieldR(OWA,n,"Рекв",Учр);
      n=PutFieldR(OWA,n,"Банк",Учр_Банк);
      n=PutFieldS(OWA,n,"ГРБС",Раб.Бюджет.НаимКБК("ППП2006",Учр.РПО_ППП));
      n=PutFieldS(OWA,n,"Глава",Учр.РПО_ППП);
      n=PutFieldD(OWA,n,"ДатаИспол",if(ПДИ>0,if(ЗКР_ДатаДок+ПДИ>Dat(31,12,Year(ЗКР_ДатаДок)),Dat(31,12,Year(ЗКР_ДатаДок)),ЗКР_ДатаДок+ПДИ),1.1.100));
      n=PutFieldS(OWA,n,"НомерБО",if(УчетБО,if(БО.Рег,БО.РегНомер,""),if(Договор.БО.Рег,Договор.БО.РегНомер,"")));
      n=PutFieldS(OWA,n,"GUID_FKБО",if(УчетБО,if(БО.Рег,"",if(БО.УчетФК and fGUID_FK,БО.GUID_FK,"")),if(Договор.БО.Рег,"",if(Договор.БО.УчетФК and fGUID_FK,Договор.БО.GUID_FK,""))));
      n=PutFieldS(OWA,n,"ДолжнРук",ЗКР_ДолжнРук);
      n=PutFieldS(OWA,n,"ДолжнБух",ЗКР_ДолжнБух);
      n=PutFieldS(OWA,n,"ФИОРук",ЗКР_ФИОРук);
      n=PutFieldS(OWA,n,"ФИОБух",ЗКР_ФИОБух);
      n=PutFieldD(OWA,n,"ДатаПодписи",ЗКР_ДатаПодписи);
      n=PutFieldN(OWA,n,"Док_Сум",Round(СумДок-ДокОпл_,2));
      n=PutFieldS(OWA,n,"Док_Окв",ОКВ);
      n=PutFieldN(OWA,n,"Док_СумРуб",Round(СумРубДок-ДокОплРуб_,2));
      n=PutFieldL(OWA,n,"Док_Аванс",Аванс);
      n=PutFieldN(OWA,n,"Док_СумНДС",Round(Int(НДС_)*GetFieldN(OWA,n,"Док_Сум")/(100+Int(НДС_)),2));
      n=PutFieldS(OWA,n,"Док_СтавкаНДС",НДС_);
      n=PutFieldS(OWA,n,"Док_ОчрПл","5");
      n=PutFieldS(OWA,n,"Док_ВидПл","0");
      if verЗКР<6:
	 if Sender="btnОплРеестр":
	    n=PutFieldS(OWA,n,"ДО_GUID","<реестр>");
	   else
	    n=PutFieldS(OWA,n,"Осн_ДокВид",НаимДок.Наим);
	    n=PutFieldS(OWA,n,"Осн_ДокНом",НомерДок);
	    n=PutFieldD(OWA,n,"Осн_ДокДат",ДатаДок);
	    n=PutFieldN(OWA,n,"Осн_ДокСум",СумДок);
	    n=PutFieldN(OWA,n,"Осн_ДокСумРуб",СумРубДок);
	    n=PutFieldN(OWA,n,"Осн_ДокОпл",ДокОпл_);
	    n=PutFieldN(OWA,n,"Осн_ДокОплРуб",ДокОплРуб_);
	    n=PutFieldS(OWA,n,"Осн_ДокCRD",crdДО);
	    n=PutFieldR(OWA,n,"ДО",Current);
	    n=PutFieldS(OWA,n,"ДО_GUID",GUID);
	 fi;
	else
	 if Sender="btnОплРеестр": n=PutFieldS(OWA,n,"ХЗ","<реестр>"); fi;
	 if not УчетБО:
	    Раб.Договор.Договор_СуммаСроки(Договор,ДатаРег);
	    Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Int(Раб.Договор.Года[Раб.Договор.ГодТек])),Dat(1,1,Year(ToDay)+1)-1,"","","",0,False,False,False);
	    n=PutFieldS(OWA,n,"Осн_ДокВид",Договор.НаимДок.Наим);
	    n=PutFieldS(OWA,n,"Осн_ДокНом",Договор.НомерДок);
	    n=PutFieldD(OWA,n,"Осн_ДокДат",Договор.ДатаДок);
	    n=PutFieldN(OWA,n,"Осн_ДокСум",Раб.Договор.СумДок);
	    n=PutFieldN(OWA,n,"Осн_ДокСумРуб",Раб.Договор.СумРубДок);
	    n=PutFieldN(OWA,n,"Осн_ДокОпл",Раб.Договор.lstСум[1]);
	    n=PutFieldN(OWA,n,"Осн_ДокОплРуб",Раб.Договор.lstСумРуб[1]);
	    n=PutFieldS(OWA,n,"Осн_ДокCRD",Раб.Договор.crdДоговор);
	    n=PutFieldR(OWA,n,"Договор",Договор);
	    n=PutFieldS(OWA,n,"Договор_GUID",Договор.GUID);
	 fi;
      fi;
      n=PutFieldR(OWA,n,"РеквП",Контр);
      n=PutFieldR(OWA,n,"БанкП",Контр_Банк);
      n=PutFieldR(OWA,n,"БО",if(УчетБО,БО,ДОГОВОР.БО));
      if not Учр_Банк.РПО_ЛСчет="":
	 n=PutFieldS(OWA,n,"Призн_ЛС",Раб.Бюджет2005.БанкВПризн(Учр_Банк));
      fi;
      if УчетБО:
	 tmp=if(БО=nil,"","БО."+БО.Признак);
	else
	 tmp=if(ДОГОВОР.БО=nil,"","БО."+ДОГОВОР.БО.Признак);
      fi;
      n=PutFieldS(OWA,n,"Призн_БО",tmp);
      n=PutFieldS(OWA,n,"Призн_К",Контр_Призн);
      n=PutFieldS(OWA,n,"Вал",Вал);
     else
      n=PutFieldN(OWA,n,"Док_Сум",GetFieldN(OWA,n,"Док_Сум")+Round(СумДок-Раб.Договор.lstСум[1],2));
      n=PutFieldN(OWA,n,"Док_СумРуб",GetFieldN(OWA,n,"Док_СумРуб")+Round(СумРубДок-Раб.Договор.lstСумРуб[1],2));
      n=PutFieldN(OWA,n,"Док_СумНДС",Round(Int(НДС_)*GetFieldN(OWA,n,"Док_Сум")/(100+Int(НДС_)),2));
   fi; --if Rec=nil:
   if Sender="btnОплРеестр" or verЗКР>=6:
      OA=OpenArray(OWA,n,"Осн_Док","");
      i=InsertRecord(OA,Records(OA)+1);
      i=PutFieldS(OA,i,"Вид",НаимДок.Наим);
      i=PutFieldS(OA,i,"Ном",НомерДок);
      i=PutFieldD(OA,i,"Дат",ДатаДок);
      i=PutFieldN(OA,i,"Сум",СумДок);
      i=PutFieldN(OA,i,"СумРуб",СумРубДок);
      i=PutFieldN(OA,i,"Опл",ДокОпл_);
      i=PutFieldN(OA,i,"ОплРуб",ДокОплРуб_);
      i=PutFieldS(OA,i,"CRD",crdДО);
      i=PutFieldR(OA,i,"ДО",Current);
      i=PutFieldS(OA,i,"ДО_GUID",GUID);
      if verЗКР>=6 and not НаимСчет=nil:
	 if Sender="btnОплРеестр":
	    ii=Records(OA);
	    for i=1..ii do
	     if GetFieldS(OA,i,"Вид")=НаимСчет.Наим and GetFieldS(OA,i,"Ном")=НомерСчет and GetFieldD(OA,i,"Дат")=ДатаСчет: i=-1; Break; fi;
	    od;
	    if i>ii: i=1; fi;
	 fi;
	 if not i=-1:
	    i=InsertRecord(OA,i);
	    i=PutFieldS(OA,i,"Вид",НаимСчет.Наим);
	    i=PutFieldS(OA,i,"Ном",НомерСчет);
	    i=PutFieldD(OA,i,"Дат",ДатаСчет);
	    i=PutFieldS(OA,i,"Предм",Содерж);
	 fi;
      fi;
      CloseWorkArea(OA);
   fi;
   OA=OpenArray(OWA,n,"РАСШИФР","");
   ii=Records(OA);
   ClearVariable(Buf);
   Key="";
   for Iter=1..Расшифр do
    if Расшифр[Iter].ВД=ВД_ and (Str(Расшифр[Iter].НДС)=НДС_ or (Расшифр[Iter].НДС=-1 and НДС_="")):
       if not Key=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Trim(Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнНорм)+" "+if(Аванс and flagОКДП,Расшифр[Iter].ОКДП_Призн,"")):
	  tmp=CardFileRecSign(Раб.Договор.crdДО,"Признак","ДОГОВОР",Current,"");
	  tmp=Trim(tmp+" "+Trim(Общ_Призн1+" "+Общ_Призн2));
	  tmp=Trim(tmp+" "+Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнНорм));
	  if Аванс and flagОКДП: tmp=Trim(tmp+" "+Расшифр[Iter].ОКДП_Призн); fi;
	  Раб.Договор.ДО_Оплата(Current,ЗКР_ДатаДок,ВД_,Расшифр[Iter].КБК,Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","&"),False,False,False);
	  Key=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Trim(Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнНорм)+" "+if(Аванс and flagОКДП,Расшифр[Iter].ОКДП_Призн,""));
       fi;
       if Round(Расшифр[Iter].СумСНДС-Раб.Договор.lstСум[1],2)>0:
	  i=SearchInArray(Buf,Key,True);
	  if i=-1:
	     i=InsertInArraySort(Buf,Key);
	     i=InsertRecord(OA,ii+i);
	     i=PutFieldS(OA,i,"Ист",ВДз);
	     i=PutFieldS(OA,i,"ТипКБК",ЗКР_ТипКБК(Расшифр[Iter].КБК));
	     i=PutFieldS(OA,i,"КБК",Раб.Формат.ReplaceSubStr(Расшифр[Iter].КБК,".",""));
	     i=PutFieldS(OA,i,"Призн_ОснДок",tmp);
	     i=PutFieldS(OA,i,"Призн","ПЕРИОД."+ТекГод);
	     i=PutFieldS(OA,i,"СчДеб",РАБ.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","БК",False)+"."+ВД_+"."+if(Аванс,"206","302")+"."+
	     Раб.Бюджет2005.Соотв_КОСГУ_Ан(if(Аванс,"206","302"),РАБ.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"","КОСГУ",False))+
				      "."+if(Аванс,"560","830"));
	     i=PutFieldR(OA,i,"ДО",Current);
	    else
	     i=ii+i;
	  fi;
	  i=PutFieldN(OA,i,"ДокСум",GetFieldN(OA,i,"ДокСум")+Расшифр[Iter].СумСНДС);
	  i=PutFieldN(OA,i,"ДокСумРуб",GetFieldN(OA,i,"ДокСумРуб")+Расшифр[Iter].СумРубСНДС);
	  i=PutFieldN(OA,i,"ДокОпл",GetFieldN(OA,i,"ДокОпл")+Раб.Договор.lstСум[1]);
	  i=PutFieldN(OA,i,"ДокОплРуб",GetFieldN(OA,i,"ДокОплРуб")+Раб.Договор.lstСумРуб[1]);
	  i=PutFieldN(OA,i,"Сум",GetFieldN(OA,i,"ДокСум")-GetFieldN(OA,i,"ДокОпл"));
	  i=PutFieldN(OA,i,"СумРуб",GetFieldN(OA,i,"ДокСумРуб")-GetFieldN(OA,i,"ДокОплРуб"));
	 else
	  Trace("Документ оплачен полностью по ВД "+Расшифр[Iter].ВД+" КБК "+Расшифр[Iter].КБК+" {"+Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнНорм)+"} "+if(Расшифр[Iter].НДС=-1,"Без НДС","НДС "+Str(Расшифр[Iter].НДС)+" %")+", оплата не требуется");
       fi;
    fi;
   od;
   CloseWorkArea(OA);
   n=PutFieldI(OWA,n,"ver",verЗКР);
   if Sender="btnОплРеестр":
      Trace("Документ основание: ("+НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+") добавлен в ЗКР №"+GetFieldS(OWA,n,"НомерДок")+" от "+DateToString(GetFieldD(OWA,n,"ДатаДок")));
   fi;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 if Sender="btnОплРеестр":
    PutVariableS("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР.Call","Вызов_Из_ДО");
    OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР",False,Rec);
    Close("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР");
    n=Length(GetCardFieldS("РПО_ЗАЯВКА_КР",Rec,"Док_НазнПл"));
    if n<=210:
       if EnqOkCancel(if(new,"Заявка на кассовый расход успешно сформирована","Текущий документ добавлен в заявку")+",^Mдлина назначения платежа "+Str(n)+" символов (разрешено 210),^Mдобавить следующий документ в заявку ?",mtWarning)=cmOk: Exit; fi;
    fi;
    Раб.Вспом.Заявка_КР_Реестр_Осн_Док.ЗакрытьРеестр(Rec);
   else
    PutVariableS("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР.Call","Вызов_Из_ДО");
    Message("Заявка на кассовый расход успешно сформирована");
 fi;
 OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_КР",False,Rec);
end;

Proc ОплатитьПП(Sender:S; ВД_:S; НДС_:S);
var OWA,OA1,n,n1,Iter:I;
var Rec: Record;
var tmp,Key,ПризнОбщ_,Призн_,НазнПл_:S;
 НазнПл_="";
 if not УчетБО:
    НазнПл_=Договор.НаимДок.НаимК;
    if НазнПл_="": НазнПл_=Договор.НаимДок.Наим; fi;
    НазнПл_=НазнПл_+" "+Договор.НомерДок+" от "+DateToString(Договор.ДатаДок);
 fi;
 tmp="";
 if not НаимСчет=nil:
    tmp=НаимСчет.НаимК;
    if tmp="": tmp=НаимСчет.Наим; fi;
    tmp=tmp+" "+НомерСчет+" от "+DateToString(ДатаСчет);
    НазнПл_=Trim(НазнПл_+" "+tmp);
 fi;
 tmp=НаимДок.НаимК;
 if tmp="": tmp=НаимДок.Наим; fi;
 tmp=tmp+" "+НомерДок+" от "+DateToString(ДатаДок);
 НазнПл_=Trim(НазнПл_+" "+tmp)+" ("+Содерж+")";
 OWA=OpenWorkArea("ПОРУЧ","","1=0");
 Try
  BeginChanging(OWA,False);
  Try
   n=InsertRecord(OWA);
   Rec=GetRecordKey(OWA,n);
   n=PutFieldI(OWA,n,"НОМЕР",Раб.Обл.СледСУчетомДаты("ПОРУЧ","Номер","Дата",ЗКР_ДатаДок));
   n=PutFieldS(OWA,n,"НОМЕРБУМ",Str(GetFieldI(OWA,n,"НОМЕР")));
   n=PutFieldR(OWA,n,"РЕКВ",Учр);
   n=PutFieldR(OWA,n,"РЕКВП",Контр);
   n=PutFieldR(OWA,n,"БАНК",Учр_Банк);
   n=PutFieldR(OWA,n,"БАНКП",Контр_Банк);
   n=PutFieldL(OWA,n,"БЮДЖЕТ",False);
   n=PutFieldD(OWA,n,"ДАТА",ЗКР_ДатаДок);
   n=PutFieldN(OWA,n,"СУММА",Round(СумДок-Раб.Договор.lstСум[1],2));
   n=PutFieldN(OWA,n,"НДС",Round(НДС_,2));
   n=PutFieldS(OWA,n,"Т",НазнПл_);
   n=PutFieldS(OWA,n,"ДАТАО","5");
   n=PutFieldS(OWA,n,"ВИДПЛ","");
   n=PutFieldS(OWA,n,"ВИДОП","01");
   n=PutFieldS(OWA,n,"РПО_НАЗНПЛАТ",НазнПл_);
   n=PutFieldL(OWA,n,"РПО_MULTISTR",False);
   OA1=OpenArray(OWA,n,"РПО_ПОЗИЦИИ","");
   Key="";
   ClearVariable(Buf);
   ПризнОбщ_=Раб.Бюджет2005.Объединить(Контр_Призн,Раб.Бюджет2005.БанкВПризн(Учр_Банк)," ");
   if УчетБО: tmp=if(БО=nil,"","БО."+БО.Признак); else tmp=if(ДОГОВОР.БО=nil,"","БО."+ДОГОВОР.БО.Признак); fi;
   ПризнОбщ_=Раб.Бюджет2005.Объединить(ПризнОбщ_,tmp," ");
   ПризнОбщ_=Раб.Бюджет2005.Объединить(ПризнОбщ_,CardFileRecSign(Раб.Договор.crdДО,"Признак","ДОГОВОР",Current,"")," ");
   ПризнОбщ_=Раб.Бюджет2005.Объединить(ПризнОбщ_,Trim(Общ_Призн1+" "+Общ_Призн2)," ");
   for Iter=1..Расшифр do
    if Расшифр[Iter].ВД=ВД_ and Str(Max(Расшифр[Iter].НДС,0))=НДС_:
       Призн_=Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнНорм);
       if Аванс and flagОКДП: Призн_=Trim(Призн_+" "+Расшифр[Iter].ОКДП_Призн); fi;
       if not Key=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Призн_:
	  Раб.Договор.ДО_Оплата(Current,ЗКР_ДатаДок,ВД_,Расшифр[Iter].КБК,Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(ПризнОбщ_+" "+Призн_," ","&"),False,False,False);
	  Key=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Призн_;
       fi;
       if Round(Расшифр[Iter].СумСНДС-Раб.Договор.lstСум[1],2)>0:
	  n1=SearchInArray(Buf,Key,True);
	  if n1=-1:
	     n1=InsertInArraySort(Buf,Key);
	     n1=InsertRecord(OA1,n1);
	     n1=PutFieldN(OA1,n1,"СУМ",Round(Расшифр[Iter].СумСНДС-Раб.Договор.lstСум[1],2));
	     n1=PutFieldS(OA1,n1,"СЧДЕБ",Раб.Бюджет2005.ВзятьКодСчета(if(Аванс,Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре),"","АН",True)+if(Аванс,".560",".830"));
	     n1=PutFieldS(OA1,n1,"СЧКРЕ",Раб.Бюджет2005.ВзятьКодСчета(if(Аванс,Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре),"","ППП",False)+".01.05.02.01.01.0000."+Расшифр[Iter].ВД+".201.21.610");
	     n1=PutFieldS(OA1,n1,"ПРИЗНАК",Up(Trim(Trim(ПризнОбщ_+" "+Призн_))+" ПЕРИОД."+ТекГод));
	     n1=PutFieldS(OA1,n1,"КМНТ","ПП №"+GetFieldS(OWA,n,"НОМЕРБУМ")+" от "+DateToString(GetFieldD(OWA,n,"ДАТА")));
	    else
	     n1=PutFieldN(OA1,n1,"СУМ",GetFieldN(OA1,n1,"СУМ")+Round(Расшифр[Iter].СумСНДС-Раб.Договор.lstСум[1],2));
	  fi;
	 else
	  Trace("Документ оплачен полностью по ВД "+Расшифр[Iter].ВД+" КБК "+Расшифр[Iter].КБК+" {"+Trim(Расшифр[Iter].Призн+" "+Расшифр[Iter].ПризнНорм)+"} "+if(Расшифр[Iter].НДС=-1,"Без НДС","НДС "+Str(Расшифр[Iter].НДС)+" %")+", оплата не требуется");
       fi;
    fi;
   od;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 PutVariableS("ДОКУМЕНТЫ.БАНК.ПОРУЧ.Call","Вызов_Из_ДО");
 Message("Платежное поручение успешно сформировано");
 OpenBlank("ДОКУМЕНТЫ.БАНК.ПОРУЧ",False,Rec);
end;

Proc btnОплатить_OnClick(Sender: String);
var Iter,i,n,nn:I;
var ВД_:S;
 Refresh(false);
 if not Рег: Message("Вначале необходимо принять денежное обязательство к учету",mtError); Template.Object="cbРег"; Exit; fi;
 if Аннул: Message("Денежное обязательство аннулировано",mtError); Template.Object="cbАннул"; Exit; fi;
 if Наличные: НаОшибку("По документу предусмотрено оплаты наличными, автоматическое формирование РКО не реализовано",0,1,"Наличные_",1); Exit; fi;
 Refresh;
 if not УчетБО:
    Раб.Договор.exclЗачетАв=True;
    Раб.Договор.Договор_СуммаСроки(Договор,Dat(1,1,Year(ToDay)+1));
    Раб.Договор.Договор_Оплата(Договор,Dat(1,1,Int(Раб.Договор.Года[Раб.Договор.ГодТек])),Dat(1,1,Year(ToDay)+1)-1,"","","",0,False,False,False);
    if Round(Раб.Договор.lstСум[1],2)>=Round(Раб.Договор.СумТек,2): Message("Договор (контракт) оплачен полностью на дату "+DateToString(Dat(1,1,Year(ToDay)+1))+", оплата не требуется"); Template.Object="btnСписокОпл"; Exit; fi;
 fi;
 Раб.Договор.ДО_Оплата(Current,Dat(1,1,Year(ToDay)+1),"","","",False,False,False);
 if Round(Раб.Договор.lstСум[1],2)>=Round(СумДок,2): Message("Документ оплачен полностью на дату "+DateToString(Dat(1,1,Year(ToDay)+1))+", оплата не требуется"); Template.Object="btnСписокОпл"; Exit; fi;
 ClearVariable(Buf);
 ClearVariable(Buf2);
 for Iter=1..Расшифр do
  AddInArray(Buf,True,False,Расшифр[Iter].ВД);
  AddInArray(Buf2,True,False,Str(Расшифр[Iter].НДС));
 od;
 n=LengthOfArray(Buf);
 if n>1:
    for i=1..n do
     Buf[i]=Buf[i]+"  --"+Раб.Бюджет.НаимКБК("СЧ",Buf[i]);
    od;
    n=Alternate("Выберите вид средств для исполнения обяз-ства",Buf,-1,1,12);
    if n=0: Exit; fi;
    ВД_=Str(n);
   else
    ВД_=Buf[n];
 fi;
 nn=LengthOfArray(Buf2);
 for n=1..nn do
  if Buf2[n]="-1": Buf2[n]="без НДС"; else Buf2[n]=Buf2[n]+" %"; fi;
 od;
 if nn>1:
    n=Alternate("Выберите ставку НДС",Buf2,-1,1,12);
    if n=0: Exit; fi;
   else
    n=1;
 fi;
 if Buf2[n]="без НДС": Buf2[n]=""; else Buf2[n]=ExtractWord(1,Buf2[n]," "); fi;
 Раб.Вспом.Подписи_Сегодня.Взять(ToDay,"ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО","ЗКР_ДатаДок:Дата_Док:D|ЗКР_ДатаПодписи:Дата_Подписи:D|ЗКР_ДолжнРук:ДолжнРук:S|ЗКР_ФИОРук:ФИОРук:S|ЗКР_ДолжнБух:ДолжнБух:S|ЗКР_ФИОБух:ФИОБух:S");
 if ЗКР_ДатаДок=1.1.100: ЗКР_ДатаДок=ToDay; fi;
 if ЗКР_ДатаПодписи=1.1.100: ЗКР_ДатаПодписи=ЗКР_ДатаДок; fi;
 if ЗКР_ДолжнРук="": ЗКР_ДолжнРук=Учр.ДолжнРук; fi;
 if ЗКР_ДолжнБух="": ЗКР_ДолжнБух=Учр.ДолжнБух; fi;
 if ЗКР_ФИОРук="": ЗКР_ФИОРук=Учр.ФИОРук; fi;
 if ЗКР_ФИОБух="": ЗКР_ФИОБух=Учр.ФИОБух; fi;
 if isФК:
    if not if(УчетБО,БО.ТекГод,Договор.БО.ТекГод)=Year(ЗКР_ДатаДок):
       if EnqOkCancel("Внимание! Текущий год обязательства "+Str(if(УчетБО,БО.ТекГод,Договор.БО.ТекГод))+" должен быть	равен текущему году заявки "+Str(Year(ЗКР_ДатаДок))+"^MПродолжить формирование заявки ?",mtWarning)=cmCancel:
	  НаОшибку("",mtWarning,2,"БО_",1);
	  Exit;
       fi;
       НаОшибку("",mtWarning,2,"БО_",1);
    fi;
    ОплатитьЗКР(Sender,ВД_,Buf2[n]);
   else
    ОплатитьПП(Sender,ВД_,Buf2[n]);
 fi;
end;

Proc btnРеестр_OnClick(Sender: String);
 if Раб.Вспом.Заявка_КР_Реестр_Осн_Док.СписокЗКР=0:
    Message("Активные реестры отсутствуют");
 fi;
end;

Proc btnЗакрыть_onEnter (Obj:S);
 Close;
end;

Proc Страница_onClick(Sender: String);
 if Sender="btnПлат":	 Страница=1;
   |Sender="btnОсн":	 Страница=2;
   |Sender="btnРасшифр": Страница=3;
   |Sender="btnНДС":	 Страница=4;
   |Sender="btnГЭК1":	 Страница=5;
   |Sender="btnАннул":	 Страница=6;
   |Sender="btnСвязДок": Страница=7;
   |Sender="btnГЭК2":	 Страница=8;
   |Sender="btnБухСправ":Страница=9;
   |Sender="btnПровДоп" :Страница=10;
   |Sender="btnИспДок"	:Страница=11;
 fi;
 ВывестиСтраницу;
end;

Proc Label_OnClick(Sender: String);
var ТекЛист:I;
 ТекЛист=Int(SubStr(Sender,6,2));
 if ExistFile(ФайлГЭК[ТекЛист]):
    ExecuteProgram('"'+ФайлГЭК[ТекЛист]+'"');
   else
    if ФайлГЭК[ТекЛист]="":
       Message("Документ не был отсканирован",mtWarning);
      else
       Message("Файл "+ФайлГЭК[ТекЛист]+" не найден",mtError);
    fi;
 fi;
end;

Proc btnУдалить_OnClick(Sender: String);
var n,nn:i;
var Flag:L;
 if EnqOkCancel("Удалить денежное обязательство "+if(УчетБО," и связаное с ним бюджетное обязательство","")+" ?",mtWarning)=cmCancel: Exit; fi;
 Template.Object="btnУдалить";
 if Страница=7:
    РасчетСвязДок;
   else
    Страница=7;
    ВывестиСтраницу;
 fi;
 for n=1..УпрДок do
  if not ДокCrd[n]=crdБО and not ДокCrd[n]=crdДоговор_Признак:
     НаОшибку("Документ удалить нельзя, т.к. существуют ссылающиеся на него документы",mtError,Страница,"ДокНаим",n);
     Exit;
  fi;
 od;
 РасчетГЭК2;
 EditorCancel;
 УдалитьЗаписи(crdБО);
 УдалитьЗаписи("РПО_ИЗВЕЩЕНИЯ_ИСХ");
 Раб.Вспом.Сканер.УдалитьГЭК(crdДО,RecordToInteger(Current),"jpg");
 for n=1..УпрГЭК2 do
  Flag=ExecuteFuncL("Раб.Вспом.Скан_Док.Стереть",ГЭК2Rec[n]);
 od;
 УдалитьЗаписи(crdДО);
 Message("Документ успешно удален");
 Close;
end;

Proc cbНеПровДО_OnChange(Sender: String);
 EditorApply;
end;

Proc cbЗачет_КЗ_OnChange(Sender: String);
var Iter:I;
 if setЗачет_КЗ>0: 
    Зачет_КЗ=if(Зачет_КЗ=0, 1,0);
   |setЗачет_КЗ<0: 
    Зачет_КЗ=if(Зачет_КЗ=0,-1,0);
   |true:
    ClearVariable(Buf);
    Buf[1]="К зачету кредиторской задолженности";
    Buf[2]="Зачет кредиторской задолженности";
    Iter=Alternate("Выберите режим документа",Buf,-1,1,12);
    if not Iter=0:
       setЗачет_КЗ=if(Iter=1,-1,1);
       Зачет_КЗ=if(Iter=1,-1,1);
    fi;
 fi;
 for Iter=1..Расшифр do
  if (setЗачет_КЗ>0 and not (Расшифр[Iter].ВидОпер="730" or Расшифр[Iter].ВидОпер="730+830")) or (setЗачет_КЗ<=0 and (Расшифр[Iter].ВидОпер="730" or Расшифр[Iter].ВидОпер="730+830")):
     Расшифр[Iter].ВидОпер="";
  fi;
 od;
 cbЗачет_КЗ.State=flagЗачет_КЗ;
 Оформление;
end;

Func Расшифр_OnInsert(SectName: String): Logical;
 Return not Рег;
end;

Func  Расшифр_OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Рег;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen (Create:L);
 FlagInit=True;
end;

Proc AfterOpen(Destroy: Logical);
 Инициализация; 
 Оформление; 
 ВывестиСтраницу;
 FlagInit=False;
end;

Proc onRead;
var n:i;
 Self=Current;
 ОткрНастр(False);
 Настр_(False);
 if CurrentState=CrdusInserted:
    Настр=ПолучитьНастр;
    Настр_GUID=Настр.GUID;
    Свернуть=Настр.ДО_Свертка;
    ДатаРег=ToDay;
    ТекГод=Str(Year(ДатаРег));
    Зачет_КЗ=setЗачет_КЗ;
    if Код="":
       ПрефиксНомСвед=hПрефиксНомСвед;
       ОКВ=Настр.ОКВ;
       if ОКВ="": ОКВ="643"; fi;
       Вал=BaseCurrency;
       УчетНДС=Настр.ДО_УчетНДС;
       if not Аванс: ЦЗ=hЦЗ; fi;
       if not УчетТМЦ=flagТМЦ: УчетТМЦ=flagТМЦ; fi;
       if not УчетОКДП=flagОКДП: УчетОКДП=flagОКДП; fi;
       ClearVariable(Buf);
       Buf[1]="Есть договор (контракт)";
       Buf[2]="Договор (контракт) отсутствует";
       n=Alternate("Режим работы",Buf,-1,1,12);
       УчетБО=n=2;
       if УчетБО:
	  Учр=Раб.Бюджет2005.НашРекв;
	  if not Учр=nil:
	     ДолжнРук=Учр.ДолжнРук;
	     ФИОРук=Учр.ФИОРук;
	     Учр_Банк=Раб.Бюджет2005.БанкСчет(Учр,False);
	  fi;
       fi;
    fi;
    if УчетБО: 
       if ДатаДок=1.1.100:
	  verОКДП_Гр=273;
	 else
	  ОбновВерсиюОКДП_Гр;
       fi;
    fi;
    Рег=False;
    Аннул=False;
    ClosedModFob=False;
    БО=nil;
    БО_Изм=nil;
    БО_GUID_FK="";
    НеПустаяТаблица;
    Страница=2;
 fi;
 setЗачет_КЗ=Зачет_КЗ;
 if (Аванс and Страница=6) or Страница=7 or Страница=8 or Страница=9:  Страница=2; fi;
 if not FlagInit: Оформление; ВывестиСтраницу; fi;
end;

Func OnVerify: Logical;
 if not Self=Current: Message("Обнаружено несовпадение записей, сохранение невозможно",mtError); ^False; fi;
 if not ПроверитьСохр: ^False; fi;
 if СоздатьИзв(False)<0: ^False; fi;
 if Аннул:
    if СоздатьИзв(True)<0: ^False; fi;
 fi;
 if Рег:
    БухСправка("",False); 
    if Аннул:
       БухСправка("",True);
    fi;
 fi;
 ДатаДО_=if(ДатаРег=ДатаДО,-1,1);
 setЗачет_КЗ=Зачет_КЗ;
 Return ЗаполнитьКлючДок;
end;

Proc OnCancel;
 Оформление;
end;
--Обработчики событий шаблона -----
--


Конец
