-- Шаблон создан мастером бланков
-- 21.10.2005 15:14:34
--
БланкСШаблоном "Договор, контракт...", Редактор РПО_ДОГОВОР;

var First:L;

var НоваяЗапись:L=(CurrentState=crdusInserted);

var start:s="";

var Исполнен_:L=(Исполнен or ТипИзм=99);
var Аннулирован_:L=(Аннулирован or ТипИзм=-99);
var ClosedModFob_:L=ClosedModFob;

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

var Признак_:S="Код документа: "+if(Признак_Ref=nil,Признак,Признак_Ref.Признак);

var Учр_Банк_Банк:S=Учр_Банк.Банк+" "+Учр_Банк.Город;
var Учр_Банк_Свед_ФО_Наим:S=Учр_Банк_Свед.РПО_ФО_Наим1+Учр_Банк_Свед.РПО_ФО_Наим2;
var Секрет_:S=Раб.Договор.Секретность(Секрет,False);

var Учр_Банк_ФО_Наим:S=Учр_Банк.РПО_ФО_Наим1+Учр_Банк.РПО_ФО_Наим2;

var A2_1:S=if(Рег,"","+");
var D2_1:S=if(Рег,"","-");
var ЗаглКонтр2[]:S="Сведения о поставщике, исполнителе, подрядчике "+Str($+1);

var Контр_ИМН_:S=if(Контр.РПО_ОКСМ="643" or Контр.РПО_ОКСМ="",Контр.РПО_МН_Индекс+","+Контр.РПО_МН_Субъект.Регион+" "+Контр.РПО_МН_Субъект.Код+","+Контр.РПО_МН_НасПункт+","+Контр.РПО_МН_ОКТМО,Контр.РПО_МН_НасПункт)+","+Контр.РПО_МН_Улица+","+Контр.РПО_МН_Дом+if(Контр.РПО_МН_Офис="","",","+Контр.РПО_МН_Офис);
var Контр_ИМН2_:S=if(Контр2[$].Контр.РПО_ОКСМ="643" or Контр2[$].Контр.РПО_ОКСМ="",Контр2[$].Контр.РПО_МН_Индекс+","+Контр2[$].Контр.РПО_МН_Субъект.Регион+" "+Контр2[$].Контр.РПО_МН_Субъект.Код+","+Контр2[$].Контр.РПО_МН_НасПункт+","+Контр2[$].Контр.РПО_МН_ОКТМО,Контр2[$].Контр.РПО_МН_НасПункт)+","+Контр2[$].Контр.РПО_МН_Улица+","+Контр2[$].Контр.РПО_МН_Дом+if(Контр2[$].Контр.РПО_МН_Офис="","",","+Контр2[$].Контр.РПО_МН_Офис);

var Контр_Телефон:S=if(Контр.Телефон="",Контр.Факс,Контр.Телефон);
var Контр_Телефон2[]:S=if(Контр2[$].Контр.Телефон="",Контр2[$].Контр.Факс,Контр2[$].Контр.Телефон);

var A2_2:S=A2_1;
var D2_2:S=D2_1;
var ЗаглКонтр_Банк2[]:S=Str($+1)+". Банковские реквизиты поставщика, исполнителя, подрядчика";
var Наличные_:S=if(Наличные,"V","");
var Наличные2_[]:S=if(Контр2[$].Наличные,"V","");

var ТипСвед_:S=if(ТипСвед=0,"Первичные","Измененные");
var visГод2 :L;
var visГод3 :L;
var visГод4 :L;
var visГод5 :L;
var visГод6 :L;
var visГод7 :L;
var visГод8 :L;
var visГод9 :L;
var visГод10:L;
var A4_1 :S=if(Рег,"","+");
var A4_2 :S=A4_1;
var A4_3 :S=A4_1;
var A4_4 :S=A4_1;
var A4_5 :S=A4_1;
var A4_6 :S=A4_1;
var A4_7 :S=A4_1;
var A4_8 :S=A4_1;
var A4_9 :S=A4_1;
var D4_2 :S=if(Рег,"","-");
var D4_3 :S=D4_2;
var D4_4 :S=D4_2;
var D4_5 :S=D4_2;
var D4_6 :S=D4_2;
var D4_7 :S=D4_2;
var D4_8 :S=D4_2;
var D4_9 :S=D4_2;
var D4_10:S=D4_2;

var visСд2:L;
var visСд3:L;
var visСд4:L;
var AСд_1:S=if(Рег,"","+");
var AСд_2:S=AСд_1;
var AСд_3:S=AСд_1;
var DСд_2:S=if(Рег,"","-");
var DСд_3:S=DСд_2;
var DСд_4:S=DСд_2;

var РазмещЗаказ_:S=if(ДатаРег>=1.1.2015,РазмещЗаказ+" "+Раб.Договор.СОП(РазмещЗаказ,False,""),if(ФЗ>=1,SubStr(РазмещЗаказ,1,2)+" ","")+Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,False,if(ФЗ>=1:"44ФЗ"|Секрет>1:"491"|ДатаДок<01.01.100:""|True:"1191")));
var ЗаглДокОсн:S=if(ДатаРег>=1.1.2015,"Реквизиты документов, подтверждающих основание заключения контракта","Реквизиты документа, подтверждающего основание заключения контракта");
var ЗаглДокОсн2:S=ЗаглДокОсн+" №"+Str($+1);

var A_ДокОсн :S=A2_1;
var A2_ДокОсн:S=A2_1;
var D2_ДокОсн:S=D2_1;

var visИнфоДокОсн2:L;
var visИнфоДокОсн3:L;
var visИнфоДокОсн4:L;
var A3_1:S=if(Рег,"","+");
var A3_2:S=A3_1;
var A3_3:S=A3_1;
var D3_2:S=if(Рег,"","-");
var D3_3:S=D3_2;
var D3_4:S=D3_2;

var visФЦ2:L;
var visФЦ3:L;
var visФЦ4:L;
var AФЦ_1:S=if(Рег,"","+");
var AФЦ_2:S=A3_1;
var AФЦ_3:S=A3_1;
var DФЦ_2:S=if(Рег,"","-");
var DФЦ_3:S=D3_2;
var DФЦ_4:S=D3_2;

var ВидВнеБюдж_:S=Раб.Договор.ВидВнеБюджетныхСредств(ВидВнеБюдж,False,if(ДатаРег>=1.1.2015,"18Н","44ФЗ"));

var txtДатаИзм:S=if(Abs(ТипИзм)=4:"Дата перерегистрации:"|ТипИзм=99:"Дата исполнения:"|ТипИзм=-99:"Дата расторжения (аннул.):"|true:"Дата изменения:");
var ТипИзм_:S=if(ТипИзм=1:"Изменение договора (контракта)"|ТипИзм=2:"Исправление сведений"|ТипИзм=3:"Внутреннее изменение"|ТипИзм=4:"Перерегистрация на очередной год"|ТипИзм=-4:"Перерегистрация на очередной год (Свед. БО)"|ТипИзм=5:"Аннулирование БО"|ТипИзм=-99:"Расторжение (аннулирование)"|ТипИзм=99:"Исполнение"|True:"");
var БО_Изм_:S=if(not Abs(ТипИзм)=4 and not Договор_Пре=nil and УчетБО,"("+БО.Признак+"/"+Str(БО.Изм)+") "+if(БО.Рег,БО.РегНомер+" от "+DateToString(БО.РегДата),""),"");

var РасчетИА:S=if(Рег,"","Расчитать");

var txtДатаСвед2:S=if((ФЗ=0 and ДатаСвед2<1.1.2014) or ДатаСвед2>=1.1.2015,"Дата формир-ния прил. №2","Дата формир-ния прил. №3");
var txtДатаРук2:S=if((ФЗ=0 and ДатаСвед2<1.1.2014) or ДатаСвед2>=1.1.2015,"Дата подписи прил. №2","Дата подписи прил. №3");
var НомРейс2И:I=if(Исполнен,НомРейс2,0);
var ДатаРейс2И:D=if(Исполнен,ДатаРейс2,1.1.100);

var НомРейс2А:I=if(Аннулирован,НомРейс2,0);
var ДатаРейс2А:D=if(Аннулирован,ДатаРейс2,1.1.100);

var A6:S=if(Рег,"","+");
var D6:S=if(Рег,"","-");

var РасчетИнфоИА:S=if(Рег,"","Заполнить");
var A5:S=if(Рег,"","+");
var D5:S=if(Рег,"","-");

var РедКБК:S=if(Рег,"","Редактировать");
var ПросмотрКБК:S="Просмотр";
var ОбновКБК:S="Обновить";

var ЗаглКБК:S=if(Секрет>0,"Актуальное КБК текущего периода","КБК");

var ИсполПризнак_:S=ИсполПризнак+" "+if(ИсполПризнак="0":"исполнение этапа"
                                      |ИсполПризнак="1":"полное исполнение"
                                      |true:"");

var НеИсполФактОпл:N=if(Исполнен or not ИсполФактОпл=0,СумДок-ИсполФактОпл,0);
var БО_И:S=if(Исполнен and УчетБО,"("+БО_Изм.Признак+"/"+Str(БО_Изм.Изм)+") "+if(БО_Изм.Рег,БО_Изм.РегНомер+" от "+DateToString(БО_Изм.РегДата),""),"");

var НеАннулФактОпл:N=if(Аннулирован or not АннулФактОпл=0,СумДок-АннулФактОпл,0);
var БО_А:S=if(Аннулирован and УчетБО,"("+БО_Изм.Признак+"/"+Str(БО_Изм.Изм)+"0 "+if(БО_Изм.Рег,БО_Изм.РегНомер+" от "+DateToString(БО_Изм.РегДата),""),"");

var АннулПризнак_:S=АннулПризнак+" "+if(АннулПризнак="2":"контракт расторгнут"
                                       |АннулПризнак="3":"контракт признан недействительным"
                                       |true:"");
var АннулКодОсн_ :S=АннулКодОсн+" "+if(АннулКодОсн="1":"соглашение сторон"
                                      |АннулКодОсн="2":"судебный акт"
                                      |АннулКодОсн="3":"односторонний отказ заказчика от исполнения контракта в соответствии с гражданским законодательством Российской Федерации"
                                      |АннулКодОсн="4":"односторонний отказ поставщика (подрядчика, исполнителя) от исполнения контракта в соответствии с гражданским законодательством Российской Федерации"
                                      |true:"");
var АннулКодДок_ :S=АннулКодДок+" "+if(АннулКодДок="11":"дополнительное соглашение к контракту"
                                      |АннулКодДок="21":"судебный акт"
                                      |АннулКодДок="31":"решение заказчика об одностороннем отказе от исполнения контракта"
                                      |АннулКодДок="41":"решение поставщика (подрядчика, исполнителя) об одностороннем отказе от исполнения контракта"
                                      |true:"");

var КодШтраф[]:S=Штраф[$].Код+" "+if(Штраф[$].Код="11":"ненадлежащее исполнение поставщиком (подрядчиком, исполнителем) обязательств..."
                                    |Штраф[$].Код="12":"ненадлежащее исполнение заказчиком обязательств, предусмотренных контрактом..."
                                    |Штраф[$].Код="21":"просрочка исполнения поставщиком (подрядчиком, исполнителем) обязательств..."
                                    |Штраф[$].Код="22":"просрочка исполнения заказчиком обязательств, предусмотренных контрактом"
                                    |true:"");
--var КодШтраф[]:S=if(Штраф[$].Код="11":"ненадлежащее исполнение поставщиком (подрядчиком, исполнителем) обязательств, предусмотренных контрактом, за исключением просрочки исполнения поставщиком (подрядчиком, исполнителем) обязательств (в том числе гарантийного обязательства), предусмотренных контрактом"
--                   |Штраф[$].Код="12":"ненадлежащее исполнение заказчиком обязательств, предусмотренных контрактом, за исключением просрочки исполнения обязательств, предусмотренных контрактом"
--                   |Штраф[$].Код="21":"просрочка исполнения поставщиком (подрядчиком, исполнителем) обязательств, предусмотренных контрактом (в том числе гарантийного обязательства)"
--                   |Штраф[$].Код="22":"просрочка исполнения заказчиком обязательств, предусмотренных контрактом"
--                   |true:Штраф[$].Код);

var recДО[]:Record;

var УпрКБК:I;
var пп[]:i=$;
var ВД[]:S;
var КБК0[]:S;
var КБК[]:S;
var Призн[]:S;
var СумКБК[]:N;
var МФ[]:S;
var СумКБКГод1 []:N;
var СумКБКГод2 []:N;
var СумКБКГод3 []:N;
var СумКБКГод4 []:N;
var СумКБКГод5 []:N;
var СумКБКГод6 []:N;
var СумКБКГод7 []:N;
var СумКБКГод8 []:N;
var СумКБКГод9 []:N;
var СумКБКГод10[]:N;
var ПредмКБК []:S;
var ПредмКБК2[]:S;
var ПредмКБК3[]:S;
var ПредмКБК4[]:S;
var ПредмКБК_[]:S=if(Length(ПредмКБК[$])+Length(ПредмКБК2[$])+Length(ПредмКБК3[$])+Length(ПредмКБК4[$])>255,SubStr(ПредмКБК[$],1,252)+">>>",ПредмКБК[$]+ПредмКБК2[$]+ПредмКБК3[$]+ПредмКБК4[$]);

var ПримечКБК[]:S;
var ФАИП[]:Record;
var ФАИП_[]:S;
var ФактОплКБК[]:N;
var НеОплКБК[]:N=if(Исполнен or Аннулирован,if(Учет_Реестр_ОФК or ver>0,СумКБКГод1[$]+СумКБКГод2[$]+СумКБКГод3[$]+СумКБКГод4[$]+СумКБКГод5[$]+СумКБКГод6[$]+СумКБКГод7[$]+СумКБКГод8[$]+СумКБКГод9[$]+СумКБКГод10[$],СумКБК[$])-ФактОплКБК[$],0);
var БО_:S="("+БО.Признак+") "+if(БО.Рег,БО.РегНомер+" от "+DateToString(БО.РегДата),"");
var БО_Рег:S=if(БО.Рег,"Да","Нет");

var ВсегоСумКБК     :N=SumOfArray(СумКБК,УпрКБК);
var ВсегоСумКБКГод1 :N=SumOfArray(СумКБКГод1,УпрКБК);
var ВсегоСумКБКГод2 :N=SumOfArray(СумКБКГод2,УпрКБК);
var ВсегоСумКБКГод3 :N=SumOfArray(СумКБКГод3,УпрКБК);
var ВсегоСумКБКГод4 :N=SumOfArray(СумКБКГод4,УпрКБК);
var ВсегоСумКБКГод5 :N=SumOfArray(СумКБКГод5,УпрКБК);
var ВсегоСумКБКГод6 :N=SumOfArray(СумКБКГод6,УпрКБК);
var ВсегоСумКБКГод7 :N=SumOfArray(СумКБКГод7,УпрКБК);
var ВсегоСумКБКГод8 :N=SumOfArray(СумКБКГод8,УпрКБК);
var ВсегоСумКБКГод9 :N=SumOfArray(СумКБКГод9,УпрКБК);
var ВсегоСумКБКГод10:N=SumOfArray(СумКБКГод10,УпрКБК);
var ВсегоФактОплКБК :N=SumOfArray(ФактОплКБК,УпрКБК);
var ВсегоНеОплКБК   :N=SumOfArray(НеОплКБК,УпрКБК);

var РедПредмет:S=if(Рег,"Просмотр","Редактировать");
var ОбновПредмет:S="Обновить";

var verОКДП_Гр_:S=if(verОКДП_Гр=273,"в ред. прик. № 273","в ред. прик. № 601");
var заглОКП:S=if(ФЗ>=1:"Код ОКПД"|ДатаДок>=01.01.100 and Секрет<2:"Код ОКДП"|True:"Код ОКП");

var УпрТМЦ:I;
var КВОЗ[]:S;
var КВОЗ_[]:S=КВОЗ[$]+" "+if(КВОЗ[$]="1":"поставка товара"|КВОЗ[$]="2":"выполнение работ"|КВОЗ[$]="3":"оказание услуг"|КВОЗ[$]="4":"приобретение объектов недвижемого имущества"|КВОЗ[$]="5":"аренда имущества"|true:"");
var НаимТМЦ[]:S;
var ОКСМ[]:S;
var ОКДП_Гр[]:S;
var ОКП[]:S;
var ПоЦене[]:L;
var ЕдИзм[]:S;
var Цена[]:N;
var Кол[]:N;
var СумТМЦ[]:N;
var ФактКол[]:N;
var ФактСумТМЦ[]:N;

var ВсегоСумТМЦ:N=SumOfArray(СумТМЦ,УпрТМЦ);
var ВсегоФактСумТМЦ:N=SumOfArray(ФактСумТМЦ,УпрТМЦ);

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

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 ОбновИсторДок:S="Обновить";
var СводкаИзм:S="Сводка изменений";

var УпрИзм:I;
var ИзмCU[]:S;
var ИзмMU[]:S;
var ИзмТек[]:S;
var ИзмРег[]:D;
var ИзмНаим[]:S;
var ИзмНом[]:S;
var ИзмДат[]:D;
var ИзмТС[]:S;
var ИзмСтат[]:S;
var ИзмБО[]:S;
var ИзмКмнт[]:S;
var ИзмRec[]:Record;
var ИзмБОRec[]:S;

var verТФФ:I;

var ОтчДок:S="Отчет по документу";
var ОтчДО:S="Отчет по ДО";
var АктСверки:S="Акт сверки расчетов";
var Прил1:S=if(ФЗ=0 or ДатаРег>=1.1.2015,"Приложение 1","Приложение 2");
var txtПрил1:S=if(ФЗ=0 or ДатаРег>=1.1.2015,"Сформировать приложение 1","Сформировать прил. 2 Информация о заключенном контракте (его изменении)");
var ВыгрузПрил1:S=if(ФЗ=0 or ДатаРег>=1.1.2015,"Выгрузка сведений о ГК","Выгрузка инфо. о ГК");
var txtВыгрузПрил1:S=if(ДатаРег>=1.1.2015 ,"Выгрузка сведений о заключенном контракте (его изменении) (формат TXGS"+if(verТФФ<19,"150701","151001")+")","Выгрузка сведений о заключенном контракте (его изменении) (формат TXGS"+if(verТФФ<13,"140101","140701")+")");
var Прил2:S=if((ФЗ=0 and ДатаСвед2<1.1.2014) or ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,"Приложение 2","Приложение 3");
var txtПрил2:S=if((ФЗ=0 and ДатаСвед2<1.1.2014) or ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,"Сформировать приложение 2","Сформировать прил. 3 Информация об исполнении (о расторжении) контракта");
var Прил2Вариант:S=if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,"",Прил2+" (Вариант)");
var txtПрил2Вариант:S=if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,"",txtПрил2+" (Вариант)");
var ВыгрузПрил2:S=if((ФЗ=0 and ДатаСвед2<1.1.2014) or ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,"Выгрузка свед. об испол.","Выгрузка инфо. об испол.");
var txtВыгрузПрил2:S=if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,"Выгрузка сведений об исполнении (прекращении) гос. контракта (формат TXIS"+if(verТФФ<18,"150505","150505")+")","Выгрузка инфо. об исполнении (о расторжении) контракта (формат TXIS"+if(verТФФ<13,"140101","140701")+")");
var ЭкспортCDF:S="Экспорт в текст";
var ИмпортCDF:S="Импорт из текста";

var ОбновФайл:S="Обновить";
var КопирФайл:S="Копировать все";
var УдалФайл :S=if(Рег,"","Удалить все");

var A:S="+";
var D:S="-";
var openФайл :S="3";
var loadФайл :S="q";
var loadПапка:S="1";
var delФайл  :S="r"     ;
var copyФайл :S="<";

var УпрФайл:I;
var ФайлCU[]:S;
var ФайлMU[]:S;
var ФайлШтамп[]:S;
var Файл[]:S;
var ФайлКмнт[]:S;

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

var КонтрольМФ:I;
var КонтрольМФ_:S=if(КонтрольМФ=1:"Да"|КонтрольМФ=-1:"Нет"|True:"Запрашивать");
var тчнКол_:I=[3];
var ОкрПроцАв:S=["4"];
var ОкрПроцАв_:S=if(ОкрПроцАв="-4","Отбрасывать","Округлять");
var fКонтрольЛБО:I;
var fКонтрольЛБО_:S=if(fКонтрольЛБО=-1:"Отключен"|fКонтрольЛБО=1:"Жесткий"|True:"Мягкий");
var fСокрКонтрольГК:L;
var fСокрКонтрольГК_:S=if(fСокрКонтрольГК,"Да","Нет");

var extBtnUsrName:s;
var extBtnUsrOnClick:s;

var НастрGUID:S;

var СканГЭК2:S="Сканирование";
var ОбновГЭК2:S="Обновить";
var ГЭК2вPDF:S="Выгрузить в PDF";

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

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

var ОбновОбеспеч:S="Обновить";
var СоздатьОбеспеч:S="Привязать/Создать";
var ВозвратОбеспеч:S="Возвратить/Снять с учета";
var ОтчОбеспеч:S="Отчет";
var ОтчОбеспеч2:S="Отчет по проводкам";

var УпрОбеспеч  :I;
var ВидОбеспеч[]:S;
var НомОбеспеч[]:S;
var ДатОбеспеч[]:D;
var СумОбеспеч[]:N;
var НеустойкаОбеспеч[]:N;
var Срок1Обеспеч[]:D;
var Срок2Обеспеч[]:D;
var ГарантОбеспеч[]:S;
var ГарантСтатусОбеспеч[]:S;
var ГарантБИКОбеспеч[]:S;
var Сум1Обеспеч[]:N;
var Дат1Обеспеч[]:D;
var Сум2Обеспеч[]:N;
var Дат2Обеспеч[]:D;
var ОстОбеспеч []:N=Сум1Обеспеч[$]-Сум2Обеспеч[$];
var ПризнОбеспеч[]:S;
var UKeyОбеспеч[]:Record;
var ВсегоОстОбеспеч:N=SumOfArray(ОстОбеспеч,УпрОбеспеч);

var ДС_УпрОбеспеч       :I;
var ДС_СумОбеспеч     []:N;
var ДС_Сум1Обеспеч    []:N;
var ДС_Дат1Обеспеч    []:D;
var ДС_Сум2Обеспеч    []:N;
var ДС_Дат2Обеспеч    []:D;
var ДС_ОстОбеспеч     []:N=ДС_Сум1Обеспеч[$]-ДС_Сум2Обеспеч[$];
var ДС_ПризнОбеспеч   []:S;
var ДС_ПП1Обеспеч     []:S;
var ДС_ПП2Обеспеч     []:S;
var ДС_UKeyОбеспеч    []:Record;
var ДС_ВсегоСумОбеспеч  :N=SumOfArray(ДС_СумОбеспеч ,ДС_УпрОбеспеч);
var ДС_ВсегоСум1        :N=SumOfArray(ДС_Сум1Обеспеч,ДС_УпрОбеспеч);
var ДС_ВсегоСум2        :N=SumOfArray(ДС_Сум2Обеспеч,ДС_УпрОбеспеч);
var ДС_ВсегоОстОбеспеч  :N=SumOfArray(ДС_ОстОбеспеч ,ДС_УпрОбеспеч);

var СумОбУчет:N=ВсегоОстОбеспеч+ДС_ВсегоОстОбеспеч;
var СумОбОткл:N=if(Abs(ТипИзм)=99,0,СумОбУчет-СумОб);

var СоздатьПП1093:S="Создать";
var ОбновПП1093:S="Обновить";
var ПросмотрПП1093:S="Просмотр";

var ПП1093         :I;
var ПП1093_Дат   []:D;
var ПП1093_НомИзм[]:I;
var ПП1093_CU    []:S;
var ПП1093_MU    []:S;
var ПП1093_Rec   []:Record;

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

S0  : Section;
S1  : Section; --Сведения о заказчике
S2  : Section; --Сведения о поставщике, исполнителе, подрядчике
S2_1: Section; --Сведения о поставщике, исполнителе, подрядчике
S2_2: Section; --Сведения о поставщике, исполнителе, подрядчике
S2_3: Section; --Сведения о поставщике, исполнителе, подрядчике
S3  : Section; --Общие сведения
S3_1: Section; --Общие сведения
S3_2: Section; --Общие сведения
S4  : Section; --Дополнительные сведения
S5  : Section; --Детализация по КБК
S6  : Section;
S7  : Section;
S8  : Section;
S9  : Section; --Предмет договора, контракта...
S10 : Section;
S11 : Section;
S12 : Section;
S13 : Section; --Графическая электронная копия для оплаты
S14 : Section;
S15 : Section; --Список связных документов
S16 : Section;
S17 : Section;
S18 : Section; --История изменения документа
S19 : Section;
S20 : Section;
S21 : Section; --Сервис
S22 : Section; --Прикрепленные файлы
S23 : Section;
S24 : Section;
S25 : Section;
S26 : Section; --Графическая электронная копия документа
S27 : Section;
S28 : Section;
S29 : Section; --Расшифровка исполнения / расторжения по документам
S30 : Section;
S31 : Section;
S32 : Section; --Реквизиты исполнительного документа
S33 : Section; --Обеспечение исполнения обязательства
S34 : Section;
S35 : Section;
S36 : Section; --Обеспечение исполнения обязательства
S37 : Section;
S38 : Section;
S42 : Section;
S39 : Section; --Начисления неустоек (штрафов, пеней)
S40 : Section;
S41 : Section;
S43 : Section; --Приложение к постановление Правительства РФ от 28.11.2013 № 1093
S44 : Section;
S45 : Section;
S46 : Section;

sН1 : Section; --Настройка
sН2 : Section;

btnИзм    :Object;
btnИморт  :Object;
btnНастр  :Object;
btnУдалить:Object;

rbФЗ0          :Object;
rbФЗ1          :Object;
rbФЗ2          :Object;
cbРег          :Object;
cbУчетРеестрОФК:Object;
cbУчетБО       :Object;
cbУчетБО_ФК    :Object;
cbРегРеестрОФК :Object;
cbИспол        :Object;
cbАннул        :Object;
cbЗакрытьДок   :Object;

btnUsr :Object;

btnИзменения:Object;
btnОригинал :Object;

btnЗаказчик :Object;
btnПоставщик:Object;
btnОбщСвед  :Object;
btnДопСвед  :Object;
btnПредмет  :Object;
btnКБК      :Object;
btnГЭК1     :Object;
btnСвязДок  :Object;
btnИсторДок :Object;
btnФайлы    :Object;
btnГЭК2     :Object;
btnСервис   :Object;
btnРекИспДок:Object;
btnОбеспеч  :Object;
btn1093     :Object;

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 Buf []:S;
var Buf2[]:S;
var Buf3[]:S;
var BufI[]:I;
var BufF[]:S;
var BufT[]:I;
var BufN[]:N;
var BufR[]:Record;

var DefСчДеб5:S="501.13";
var DefСчКре5:S="502.11";

hПрефиксНомСвед:S;

hОбщ_Призн1:S;
hОбщ_Призн2:S;

var fОКВ:I;

Страница:I;

hИстФин:S;
hИстФин_ОКТМО:S;
hКодБюдж:S;
hНаимБюдж: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 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Договор_ТМЦ);
var blnБО         :S=if(Настр.blnБО="",Раб.Договор.blnБО,Настр.blnБО);

--var тчнКол:I=if(Секрет<2,тчнКол_,3);
var тчнКол:I=if(Секрет<2,3,3);

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

var FlagChanging:L;

var SkipEvent:L;

var SelfRecord:Record;

Timer1:Object;
var tmr:I;
--
--Процедуры и функции ------------- 
Proc MyEditorApply;
var Flag:L;
 Flag=AutoRefresh;
 if Flag: ToggleAutoRefresh(False); fi;
 EditorApply;
 if Flag: ToggleAutoRefresh(True); fi;
end;

Proc Настр_(aСохр:L);
var tmp:S;
var Flag:L;
 ОкрПроцАв="4";
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(blnДоговор,0,0,"",НастрGUID):
    Раб.Настр.Добавить("КонтрольМФ","I");
    Раб.Настр.Добавить("тчнКол_","I");
    Раб.Настр.Добавить("fКонтрольЛБО","I");
    Раб.Настр.Добавить("fСокрКонтрольГК","L");
    Раб.Настр.Добавить("extBtnUsrName","S");
    Раб.Настр.Добавить("extBtnUsrOnClick","S");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
 if not aСохр:
    if Раб.Настр.Начать("ДОКУМЕНТЫ.ЛБО.СВЕД_БО",0,0,"",GetGUID):
       tmp=Раб.Настр.ВзятьЗначение("setОкрПроцАв");
       ОкрПроцАв=if(tmp="","4",tmp);
    fi;
    verТФФ=if(ToDay<1.10.2015,18,19);
    if Раб.Настр.Начать("УПРАВЛЕНИЕ.ДОГОВОР",0,0,"",GetGUID):
       tmp=Раб.Настр.ВзятьЗначение("ver");
       if not tmp="": verТФФ=Int(tmp); fi;
    fi;
 fi;
end;
  
Func RoundПроцАв(Val:N):N;
var Pr:I;
 if ОкрПроцАв="": ОкрПроцАв="4"; fi;
 Pr=Abs(Int(ОкрПроцАв));
 if Pos("-",ОкрПроцАв)=0:
    ^Round(Val,Pr);
   else
    ^Trunc(Val,Abs(Pr));
 fi;
end;

Func ЕстьИзменения:Record;
var OWA,nn:I;
 OWA=OpenWorkArea(crdДоговор,"","Договор_Пре="+RecordToString(Current));
 Try
  nn=Records(OWA);
  if not nn=0:
     ^GetRecordKey(OWA,1);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^nil;
end;

Proc Инициализация;
var Obj:Object;
var s,ss,r,rr,c,cc,n,l,bgColor,x:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 --
 ClearVariable(Buf);
 for s=1..4 do
  Buf[s]="S"+Str(s);
 od;
 Buf[s]="S10";
 s=s+1; Buf[s]=if(Контр_Банк2=0,"ХЗ","S2_1");
 s=s+1; Buf[s]=if(Контр2=0,"ХЗ","S2_2");
 s=s+1; Buf[s]=if(ДокОсн=0,"ХЗ","S3_1");
 s=s+1; Buf[s]="S3_2";
 s=s+1; Buf[s]="S30";
 s=s+1; Buf[s]="S32";
 s=s+1; Buf[s]="S40";
 --
 ss=LengthOfArray(Buf);
 for s=1..ss do
  if FindObject(Buf[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,"")); Except BgColor=0; end;
       if BgColor=coAqua or BgColor=coTeal:
          Try Field=asString(Obj.Cell(r,c,CellContents,"",False)); Except Field=""; end;
          if SearchInArray(BufField,Field,True)=-1:
             n=InsertInArraySort(BufField,Field); 
             InsertInArray(BufColorBg,n,BgColor);
          fi;
       fi;
      od;
     od;
  fi;
 od;
 --Повторяется секция (не ручная), иначе падеж
 ClearVariable(Buf);
 ClearVariable(BufI);
 s=1;   Buf[s]="Наличные2_"; BufI[s]=coTeal;  --S2_2
 s=s+1; Buf[s]="Наим"; BufI[s]=coAqua;  --S3_1
 s=s+1; Buf[s]="Ном";  BufI[s]=coAqua;  --S3_1
 s=s+1; Buf[s]="Дат";  BufI[s]=coAqua;  --S3_1
 ss=LengthOfArray(Buf);
 for s=1..ss do
  if SearchInArray(BufField,Buf[s],True)=-1:
     n=InsertInArraySort(BufField,Buf[s]);
     InsertInArray(BufColorBg,n,BufI[s]);
  fi;
 od;
 --
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
 --
 for n=1..MaxЛистГЭК do
  if n=1 or n=7 or n=13 or n=19 or n=25: x=60; fi;
  if FindObject("Picture"+Str(n),Obj): Obj.Left=X; fi;
  if FindObject("Bevel"+Str(n),Obj): Obj.Left=X; fi;
  if FindObject("Label"+Str(n),Obj): Obj.Left=X;fi;
  x=x+310;
 od;
end;

Proc Оформление;
var s,ss,c,r,cc,rr,n:i;
var Obj: Object;
var RO,isИзм,Flag:L;
var Field:S;
var Rec:Record;
 Rec=ЕстьИзменения;
 if Договор_Пре=nil: isИзм=False; else isИзм=RecordExists(crdДоговор,Договор_Пре); fi;
 rbФЗ0.Enabled=Rec=nil and not Рег;
 rbФЗ1.Enabled=Rec=nil and not Рег;
 rbФЗ2.Enabled=Rec=nil and not Рег;
 cbРег.Enabled=Rec=nil;
 cbУчетБО.Enabled=Рег and Rec=nil;
 cbУчетБО_ФК.Enabled=not УчетБО and Rec=nil;
 cbУчетРеестрОФК.Enabled=not Рег and Rec=nil;
 cbРегРеестрОФК.Enabled=Учет_Реестр_ОФК and Rec=nil;
 btnИзм.Enabled=(Rec=nil) and Рег;
 btnИморт.Enabled=not isИзм and not Рег;
 btnИзменения.Enabled=not Rec=nil;
 btnОригинал.Enabled=not Договор_Пре=nil;
 cbИспол.Enabled=((not Аннулирован and ver=0) or ver>0) and Rec=nil;
 cbАннул.Enabled=((not Исполнен and ver=0) or ver>0) and Rec=nil;
 cbЗакрытьДок.Visible=Раб.Бюджет2005.Сетевая;
 btnУдалить.Enabled=not Рег and Rec=nil;
 btnUsr.Visible=not extBtnUsrOnClick="" and not extBtnUsrName="";
 btnUsr.Caption=extBtnUsrName;
 --
 S0.Cell(2,3,CellFontColor,if(НеДейств,coRed,coGreen));
 --
 S1.Row(24,RowVisible,not Настр.Общ_Справ1="" or not Общ_Призн1=""); S1.Row(25,RowVisible,not Настр.Общ_Справ1="" or not Общ_Призн1="");
 S1.Row(26,RowVisible,not Настр.Общ_Справ2="" or not Общ_Призн2=""); S1.Row(27,RowVisible,not Настр.Общ_Справ2="" or not Общ_Призн2="");
 --
 ClearVariable(Buf);
 for s=1..4 do
  Buf[s]="S"+Str(s);
 od;
 Buf[s]="S10";
 s=s+1; Buf[s]=if(Контр_Банк2=0,"ХЗ","S2_1");
 s=s+1; Buf[s]=if(Контр2=0,"ХЗ","S2_2");
 s=s+1; Buf[s]=if(ДокОсн=0,"ХЗ","S3_1");
 s=s+1; Buf[s]="S3_2";
 s=s+1; Buf[s]="S30";
 s=s+1; Buf[s]="S32";
 s=s+1; Buf[s]="S40";
 --
 ss=LengthOfArray(Buf);
 for s=1..ss do
  if FindObject(Buf[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,"",False));
        n=SearchInArray(BufField,Field,True);
       except
        n=-1;
       end;
       if not n=-1:
          if Buf[s]="S3":
             RO=Рег or (isИзм and (BufField[n]="ДатаРег" or BufField[n]="НомерДок" or BufField[n]="НомерДокДоп"));
            |Buf[s]="S4":
             if (Рег or not Rec=nil) and Учет_Реестр_ОФК and not Рег_Реестр_ОФК and (BufField[n]="Ном_Реестр_ОФК" or BufField[n]="Дата_Реестр_ОФК"): RO=False;
               |true: RO=Рег or not Rec=nil;
             fi;
            |True:
             RO=Рег or not Rec=nil;
          fi;
          Try
           if RO:
              Obj.Cell(r,c,CellFontColor,coBlack);
              Obj.Cell(r,c,CellBgColor,coTransparent);
              Obj.Cell(r,c,CellReadOnly,True);
             else
              Obj.Cell(r,c,CellFontColor,BufColorFo[n]);
              Obj.Cell(r,c,CellBgColor,BufColorBg[n]);
              Obj.Cell(r,c,CellReadOnly,False);
           fi;
          Except
          end;
       fi;
      od;
      Field=asString(Obj.Cell(r,1,CellContents,""));
      if Field="." : Obj.Row(r,RowVisible,Учет_Реестр_ОФК);
        |Field="..": Obj.Row(r,RowVisible,not Учет_Реестр_ОФК and ver=0);
      fi;
      Field=asString(Obj.Cell(r,cc,CellContents,""));
      if Field="@Год2":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод2 ,2)=0 or not Год2 ="" or visГод2));
        |Field="@Год3":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод3 ,2)=0 or not Год3 ="" or visГод3));
        |Field="@Год4":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод4 ,2)=0 or not Год4 ="" or visГод4));
        |Field="@Год5":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод5 ,2)=0 or not Год5 ="" or visГод5));
        |Field="@Год6":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод6 ,2)=0 or not Год6 ="" or visГод6));
        |Field="@Год7":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод7 ,2)=0 or not Год7 ="" or visГод7));
        |Field="@Год8":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод8 ,2)=0 or not Год8 ="" or visГод8));
        |Field="@Год9":           Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод9 ,2)=0 or not Год9 ="" or visГод9));
        |Field="@Год10":          Obj.Row(r,RowVisible,(Учет_Реестр_ОФК or ver>0) and (not Round(СумГод10,2)=0 or not Год10="" or visГод10));
        |Field="@ver=0":          Obj.Row(r,RowVisible,ver=0);
        |Field="@секрет>0":       Obj.Row(r,RowVisible,секрет>0);
        |Field="@секрет=0":       Obj.Row(r,RowVisible,секрет=0);
        |Field="@ВидДок":         Obj.Row(r,RowVisible,not (НаимДок.Наим="государственный контракт" or НаимДок.Наим="договор" or НаимДок.Наим="соглашение") or НаимДок.Наим="" or ВидДок="");
        |Field="@Содерж2":        Obj.Row(r,RowVisible,not Содерж2="" or visСд2);
        |Field="@Содерж3":        Obj.Row(r,RowVisible,not Содерж3="" or visСд3);
        |Field="@Содерж4":        Obj.Row(r,RowVisible,not Содерж4="" or visСд4);
        |Field="@ИДО1":           Obj.Row(r,RowVisible,ДатаРег<1.1.2015);
        |Field="@ИДО2":           Obj.Row(r,RowVisible,(not ИнфоДокОсн2="" or visИнфоДокОсн2) and ДатаРег<1.1.2015);
        |Field="@ИДО3":           Obj.Row(r,RowVisible,(not ИнфоДокОсн3="" or visИнфоДокОсн3) and ДатаРег<1.1.2015);
        |Field="@ИДО4":           Obj.Row(r,RowVisible,(not ИнфоДокОсн4="" or visИнфоДокОсн4) and ДатаРег<1.1.2015);
        |Field="@ФЦ1":            Obj.Row(r,RowVisible,ДатаРег>=1.1.2015);
        |Field="@ФЦ2":            Obj.Row(r,RowVisible,(not ФормулаЦены2="" or visФЦ2) and ДатаРег>=1.1.2015);
        |Field="@ФЦ3":            Obj.Row(r,RowVisible,(not ФормулаЦены3="" or visФЦ3) and ДатаРег>=1.1.2015);
        |Field="@ФЦ4":            Obj.Row(r,RowVisible,(not ФормулаЦены4="" or visФЦ4) and ДатаРег>=1.1.2015);
        |Field="@ИсполКмнт":      Obj.Row(r,RowVisible,ДатаРег<1.1.2015 and (ТипИзм=99 or Исполнен));
        |Field="@<1.1.2015":      Obj.Row(r,RowVisible,ДатаРег<1.1.2015);
        |Field="@1.1.2015":       Obj.Row(r,RowVisible,ДатаРег>=1.1.2015);
        |Field="@ГК1.1.2015":     Obj.Row(r,RowVisible,Учет_Реестр_ОФК and ДатаРег>=1.1.2015);
        |Field="@НеАннул":        Obj.Row(r,RowVisible,not ТипИзм=-99);
        |Field="@Испол":          Obj.Row(r,RowVisible,ТипИзм=99 or Исполнен);
        |Field="@Аннул":          Obj.Row(r,RowVisible,ТипИзм=-99 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015));
        |Field="@ИА":             Obj.Row(r,RowVisible,Abs(ТипИзм)=99);
        |Field="@НеИА":           Obj.Row(r,RowVisible,not Abs(ТипИзм)=99);
      fi;
     od;
  fi;
 od;
 --
 Flag=IsReadOnly(crdДоговор) or ClosedModFob;
 --Загл2
 S0.Cell(2,3,CellReadOnly,Flag); --#Загл2
 --Дополнительные сведения
 S4.Cell(1,29,CellReadOnly,Flag); --#БО_
 S4.Cell(1,50,CellReadOnly,Flag); --#БО_И
 S4.Cell(1,62,CellReadOnly,Flag); --#БО_А
 --Начисления неустоек (штрафов, пеней) (при наличии)
 S39.Visible=(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015) and Страница=3;
 S40.Visible=(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015) and Страница=3;
 S41.Visible=(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015) and Страница=3;
 --Расшифровка исполнения / расторжения по документам
 for c=10..15 do
  S29.Column(c,ColVisible,ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015);
  S30.Column(c,ColVisible,ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015);
  S31.Column(c,ColVisible,ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015);
 od;
 for c=7..8 do
  S29.Column(c,ColWidth,if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,300,520));
  S30.Column(c,ColWidth,if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,300,520));
  S31.Column(c,ColWidth,if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015,300,520));
 od;
 --КБК
 S5.Cell(2,6,CellReadOnly,Flag); --#ПросмотрКБК
 S5.Cell(2,8,CellReadOnly,Flag); --#ОбновКБК
 S7.Cell(1,17,CellReadOnly,Flag); --#БО_
 --Предм
 S9.Cell(2,3,CellReadOnly,Flag);
 S9.Cell(2,5,CellReadOnly,Flag);
 --ГЭК
 S13.Cell(2,3,CellReadOnly,Flag); --РедГЭК
 S13.Cell(2,7,CellReadOnly,Flag); --ОбновитьГЭК
 S13.Cell(4,3,CellReadOnly,Flag); --ГЭКвPDF
 S13.Cell(4,5,CellReadOnly,Flag); --ПутьPDF
 --Список док.
 S15.Cell(2,3,CellReadOnly,Flag); --ОбновСвязДок
 for c=2..12 do
  S16.Cell(1,c,CellReadOnly,Flag);
 od;
 --История
 S18.Cell(2,3,CellReadOnly,Flag); --ОбновИсторДок
 S18.Cell(2,7,CellReadOnly,Flag); --СводкаИзм
 for c=2..14 do
  S19.Cell(1,c,CellReadOnly,Flag);
 od;
 --Прикрепленные документы
 S22.Cell(2,3,CellReadOnly,Flag); --ОбновФайл
 S22.Cell(2,5,CellReadOnly,Flag); --КопирФайл
 for c=6..14 do
  if not (c=8 or c=9 or c=11 or c=12 or c=13):
     S24.Cell(1,c,CellReadOnly,Flag);
  fi;
 od;
 --ГЭК 2
 S26.Cell(2,3,CellReadOnly,Flag); --СканГЭК2
 S26.Cell(4,3,CellReadOnly,Flag); --ОбновитьГЭК
 S26.Cell(4,7,CellReadOnly,Flag); --ГЭКвPDF
 S26.Cell(4,10,CellReadOnly,Flag); --ПутьPDF
 for c=2..7 do
  S27.Cell(1,c,CellReadOnly,Flag);
 od;
end;

Proc ОчиститьКБК;
 ClearVariable(УпрКБК);
 ClearVariable(ВД);
 ClearVariable(КБК0);
 ClearVariable(КБК);
 ClearVariable(Призн);
 ClearVariable(СумКБК);
 ClearVariable(МФ);
 ClearVariable(СумКБКГод1);
 ClearVariable(СумКБКГод2);
 ClearVariable(СумКБКГод3);
 ClearVariable(СумКБКГод4);
 ClearVariable(СумКБКГод5);
 ClearVariable(СумКБКГод6);
 ClearVariable(СумКБКГод7);
 ClearVariable(СумКБКГод8);
 ClearVariable(СумКБКГод9);
 ClearVariable(СумКБКГод10);
 ClearVariable(ПредмКБК);
 ClearVariable(ПредмКБК2);
 ClearVariable(ПредмКБК3);
 ClearVariable(ПредмКБК4);
 ClearVariable(ПримечКБК);
 ClearVariable(ФАИП);
 ClearVariable(ФАИП_);
end;

Proc ОчиститьТМЦ;
 ClearVariable(УпрТМЦ);
 ClearVariable(КВОЗ);
 ClearVariable(НаимТМЦ);
 ClearVariable(ОКСМ);
 ClearVariable(ОКДП_Гр);
 ClearVariable(ОКП);
 ClearVariable(ЕдИзм);
 ClearVariable(Цена);
 ClearVariable(Кол);
 ClearVariable(СумТМЦ);
 ClearVariable(ФактКол);
 ClearVariable(ФактСумТМЦ);
end;

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

Proc ПоУмолчанию;
 if GUID="": ТипДок=0; fi;
 Настр=ПолучитьНастр;
 Настр_GUID=Настр.GUID;
 if Учр=nil:
    Учр=Настр.Учр;
    Учр_Банк_Свед=Настр.Учр_Банк_Свед;
    Учр_Банк=Настр.Учр_Банк;
    ДолжнРук=Настр.ДолжнРук;
    ФиоРук=Настр.ФиоРук;
    ПрефиксНомСвед=hПрефиксНомСвед;
    НаимДок=Настр.НаимДок;
    НаимБюдж=Настр.НаимБюдж;
    ИстФин=Настр.ИстФин;
    ИстФин_ОКТМО=Настр.ИстФин_ОКТМО;
    КодБюдж=Настр.КодБюдж;
    ВидВнеБюдж=Настр.ВидВнеБюдж;
    ОКВ=Настр.ОКВ;
    if Учр=nil: Учр=Раб.Бюджет2005.НашРекв; fi;
    if not Учр=nil:
       if Учр_Банк=nil: Учр_Банк=Раб.Бюджет2005.БанкСчет(Учр,False); fi;
       if ДолжнРук="": ДолжнРук=GetCardFieldS("Контрагент",Учр,"ДолжнРук"); fi;
       if ФИОРук="": ФИОРук=GetCardFieldS("Контрагент",Учр,"ФИОРук"); fi;
    fi;
    Учет_Реестр_ОФК=True;
    if ИстФин="" or ИстФин_ОКТМО="": ИстФин=hИстФин; ИстФин_ОКТМО=hИстФин_ОКТМО; fi;
    if КодБюдж="": КодБюдж=hКодБюдж; fi;
    if НаимБюдж="": НаимБюдж=hНаимБюдж; fi;
 fi;
 GUID=GetGUID;
 if ДатаРег=1.1.100: ДатаРег=ToDay; ТекГод=Str(Year(ДатаРег)); fi;
 if ОКВ="": ОКВ="643"; fi;
 СчДеб5=DefСчДеб5;
 СчКре5=DefСчКре5;
 Рег=False;
 УчетБО=False;
 Рег_Реестр_ОФК=False;
 Аннулирован=False;
 Исполнен=False;
 ClosedModFob=False;
 Ном_Реестр_ОФК="";
 Дата_Реестр_ОФК=1.1.100;
 НомРейс=0;
 ДатаРейс=1.1.100;
 verОКДП_Гр=273;
 Код="";
 Признак="";
 Договор_Пре=nil;
 БО=nil;
 БО_Изм=nil;
 Признак_Ref=nil;
 НеДейств=False;
 УчетБО_ФК=True;
 БО_GUID_FK="";
 ФЗ=1;
 ver=1;
end;

Func РасчетКБК:L;
var OWA,n,nr,s:I;
var Flag:L;
var Obj:Object;
 ОчиститьКБК;
 Flag=(Учет_Реестр_ОФК or ver>0);
 if FindObject("S5",Obj):
    Obj.Column(9 ,ColVisible,not Flag);
    Obj.Column(10,ColVisible,Секрет>0 and Учет_Реестр_ОФК);
    Obj.Column(11,ColVisible,Flag and not Год1="");
    Obj.Column(12,ColVisible,Flag and not Год2="");
    Obj.Column(13,ColVisible,Flag and not Год3="");
    Obj.Column(14,ColVisible,Flag and not Год4="");
    Obj.Column(15,ColVisible,Flag and not Год5="");
    Obj.Column(16,ColVisible,Flag and not Год6="");
    Obj.Column(17,ColVisible,Flag and not Год7="");
    Obj.Column(18,ColVisible,Flag and not Год8="");
    Obj.Column(19,ColVisible,Flag and not Год9="");
    Obj.Column(20,ColVisible,Flag and not Год10="");
    Obj.Column(26,ColVisible,Исполнен or Аннулирован);
 fi;
 for s=6..8 do
  if FindObject("S"+Str(s),Obj):
     Obj.Column(4 ,ColVisible,Секрет>0 and Учет_Реестр_ОФК);
     Obj.Column(7 ,ColVisible,not Flag);
     Obj.Column(8 ,ColVisible,Flag and not Год1="");
     Obj.Column(9 ,ColVisible,Flag and not Год2="");
     Obj.Column(10,ColVisible,Flag and not Год3="");
     Obj.Column(11,ColVisible,Flag and not Год4="");
     Obj.Column(12,ColVisible,Flag and not Год5="");
     Obj.Column(13,ColVisible,Flag and not Год6="");
     Obj.Column(14,ColVisible,Flag and not Год7="");
     Obj.Column(15,ColVisible,Flag and not Год8="");
     Obj.Column(16,ColVisible,Flag and not Год9="");
     Obj.Column(17,ColVisible,Flag and not Год10="");
     Obj.Column(23,ColVisible,Исполнен or Аннулирован);
  fi;
 od;
 OWA=OpenWorkArea(crdДоговор_КБК,"НП","Договор="+RecordToString(Current));
 Try
  Nr=Records(OWA);
  ShowProgress(Nr,"Расчет....");
  for n=1..nr do
   ProgressPos(n);
   InsertFrame(УпрКБК,УпрКБК+1);
   ВД[УпрКБК]=GetFieldS(OWA,n,"ВД");
   if Секрет>0 and Учет_Реестр_ОФК:
      КБК0[УпрКБК]=GetFieldS(OWA,n,"КБК0");
   fi;
   КБК[УпрКБК]=GetFieldS(OWA,n,"КБК");
   Призн[УпрКБК]=GetFieldS(OWA,n,"Призн");
   СумКБК[УпрКБК]=GetFieldN(OWA,n,"Сум");
   МФ[УпрКБК]=GetFieldS(OWA,n,"МФ");
   СумКБКГод1 [УпрКБК]=GetFieldN(OWA,n,"СумГод1");
   СумКБКГод2 [УпрКБК]=GetFieldN(OWA,n,"СумГод2");
   СумКБКГод3 [УпрКБК]=GetFieldN(OWA,n,"СумГод3");
   СумКБКГод4 [УпрКБК]=GetFieldN(OWA,n,"СумГод4");
   СумКБКГод5 [УпрКБК]=GetFieldN(OWA,n,"СумГод5");
   СумКБКГод6 [УпрКБК]=GetFieldN(OWA,n,"СумГод6");
   СумКБКГод7 [УпрКБК]=GetFieldN(OWA,n,"СумГод7");
   СумКБКГод8 [УпрКБК]=GetFieldN(OWA,n,"СумГод8");
   СумКБКГод9 [УпрКБК]=GetFieldN(OWA,n,"СумГод9");
   СумКБКГод10[УпрКБК]=GetFieldN(OWA,n,"СумГод10");
   ПредмКБК [УпрКБК]=GetFieldS(OWA,n,"Предм");
   ПредмКБК2[УпрКБК]=GetFieldS(OWA,n,"Предм2");
   ПредмКБК3[УпрКБК]=GetFieldS(OWA,n,"Предм3");
   ПредмКБК4[УпрКБК]=GetFieldS(OWA,n,"Предм4");
   ПримечКБК[УпрКБК]=GetFieldS(OWA,n,"Примеч");
   ФАИП[УпрКБК]=GetFieldR(OWA,n,"ФАИП");
   if RecordExists("РПО_ФАИП",ФАИП[УпрКБК]):
      ФАИП_[УпрКБК]=GetFieldS(OWA,n,"ФАИП.Код")+Chr(13)+GetFieldS(OWA,n,"ФАИП.Наим1");
     else
      if not ФАИП[УпрКБК]=nil:
         ФАИП_[УпрКБК]="Ошибка! ФАИП не найден "+RecordToString(ФАИП[УпрКБК]);
      fi;
   fi;
   ФактОплКБК[УпрКБК]=GetFieldN(OWA,n,"ФактОпл");
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ^True;
end;

Func РасчетТМЦ:L;
var OWA,n,nr:I;
var Flag:L;
 Flag=not ФЗ=0 and (Исполнен or Аннулирован or Abs(ТипИзм)=99);
 S9.Column (7,ColVisible,Flag); --Код страны происхождения (производитель товара)
 S10.Column(5,ColVisible,Flag); --Код страны происхождения (производитель товара)
 S11.Column(5,ColVisible,Flag); --Код страны происхождения (производитель товара)
 S12.Column(5,ColVisible,Flag); --Код страны происхождения (производитель товара)
 Flag=ДатаДок>=01.01.100 and Секрет<2 and ФЗ<1;
 S9.Column (8,ColVisible,Flag); --Номенклатурная группа
 S10.Column(6,ColVisible,Flag); --Номенклатурная группа
 S11.Column(6,ColVisible,Flag); --Номенклатурная группа
 S12.Column(6,ColVisible,Flag); --Номенклатурная группа
 ОчиститьТМЦ;
 OWA=OpenWorkArea(crdДоговор_ТМЦ,"НП","Договор="+RecordToString(Current));
 Try
  Nr=Records(OWA);
  ShowProgress(Nr,"Расчет....");
  for n=1..nr do
   ProgressPos(n);
   InsertFrame(УпрТМЦ,УпрТМЦ+1);
   КВОЗ[УпрТМЦ]=GetFieldS(OWA,n,"КВОЗ");
   НаимТМЦ[УпрТМЦ]=GetFieldS(OWA,n,"НаимТМЦ");
   ОКСМ[УпрТМЦ]=GetFieldS(OWA,n,"ОКСМ");
   ОКДП_Гр[УпрТМЦ]=GetFieldS(OWA,n,"ОКДП_Гр");
   ОКП[УпрТМЦ]=GetFieldS(OWA,n,"ОКП");
   ПоЦене[УпрТМЦ]=GetFieldL(OWA,n,"ПоЦене");
   ЕдИзм[УпрТМЦ]=GetFieldS(OWA,n,"ЕдИзм");
   Цена[УпрТМЦ]=GetFieldN(OWA,n,"Цена");
   Кол[УпрТМЦ]=Round(GetFieldN(OWA,n,"Кол"),тчнКол);
   СумТМЦ[УпрТМЦ]=GetFieldN(OWA,n,"Сум");
   ФактКол[УпрТМЦ]=GetFieldN(OWA,n,"ФактКол");
   ФактСумТМЦ[УпрТМЦ]=Round(GetFieldN(OWA,n,"ФактСум"),тчнКол);
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ^True;
end;

Func РасчетГЭК:L;
var Y,i:I;
var Txt:S;
var Obj:Object;
var Flag,Vs:L;
 ClearVariable(ЛистГЭК);
 ClearVariable(ФайлГЭК);
 Y=AsInteger(S14.Row(1,RowTop,""));
 nГЭК=0;
 if Страница=6: 
    nГЭК=Max(Раб.Вспом.Сканер.ЧитатьГЭК(crdДоговор,RecordToInteger(Current),"jpg",true),0); 
    CopyArray(Раб.Вспом.Сканер.ФайлГЭК,ФайлГЭК);
    Template.Freeze(1,y+3);
 fi;
 y=y+10;
 for i=1..MaxЛистГЭК do
  Txt="<нет изображения>";
  Flag=(Страница=6 and (nГЭК>=i or i=1));
  ЛистГЭК[i]=if(Flag,"Лист №"+Str(i),"");
  if FindObject("Picture"+Str(i),Obj):
     Vs=(Flag and not ФайлГЭК[i]="");
     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;
     if not AsLogical(Obj.Visible)=Vs: Obj.Visible=Vs; 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;
 ^True;
end;

Proc РасчетСвязДок(Sender:S);
var t,tt,z,y,i,ii,OWA,x,n,c,cc,f,ff:i;
var Rec: Record;
var Crd,tmp,tmp2,Призн_,sss:S;
var tДат,ДК:D;
var First,isNet:L;
 if Страница=7:
    Y=AsInteger(S16.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    Exit;
 fi;
 ClearVariable(Buf);
 ClearVariable(УпрДок);
 ClearVariable(ДокCU);
 ClearVariable(ДокMU);
 ClearVariable(ДокОпр);
 ClearVariable(ДокНаим);
 ClearVariable(ДокНом);
 ClearVariable(ДокДат);
 ClearVariable(ДокКмнт);
 ClearVariable(ДокТекРед);
 ClearVariable(ДокTr);
 ClearVariable(ДокRec);
 ClearVariable(ДокCrd);
 Refresh;
 if Name_A("ДОГОВОР."+Признак)=" ": Exit; fi;
 isNet=Раб.Бюджет2005.Сетевая;
 Раб.ИмяПолеКарт.Инициализация;
 Раб.ИмяПолеКарт.Начать;
 ShowProgress(1,"Сбор данных...");
 Try
  --Собираем всю историю договора
  ClearVariable(BufR);
  AddInArray(BufR,True,False,Current);
  if not Sender="btnУдалить":
     OWA=OpenWorkArea(crdДоговор,"","UKey="+RecordToString(Договор_Пре));
     Try
      While not Records(OWA)=0 do
       AddInArray(BufR,True,False,GetRecordKey(OWA,1));
       SetFilter(OWA,"UKey="+RecordToString(GetFieldR(OWA,1,"Договор_Пре")));
      od;
      SetFilter(OWA,"Договор_Пре="+RecordToString(Current));
      While not Records(OWA)=0 do
       AddInArray(BufR,True,False,GetRecordKey(OWA,1));
       SetFilter(OWA,"Договор_Пре="+RecordToString(GetRecordKey(OWA,1)));
      od;
     Finally
      CloseWorkArea(OWA);
     end;
  fi;
  --Собираем всю историю договора
  --Берем все признаки БО
  tmp="";
  tt=LengthOfArray(BufR);
  for t=1..tt do
   tmp=Раб.Бюджет2005.Объединить(tmp,"ДОГОВОР="+RecordToString(BufR[t])," or ");
  od;
  if not tt=0: tmp="("+tmp+")"; fi;
  tmp=Раб.Бюджет2005.Объединить("(ТипДок=0 or ТипДок=2)",tmp," and ");
  Призн_="";
  OWA=OpenWorkArea(crdБО,"Признак",tmp);
  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);
  if (Sender="btnУдалить" or Sender="cbРег") and RecordExists(crdДоговор,Договор_Пре):
     if not Призн_="":
        Призн_=Раб.Бюджет2005.Объединить(Призн_,"~ДОГОВОР."+Признак+"!","&");
     fi;
    else
     Призн_=Раб.Бюджет2005.Объединить(Призн_,"ДОГОВОР."+Признак+"!","|");
  fi;
  if not Призн_="":
     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
         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;
     od;
  fi;
  --
  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) ?
  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));
   if not Buf[c]=crdДоговор_КБК and not Buf[c]=crdДоговор_ТМЦ:
      ff=GetCardFileFields(Buf[c],BufF,mtlREF);
      if not ff=0:
         OWA=OpenWorkArea(Buf[c],"","1=0");
         Try
          for f=1..ff do
           if GetCardFileByRefField(Buf[c],BufF[f])=crdДоговор:
              tmp2="";
              tt=LengthOfArray(BufR);
              for t=1..tt do
               tmp2=Раб.Бюджет2005.Объединить(tmp2,BufF[f]+"="+RecordToString(BufR[t])," or ");
              od;
              SetFilter(OWA,tmp2);
              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]=if(GetFieldR(OWA,t,BufF[f])=Current,"*","");
                  ДокНаим[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;
   fi;
  od;
 Finally
  CloseProgress;
  Раб.ИмяПолеКарт.Закончить;
 end;
end;

Proc РасчетИсторДок;
var OWA,nr,y,ТипИзм_:I;
var tmp:S;
var Rec: Record;
 if Страница=8:
    Y=AsInteger(S19.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    Exit;
 fi;
 ClearVariable(УпрИзм);
 ClearVariable(ИзмCU);
 ClearVariable(ИзмMU);
 ClearVariable(ИзмТек);
 ClearVariable(ИзмРег);
 ClearVariable(ИзмНаим);
 ClearVariable(ИзмНом);
 ClearVariable(ИзмДат);
 ClearVariable(ИзмТС);
 ClearVariable(ИзмСтат);
 ClearVariable(ИзмБО);
 ClearVariable(ИзмКмнт);
 ClearVariable(ИзмRec);
 ClearVariable(ИзмБОRec);
 ShowProgress(3,"Сбор данных...");
 InsertFrame(УпрИзм,УпрИзм+1);
 ИзмCU[УпрИзм]=DateToString(CreateTime)+" "+CreatedUser;
 ИзмMU[УпрИзм]=DateToString(UpdateTime)+" "+ModifiedUser;
 ИзмТек[УпрИзм]="*";
 ИзмРег[УпрИзм]=if(Abs(ТипИзм)=4 or ТипИзм=0,ДатаРег,ДатаИзм);
 ИзмНаим[УпрИзм]=if(Abs(ТипИзм)=4 or ТипИзм=0,НаимДок.Наим,if(НаимИзм=nil,НаимДок.Наим,НаимИзм.Наим));
 ИзмНом[УпрИзм]=if(Abs(ТипИзм)=4 or ТипИзм=0,НомерДок,if(НомерИзм="",НомерДок,НомерИзм));
 ИзмДат[УпрИзм]=if(Abs(ТипИзм)=4 or ТипИзм=0,ДатаДок,if(ДатаДИзм=1.1.100,ДатаДок,ДатаДИзм));
 ИзмТС[УпрИзм]=if(ТипСвед=0:"Первич."|ТипИзм=1:"Доп. согл."|ТипИзм=2:"Исправл."|ТипИзм=3:"Внутр. изм."|Abs(ТипИзм)=4:"Перерег."|ТипИзм=5:"Аннул. БО"|True:"Изменен.");
 ИзмСтат[УпрИзм]=if(Исполнен:"Исполнен"|Аннулирован:"Расторгнут"|not НеДейств:"Действ."|GUID="NEW":"Новый"|True:"Недейств.");
 if УчетБО:
    ИзмБО[УпрИзм]=БО.Признак+if(БО.ТипДок=1,"/"+Str(БО.Изм),"");
    if not БО.РегНомер="":
       ИзмБО[УпрИзм]=ИзмБО[УпрИзм]+" ("+БО.РегНомер+")";
    fi;
    ИзмБО[УпрИзм]=Раб.Бюджет2005.Объединить(ИзмБО[УпрИзм],БО_Изм.Признак+if(БО_Изм.ТипДок=1,"/"+Str(БО_Изм.Изм),""),"; ");
    if not БО_Изм.РегНомер="":
       ИзмБО[УпрИзм]=ИзмБО[УпрИзм]+" ("+БО_Изм.РегНомер+")";
    fi;
 fi;
 ИзмКмнт[УпрИзм]=if(ТипИзм=0:Содерж|Abs(ТипИзм)=4:"Перерегистрация на очередной год ("+ТекГод+")"|ТипИзм=99:ИсполКмнт|ТипИзм=-99:АннулКмнт|True:if(ОснИзм="",Содерж,ОснИзм));
 ИзмRec[УпрИзм]=Current;
 ИзмБОRec[УпрИзм]=Раб.Бюджет2005.Объединить(RecordToString(БО),RecordToString(БО_Изм)," ");
 ProgressPos(1);
 Rec=Договор_Пре;
 OWA=OpenWorkArea(crdДоговор,"","UKey="+RecordToString(Rec));
 Try
  nr=Records(OWA);
  While not nr=0 do
   InsertFrame(УпрИзм,1);
   ТипИзм_=GetFieldI(OWA,1,"ТипИзм");
   ИзмCU[1]=DateToString(GetFieldD(OWA,1,"CreateTime"))+" "+GetFieldS(OWA,1,"CreatedUser");
   ИзмMU[1]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+" "+GetFieldS(OWA,1,"ModifiedUser");
   ИзмРег[1]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаРег"),GetFieldD(OWA,1,"ДатаИзм"));
   if ТипИзм_=4 or ТипИзм_=0:
      if not GetFieldR(OWA,1,"НаимДок")=nil: ИзмНаим[1]=GetFieldS(OWA,1,"НаимДок.Наим"); fi;
     else
      if not GetFieldR(OWA,1,"НаимИзм")=nil: 
         ИзмНаим[1]=GetFieldS(OWA,1,"НаимИзм.Наим");
        else
         if not GetFieldR(OWA,1,"НаимДок")=nil: 
            ИзмНаим[1]=GetFieldS(OWA,1,"НаимДок.Наим"); 
         fi;
      fi;
   fi;
   ИзмНом[1]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldS(OWA,1,"НомерДок"),if(GetFieldS(OWA,1,"НомерИзм")="",GetFieldS(OWA,1,"НомерДок"),GetFieldS(OWA,1,"НомерИзм")));
   ИзмДат[1]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаДок"),if(GetFieldD(OWA,1,"ДатаДИзм")=1.1.100,GetFieldD(OWA,1,"ДатаДок"),GetFieldD(OWA,1,"ДатаДИзм")));
   ИзмТС[1]=if(GetFieldI(OWA,1,"ТипСвед")=0:"Первич."|ТипИзм_=1:"Доп. согл."|ТипИзм_=2:"Исправл."|ТипИзм_=3:"Внутр. изм."|ТипИзм_=4:"Перерег."|True:"Изменен.");
   ИзмСтат[1]=if(GetFieldL(OWA,1,"Исполнен"):"Исполнен"|GetFieldL(OWA,1,"Аннулирован"):"Расторгнут"|not GetFieldL(OWA,1,"НеДейств"):"Действ."|GetFieldS(OWA,1,"GUID")="NEW":"Новый"|True:"Недейств.");
   if GetFieldL(OWA,1,"УчетБО"):
      if RecordExists(crdБО,GetFieldR(OWA,1,"БО")):
         ИзмБО[1]=GetFieldS(OWA,1,"БО.Признак")+if(GetFieldI(OWA,1,"БО.ТипДок")=1,"/"+Str(GetFieldI(OWA,1,"БО.Изм")),"");
         if not GetFieldS(OWA,1,"БО.РегНомер")="":
            ИзмБО[1]=ИзмБО[1]+" ("+GetFieldS(OWA,1,"БО.РегНомер")+")";
         fi;
        else
         if not GetFieldR(OWA,1,"БО")=nil:
            ИзмБО[1]=RecordToString(GetFieldR(OWA,1,"БО"));
         fi;
      fi;
      if RecordExists(crdБО,GetFieldR(OWA,1,"БО_Изм")):
         tmp=GetFieldS(OWA,1,"БО_Изм.Признак")+if(GetFieldI(OWA,1,"БО_Изм.ТипДок")=1,"/"+Str(GetFieldI(OWA,1,"БО_Изм.Изм")),"");
         ИзмБО[1]=Раб.Бюджет2005.Объединить(ИзмБО[1],tmp,"; ");
         if not GetFieldS(OWA,1,"БО_Изм.РегНомер")="":
            ИзмБО[1]=ИзмБО[1]+" ("+GetFieldS(OWA,1,"БО_Изм.РегНомер")+")";
         fi;
        else
         if not GetFieldR(OWA,1,"БО_Изм")=nil:
            ИзмБО[1]=Раб.Бюджет2005.Объединить(ИзмБО[1],RecordToString(GetFieldR(OWA,1,"БО_Изм")),"; ");
         fi;
      fi;
   fi;
   ИзмКмнт[1]=if(ТипИзм_=0:GetFieldS(OWA,1,"Содерж")|ТипИзм_=4:"Перерегистрация на очередной год ("+GetFieldS(OWA,1,"ТекГод")+")"|ТипИзм_=99:GetFieldS(OWA,1,"ИсполКмнт")|ТипИзм_=-99:GetFieldS(OWA,1,"АннулКмнт")|True:if(GetFieldS(OWA,1,"ОснИзм")="",GetFieldS(OWA,1,"Содерж"),GetFieldS(OWA,1,"ОснИзм")));
   ИзмRec[1]=Rec;
   ИзмБОRec[1]=Раб.Бюджет2005.Объединить(RecordToString(GetFieldR(OWA,1,"БО")),RecordToString(GetFieldR(OWA,1,"БО_Изм"))," ");
   Rec=GetFieldR(OWA,1,"Договор_Пре");
   SetFilter(OWA,"UKey="+RecordToString(Rec));
   nr=Records(OWA);
  od;
  if not Rec=nil and nr=0:
     InsertFrame(УпрИзм,1);
     ИзмНаим[1]="???";
     ИзмНом[1]="???";
     ИзмКмнт[1]="Экземпляр документа"+RecordToString(Rec)+" не найден";
  fi;
  ProgressPos(2);
  SetFilter(OWA,"Договор_Пре="+RecordToString(Current));
  nr=Records(OWA);
  While not nr=0 do
   InsertFrame(УпрИзм,УпрИзм+1);
   ТипИзм_=GetFieldI(OWA,1,"ТипИзм");
   ИзмCU[УпрИзм]=DateToString(GetFieldD(OWA,1,"CreateTime"))+" "+GetFieldS(OWA,1,"CreatedUser");
   ИзмMU[УпрИзм]=DateToString(GetFieldD(OWA,1,"UpdateTime"))+" "+GetFieldS(OWA,1,"ModifiedUser");
   ИзмРег[УпрИзм]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаРег"),GetFieldD(OWA,1,"ДатаИзм"));
   if ТипИзм_=4 or ТипИзм_=0:
      if not GetFieldR(OWA,1,"НаимДок")=nil: ИзмНаим[УпрИзм]=GetFieldS(OWA,1,"НаимДок.Наим"); fi;
     else
      if not GetFieldR(OWA,1,"НаимИзм")=nil: 
         ИзмНаим[УпрИзм]=GetFieldS(OWA,1,"НаимИзм.Наим"); 
        else
         if not GetFieldR(OWA,1,"НаимДок")=nil: 
            ИзмНаим[УпрИзм]=GetFieldS(OWA,1,"НаимДок.Наим"); 
         fi;
      fi;
   fi;
   ИзмНом[УпрИзм]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldS(OWA,1,"НомерДок"),if(GetFieldS(OWA,1,"НомерИзм")="",GetFieldS(OWA,1,"НомерДок"),GetFieldS(OWA,1,"НомерИзм")));
   ИзмДат[УпрИзм]=if(ТипИзм_=4 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаДок"),if(GetFieldD(OWA,1,"ДатаДИзм")=1.1.100,GetFieldD(OWA,1,"ДатаДок"),GetFieldD(OWA,1,"ДатаДИзм")));
   ИзмТС[УпрИзм]=if(GetFieldI(OWA,1,"ТипСвед")=0:"Первич."|ТипИзм_=1:"Доп. согл."|ТипИзм_=2:"Исправл."|ТипИзм_=3:"Внутр. изм."|ТипИзм_=4:"Перерег."|True:"Изменен.");
   ИзмСтат[УпрИзм]=if(GetFieldL(OWA,1,"Исполнен"):"Исполнен"|GetFieldL(OWA,1,"Аннулирован"):"Расторгнут"|not GetFieldL(OWA,1,"НеДейств"):"Действ."|GetFieldS(OWA,1,"GUID")="NEW":"Новый"|True:"Недейств.");
   if GetFieldL(OWA,1,"УчетБО"):
      if RecordExists(crdБО,GetFieldR(OWA,1,"БО")):
         ИзмБО[УпрИзм]=GetFieldS(OWA,1,"БО.Признак")+if(GetFieldI(OWA,1,"БО.ТипДок")=1,"/"+Str(GetFieldI(OWA,1,"БО.Изм")),"");
         if not GetFieldS(OWA,1,"БО.РегНомер")="":
            ИзмБО[УпрИзм]=ИзмБО[УпрИзм]+" ("+GetFieldS(OWA,1,"БО.РегНомер")+")";
         fi;
        else
         if not GetFieldR(OWA,1,"БО")=nil:
            ИзмБО[УпрИзм]=RecordToString(GetFieldR(OWA,1,"БО"));
         fi;
      fi;
      if RecordExists(crdБО,GetFieldR(OWA,1,"БО_Изм")):
         tmp=GetFieldS(OWA,1,"БО_Изм.Признак")+if(GetFieldI(OWA,1,"БО_Изм.ТипДок")=1,"/"+Str(GetFieldI(OWA,1,"БО_Изм.Изм")),"");
         ИзмБО[УпрИзм]=Раб.Бюджет2005.Объединить(ИзмБО[1],tmp,"; ");
         if not GetFieldS(OWA,1,"БО_Изм.РегНомер")="":
            ИзмБО[УпрИзм]=ИзмБО[УпрИзм]+" ("+GetFieldS(OWA,1,"БО_Изм.РегНомер")+")";
         fi;
        else
         if not GetFieldR(OWA,1,"БО_Изм")=nil:
            ИзмБО[УпрИзм]=Раб.Бюджет2005.Объединить(ИзмБО[1],RecordToString(GetFieldR(OWA,1,"БО_Изм")),"; ");
         fi;
      fi;
   fi;
   ИзмКмнт[УпрИзм]=if(ТипИзм_=0:GetFieldS(OWA,1,"Содерж")|ТипИзм_=4:"Перерегистрация на очередной год ("+GetFieldS(OWA,1,"ТекГод")+")"|ТипИзм_=99:GetFieldS(OWA,1,"ИсполКмнт")|ТипИзм_=-99:GetFieldS(OWA,1,"АннулКмнт")|True:if(GetFieldS(OWA,1,"ОснИзм")="",GetFieldS(OWA,1,"Содерж"),GetFieldS(OWA,1,"ОснИзм")));
   Rec=GetRecordKey(OWA,1);
   ИзмRec[УпрИзм]=Rec;
   ИзмБОRec[УпрИзм]=Раб.Бюджет2005.Объединить(RecordToString(GetFieldR(OWA,1,"БО")),RecordToString(GetFieldR(OWA,1,"БО_Изм"))," ");
   SetFilter(OWA,"Договор_Пре="+RecordToString(Rec));
   nr=Records(OWA);
  od;
  ProgressPos(3);
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

Proc РасчетФайл;
var Y:I;
 if Страница=10:
    Template.Field="Start";
    Y=AsInteger(S24.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    Exit;
 fi;
 ClearVariable(УпрФайл);
 ClearVariable(ФайлШтамп);
 ClearVariable(Файл);
 ClearVariable(ФайлКмнт);
 ClearVariable(ФайлCU);
 ClearVariable(ФайлMU);
 УпрФайл=Раб.Вспом.Файлы.ПоказСписок(crdДоговор,RecordToInteger(Current),blnДоговор+".Файл",blnДоговор+".ФайлКмнт",blnДоговор+".ФайлШтамп","",blnДоговор+".ФайлCU",blnДоговор+".ФайлMU",0);
end;

Proc РасчетГЭК2_(Crd:S; Rec: Record; k:i; p:i);
var OWA,n,nn,i1,i2:I;
var isNet:L;
 isNet=Раб.Бюджет2005.Сетевая;
 OWA=OpenWorkArea("РПО_СКАН_ДОК","Дата","Док='"+Crd+"' and Запись="+Str(RecordToInteger(Rec)));
 Try
  nn=Records(OWA);
  if not k=0: ShowProgress(nn*k,"Расчет..."); fi;
  for n=1..nn do
   if not k=0: ProgressPos((nn*p)+n); fi;
   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;
      ГЭК2Crd[УпрГЭК2]="РПО_СКАН_ДОК";
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc РасчетГЭК2;
var OWA,n,nn,y:I;
var isNet:L;
var Rec: Record;
 if Страница=11:
    Template.Field="Start";
    Y=AsInteger(S27.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    Exit;
 fi;
 isNet=Раб.Бюджет2005.Сетевая;
 ClearVariable(УпрГЭК2);
 ClearVariable(ДокCU);
 ClearVariable(ДокMU);
 ClearVariable(ГЭК2Дат);
 ClearVariable(ГЭК2Лист);
 ClearVariable(ГЭК2Кмнт);
 ClearVariable(ГЭК2Rec);
 ClearVariable(ГЭК2Crd);
 Try
  РасчетГЭК2_(crdДоговор,Current,4,1);
  РасчетГЭК2_(crdДоговор_Признак,Признак_Ref,4,2);
  OWA=OpenWorkArea("РПО_ДО","ДатаРег","Pos('"+Признак+".',Up(Признак))=1");
  Try
   nn=Records(OWA);
   ShowProgress(nn*4,"Расчет...");
   for n=1..nn do
    ProgressPos(nn+n);
    Rec=GetRecordKey(OWA,n);
    y=Раб.Вспом.Сканер.ЧитатьГЭК("РПО_ДО",RecordToInteger(Rec),"jpg",True);
    if not y=0:
       InsertFrame(УпрГЭК2,УпрГЭК2+1);
       ГЭК2Дат[УпрГЭК2]=GetFieldD(OWA,n,"ДатаДок");
       ГЭК2Лист[УпрГЭК2]=Str(y)+" / 0";
       ГЭК2Кмнт[УпрГЭК2]=GetFieldS(OWA,n,"НаимДок.Наим")+" №"+GetFieldS(OWA,n,"НомерДок")+" от "+DateToString(GetFieldD(OWA,n,"ДатаДок"))+" "+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;
       ГЭК2Crd[УпрГЭК2]="РПО_ДО";
    fi;
    РасчетГЭК2_("РПО_ДО",Rec,0,0);
   od;
  Finally
   CloseWorkArea(OWA);
  end;
  OWA=OpenWorkArea("РПО_ДО_ЗАЧЕТ_АВАНСА","ДатаРег","Pos('ДОГОВОР."+Признак+".',Up(Аванс_Призн))=1");
  Try
   nn=Records(OWA);
   ShowProgress(nn*4,"Расчет...");
   for n=1..nn do
    ProgressPos(nn+nn+nn+n);
    Rec=GetRecordKey(OWA,n);
    РасчетГЭК2_("РПО_ДО_ЗАЧЕТ_АВАНСА",Rec,0,0);
   od;
  Finally
   CloseWorkArea(OWA);
  end;
  SortSection(УпрГЭК2,"ГЭК2Дат");
  ГЭК2Дат[1]=ГЭК2Дат[1];
 Finally
  CloseProgress;
 end;
end;

Proc РасчетОбеспеч;
var OWA,OWAБИК,nnБИК,n,Iter,t,p,pp:I;
var Призн_,Crd,tД,tК,tmp:S;
var Rec: Record;
 ClearVariable(УпрОбеспеч);
 ClearVariable(ВидОбеспеч);
 ClearVariable(НомОбеспеч);
 ClearVariable(ДатОбеспеч);
 ClearVariable(СумОбеспеч);
 ClearVariable(НеустойкаОбеспеч);
 ClearVariable(Срок1Обеспеч);
 ClearVariable(Срок2Обеспеч);
 ClearVariable(ГарантОбеспеч);
 ClearVariable(ГарантСтатусОбеспеч);
 ClearVariable(ГарантБИКОбеспеч);
 ClearVariable(Сум1Обеспеч);
 ClearVariable(Дат1Обеспеч);
 ClearVariable(Сум2Обеспеч);
 ClearVariable(Дат2Обеспеч);
 ClearVariable(ПризнОбеспеч);
 ClearVariable(UKeyОбеспеч);
 ClearVariable(ДС_УпрОбеспеч);
 ClearVariable(ДС_СумОбеспеч);
 ClearVariable(ДС_Сум1Обеспеч);
 ClearVariable(ДС_Дат1Обеспеч);
 ClearVariable(ДС_Сум2Обеспеч);
 ClearVariable(ДС_Дат2Обеспеч);
 ClearVariable(ДС_ПризнОбеспеч);
 ClearVariable(ДС_ПП1Обеспеч);
 ClearVariable(ДС_ПП2Обеспеч);
 ClearVariable(ДС_UKeyОбеспеч);
 if Признак="": Exit; fi;
 Refresh;
 pp=0; p=0;
 for sign Призн_="СВР.ОИО.*" do
  pp=pp+1;
 od;
 for sign Призн_="ЗАБ10.*" do
  pp=pp+1;
 od;
 ShowProgress(pp,"Обработка данных...");
 OWAБИК=OpenWorkArea("РПО_BNKSEEK","");
 Try
  nnБИК=Records(OWAБИК);
  OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","");
  Try
   Раб.ИмяПолеКарт.Начать;
   Try
    for sign Призн_="СВР.ОИО.*" do
     p=p+1;
     ProgressPos(p);
     if SignUsed(Призн_):
        if ExistsTransactions("*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Призн_+"}",1.1.100,Dat(1,1,Year(ToDay)+1)):
           Rec=SignToRecord(Призн_,False);
           n=GetRecordNumber(OWA,Rec);
           if not n=0:
              if not GetFieldS(OWA,n,"Обяз_Призн")="ДОГОВОР."+Признак:
                 n=0;
              fi;
           fi;
           if not n=0:
              InsertFrame(ДС_УпрОбеспеч,ДС_УпрОбеспеч+1);
              Iter=ДС_УпрОбеспеч;
              if not n=0:
                 ДС_СумОбеспеч[Iter]=GetFieldN(OWA,n,"Сум");
              fi;
              ДС_ПризнОбеспеч[Iter]=Призн_;
              ДС_Сум1Обеспеч[Iter]=-Turn("*.3.304.01.730{"+ДС_ПризнОбеспеч[Iter]+"}",1.1.100,Dat(1,1,Year(ToDay)+1));
              ДС_Сум2Обеспеч[Iter]= Turn("*.3.304.01.830|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+ДС_ПризнОбеспеч[Iter]+"}",1.1.100,Dat(1,1,Year(ToDay)+1));
              ДС_UKeyОбеспеч[Iter]=Rec;
              for transaction t="*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*){"+Призн_+"}",1.1.100,Dat(1,1,Year(ToDay)+1),Reverse do
               crd=TransCardFile(t);
               rec=TransRecord(t);
               tД=TransDeb(t);
               tК=TransCre(t);
               if not rec=nil:
                  tmp=Раб.ИмяПолеКарт.ИмяПоля(Crd,"НаимКр")+" №"+Раб.ИмяПолеКарт.ЗначПоляС(Crd,"Номер",Rec)+" от "+DateToString(Раб.ИмяПолеКарт.ЗначПоляД(Crd,"Дата",Rec));
                 else
                  tmp="Проводка №"+Str(t);
               fi;
               if Match(tК,"*.3.304.01.730"):
                  if ДС_Дат1Обеспеч[Iter]=1.1.100:
                     ДС_Дат1Обеспеч[Iter]=TransDate(t);
                  fi;
                  ДС_ПП1Обеспеч[Iter]=Раб.Бюджет2005.Объединить(ДС_ПП1Обеспеч[Iter],tmp," ");
               fi;
               if Match(tД,"*.3.304.01.830") or Match(tД,"*.3.ЗАБ.00.830"):
                  if ДС_Дат2Обеспеч[Iter]=1.1.100:
                     ДС_Дат2Обеспеч[Iter]=TransDate(t);
                  fi;
                  ДС_ПП2Обеспеч[Iter]=Раб.Бюджет2005.Объединить(ДС_ПП2Обеспеч[Iter],tmp," ");
               fi;
              od;
              if Round(ДС_ОстОбеспеч[Iter],2)<0:
                 Trace("Внимание! Таблица 'Обеспечение исполнения обязательства (денежные средства)' строка №"+Str(Iter)+" Отрицательный остаток");
              fi;
           fi;  --if not n=0:
        fi; --if ExistsTransactions("*.3.304.01.*|*.3.ЗАБ.00.830{"+Призн_+"}",1.1.100,ToDay+1):
     fi; --if SignUsed(Призн_):
    od;
   Finally
    Раб.ИмяПолеКарт.Закончить;
   end;
   ----
   for sign Призн_="ЗАБ10.*" do
    p=p+1;
    ProgressPos(p);
    if SignUsed(Призн_):
       if ExistsTransactions("ЗАБ.10{"+Призн_+"&ДОГОВОР."+Признак+"}",1.1.100,Dat(1,1,Year(ToDay)+1)):
          InsertFrame(УпрОбеспеч,УпрОбеспеч+1);
          Iter=УпрОбеспеч;
          Rec=SignToRecord(Призн_,False);
          n=GetRecordNumber(OWA,Rec);
          if n=0:
             ВидОбеспеч[Iter]=ExtractWord(2,Призн_,".");
             НомОбеспеч[Iter]=Призн_;
            else
             ВидОбеспеч[Iter]=GetFieldS(OWA,n,"Вид");
             НомОбеспеч[Iter]=GetFieldS(OWA,n,"НомДок");
             ДатОбеспеч[Iter]=GetFieldD(OWA,n,"ДатДок");
             СумОбеспеч[Iter]=GetFieldN(OWA,n,"Сум");
             НеустойкаОбеспеч[Iter]=GetFieldN(OWA,n,"Неустойка");
             Срок1Обеспеч[Iter]=GetFieldD(OWA,n,"ДатН");
             Срок2Обеспеч[Iter]=GetFieldD(OWA,n,"ДатК");
             if ВидОбеспеч[Iter]="БГ":
                ГарантОбеспеч[Iter]=GetFieldS(OWA,n,"Гарант_Наим");
                ГарантБИКОбеспеч[Iter]=GetFieldS(OWA,n,"Гарант_БИК");
                if not nnБИК=0 and not ГарантБИКОбеспеч[Iter]="":
                   SetFilter(OWAБИК,"NEWNUM='"+ГарантБИКОбеспеч[Iter]+"'");
                   if Records(OWAБИК)=0:
                      ГарантСтатусОбеспеч[Iter]="БИК "+ГарантБИКОбеспеч[Iter]+" не найден в справочнике БИК РФ";
                     else
                      tmp=GetFieldS(OWAБИК,1,"REAL_");
                      if not tmp="":
                         ГарантСтатусОбеспеч[Iter]="Кода контроля по БИК: "+Раб.Вспом.Справ_БИК.КодВТекст("Real",tmp);
                      fi;
                      if not ГарантСтатусОбеспеч[Iter]="":
                         ГарантСтатусОбеспеч[Iter]=ГарантСтатусОбеспеч[Iter]+"; Дата изм.: "+DateToString(GetFieldD(OWAБИК,1,"DT_IZM"));
                      fi;
                   fi;
                fi;
               else
                ГарантОбеспеч[Iter]=GetFieldS(OWA,n,"Гарант_Рекв.КорИмя");
             fi;
          fi;
          ВидОбеспеч[Iter]=if(ВидОбеспеч[Iter]="ЗАДАТОК":"Задаток"|ВидОбеспеч[Iter]="ЗАЛОГ":"Залог"|ВидОбеспеч[Iter]="БГ":"Банковская гарантия"|ВидОбеспеч[Iter]="ПОРУЧ":"Поручительство"|ВидОбеспеч[Iter]="ИНОЕ":"Иное обеспечение"|True:"");
          ПризнОбеспеч[Iter]=Призн_;
          Сум1Обеспеч[Iter]=Turn("+ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&ДОГОВОР."+Признак+"}",1.1.100,Dat(1,1,Year(ToDay)+1));
          for transaction t="+ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&ДОГОВОР."+Признак+"}",1.1.100,Dat(1,1,Year(ToDay)+1),Reverse do
           Дат1Обеспеч[Iter]=TransDate(t);
           Break;
          od;
          Сум2Обеспеч[Iter]=-Turn("-ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&ДОГОВОР."+Признак+"}",1.1.100,Dat(1,1,Year(ToDay)+1));
          for transaction t="-ЗАБ.10!{"+ПризнОбеспеч[Iter]+"&ДОГОВОР."+Признак+"}",1.1.100,Dat(1,1,Year(ToDay)+1),Reverse do
           Дат2Обеспеч[Iter]=TransDate(t);
           Break;
          od;
          UKeyОбеспеч[Iter]=Rec;
       fi; --if ExistsTransactions("ЗАБ.10{"+Призн_+"&ДОГОВОР."+Признак+"}",1.1.100,Dat(1,1,Year(ToDay)+1)):
    fi; --if SignUsed(Призн_):
   od;
  Finally
   CloseWorkArea(OWA);
  end;
 Finally
  CloseWorkArea(OWAБИК);
  CloseProgress;
 end;
end;

Proc Расчет1093;
var OWA,n,nr:I;
var isNet:L;
 ClearVariable(ПП1093);
 ClearVariable(ПП1093_Дат);
 ClearVariable(ПП1093_НомИзм);
 ClearVariable(ПП1093_CU);
 ClearVariable(ПП1093_MU);
 ClearVariable(ПП1093_Rec);
 isNet=Раб.Бюджет2005.Сетевая;
 OWA=OpenWorkArea("РПО_ДОГОВОР_ОТЧ_ИСПОЛ","ДАТАОТЧ;НОМИЗМ","Договор="+RecordToString(Current));
 Try
  nr=Records(OWA);
  for n=1..nr do
   InsertFrame(ПП1093,ПП1093+1);
   ПП1093_Дат[ПП1093]=GetFieldD(OWA,n,"ДАТАОТЧ");
   ПП1093_НомИзм[ПП1093]=GetFieldI(OWA,n,"НОМИЗМ");
   ПП1093_CU[ПП1093]=DateToString(GetFieldD(OWA,n,"CreateTime"))+if(isNet," "+GetFieldS(OWA,n,"CreatedUser"),"");
   ПП1093_MU[ПП1093]=DateToString(GetFieldD(OWA,n,"UpdateTime"))+if(isNet," "+GetFieldS(OWA,n,"ModifiedUser"),"");
   ПП1093_Rec[ПП1093]=GetRecordKey(OWA,n);
  od;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc ВывестиСтраницу;
var Y:i;
var Sender:S;
 Sender=AsString(Template.Object);
 Template.Freeze(0,0);
 Template.Field="start";
 --Заказчик
 if not AsLogical(S1.Visible)=(Страница=0):
    S1.Visible=Страница=0;
 fi;
 if Страница=0:
    Y=AsInteger(S1.Row(2,RowTop,""));
    Template.Freeze(2,y);
 fi;
 btnЗаказчик.Enabled=not Страница=0;
 --Поставщик
 if not AsLogical(S2.Visible)=(Страница=1):
    S2.Visible=Страница=1;
    S2_1.Visible=Страница=1;
    S2_2.Visible=Страница=1;
    S2_3.Visible=Страница=1;
 fi;
 if Страница=1:
    Y=AsInteger(S2.Row(2,RowTop,""));
    Template.Freeze(2,y);
 fi;
 btnПоставщик.Enabled=not Страница=1;
 --Общ.сведений
 if not AsLogical(S3.Visible)=(Страница=2):
    S3.Visible=Страница=2;
    S3_1.Visible=Страница=2;
    S3_2.Visible=Страница=2;
 fi;
 if Страница=2:
    Y=AsInteger(S3.Row(2,RowTop,""));
    Template.Freeze(2,y);
 fi;
 btnОбщСвед.Enabled=not Страница=2;
 --Доп.сведения
 if not AsLogical(S4.Visible)=(Страница=3):
    S4.Visible=Страница=3;
    S29.Visible=Страница=3;
    S30.Visible=Страница=3;
    S31.Visible=Страница=3;
    S39.Visible=Страница=3 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015);
    S40.Visible=Страница=3 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015);
    S41.Visible=Страница=3 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015);
 fi;
 if Страница=3:
    Y=AsInteger(S4.Row(2,RowTop,""));
    Template.Freeze(2,y);
 fi;
 btnДопСвед.Enabled=not Страница=3;
 --КБК
 if not AsLogical(S5.Visible)=(Страница=4):
    S5.Visible=Страница=4;
    S6.Visible=Страница=4;
    S7.Visible=Страница=4;
    S8.Visible=Страница=4;
 fi;
 if Страница=4:
    РасчетКБК;
    Y=AsInteger(S7.Row(1,RowTop,""));
    Template.Freeze(1,y);
 fi;
 btnКБК.Enabled=not Страница=4;
 --Предмет
 if not AsLogical(S9.Visible)=(Страница=5):
    S9.Visible=Страница=5;
    S10.Visible=Страница=5;
    S11.Visible=Страница=5;
    S12.Visible=Страница=5;
 fi;
 if Страница=5:
    РасчетТМЦ;
    Y=AsInteger(S11.Row(1,RowTop,""));
    Template.Freeze(1,y);
 fi;
 btnПредмет.Enabled=not Страница=5;
 --ГЭК
 if not AsLogical(S13.Visible)=(Страница=6):
    S13.Visible=Страница=6;
    S14.Visible=Страница=6;
    РасчетГЭК;
 fi;
 btnГЭК1.Enabled=not Страница=6;
 --Связанные документы
 if not AsLogical(S15.Visible)=(Страница=7):
    S15.Visible=Страница=7;
    S16.Visible=Страница=7;
    S17.Visible=Страница=7;
    Try
     РасчетСвязДок(Sender);
    except
    end;
 fi;
 btnСвязДок.Enabled=not Страница=7;
 --История изменения документа
 if not AsLogical(S18.Visible)=(Страница=8):
    S18.Visible=Страница=8;
    S19.Visible=Страница=8;
    S20.Visible=Страница=8;
    РасчетИсторДок;
 fi;
 btnИсторДок.Enabled=not Страница=8;
 --Сервис
 if not AsLogical(S21.Visible)=(Страница=9):
    S21.Visible=Страница=9;
 fi;
 if Страница=9:
    Y=AsInteger(S21.Row(4,RowTop,""));
    Template.Freeze(4,y);
 fi;
 btnСервис.Enabled=not Страница=9;
 --Прикрепленные файлы
 if not AsLogical(S22.Visible)=(Страница=10):
    S22.Visible=Страница=10;
    S23.Visible=Страница=10;
    S24.Visible=Страница=10;
    S25.Visible=Страница=10;
    РасчетФайл;
 fi;
 btnФайлы.Enabled=not Страница=10;
 --ГЭК2
 if not AsLogical(S26.Visible)=(Страница=11):
    S26.Visible=Страница=11;
    S27.Visible=Страница=11;
    S28.Visible=Страница=11;
    РасчетГЭК2;
 fi;
 btnГЭК2.Enabled=not Страница=11;
 --Настройка
 if not AsLogical(SН1.Visible)=(Страница=-1):
    SН1.Visible=Страница=-1;
    SН2.Visible=Страница=-1;
 fi;
 if AsLogical(SН1.Visible) and not (Страница=-1):
    Настр_(True);
 fi;
 --Реквизиты исполнительного документа
 if not AsLogical(S32.Visible)=(Страница=12):
    S32.Visible=Страница=12;
 fi;
 btnРекИспДок.Enabled=not Страница=12;
 --Обеспечение исполнения обязательства
 if not AsLogical(S33.Visible)=(Страница=13):
    S33.Visible=Страница=13;
    S34.Visible=Страница=13;
    S35.Visible=Страница=13;
    S36.Visible=Страница=13;
    S37.Visible=Страница=13;
    S38.Visible=Страница=13;
    S42.Visible=Страница=13;
    if Страница=13:
       РасчетОбеспеч;
    fi;
 fi;
 btnОбеспеч.Enabled=not Страница=13;
 --Пп РФ от 28.11.2013 №1093
 if not AsLogical(S43.Visible)=(Страница=14):
    S43.Visible=Страница=14;
    S44.Visible=Страница=14;
    S45.Visible=Страница=14;
    S46.Visible=Страница=14;
    if Страница=14:
       Расчет1093;
    fi;
 fi;
 btn1093.Enabled=not Страница=14;
end;

Proc РедакторКБК(FieldName: String; Iter: Integer; vРег:L; vФакт:L);
var OWA:i;
var Flag:L;
 if ДатаРег=1.1.100: Message("Введите дату принятия к учету",mtError); Страница=2; ВывестиСтраницу; Template.Field="ДатаРег"; Exit; fi;
 if ДатаДок=1.1.100: Message("Введите дату заключения",mtError); Страница=2; ВывестиСтраницу; Template.Field="ДатаДок"; Exit; fi;
 if Год1="" and Год2="" and Год3="" and Год4="" and Год5="" and Год6="" and Год7="" and Год8="" and Год9="" and Год10="" and (Учет_Реестр_ОФК or ver>0): Страница=2; ВывестиСтраницу; Message("Введите первый год документа",mtError); Template.Field="Год1"; Exit; fi;
 MyEditorApply;
 PutVariableD(blnДоговор_КБК+".ДатаРег",ДатаРег);
 PutVariableS(blnДоговор_КБК+".ТекГод",ТекГод);
 PutVariableS(blnДоговор_КБК+".Год1" ,Год1);
 PutVariableS(blnДоговор_КБК+".Год2" ,Год2);
 PutVariableS(blnДоговор_КБК+".Год3" ,Год3);
 PutVariableS(blnДоговор_КБК+".Год4" ,Год4);
 PutVariableS(blnДоговор_КБК+".Год5" ,Год5);
 PutVariableS(blnДоговор_КБК+".Год6" ,Год6);
 PutVariableS(blnДоговор_КБК+".Год7" ,Год7);
 PutVariableS(blnДоговор_КБК+".Год8" ,Год8);
 PutVariableS(blnДоговор_КБК+".Год9" ,Год9);
 PutVariableS(blnДоговор_КБК+".Год10",Год10);
 PutVariableS(blnДоговор_КБК+".Контр_Призн",Контр_Призн);
 PutVariableS(blnДоговор_КБК+".Общ_Призн1",Общ_Призн1);
 PutVariableS(blnДоговор_КБК+".Общ_Призн2",Общ_Призн2);
 PutVariableR(blnДоговор_КБК+".Договор",Current);
 PutVariableS(blnДоговор_КБК+".Договор_Призн","ДОГОВОР."+Признак);
 PutVariableS(blnДоговор_КБК+".Договор_GUID",GUID);
 PutVariableS(blnДоговор_КБК+".РПО_Ключ",РПО_Ключ);
 --
 PutVariableL(blnДоговор_КБК+".Учет_Реестр_ОФК",Учет_Реестр_ОФК or ver>0);
 PutVariableS(blnДоговор_КБК+".СчДеб5",СчДеб5);
 PutVariableS(blnДоговор_КБК+".СчКре5",СчКре5);
 PutVariableS(blnДоговор_КБК+".Общ_Справ1",if(Настр.Общ_Справ1="" and not Общ_Призн1="",Раб.Бюджет2005.ПризнВСправ(Общ_Призн1," ",".*"),Настр.Общ_Справ1));
 PutVariableS(blnДоговор_КБК+".Общ_Справ2",if(Настр.Общ_Справ2="" and not Общ_Призн2="",Раб.Бюджет2005.ПризнВСправ(Общ_Призн2," ",".*"),Настр.Общ_Справ2));
 PutVariableI(blnДоговор_КБК+".Секрет",Секрет);
 PutVariableD(blnДоговор_КБК+".ДатаДок",ДатаДок);
 --
 PutVariableS(blnДоговор_КБК+".SelfCrd",crdДоговор_КБК);
 PutVariableI(blnДоговор_КБК+".Режим",0);
 PutVariableL(blnДоговор_КБК+".Рег",vРег);
 PutVariableL(blnДоговор_КБК+".Факт",vФакт);
 PutVariableS(blnДоговор_КБК+".tplFieldName",FieldName);
 PutVariableI(blnДоговор_КБК+".tplFrame",Iter);
 PutVariableS(blnДоговор_КБК+".blnДоговор",blnДоговор);
 PutVariableL(blnДоговор_КБК+".Run",True);
 PutVariableS(blnДоговор_КБК+".ИсклПризн",ИсклПризн);
 OWA=OpenWorkArea(crdДоговор_КБК,"НП","Договор="+RecordToString(Current));
 Try
  PutVariableI(blnДоговор_КБК+".OWA",OWA);
  BeginChanging(OWA,False);
  Try
   OpenBlank(blnДоговор_КБК,True);
   if GetVariableI(blnДоговор_КБК+".State")=0:
      EndChanging(OWA);
      Flag=True;
     else
      CancelChanging(OWA);
   fi;
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 if Flag: РасчетКБК; fi;
end;

Proc РедакторТМЦ(FieldName: String; Iter: Integer);
var OWA:I;
var Flag:L;
 if ДатаДок=1.1.100: Message("Введите дату документа",mtError); Страница=2; ВывестиСтраницу; Template.Field="ДатаДок"; Exit; fi;
 MyEditorApply;
 PutVariableI(blnДоговор_ТМЦ+".ФЗ",ФЗ);
 PutVariableD(blnДоговор_ТМЦ+".ДатаРег",ДатаРег);
 PutVariableD(blnДоговор_ТМЦ+".ДатаДок",ДатаДок);
 PutVariableS(blnДоговор_ТМЦ+".Контр_Призн",Контр_Призн);
 PutVariableS(blnДоговор_ТМЦ+".Общ_Призн1",Общ_Призн1);
 PutVariableS(blnДоговор_ТМЦ+".Общ_Призн2",Общ_Призн2);
 PutVariableR(blnДоговор_ТМЦ+".Договор",Current);
 PutVariableS(blnДоговор_ТМЦ+".Договор_GUID",GUID);
 PutVariableS(blnДоговор_ТМЦ+".РПО_Ключ",РПО_Ключ);
 --
 PutVariableS(blnДоговор_ТМЦ+".SelfCrd",crdДоговор_ТМЦ);
 PutVariableI(blnДоговор_ТМЦ+".Режим",0);
 PutVariableS(blnДоговор_ТМЦ+".tplFieldName",FieldName);
 PutVariableI(blnДоговор_ТМЦ+".tplFrame",Iter);
 PutVariableL(blnДоговор_ТМЦ+".Run",True);
 PutVariableI(blnДоговор_ТМЦ+".тчнКол",тчнКол);
 PutVariableI(blnДоговор_ТМЦ+".Секрет",Секрет);
 PutVariableI(blnДоговор_ТМЦ+".verОКДП_Гр",verОКДП_Гр);
 PutVariableS(blnДоговор_ТМЦ+".blnДоговор",blnДоговор);
 OWA=OpenWorkArea(crdДоговор_ТМЦ,"НП","Договор="+RecordToString(Current));
 Try
  PutVariableI(blnДоговор_ТМЦ+".OWA",OWA);
  BeginChanging(OWA,False);
  Try
   OpenBlank(blnДоговор_ТМЦ,True);
   if GetVariableI(blnДоговор_ТМЦ+".State")=0:
      EndChanging(OWA);
      Flag=True;
     else
      CancelChanging(OWA);
   fi;
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 if ФЗ<1:
    if not verОКДП_Гр=GetVariableI(blnДоговор_ТМЦ+".verОКДП_Гр") and Flag:
       verОКДП_Гр=GetVariableI(blnДоговор_ТМЦ+".verОКДП_Гр");
       MyEditorApply;
    fi;
 fi;
 if Flag: РасчетТМЦ; fi;
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 ПроверитьУникальностьКБК:L;
var Iter,z,crcПредм:I;
var tmp:S;
 ClearVariable(Buf);
 Раб.CRC16.Init;
 for Iter=1..УпрКБК do
  crcПредм=Раб.CRC16.CRC16_(0,ПредмКБК[Iter]);
  crcПредм=Раб.CRC16.CRC16_(crcПредм,ПредмКБК2[Iter]);
  crcПредм=Раб.CRC16.CRC16_(crcПредм,ПредмКБК3[Iter]);
  crcПредм=Раб.CRC16.CRC16_(crcПредм,ПредмКБК4[Iter]);
  if Секрет>0 and Учет_Реестр_ОФК:
     Buf[Iter]=ВД[Iter]+"#"+КБК0[Iter]+"#"+КБК[Iter]+"#"+Призн[Iter]+"#"+МФ[Iter]+"#"+Str16(crcПредм)+"#"+RecordToString(ФАИП[Iter])+"#"+Str16(Раб.CRC16.CRC16_(0,ПримечКБК[Iter]));
    else
     Buf[Iter]=ВД[Iter]+"#"+КБК[Iter]+"#"+Призн[Iter]+"#"+МФ[Iter]+"#"+Str16(crcПредм)+"#"+RecordToString(ФАИП[Iter])+"#"+Str16(Раб.CRC16.CRC16_(0,ПримечКБК[Iter]));
  fi;
 od;
 for Iter=1..УпрКБК do
  crcПредм=Раб.CRC16.CRC16_(0,ПредмКБК[Iter]);
  crcПредм=Раб.CRC16.CRC16_(crcПредм,ПредмКБК2[Iter]);
  crcПредм=Раб.CRC16.CRC16_(crcПредм,ПредмКБК3[Iter]);
  crcПредм=Раб.CRC16.CRC16_(crcПредм,ПредмКБК4[Iter]);
  if Секрет>0 and Учет_Реестр_ОФК:
     tmp=ВД[Iter]+"#"+КБК0[Iter]+"#"+КБК[Iter]+"#"+Призн[Iter]+"#"+МФ[Iter]+"#"+Str16(crcПредм)+"#"+RecordToString(ФАИП[Iter])+"#"+Str16(Раб.CRC16.CRC16_(0,ПримечКБК[Iter]));
    else
     tmp=ВД[Iter]+"#"+КБК[Iter]+"#"+Призн[Iter]+"#"+МФ[Iter]+"#"+Str16(crcПредм)+"#"+RecordToString(ФАИП[Iter])+"#"+Str16(Раб.CRC16.CRC16_(0,ПримечКБК[Iter]));
  fi;
  z=SearchInArray(Buf,tmp,False);
  if not z=-1 and Iter=z: z=SearchInArray(Buf,tmp,False,z+1); fi;
  if not z=-1: НаОшибку("Повторный ввод данных по строке",mtError,4,"КБК",Iter); Рег=False; РедакторКБК("КБК",z,False,False); ^False; fi;
 od;
 ^True;
end;

Func ПроверитьНаборСправ:L;
var Iter,z:I;
var tmp: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);
  if not z=-1 and not Раб.Бюджет2005.ПризнВСправ(Призн[Iter]," ",".*")=Раб.Бюджет2005.ПризнВСправ(Призн[z]," ",".*"):
     НаОшибку("Различный набор справочников",mtError,4,"Призн",Iter); 
     Рег=False;
     РедакторКБК("Призн_",Iter,False,False);
     ^False;
  fi;
 od;
 ^True;
end;

Func РеестрЗапСущ (aРеестрЗап:S):I;
var OWA,n,nr:I;
var ff,tmp:S;
 ff="Ном_Реестр_ОФК='"+aРеестрЗап+"' and not НомерДок='"+НомерДок+"'"+if(НомерДокДоп="",""," and not НомерДокДоп='"+НомерДокДоп+"'");
 OWA=OpenWorkArea(CrdДоговор,"",ff);
 Try
  nr=Records(OWA);
  for n=1..nr do
   if n=1: Trace("<<Проверка реестровой записи>>"); fi;
   tmp=GetFieldS(OWA,nr,"НаимДок.Наим")+" №"+Trim(GetFieldS(OWA,nr,"НомерДок")+" "+GetFieldS(OWA,nr,"НомерДокДоп"))+" от "+DateToString(GetFieldD(OWA,nr,"ДатаДок"));
   Trace("Внимание! Номер реестровой записи "+aРеестрЗап+" уже присвоен другому документу: "+RecordToString(GetRecordKey(OWA,nr))+">> "+tmp);
  od;
  if not nr=0:
     ^EnqOkCancel("Номер реестровой записи "+aРеестрЗап+" уже присвоен другому документу: "+RecordToString(GetRecordKey(OWA,nr))+"^M"+tmp+"^MИгнорировать данное предупреждение ?",mtWarning);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^cmOk;
end;

Func ВозможностьИспол:L;
var ДЗ,КЗ,КР:N;
var Flag:L;
 Refresh;
 ДЗ= Saldo("*.?.206.??.*{ДОГОВОР."+Признак+"!}",Dat(1,1,Year(ToDay)+1));
 КЗ=-Saldo("*.?.302.??.*{ДОГОВОР."+Признак+"!}",Dat(1,1,Year(ToDay)+1));
 if not Round(ДЗ,2)=0 or not Round(КЗ,2)=0:
    Message("Вы пытаетесь измененить статус на 'Исполнен', однако по документу числится задолженность на сумму^M"+if(Round(КЗ,2)=0,"дебиторская = "+Format("%.2N",ДЗ),"кредиторская = "+Format("%.2N",КЗ))+"^MЛогично предположить, что по исполненому документу, не должно быть задолженности, возможно, вы ошиблись номером исполняемого документа. Рекомендуется вызвать отчет для уточнения",mtWarning);
    Flag=True;
   else
    КР=Saldo("*.?.201.??.*|*.1.304.05.*|*.?.ЗАБ.КР.*{ДОГОВОР."+Признак+"!}",Dat(1,1,Year(ToDay)+1));
    if Round(КР,2)=0:
       Message("Вы пытаетесь измененить статус на 'Исполнен'^MОднако по документу, не найдено ни одного кассового расхода, логично предположить, что по исполненому документу, должен быть кассовый расход, возможно, вы ошиблись номером исполняемого документа. Рекомендуется вызвать отчет для уточнения",mtWarning);
       Flag=True;
    fi;
 fi;
 if Flag:
    if EnqOkCancel("Игнорировать данное предупреждение ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 ^True;
end;

Func ПроверитьИспол:L;
var Page,Iter:I;
var fix:s;
 if not ВозможностьИспол: ^False; fi;
 Page=0;
 if Учр.РПО_ИКЗ="" and ДатаДок>=1.1.2015: ^НаОшибку("Заполните индетификационный код заказчика",mtError,Page,"Учр.РПО_ИКЗ",0); fi;
 Page=3;
 fix="2";
 if ver>0:
    ИсполДата=ДатаИзм;
    ДолжнРук2=ДолжнРук;
    ФИОРук2=ФИОРук;
    if ДатаСвед2=1.1.100: ДатаСвед2=ДатаСвед; fi;
    if ДатаРук2=1.1.100: ДатаРук2=ДатаРук; fi;
    fix="";
 fi;
 if ДолжнРук2="": ^НаОшибку("Введите должность руководителя",mtError,Page,"ДолжнРук"+fix,0); fi;
 if ФИОРук2="": ^НаОшибку("Введите ФИО руководителя",mtError,Page,"ФИОРук"+fix,0); fi;
 if ДатаСвед2=1.1.100: ^НаОшибку("Введите дату формирования сведений",mtError,Page,"ДатаСвед2",0); fi;
 if ДатаРук2=1.1.100: ^НаОшибку("Введите дату подписи руководителя заказчика",mtError,Page,"ДатаРук2",0); fi;
 if ДатаРук2<ДатаСвед2: ^НаОшибку("Дата подписи сведений не может быть ранее даты формирования сведений",mtError,Page,"ДатаРук2",0); fi;
 if ИсполДата=1.1.100 and ver>0: ^НаОшибку("Введите дату исполнения документа",mtError,Page,"ДатаИзм ",0); fi;
 if ИсполДата=1.1.100: ^НаОшибку("Введите дату исполнения документа",mtError,Page,"ИсполДата",0); fi;
 if ДатаРег>ИсполДата and ver>0: ^НаОшибку("Дата исполнения не может быть ранее даты регистрации договора",mtError,Page,"ДатаИзм",0); fi;
 if ДатаРег>ИсполДата: ^НаОшибку("Дата исполнения не может быть ранее даты регистрации договора",mtError,Page,"ИсполДата",0); fi;
 if ДатаСвед2<ИсполДата: ^НаОшибку("Дата формирования приложения не может быть ранее даты исполнения",mtError,Page,"ДатаСвед2",0); fi;
 if ИсполКмнт="" and ДатаСвед2<1.1.2015: ^НаОшибку("Введите основание исполнения договора",mtError,Page,"ИсполКмнт",0); fi;
 if ИсполФактОпл=0: ^НаОшибку("Введите фактическую сумму исполнения документа",mtError,Page,"ИсполФактОпл",0); fi;
 if Round(ИсполФактОпл,2)>Round(СумДок,2): ^НаОшибку("Фактическаская сумма исполнения не может превышать суммы документа",mtError,3 ,"ИсполФактОпл",0); fi;
 if not Round(ИсполФактОпл,2)=Round(ВсегоФактОплКБК,2): ^НаОшибку("Сумма фактического исполнения, в разрезе КБК, отличается от суммы фактического исполнения в целом по документу",mtError,Page,"ИсполФактОпл",0); fi;
 if Учет_Реестр_ОФК:
    if not Рег_Реестр_ОФК: Message("Документ должен быть зарегистрирован в реестре ГК",mtError); Template.Objet="cbРегРеестрОФК"; ^False; fi;
    if Ном_Реестр_ОФК="": ^НаОшибку("Введите номер реестровой записи",mtError,Page,"Ном_Реестр_ОФК",0); fi;
    if Дата_Реестр_ОФК=1.1.100: ^НаОшибку("Введите дату регистрации сведений",mtError,Page,"Дата_Реестр_ОФК",0); fi;
    if ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015:
       if ИсполПризнак="": ^НаОшибку("Введите признак исполнения",mtError,Page,"ИсполПризнак_",0); fi;
       Template.Name="S40";
       for Iter=1..Штраф do
        if Iter>1 or (not Штраф[Iter].Код="" and not Штраф[Iter].Сторона="" and not Штраф[Iter].Начисл_Осн="" and not Round(Штраф[Iter].Начисл_Сум,2)=0 and not Штраф[Iter].Опл_Наим="" and not Штраф[Iter].Опл_Дат=1.1.100 and not Штраф[Iter].Опл_Ном="" and not Round(Штраф[Iter].Опл_Сум,2)=0 and not Штраф[Iter].Возвр_Осн="" and not Round(Штраф[Iter].Возвр_Сум,2)=0):
           if Штраф[Iter].Код="": ^НаОшибку("Введите код причины начисления неустоек (штрафов, пеней)",mtError,Page,"КодШтраф",Iter); fi;
           if Штраф[Iter].Сторона="": ^НаОшибку("Введите сторону контракта - плательщик",mtError,Page,"Сторона",Iter); fi;
           if Штраф[Iter].Начисл_Осн="": ^НаОшибку("Введите основание начисления неустоек (штрафов, пеней)",mtError,Page,"Начисл_Осн",Iter); fi;
           if Round(Штраф[Iter].Начисл_Сум,2)=0: ^НаОшибку("Введите размер начисления неустоек (штрафов, пеней)",mtError,Page,"Начисл_Сум",Iter); fi;
           if not Штраф[Iter].Опл_Наим="" and not Штраф[Iter].Опл_Дат=1.1.100 and not Штраф[Iter].Опл_Ном="" and not Round(Штраф[Iter].Опл_Сум,2)=0:
              if Штраф[Iter].Опл_Наим="": ^НаОшибку("Введите наименование документа подтверждающий факт уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Наим",Iter); fi;
              if Штраф[Iter].Опл_Дат=1.1.100: ^НаОшибку("Введите дату документа подтверждающий факт уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Дат",Iter); fi;
              if Штраф[Iter].Опл_Ном="": ^НаОшибку("Введите номер документа подтверждающий факт уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Ном",Iter); fi;
              if Round(Штраф[Iter].Опл_Сум,2)=0: ^НаОшибку("Введите сумму уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Сум",Iter); fi;
           fi;
           if not Штраф[Iter].Возвр_Осн="" and not Round(Штраф[Iter].Возвр_Сум,2)=0:
              if Штраф[Iter].Начисл_Осн="": ^НаОшибку("Введите основание для возврата излишне уплаченной суммы",mtError,Page,"Возвр_Осн",Iter); fi;
              if Round(Штраф[Iter].Возвр_Сум,2)=0: ^НаОшибку("Введите размер возвращенной плательщику суммы",mtError,Page,"Возвр_Сум",Iter); fi;
           fi;
        fi;
       od;
    fi;
    Template.Name="S30";
    if Инфо_ИА=0: ^НаОшибку("Заполните расшифровку исполнения по документам",mtError,Page,"РасчетИнфоИА",0); fi;
    for Iter=1..Инфо_ИА do
     if (verТФФ<17 and ДатаСвед2<1.6.2015) or not Инфо_ИА[Iter].ДатДок=1.1.100 or not Инфо_ИА[Iter].НаимДок="" or not Инфо_ИА[Iter].НомДок="" or not Round(Инфо_ИА[Iter].СумДок,2)=0 or not Round(Инфо_ИА[Iter].КолДок,3)=0:
        if Инфо_ИА[Iter].ДатДок=1.1.100: ^НаОшибку("Введите дату документа",mtError,Page,"ДатДок",Iter); fi;
        if Инфо_ИА[Iter].НаимДок="": ^НаОшибку("Введите наименование документа",mtError,Page,"НаимДок",Iter); fi;
        if Инфо_ИА[Iter].НомДок="": ^НаОшибку("Введите номер документа",mtError,Page,"НомДок",Iter); fi;
        if Round(Инфо_ИА[Iter].СумДок,2)=0 and Round(Инфо_ИА[Iter].КолДок,3)=0 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015):
           if Round(Инфо_ИА[Iter].КолДок,3)=0: ^НаОшибку("Введите количество по документу",mtError,Page,"КолДок",Iter); fi;
        fi;
        if Round(Инфо_ИА[Iter].СумДок,2)=0: ^НаОшибку("Введите сумму документа",mtError,Page,"СумДок",Iter); fi;
     fi;
     if (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015):
        if (verТФФ<17 and ДатаСвед2<1.6.2015) or not Инфо_ИА[Iter].ДатОпл=1.1.100 or not Инфо_ИА[Iter].НомОпл="" or not Round(Инфо_ИА[Iter].СумОпл,2)=0:
           if Iter=1 and Инфо_ИА[Iter].ДатДок=1.1.100: ^НаОшибку("Информация об оплате не может идти первой строкой при пустой информация об исполнении",mtError,Page,"ДатОпл",Iter); fi;
           if Инфо_ИА[Iter].ДатОпл=1.1.100: ^НаОшибку("Введите дату платежного поручения",mtError,Page,"ДатОпл",Iter); fi;
           if Инфо_ИА[Iter].НомОпл="": ^НаОшибку("Введите номер платежного поручения",mtError,Page,"НомОпл",Iter); fi;
           if Round(Инфо_ИА[Iter].СумОпл,2)=0: ^НаОшибку("Введите сумму платежного поручения",mtError,Page,"СумОпл",Iter); fi;
           if not ОКВ="643":
              if Round(Инфо_ИА[Iter].КурсОпл,4)=0: ^НаОшибку("Введите курс валюты",mtError,Page,"КурсОпл",Iter); fi;
           fi;
        fi;
     fi;
    od;
 fi;
 if (not Учет_Реестр_ОФК and Настр.ДО_УчетОКДП>=-1 and ДатаДок>=01.01.100 and Секрет<2) or Учет_Реестр_ОФК:
    Page=5;
    РасчетТМЦ;
    for Iter=1..УпрТМЦ do
     if (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015) and Секрет>0 and КВОЗ[Iter]="1" and ОКСМ[Iter]="": НаОшибку("Заполните код страны происхождения (производитель товара)",mtError,Page,"ОКСМ",Iter); Рег=False; РедакторТМЦ("ОКСМ",Iter); ^False; fi;
     if Round(ФактСумТМЦ[Iter],2)>Round(СумТМЦ[Iter],2): НаОшибку("Сумма фактической поставки не может превышать сумму по предмету",mtError,Page,"ФактСумТМЦ",Iter); Рег=False; РедакторТМЦ("ФактСум",Iter); ^False; fi;
     if Round(ФактКол[Iter],тчнКол)>Round(Кол[Iter],тчнКол): НаОшибку("Количество фактической поставки не может превышать количество по предмету",mtError,Page,"ФактКол",Iter); Рег=False; РедакторТМЦ("ФактКол",Iter); ^False; fi;
    od;
    Page=3;
    if Round(ВсегоФактСумТМЦ,2)>Round(ИсполФактОпл,2): НаОшибку("Сумма фактической поставки "+Format("%.2N",ВсегоФактСумТМЦ)+" не может превышать суммы "+Format("%.2N",ИсполФактОпл)+" фактического исполнения в целом по документу ",mtError,Page,"ВсегоФактСумТМЦ",0); Рег=False; РедакторТМЦ("ВсегоФактСум",Iter); ^False; fi;
 fi;
 РасчетОбеспеч;
 if not Round(ВсегоОстОбеспеч,2)=0 or not Round(ДС_ВсегоОстОбеспеч,2)=0:
    if EnqOkCancel("Внимание! Обеспечение исполнения обязательства не списано с учета^MИгнорировать данное предупреждение ?",mtWarning)=cmCancel:
       ^НаОшибку("",mtError,13,if(Round(ВсегоОстОбеспеч,2)>0,"ВсегоОстОбеспеч","ДС_ВсегоОстОбеспеч"),0);
    fi;
 fi;
 ^True;
end;

Func ПроверитьАннул:L;
var Page,Iter:I;
var fix:s;
 Page=0;
 if Учр.РПО_ИКЗ="" and ДатаДок>=1.1.2015: ^НаОшибку("Заполните индетификационный код заказчика",mtError,Page,"Учр.РПО_ИКЗ",0); fi;
 Page=3;
 fix="2";
 if ver>0:
    АннулДата=ДатаИзм;
    ДолжнРук2=ДолжнРук;
    ФИОРук2=ФИОРук;
    if ДатаСвед2=1.1.100: ДатаСвед2=ДатаСвед; fi;
    if ДатаРук2=1.1.100: ДатаРук2=ДатаРук; fi;
    fix="";
 fi;
 if ДолжнРук2="": ^НаОшибку("Введите должность руководителя",mtError,Page,"ДолжнРук"+fix,0); fi;
 if ФИОРук2="": ^НаОшибку("Введите ФИО руководителя",mtError,Page,"ФИОРук"+fix,0); fi;
 if ДатаСвед2=1.1.100: ^НаОшибку("Введите дату формирования сведений",mtError,Page,"ДатаСвед2",0); fi;
 if ДатаРук2=1.1.100: ^НаОшибку("Введите дату подписи руководителя заказчика",mtError,Page,"ДатаРук2",0); fi;
 if ДатаРук2<ДатаСвед2: ^НаОшибку("Дата подписи сведений не может быть ранее даты формирования сведений",mtError,Page,"ДатаРук"+fix,0); fi;
 if АннулДата=1.1.100 and ver>0: ^НаОшибку("Введите дату расторжения документа",mtError,Page,"ДатаИзм ",0); fi;
 if АннулДата=1.1.100: ^НаОшибку("Введите дату расторжения документа",mtError,Page,"АннулДата",0); fi;
 if ДатаСвед2<АннулДата: ^НаОшибку("Дата формирования сведений не может быть ранее даты расторжения",mtError,Page,"ДатаСвед2",0); fi;
 if ДатаРег>АннулДата and ver>0: ^НаОшибку("Дата расторжения не может быть ранее даты регистрации договора",mtError,Page,"ДатаИзм",0); fi;
 if ДатаРег>АннулДата: ^НаОшибку("Дата расторжения не может быть ранее даты регистрации договора",mtError,Page,"АннулДата",0); fi;
 if АннулКмнт="": ^НаОшибку("Введите причину расторжения договора",mtError,Page,"АннулКмнт",0); fi;
 if Round(АннулФактОпл,2)>Round(СумДок,2): ^НаОшибку("Сумма фактической оплаты не может превышать суммы документа",mtError,Page,"АннулФактОпл",0); fi;
 if not Round(АннулФактОпл,2)=Round(ВсегоФактОплКБК,2): ^НаОшибку("Сумма фактической оплаты, в разрезе КБК, отличается от суммы фактической оплаты в целом по документу",mtError,Page,"АннулФактОпл",0); fi;
 if Учет_Реестр_ОФК:
    if not Рег_Реестр_ОФК: Message("Документ должен быть зарегистрирован в реестре ГК",mtError); Template.Objet="cbРегРеестрОФК"; ^False; fi;
    if Ном_Реестр_ОФК="": ^НаОшибку("Введите номер реестровой записи",mtError,Page,"Ном_Реестр_ОФК",0); fi;
    if Дата_Реестр_ОФК=1.1.100: ^НаОшибку("Введите дату регистрации сведений",mtError,Page,"Дата_Реестр_ОФК",0); fi;
    if ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015:
       if АннулПризнак="": ^НаОшибку("Введите признак расторжения",mtError,Page,"АннулПризнак_",0); fi;
       if АннулКодОсн="": ^НаОшибку("Введите основание расторжения",mtError,Page,"АннулКодОсн_",0); fi;
       if АннулКодДок="": ^НаОшибку("Введите наименование документа, являющегося основанием расторжения контракта",mtError,Page,"АннулКодДок_",0); fi;
       Template.Name="S40";
       for Iter=1..Штраф do
        if Iter>1 or (not Штраф[Iter].Код="" and not Штраф[Iter].Сторона="" and not Штраф[Iter].Начисл_Осн="" and not Round(Штраф[Iter].Начисл_Сум,2)=0 and not Штраф[Iter].Опл_Наим="" and not Штраф[Iter].Опл_Дат=1.1.100 and not Штраф[Iter].Опл_Ном="" and not Round(Штраф[Iter].Опл_Сум,2)=0 and not Штраф[Iter].Возвр_Осн="" and not Round(Штраф[Iter].Возвр_Сум,2)=0):
           if Штраф[Iter].Код="": ^НаОшибку("Введите код причины начисления неустоек (штрафов, пеней)",mtError,Page,"КодШтраф",Iter); fi;
           if Штраф[Iter].Сторона="": ^НаОшибку("Введите сторону контракта - плательщик",mtError,Page,"Сторона",Iter); fi;
           if Штраф[Iter].Начисл_Осн="": ^НаОшибку("Введите основание начисления неустоек (штрафов, пеней)",mtError,Page,"Начисл_Осн",Iter); fi;
           if Round(Штраф[Iter].Начисл_Сум,2)=0: ^НаОшибку("Введите размер начисления неустоек (штрафов, пеней)",mtError,Page,"Начисл_Сум",Iter); fi;
           if not Штраф[Iter].Опл_Наим="" and not Штраф[Iter].Опл_Дат=1.1.100 and not Штраф[Iter].Опл_Ном="" and not Round(Штраф[Iter].Опл_Сум,2)=0:
              if Штраф[Iter].Опл_Наим="": ^НаОшибку("Введите наименование документа подтверждающий факт уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Наим",Iter); fi;
              if Штраф[Iter].Опл_Дат=1.1.100: ^НаОшибку("Введите дату документа подтверждающий факт уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Дат",Iter); fi;
              if Штраф[Iter].Опл_Ном="": ^НаОшибку("Введите номер документа подтверждающий факт уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Ном",Iter); fi;
              if Round(Штраф[Iter].Опл_Сум,2)=0: ^НаОшибку("Введите сумму уплаты неустоек (штрафов, пеней)",mtError,Page,"Опл_Сум",Iter); fi;
           fi;
           if not Штраф[Iter].Возвр_Осн="" and not Round(Штраф[Iter].Возвр_Сум,2)=0:
              if Штраф[Iter].Начисл_Осн="": ^НаОшибку("Введите основание для возврата излишне уплаченной суммы",mtError,Page,"Возвр_Осн",Iter); fi;
              if Round(Штраф[Iter].Возвр_Сум,2)=0: ^НаОшибку("Введите размер возвращенной плательщику суммы",mtError,Page,"Возвр_Сум",Iter); fi;
           fi;
        fi;
       od;
    fi;
 fi;
 if (not Учет_Реестр_ОФК and Настр.ДО_УчетОКДП>=-1 and ДатаДок>=01.01.100 and Секрет<2) or Учет_Реестр_ОФК:
    Page=5;
    РасчетТМЦ;
    for Iter=1..УпрТМЦ do
     if Round(ФактСумТМЦ[Iter],2)>Round(СумТМЦ[Iter],2): НаОшибку("Сумма фактической поставки не может превышать сумму по предмету",mtError,Page,"ФактСумТМЦ",Iter); Рег=False; РедакторТМЦ("ФактСум",Iter); ^False; fi;
     if Round(ФактКол[Iter],тчнКол)>Round(СумТМЦ[Iter],тчнКол): НаОшибку("Количество фактической поставки не может превышать количество по предмету",mtError,Page,"ФактКол",Iter); Рег=False; РедакторТМЦ("ФактКол",Iter); ^False; fi;
    od;
    Page=3;
    if Round(ВсегоФактСумТМЦ,2)>Round(АннулФактОпл,2): НаОшибку("Сумма фактической поставки "+Format("%.2N",ВсегоФактСумТМЦ)+" не может превышать суммы "+Format("%.2N",АннулФактОпл)+" фактического исполнения в целом по документу ",mtError,Page,"ВсегоФактСумТМЦ",0); Рег=False; РедакторТМЦ("ВсегоФактСум",Iter); ^False; fi;
 fi;
 ^True;
end;

Func ПроверитьРегРеестрОФК:L;
var Page:I;
 Page=3;
 if Ном_Реестр_ОФК="": ^НаОшибку("Введите номер реестровой записи",mtError,Page,"Ном_Реестр_ОФК",0); fi;
 if Дата_Реестр_ОФК=1.1.100: ^НаОшибку("Введите дату регистрации сведений",mtError,Page,"Дата_Реестр_ОФК",0); fi;
 if not РеестрЗапСущ(Ном_Реестр_ОФК)=cmOk: ^НаОшибку("",mtError,Page,"Ном_Реестр_ОФК",0); fi;
 ^True;
end;

Func ПроверитьТипСвед:L;
var Page:I;
var yyyy:s;
 Page=3;
 if ТипИзм=0: ^НаОшибку("Введите тип изменения",mtError,Page,"ТипИзм_",0); fi;
 if ДатаИзм=1.1.100: ^НаОшибку("Введите дату изменения",mtError,Page,"ДатаИзм",0); fi;
 if ДатаИзм<ДатаРег: ^НаОшибку("Дата изменения не может быть ранее даты регистрации документа",mtError,Page,"ДатаИзм",0); fi;
 yyyy=Str(Year(ДатаИзм));
 if (Abs(ТипИзм)=99 and
      ((yyyy=Год1  and not Round(СумГод1,2) =0)  or
       (yyyy=Год2  and not Round(СумГод2,2) =0)  or
       (yyyy=Год3  and not Round(СумГод3,2) =0)  or
       (yyyy=Год4  and not Round(СумГод4,2) =0)  or
       (yyyy=Год5  and not Round(СумГод5,2) =0)  or
       (yyyy=Год6  and not Round(СумГод6,2) =0)  or
       (yyyy=Год7  and not Round(СумГод7,2) =0)  or
       (yyyy=Год8  and not Round(СумГод8,2) =0)  or
       (yyyy=Год9  and not Round(СумГод9,2) =0)  or
       (yyyy=Год10 and not Round(СумГод10,2)=0)))or
    not Abs(ТипИзм)=99: 
    if not Abs(ТипИзм)=4 and not Year(ДатаИзм)=Year(ДатаРег): ^НаОшибку("Внесение изменений допустимо в пределах текущего года, в противном случае, выберите тип изменения 'перерегистрации документа на очередной год'",mtError,Page,"ДатаИзм"+if(ТипИзм=99:" "|ТипИзм=-99:"  "|True:""),0); fi;
    if ДатаСвед<ДатаИзм and not Abs(ТипИзм)=99: ^НаОшибку("Дата формирования сведений не может быть ранее даты изменения",mtError,Page,"ДатаСвед",0); fi;
 fi;
 if ДатаИзм<Договор_Пре.ДатаИзм: ^НаОшибку("Дата изменения не может быть ранее даты изменения предыдущей редакции документа "+DateToString(Договор_Пре.ДатаИзм),mtError,Page,"ДатаИзм",0); fi;
 if ДатаИзм<Договор_Пре.ДатаРег: ^НаОшибку("Дата изменения не может быть ранее даты принятия к учету предыдущей редакции документа "+DateToString(Договор_Пре.ДатаРег),mtError,Page,"ДатаИзм",0); fi;
 if НПИзм=0: ^НаОшибку("Введите порядковый номер изменения",mtError,Page,"НПИзм",0); fi;
 if ТипИзм=1:
    if НаимИзм=nil or НаимИзм.Наим="": ^НаОшибку("Введите наименование документа",mtError,Page,"НаимИзм.Наим",0); fi;
    if ДатаДИзм=1.1.100: ^НаОшибку("Введите дату документа",mtError,Page,"ДатаДИзм",0); fi;
    if ДатаДИзм>ДатаИзм: ^НаОшибку("Дата документа не может больше чем дата изменения",mtError,Page,"ДатаДИзм",0); fi;
 fi;
 if RecordExists(crdДоговор,Договор_Пре):
    if НПИзм=Договор_Пре.НПИзм and (ТипИзм=1 or ТипИзм=2): ^НаОшибку("Порядковый номер изменения совпадает с предущим номером",mtError,Page,"НПИзм",0); fi;
    if Abs(ТипИзм)=4:
       if Year(Договор_Пре.ДатаРег)+1>Year(ДатаРег): ^НаОшибку("При перерегистрации документа на очередной год, дата принятия к учету не может быть ранее 01 января очередного года",mtError,2,"ДатаРег",0); fi;
      else
       if not Договор_Пре.ДатаРег=ДатаРег: ^НаОшибку("Дата принятия к учета не должна изменяться ("+DateToString(Договор_Пре.ДатаРег)+")",mtError,2,"ДатаРег",0); fi;
    fi;
    if not Договор_Пре.НомерДок+Договор_Пре.НомерДокДоп=НомерДок+НомерДокДоп: ^НаОшибку("Номер документа не должен изменяться ("+Раб.Бюджет2005.Объединить(Договор_Пре.НомерДок,Договор_Пре.НомерДокДоп,"/")+")",mtError,2,"НомерДок",0); fi;
    if not Year(Договор_Пре.ДатаДок)=Year(ДатаДок): ^НаОшибку("Дата (год) документа не должна изменяться ("+DateToString(Договор_Пре.ДатаДок)+")",mtError,2,"ДатаДок",0); fi;
    if not Договор_Пре.НаимДок=НаимДок:
       if EnqOkCancel("Изменилось наименование документа с '"+Договор_Пре.НаимДок.Наим+"' на '"+НаимДок.Наим+"'"+Chr(13)+"Вы уверены ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,2,"НаимДок",0); fi;
    fi;
 fi;
 if ОснИзм="" and not Abs(ТипИзм)=4 and not ТипИзм=99 and not ТипИзм=-99: ^НаОшибку("Введите основание изменения",mtError,Page,"ОснИзм",0); fi;
 if Учет_Реестр_ОФК and Рег_Реестр_ОФК:
    if Ном_Реестр_ОФК="": ^НаОшибку("Введите номер реестровой записи",mtError,Page,"Ном_Реестр_ОФК",0); fi;
    if Дата_Реестр_ОФК=1.1.100: ^НаОшибку("Введите дату регистрации сведений",mtError,Page,"Дата_Реестр_ОФК",0); fi;
 fi;
 if ТипИзм=3 and УчетБО_ФК:
    if EnqOkCancel("Внимание! Для выбранного типа изменения 'Внутреннее изменение', не требуется установка флага 'Бюдж. обяз. подлежит учету в ФК'^MИгнорировать данное предупрждение ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"ТипИзм_",0); fi;
 fi;
 ^True;
end;

Func ПроверитьУчетРеестрОФК:L;
var Iter,Page:I;
var tmp:S;
var isВнеБюдж,isБюдж:L;
 Page=2;
 if ДатаРег>=1.1.2015 and Round(СумОб,2)=0:
    if EnqOkCancel("Не указана сумма обеспечения контракта, Игнорировать ?",mtWarning)=cmCancel:
       ^НаОшибку("Введите сумму обеспечения контракта",mtError,Page,"СумОб",0);
    fi;
 fi;
 if ДатаРег>=1.1.2015 and Пер="": ^НаОшибку("Введите периодичность исполнения контракта",mtError,Page,"Пер",0); fi;
 if РазмещЗаказ="": ^НаОшибку("Введите способ определения поставщика (подрядчика, исполнителя)",mtError,Page,"РазмещЗаказ_",0); fi;
 if ДатаРег>=1.1.2015 and not Length(РазмещЗаказ)=5: 
    tmp=Раб.Договор.СОП2СРЗ(РазмещЗаказ,"СРЗ");
    if not (Секрет>0 and tmp="20000"):
       РазмещЗаказ=tmp;
    fi;
    if not (Length(РазмещЗаказ)=5 or РазмещЗаказ="0"): ^НаОшибку("Недопустимый способ определения поставщика (подрядчика, исполнителя) "+РазмещЗаказ,mtError,Page,"РазмещЗаказ_",0);  fi;
--    if not (Length(РазмещЗаказ)=5): ^НаОшибку("Недопустимый способ определения поставщика (подрядчика, исполнителя) "+РазмещЗаказ,mtError,Page,"РазмещЗаказ_",0);  fi;
 fi;
 if ФЗ>=1:
    if ДатаРег>=1.1.2015:
       if ДатаИтог=1.1.100 and not (Match(РазмещЗаказ,"20*") or РазмещЗаказ="0"): ^НаОшибку("Введите дату подведения результов определения поставщика (подрядчика, исполнителя)",mtError,Page,"ДатаИтог",0); fi;
       if not ДатаИтог=1.1.100 and (Match(РазмещЗаказ,"20*") or РазмещЗаказ="0"): ^НаОшибку("Дата подведения результов определения поставщика (подрядчика, исполнителя) для способа определения поставщика 20XXX не заполняется",mtError,Page,"ДатаИтог",0); fi;
      else
       if ДатаИтог=1.1.100 and not SubStr(РазмещЗаказ,1,2)="11" and not РазмещЗаказ="0": ^НаОшибку("Введите дату подведения результов определения поставщика (подрядчика, исполнителя)",mtError,Page,"ДатаИтог",0); fi;
       if not ДатаИтог=1.1.100 and (SubStr(РазмещЗаказ,1,2)="11" or РазмещЗаказ="0"): ^НаОшибку("Дата подведения результов определения поставщика (подрядчика, исполнителя) для способа определения поставщика 11 не заполняется",mtError,Page,"ДатаИтог",0); fi;
    fi;
   else
    if ДатаИтог=1.1.100 and ((ДатаДок>=01.01.100 and Секрет<2 and not РазмещЗаказ="6") or ((ДатаДок<01.01.100 or Секрет>1) and not РазмещЗаказ="7")): ^НаОшибку("Введите дату проведения аукциона, подведения итогов, конкурса или итогов запросов котировок",mtError,Page,"ДатаИтог",0); fi;
 fi;
 if ФЗ>=1:
    if ДатаРег>=1.1.2015:
       if НомИзв="" and (РазмещЗаказ="11042" or РазмещЗаказ="11052" or РазмещЗаказ="11062" or РазмещЗаказ="12022"): ^НаОшибку("Введите номер извещения (приглашения) об осуществлении закупки",mtError,Page,"НомИзв",0); fi;
       if not НомИзв="" and Match(РазмещЗаказ,"20*"): ^НаОшибку("Номер извещения об осуществлении закупки для способа определения поставщика 20XXX не заполняется",mtError,Page,"НомИзв",0); fi;
      else
       if НомИзв="" and not SubStr(РазмещЗаказ,1,2)="11" and not РазмещЗаказ="0": ^НаОшибку("Введите номер извещения об осуществлении закупки",mtError,Page,"НомИзв",0); fi;
       if not НомИзв="" and (SubStr(РазмещЗаказ,1,2)="11" or РазмещЗаказ="0"): ^НаОшибку("Номер извещения об осуществлении закупки для способа определения поставщика 11 не заполняется",mtError,Page,"НомИзв",0); fi;
    fi;
   else
    if НомИзв="" and (РазмещЗаказ="1" or РазмещЗаказ="2" or РазмещЗаказ="3" or (((ДатаДок<01.01.100 or Секрет>1) and РазмещЗаказ="5") or ((ДатаДок>=01.01.100 or Секрет<2) and РазмещЗаказ="4"))): ^НаОшибку("Введите номер, присвоенный извещению о проведении конкурса, аукциона, запроса котировок",mtError,Page,"НомИзв",0); fi;
    if not НомИзв="" and not (РазмещЗаказ="1" or РазмещЗаказ="2" or РазмещЗаказ="3" or (((ДатаДок<01.01.100 or Секрет>1) and РазмещЗаказ="5") or ((ДатаДок>=01.01.100 or Секрет<2) and РазмещЗаказ="4"))): ^НаОшибку("Для способа размещения заказа ("+РазмещЗаказ_+") указывать номер присвоенный извещению о проведении конкурса, аукциона, запроса котировок не требуется",mtError,Page,"НомИзв",0); fi;
 fi;
 if ВидДокОсн="": ^НаОшибку("Введите наименование подтверждающего документа",mtError,Page,"ВидДокОсн",0); fi;
-- if НомДокОсн="": ^НаОшибку("Введите номер подтверждающего документа",mtError,Page,"НомДокОсн",0); fi;
 if ДатаДокОсн=1.1.100: ^НаОшибку("Введите дату подтверждающего документа",mtError,Page,"ДатаДокОсн",0); fi;
 for Iter=1..ДокОсн do
  if ДокОсн[Iter].Наим="": ^НаОшибку("Введите наименование подтверждающего документа",mtError,Page,"Наим",Iter); fi;
  if ДокОсн[Iter].Дат=1.1.100: ^НаОшибку("Введите дату подтверждающего документа",mtError,Page,"Дат",Iter); fi;
 od;
 if ФЗ>=1 and (SubStr(РазмещЗаказ,1,2)="11" or РазмещЗаказ="0") and ИнфоДокОсн1="" and ИнфоДокОсн2="" and ИнфоДокОсн3="" and ИнфоДокОсн4="" and ДатаРег<1.1.2015: ^НаОшибку("Введите дополнительную информацию о подтверждающем документе (документах)",mtError,Page,"ИнфоДокОсн1",0); fi;
 if not КодБюдж="":
    if ИстФин="": ^НаОшибку("Введите источник финансирования контракта",mtError,Page,"ИстФин",0); fi;
    if ИстФин_ОКТМО="" and ДатаРег>=1.1.2015: ^НаОшибку("Введите код ОКТМО источника финансирования контракта",mtError,Page,"ИстФин_ОКТМО",0); fi;
    if ИстФин="Российская Федерация" and not ИстФин_ОКТМО="00000000" and ДатаРег>=1.1.2015: 
       if EnqOkCancel("Внимание! Возможно, код ОКТМО, для источника финансирования 'Российская Федерация', должен быть равен 00000000, а не "+ИстФин_ОКТМО+"^MИгнорировать предупреждение ?",mtWarning)=cmCancel:
          ^НаОшибку("",mtError,Page,"ИстФин_ОКТМО",0);
       fi;
    fi;
 fi;
 --Проверяем таблицу КБК
 for Iter=1..УпрКБК do
  if КБК0[Iter]="" and Секрет>0: НаОшибку("Введите КБК действующие на момент заключения (изменения)",mtError,Page,"КБК0",Iter); Рег=False; РедакторКБК("КБК0",Iter,False,False); ^False; fi;
  if ВД[Iter]="1": isБюдж=True; fi;
  if not ВД[Iter]="1" and not ВД[Iter]="3": isВнеБюдж=True; fi;
 od;
 if not КодБюдж="" and НаимБюдж="": ^НаОшибку("Введите наименование бюджета",mtError,Page,"НаимБюдж",0); fi;
 if (КодБюдж="" and not НаимБюдж="") or (isБюдж and КодБюдж=""): ^НаОшибку("Введите код бюджета",mtError,Page,"КодБюдж",0); fi;
 if not КодБюдж="" and not КодБюдж="11" and not КодБюдж="14" and not КодБюдж="15" and not КодБюдж="16" and ДатаРег>=1.1.2015:
    ^НаОшибку("Недопустимый код бюджета "+КодБюдж,mtError,Page,"КодБюдж",0);
 fi;
 Page=4;
 if not КодБюдж="" and not isБюдж: НаОшибку("Заполните детализацию контракта по КБК для бюджетных средств ("+НаимБюдж+")",mtError,Page,"ВД",Iter); Рег=False; РедакторКБК("ВД",Iter,False,False); ^False; fi;
 if isВнеБюдж and ВидВнеБюдж="": ^НаОшибку("Введите вид внебюджетных средств",mtError,Page,"ВидВнеБюдж_",0); fi;
 if not ВидВнеБюдж="" and not ВидВнеБюдж="21" and not ВидВнеБюдж="22" and not ВидВнеБюдж="23" and not ВидВнеБюдж="24" and ДатаРег>=1.1.2015:
    ^НаОшибку("Недопустимый вид внебюджетных средств "+ВидВнеБюдж,mtError,Page,"ВидВнеБюдж_",0);
 fi;
 if not ВидВнеБюдж="" and not isВнеБюдж: НаОшибку("Заполните детализацию контракта по КБК для внебюджетных средств ("+ВидВнеБюдж_+")",mtError,Page,"ВД",Iter); Рег=False; РедакторКБК("ВД",Iter,False,False); ^False; fi;
 Page=13;
 if not Round(СумОб,2)=0 and not Abs(ТипИзм)=99:
    РасчетОбеспеч;
    if Round(ВсегоОстОбеспеч+ДС_ВсегоОстОбеспеч,2)=0:
       if EnqOkCancel("Внимание! Указана сумма обеспечения, однако документы подверждающие принятие на учет сумм обеспечения не найдены. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"ОбновОбеспеч",0); fi;
    fi;
    if not Round(СумОб,2)=Round(ВсегоОстОбеспеч+ДС_ВсегоОстОбеспеч,2):
       if EnqOkCancel("Внимание! Указаная сумма обеспечения ("+Format("%.2N",СумОб)+" не равна сумме по документам ("+Format("%.2N",ВсегоОстОбеспеч+ДС_ВсегоОстОбеспеч)+"), подверждающим принятие на учет сумм обеспечения. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"ОбновОбеспеч",0); fi;
    fi;
 fi;
 ^True;
end;

Func Проверить: L;
var Iter,y,y0,Page,qМФ,БО_ФорматНомер_,i:I;
var СчДеб_,СчКре_,КБК_,КОСГУ_,tmp,YYYY:S;
var isМФ,noМФ,isФАИП,isЦена:L;
var Flag:L;
 RefreshAna;
 if ДатаСвед=1.1.100: ДатаСвед=ДатаРег; fi;
 Page=0;
 if Учр=nil: ^НаОшибку("Выберите заказчика",mtError,Page,"Учр.ПолнИмя",0);  fi;
 if Учр.ПолнИмя="" and Учр.РПО_ПолнИмя2="": ^НаОшибку("Введите полное наименование заказчика",mtError,Page,"Учр.ПолнИмя",0); fi;
 if Учр.ИНН="": ^НаОшибку("Введите ИНН заказчика",mtError,Page,"Учр.ИНН",0); fi;
 if Учр.КПП="": Trace("Предупреждение. Не заполнено КПП заказчика"); fi;
 if Учр.РПО_ТипУчр="КУ" or  Учр.РПО_ТипУчр="":
    if Учр.РПО_ППП="": ^НаОшибку("Введите код ведомства заказчика",mtError,Page,"Учр.РПО_ППП",0); fi;
    if Учр.РПО_КБП="": ^НаОшибку("Введите КБП заказчика ",mtError,Page,"Учр.РПО_КБП",0); fi;
 fi;
 if ДолжнРук="": ^НаОшибку("Заполните должность руководителя",mtError,Page,"ДолжнРук",0); fi;
 if ФИОРук="": ^НаОшибку("Введите ФИО руководителя",mtError,Page,"ФИОРук",0); fi;
 if ДатаСвед=1.1.100: ^НаОшибку("Введите дату формирования сведений (о принятом бюджетном обязательстве)",mtError,Page,"ДатаСвед",0); fi;
 if ДатаРук=1.1.100: ^НаОшибку("Введите дату подписи сведений руководителем заказчика",mtError,Page,"ДатаРук",0); 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;
    if Учр_Банк_Свед_ФО_Наим="":     ^НаОшибку("Введите наименование финансового органа",mtError,Page,"Учр_Банк_Свед_ФО_Наим",0); fi;
    if Учр_Банк_Свед.РПО_ФО_ОКПО="": ^НаОшибку("Введите ОКПО финансового органа (можно посмотреть в выписке)",mtError,Page,"Учр_Банк_Свед.РПО_ФО_ОКПО",0); fi;
 fi;
 if Учр_Банк=nil: ^НаОшибку("Выберите банковские реквизиты заказчика (для оплаты)",mtError,Page,"Учр_Банк.БанкИмя",0);  fi;
 if Учр.РПО_ТипУчр="КУ" or  Учр.РПО_ТипУчр="":
    if Учр_Банк.РПО_ОФК_Имя="": ^НаОшибку("Наименование органа ФК заказчика",mtError,Page,"Учр_Банк.РПО_ОФК_Имя",0); fi;
    if Учр_Банк.РПО_ОФК_Код="": ^НаОшибку("Код органа ФК заказчика",mtError,Page,"Учр_Банк.РПО_ОФК_Код",0); fi;
    if Учр_Банк.РПО_ЛСчет="":   ^НаОшибку("Введите лицевой счет заказчика",mtError,Page,"Учр_Банк.РПО_ЛСчет",0); fi;
    if Учр_Банк_ФО_Наим="":     ^НаОшибку("Введите наименование финансового органа",mtError,Page,"Учр_Банк_ФО_Наим",0); fi;
    if Учр_Банк.РПО_ФО_ОКПО="": ^НаОшибку("Введите ОКПО финансового органа (можно посмотреть в выписке)",mtError,Page,"Учр_Банк.РПО_ФО_ОКПО",0); fi;
    if Учр_Банк_ФО_Наим="":     ^НаОшибку("Введите наименование финансового органа",mtError,Page,"Учр_Банк_ФО_Наим",0); fi;
    if Учр_Банк.РПО_ФО_ОКПО="": ^НаОшибку("Введите ОКПО финансового органа (можно посмотреть в выписке)",mtError,Page,"Учр_Банк.РПО_ФО_ОКПО",0); fi;
 fi;
 if not Настр.Общ_Справ1="":
    if Общ_Призн1="": ^НаОшибку("Введите "+Настр.Общ_Справ_Наим1,mtError,Page,"Общ_Призн1",0); fi;
    if Name_A(Общ_Призн1)=" ": ^НаОшибку("Неизвестный аналитический признак '"+Общ_Призн1+"'",mtError,Page,"Общ_Призн1",0); fi;
 fi;
 if not Настр.Общ_Справ2="":
    if Общ_Призн2="": ^НаОшибку("Введите "+Настр.Общ_Справ_Наим2,mtError,Page,"Общ_Призн2",0); fi;
    if Name_A(Общ_Призн2)=" ": ^НаОшибку("Неизвестный аналитический признак '"+Общ_Призн2+"'",mtError,Page,"Общ_Призн2",0); fi;
 fi;
 Page=1;
 if Контр=nil: ^НаОшибку("Выберите контрагента",mtError,Page,"Контр.ПолнИмя",0);  fi;
 if Контр.ПолнИмя="" and Контр.РПО_ПолнИмя2="": ^НаОшибку("Введите полное наименование поставщика",mtError,Page,"Контр.ПолнИмя",0); fi;
 if Контр.КорИмя="": ^НаОшибку("Введите краткое наименование поставщика",mtError,Page,"Контр.ПолнИмя",0); fi;
 if Контр_Призн="": ^НаОшибку("Выберите аналитический признак контрагента",mtError,Page,"Контр_Призн",0); fi;
 if Name_A(Контр_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак контрагента '"+Контр_Призн+"'",mtError,Page,"Контр_Призн",0); fi;
 if Контр.ИНН="": ^НаОшибку("Введите ИНН поставщика",mtError,Page,"Контр.ИНН",0); fi;
 if Контр.КПП="" and Контр.Тип=0: ^НаОшибку("Введите КПП поставщика",mtError,Page,"Контр.КПП",0); fi;
 if not fСокрКонтрольГК:
   if ДатаРег>=1.1.2015:
      if Контр.КОПФ="": ^НаОшибку("Введите ОКОПФ поставщика",mtError,Page,"Контр.КОПФ",0); fi;
      if Контр.ОКПО="": ^НаОшибку("Введите ОКПО поставщика",mtError,Page,"Контр.ОКПО",0); fi;
     -- if Контр.EMail="": ^НаОшибку("Введите E-Mail поставщика",mtError,Page,"Контр.EMail",0); fi;
   fi;
   if Контр.РПО_Страна="": ^НаОшибку("Введите наименование страны",mtError,Page,"Контр.РПО_Страна",0); fi;
   if Контр.РПО_ОКСМ="": ^НаОшибку("Введите код страны по ОКСМ",mtError,Page,"Контр.РПО_ОКСМ",0); fi;
   if ДатаРег>=1.1.2015:
      if Контр.РПО_ОКСМ="643":
         if Контр.РПО_МН_Индекс="": ^НаОшибку("Введите почтовый индекс",mtError,Page,"Контр_ИМН_",0); fi;
         if Контр.РПО_МН_Субъект.Код="": ^НаОшибку("Выберите код субъекта",mtError,Page,"Контр_ИМН_",0); fi;
         if Контр.РПО_МН_Субъект.Регион="": ^НаОшибку("Выберите наименование субъекта",mtError,Page,"Контр_ИМН_",0); fi;
         if Контр.РПО_МН_НасПункт="": ^НаОшибку("Введите тип и наименование населенного пункта",mtError,Page,"Контр_ИМН_",0); fi;
         if Контр.РПО_МН_ОКТМО="": ^НаОшибку("Введите код ОКТМО населенного пункта",mtError,Page,"Контр_ИМН_",0); fi;
        else
         if Контр.РПО_МН_НасПункт="": ^НаОшибку("Введите тип и наименование населенного пункта",mtError,Page,"Контр_ИМН_",0); fi;
      fi;
      if Контр.РПО_МН_Улица="": ^НаОшибку("Введите наименование улицы",mtError,Page,"Контр_ИМН_",0); fi;
      if Контр.РПО_МН_Дом="": ^НаОшибку("Введите номер дома",mtError,Page,"Контр_ИМН_",0); fi;
     else
      if Контр.ЮрАдрес="": ^НаОшибку("Введите юридический адрес",mtError,Page,"Контр.ЮрАдрес",0); fi;
      if Контр.ПочтАдрес="": ^НаОшибку("Введите почтовый адрес",mtError,Page,"Контр.ПочтАдрес",0); fi;
   fi;
 fi;
 if not Наличные:
    if Контр_Банк=nil: ^НаОшибку("Выберите банковские реквизиты контрагента",mtError,Page,"Контр_Банк.БанкИмя",0); fi;
    if Контр_Банк.Банк="": ^НаОшибку("Введите наименование банка контрагента",mtError,Page,"Контр_Банк.Банк",1); fi;
    if Контр_Банк.БИК="": ^НаОшибку("Введите БИК банка контрагента",mtError,Page,"Контр_Банк.БИК",1); fi;
    if Контр_Банк.РСчет="": ^НаОшибку("Введите расчетный счет контрагента",mtError,Page,"Контр_Банк.РСчет",1); fi;
    i=Раб.Вспом.Справ_БИК.Контроль(Контр_Банк,"банковских реквизитов контрагента");
    if i=-2: Template.Field="Контр_Банк.БИК"; ^False;
      |i=-6: Template.Field="Контр_Банк.КСчет"; ^False;
      |i< 0: Template.Field="Контр_Банк.БанкИмя"; ^False;
    fi;
    y=SearchInArray(Контр_Банк2[].Контр_Банк,Контр_Банк,False);
    if not y=-1:
       Template.Name="S2_1"; ^НаОшибку("Повторный ввод банковских реквизитов",mtError,Page,"Контр_Банк.БанкИмя",y);
    fi;
 fi;
 Iter=1;
 While Iter<=Контр_Банк2 do
  if Контр_Банк2[Iter].Контр_Банк=nil:
     DeleteFrame(Контр_Банк2,Iter);
    else
     Template.Name="S2_1";
     if Контр_Банк2[Iter].Контр_Банк.Банк="":  ^НаОшибку("Введите наименование банка контрагента",mtError,Page,"Контр_Банк.Банк",Iter); fi;
     if Контр_Банк2[Iter].Контр_Банк.БИК="":   ^НаОшибку("Введите БИК банка контрагента",mtError,Page,"Контр_Банк.БИК",Iter); fi;
     if Контр_Банк2[Iter].Контр_Банк.РСчет="": ^НаОшибку("Введите расчетный счет контрагента",mtError,Page,"Контр_Банк.РСчет",Iter); fi;
     i=Раб.Вспом.Справ_БИК.Контроль(Контр_Банк2[Iter].Контр_Банк,"банковских реквизитов контрагента");
     if i=-2: Template.Field="Контр_Банк.БИК"; ^False;
       |i=-6: Template.Field="Контр_Банк.КСчет"; ^False;
       |i< 0: Template.Field="Контр_Банк.БанкИмя"; ^False;
     fi;
     y=SearchInArray(Контр_Банк2[].Контр_Банк,Контр_Банк2[Iter].Контр_Банк,False,Iter+1);
     if not y=-1:
        Template.Name="S2_1"; ^НаОшибку("Повторный ввод банковских реквизитов (строка "+Str(Iter+1)+"="+Str(y+1)+")",mtError,Page,"Контр_Банк.БанкИмя",y);
     fi;
     Iter=Iter+1;
  fi;
 od;
 y=SearchInArray(Контр2[].Контр,Контр,False);
 if not y=-1:
    Template.Name="S2_2"; ^НаОшибку("Повторный ввод контрагента",mtError,Page,"Контр.ПолнИмя",y);
 fi;
 Iter=1;
 While Iter<=Контр2 do
  if Контр2[Iter].Контр=nil:
     DeleteFrame(Контр2,Iter);
    else
     Template.Name="S2_2";
     if Контр2[Iter].Контр.ПолнИмя="" and Контр2[Iter].Контр.РПО_ПолнИмя2="": ^НаОшибку("Введите полное наименование поставщика",mtError,Page,"Контр.ПолнИмя",Iter); fi;
     if Контр2[Iter].Контр.КорИмя="": ^НаОшибку("Введите краткое наименование поставщика",mtError,Page,"Контр.КорИмя",0); fi;
     if Контр2[Iter].Контр.ИНН="": ^НаОшибку("Введите ИНН поставщика",mtError,Page,"Контр.ИНН",Iter); fi;
     if Контр2[Iter].Контр.КПП="" and Контр.Тип=0: ^НаОшибку("Введите КПП поставщика",mtError,Page,"Контр.КПП",Iter); fi;
     if not fСокрКонтрольГК:
       if ДатаРег>=1.1.2015:
          if Контр2[Iter].Контр.КОПФ="": ^НаОшибку("Введите ОКОПФ поставщика",mtError,Page,"Контр.КОПФ",Iter); fi;
          if Контр2[Iter].Контр.ОКПО="": ^НаОшибку("Введите ОКПО поставщика",mtError,Page,"Контр.ОКПО",Iter); fi;
      --    if Контр2[Iter].Контр.EMail="": ^НаОшибку("Введите E-Mail поставщика",mtError,Page,"Контр.EMail",Iter); fi;
       fi;
       if Контр2[Iter].Контр.РПО_Страна="": ^НаОшибку("Введите наименование страны",mtError,Page,"Контр.РПО_Страна",Iter); fi;
       if Контр2[Iter].Контр.РПО_ОКСМ="": ^НаОшибку("Введите код страны по ОКСМ",mtError,Page,"Контр.РПО_ОКСМ",Iter); fi;
       if Секрет>0 and ДатаРег>=1.1.2015:
          if Контр.РПО_ОКСМ="643":
             if Контр2[Iter].Контр.РПО_МН_Индекс="": ^НаОшибку("Введите почтовый индекс",mtError,Page,"Контр_ИМН_",Iter); fi;
             if Контр2[Iter].Контр.РПО_МН_Субъект.Код="": ^НаОшибку("Выберите код субъекта",mtError,Page,"Контр_ИМН_",Iter); fi;
             if Контр2[Iter].Контр.РПО_МН_Субъект.Регион="": ^НаОшибку("Выберите наименование субъекта",mtError,Page,"Контр_ИМН_",Iter); fi;
             if Контр2[Iter].Контр.РПО_МН_НасПункт="": ^НаОшибку("Введите тип и наименование населенного пункта",mtError,Page,"Контр_ИМН_",Iter); fi;
             if Контр2[Iter].Контр.РПО_МН_ОКТМО="": ^НаОшибку("Введите код ОКТМО населенного пункта",mtError,Page,"Контр_ИМН_",Iter); fi;
            else
             if Контр2[Iter].Контр.РПО_МН_НасПункт="": ^НаОшибку("Введите тип и наименование населенного пункта",mtError,Page,"Контр_ИМН_",Iter); fi;
          fi;
          if Контр2[Iter].Контр.РПО_МН_Улица="": ^НаОшибку("Введите наименование улицы",mtError,Page,"Контр_ИМН_",Iter); fi;
          if Контр2[Iter].Контр.РПО_МН_Дом="": ^НаОшибку("Введите номер дома",mtError,Page,"Контр_ИМН_",Iter); fi;
         else
          if Контр2[Iter].Контр.ЮрАдрес="": ^НаОшибку("Введите юридический адрес",mtError,Page,"Контр.ЮрАдрес",Iter); fi;
          if Контр2[Iter].Контр.ПочтАдрес="": ^НаОшибку("Введите почтовый адрес",mtError,Page,"Контр.ПочтАдрес",Iter); fi;
       fi;
     fi;
     if not Контр2[Iter].Наличные:
        if Контр2[Iter].Контр_Банк=nil: ^НаОшибку("Выберите банковские реквизиты контрагента",mtError,Page,"Контр_Банк.БанкИмя",Iter); fi;
        if Контр2[Iter].Контр_Банк.Банк="": ^НаОшибку("Введите наименование банка контрагента",mtError,Page,"Контр_Банк.Банк",Iter); fi;
        if Контр2[Iter].Контр_Банк.БИК="": ^НаОшибку("Введите БИК банка контрагента",mtError,Page,"Контр_Банк.БИК",Iter); fi;
        if Контр2[Iter].Контр_Банк.РСчет="": ^НаОшибку("Введите расчетный счет контрагента",mtError,Page,"Контр_Банк.РСчет",Iter); fi;
        i=Раб.Вспом.Справ_БИК.Контроль(Контр2[Iter].Контр_Банк,"банковских реквизитов контрагента");
        if i=-2: Template.Field="Контр_Банк.БИК"; ^False;
          |i=-6: Template.Field="Контр_Банк.КСчет"; ^False;
          |i< 0: Template.Field="Контр_Банк.БанкИмя"; ^False;
        fi;
     fi;
     y=SearchInArray(Контр2[].Контр,Контр2[Iter].Контр,False,Iter+1);
     if not y=-1:
        ^НаОшибку("Повторный ввод контрагента (строка "+Str(Iter+1)+"="+Str(y+1)+")",mtError,Page,"Контр.ПолнИмя",y);
     fi;
     Iter=Iter+1;
  fi;
 od;
 --
 Page=2;
 if ТипСвед=0 and not Договор_Пре=nil then  ^НаОшибку("Изменение к договору не может содержать первичные сведения",mtError,Page,"ТипСвед_",0);  fi;
 if НаимДок=nil or НаимДок.Наим="": ^НаОшибку("Введите наименование договора",mtError,Page,"НаимДок.Наим",0);  fi;
 if ВидДок="":  ^НаОшибку("Введите вид документа",mtError,Page,"ВидДок",0);  fi;
 if НомерДок="": ^НаОшибку("Введите номер документа",mtError,Page,"НомерДок",0); fi;
 if ДатаДок=1.1.100: ^НаОшибку("Введите дату документа",mtError,Page,"ДатаДок",0); fi;
 if ДатаРег=1.1.100: ^НаОшибку("Введите дату принятия к учету",mtError,Page,"ДатаРег",0); fi;
 if not Year(ДатаСвед)=Year(ДатаРег): ^НаОшибку("Дата формирования сведений должна находиться в пределах текущего года договора ("+Str(Year(ДатаРег))+")",mtError,0,"ДатаСвед",0); fi;
 if ДатаН=1.1.100: ^НаОшибку("Введите дату начала действия документа",mtError,Page,"ДатаН",0);  fi;
-- if ДатаК=1.1.100: ^НаОшибку("Введите дату окончания действия договора",mtError,Page,"ДатаК",0); fi;
 if ДатаН>ДатаК and not ДатаК=1.1.100: ^НаОшибку("Начальная дата превышает конечную",mtError,Page,"ДатаН",0);  fi;
-- if ДатаРег<ДатаН: ^НаОшибку("Дата принятия к учету не может быть ранее даты начала действия документа",mtError,Page,"ДатаРег",0);  fi;
 if ДатаН<ДатаДок: 
    if EnqOkCancel("Начало срока действия документа не может быть ранее даты документа^MИгнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"ДатаДок",0); fi;
 fi;
 if ТекГод>Str(Year(ДатаК)) and not ДатаК=1.1.100: 
    if EnqOkCancel("Внимание! Текущий год "+ТекГод+" превышает год окончания документа "+Str(Year(ДатаК))+". Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"ТекГод",0); fi;
 fi;
-- if Round(СумДок,2)=0: ^НаОшибку("Введите сумму договора",mtError,Page,"СумДок",0);  fi;
 if Round(СумДок,2)=0 and (not Аннулирован or (Аннулирован and not Round(АннулФактОпл,2)=0)): ^НаОшибку("Введите сумму договора",mtError,Page,"СумДок",0);  fi;
 if ОКВ="": ^НаОшибку("Введите валюту договора",mtError,Page,"ОКВ",0); fi;
 if Round(СумТек,2)=0 and not Учет_Реестр_ОФК and ver=0: ^НаОшибку("Введите сумму на текущий год",mtError,Page,"СумТек",0);  fi;
 if Round(СумТек,2)>Round(СумДок,2) and not Учет_Реестр_ОФК and ver=0: ^НаОшибку("Сумма на текущий год не может превышать сумму документа",mtError,Page,"СумТек",0);  fi;
 if Учет_Реестр_ОФК or ver>0:
    if not Round(СумГод1,2) =0 and Год1 ="": ^НаОшибку("Введите I год документа",mtError,Page,"Год1",0); fi;
    if not Round(СумГод2,2) =0 and Год2 ="": ^НаОшибку("Введите II год документа",mtError,Page,"Год2",0); fi;
    if not Round(СумГод3,2) =0 and Год3 ="": ^НаОшибку("Введите III год документа",mtError,Page,"Год3",0); fi;
    if not Round(СумГод4,2) =0 and Год4 ="": ^НаОшибку("Введите IV год документа",mtError,Page,"Год4",0); fi;
    if not Round(СумГод5,2) =0 and Год5 ="": ^НаОшибку("Введите V год документа",mtError,Page,"Год5",0); fi;
    if not Round(СумГод6,2) =0 and Год6 ="": ^НаОшибку("Введите VI год документа",mtError,Page,"Год6",0); fi;
    if not Round(СумГод7,2) =0 and Год7 ="": ^НаОшибку("Введите VII год документа",mtError,Page,"Год7",0); fi;
    if not Round(СумГод8,2) =0 and Год8 ="": ^НаОшибку("Введите VIII год документа",mtError,Page,"Год8",0); fi;
    if not Round(СумГод9,2) =0 and Год9 ="": ^НаОшибку("Введите IX год документа",mtError,Page,"Год9",0); fi;
    if not Round(СумГод10,2)=0 and Год10="": ^НаОшибку("Введите X год документа",mtError,Page,"Год10",0); fi;

    if not Round(СумГод1+СумГод2+СумГод3+СумГод4+СумГод5+СумГод6+СумГод7+СумГод8+СумГод9+СумГод10,2)=Round(СумДок,2): ^НаОшибку("Сумма документа не равна сумме по годам",mtError,Page,"СумДок",0); fi;
    if Год1="" and Год2="" and Год3="" and Год4="" and Год5="" and Год6="": ^НаОшибку("Введите первый год документа",mtError,Page,"Год1",0); fi;
    if not ДатаК=1.1.100:
       YYYY=Str(Year(ДатаК));
       if not YYYY=Год1 and not YYYY=Год2 and not YYYY=Год3 and not YYYY=Год4 and not YYYY=Год5 and not YYYY=Год6 and not YYYY=Год7 and not YYYY=Год8 and not YYYY=Год9 and not YYYY=Год10: ^НаОшибку("Введите последний год документа",mtError,Page,"Год"+Str(Year(ДатаК)-Year(ДатаН)+1),0); fi;
       if Год1>YYYY: 
          if EnqOkCancel("Внимание! I год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год1",0); fi;
         |Год2>YYYY: 
          if EnqOkCancel("Внимание! II год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год2",0); fi;
         |Год3>YYYY: 
          if EnqOkCancel("Внимание! III год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год3",0); fi;
         |Год4>YYYY: 
          if EnqOkCancel("Внимание! IV год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год4",0); fi;
         |Год5>YYYY: 
          if EnqOkCancel("Внимание! V год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год5",0); fi;
         |Год6>YYYY: 
          if EnqOkCancel("Внимание! VI год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год6",0); fi;
         |Год7>YYYY:
          if EnqOkCancel("Внимание! VII год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год7",0); fi;
         |Год8>YYYY:
          if EnqOkCancel("Внимание! VIII год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год8",0); fi;
         |Год9>YYYY:
          if EnqOkCancel("Внимание! IX год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год9",0); fi;
         |Год10>YYYY:
          if EnqOkCancel("Внимание! X год превышает срок действия документа. Игнорировать ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,Page,"Год10",0); fi;
       fi;
    fi;
    if not ТекГод=Год1 and not ТекГод=Год2 and not ТекГод=Год3 and not ТекГод=Год4 and not ТекГод=Год5 and not ТекГод=Год6 and not ТекГод=Год7 and not ТекГод=Год8 and not ТекГод=Год9 and not ТекГод=Год10: ^НаОшибку("Недопустимый текущий год документа",mtError,Page,"ТекГод",0); fi;
    if Год1=Год2 or Год1=Год3 or Год1=Год4 or Год1=Год5 or Год1=Год6 or Год1=Год7 or Год1=Год8 or Год1=Год9 or Год1=Год10: ^НаОшибку("Повторный ввод года "+Год1,mtError,Page,"Год1",0); fi;
    if not Год2="" and (Год2=Год3 or Год2=Год4 or Год2=Год5 or Год2=Год6 or Год2=Год7 or Год2=Год8 or Год2=Год9 or Год2=Год10): ^НаОшибку("Повторный ввод года "+Год2,mtError,Page,"Год2",0); fi;
    if not Год3="" and (Год3=Год4 or Год3=Год5 or Год3=Год6 or Год3=Год7 or Год3=Год8 or Год3=Год9 or Год3=Год10): ^НаОшибку("Повторный ввод года "+Год3,mtError,Page,"Год3",0); fi;
    if not Год4="" and (Год4=Год5 or Год4=Год6 or Год4=Год7 or Год4=Год8 or Год4=Год9 or Год4=Год10): ^НаОшибку("Повторный ввод года "+Год4,mtError,Page,"Год4",0); fi;
    if not Год5="" and (Год5=Год6 or Год5=Год7 or Год5=Год8 or Год5=Год9 or Год5=Год10): ^НаОшибку("Повторный ввод года "+Год5,mtError,Page,"Год5",0); fi;
    if not Год6="" and (Год6=Год7 or Год6=Год8 or Год6=Год9 or Год6=Год10): ^НаОшибку("Повторный ввод года "+Год6,mtError,Page,"Год6",0); fi;
    if not Год7="" and (Год7=Год8 or Год7=Год9 or Год7=Год10): ^НаОшибку("Повторный ввод года "+Год7,mtError,Page,"Год7",0); fi;
    if not Год8="" and (Год8=Год9 or Год8=Год10): ^НаОшибку("Повторный ввод года "+Год8,mtError,Page,"Год8",0); fi;
    if not Год9="" and Год9=Год10: ^НаОшибку("Повторный ввод года "+Год9,mtError,Page,"Год9",0); fi;
 fi;
 if not RoundПроцАв(ПроцАв)=0:
    if not RoundПроцАв(ПроцАв)=RoundПроцАв(СумАв*100/СумДок): 
       if Abs(RoundПроцАв(ПроцАв)-RoundПроцАв(СумАв*100/СумДок))<0.001:
          if EnqOkCancel("Внимание! Указанный процент авансового платежа ("+Str(RoundПроцАв(ПроцАв),4)+") не равен проценту исчисленного от общей суммы документа ("+Str(RoundПроцАв(СумАв*100/СумДок),4)+")^MИгнорировать предупреждение ?",mtWarning)=cmCancel:
             ^НаОшибку("",mtError,Page,"ПроцАв",0);
          fi;
         else
          ^НаОшибку("Внимание! Указанный процент авансового платежа ("+Str(RoundПроцАв(ПроцАв),4)+") не равен проценту исчисленного от общей суммы документа ("+Str(RoundПроцАв(СумАв*100/СумДок),4)+")",mtError,Page,"ПроцАв",0);
       fi;
    fi;
 fi;
 if Round(СумАв,2)>Round(СумДок,2): ^НаОшибку("Сумма аванса не может превышать сумму документа всего",mtError,Page,"СумАв",0); fi;
 if Содерж="": ^НаОшибку("Введите краткое содержание",mtError,Page,"Содерж",0);  fi;
 if Срок>ДатаК and not ДатаК=1.1.100: ^НаОшибку("Срок поставки превышает дату окончания",mtError,Page,"Срок",0);  fi;
 if Срок<ДатаН and not Срок=1.1.100: ^НаОшибку("Срок поставки не может быть ранее даты начала действия документа",mtError,Page,"Срок",0);  fi;
 Page=3;
 РасчетКБК;
 if УпрКБК=0: ^НаОшибку("Нет расшифровки договора по КБК",mtError,Page,"РедКБК",0); fi;
 for Iter=1..УпрКБК do
  if ВД[Iter]="": НаОшибку("Выберите вид деятельности",mtError,Page,"ВД",Iter); Рег=False; РедакторКБК("ВД",Iter,False,False); ^False; fi;
  if КБК[Iter]="": НаОшибку("Введите КБК",mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
  if Round(СумКБК[Iter],2)=0 and not Учет_Реестр_ОФК and ver=0: НаОшибку("Введите сумму",mtError,Page,"СумКБК",Iter); Рег=False; РедакторКБК("Сум",Iter,False,False); ^False; fi;
  if Учет_Реестр_ОФК or ver>0:
     if Round(СумКБКГод1[Iter],2) =0 and
        Round(СумКБКГод2[Iter],2) =0 and
        Round(СумКБКГод3[Iter],2) =0 and
        Round(СумКБКГод4[Iter],2) =0 and
        Round(СумКБКГод5[Iter],2) =0 and
        Round(СумКБКГод6[Iter],2) =0 and
        Round(СумКБКГод7[Iter],2) =0 and
        Round(СумКБКГод8[Iter],2) =0 and
        Round(СумКБКГод9[Iter],2) =0 and
        Round(СумКБКГод10[Iter],2)=0 and
        --(not (Исполнен or Аннулирован) or ((Исполнен or Аннулирован) and Round(ФактОплКБК[Iter],2)=0)): НаОшибку("Введите сумму КБК",mtError,4,"СумКБКГод1",Iter);  Рег=False; РедакторКБК(if(not Год1="":"СумГод1"|not Год2="":"СумГод2"|not Год3="":"СумГод3"|not Год4="":"СумГод4"|not Год5="":"СумГод5"|not Год6="":"СумГод6"),Iter,False,False); ^False;
        (not (Исполнен or Аннулирован) or (Исполнен and Round(ФактОплКБК[Iter],2)=0) or (Аннулирован and Round(ФактОплКБК[Iter],2)=0 and not Round(СумДок,2)=0)): 
        НаОшибку("Введите сумму КБК",mtError,4,if(not Год1="":"СумКБКГод1"|not Год2="":"СумКБКГод2"|not Год3="":"СумКБКГод3"|not Год4="":"СумКБКГод4"|not Год5="":"СумКБКГод5"|not Год6="":"СумКБКГод6"|not Год7="":"СумКБКГод7"|not Год8="":"СумКБКГод8"|not Год9="":"СумКБКГод9"|not Год10="":"СумКБКГод10"),Iter);
        Рег=False; 
        РедакторКБК(if(not Год1="":"СумГод1"|not Год2="":"СумГод2"|not Год3="":"СумГод3"|not Год4="":"СумГод4"|not Год5="":"СумГод5"|not Год6="":"СумГод6"|not Год7="":"СумГод7"|not Год8="":"СумГод8"|not Год9="":"СумГод9"|not Год10="":"СумГод10"),Iter,False,False); 
        ^False;
     fi;
  fi;
 od;
 if Учет_Реестр_ОФК or ver>0:
    if not Round(СумГод1,2) =Round(ВсегоСумКБКГод1,2)  and not Год1 ="": НаОшибку("Сумма на "+Год1 +"г. ("+Str(СумГод1,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод1,2) +")",mtError,Page,"СумГод1",0);  Рег=False; РедакторКБК("ВсегоСумГод1" ,0,False,False); ^False; fi;
    if not Round(СумГод2,2) =Round(ВсегоСумКБКГод2,2)  and not Год2 ="": НаОшибку("Сумма на "+Год2 +"г. ("+Str(СумГод2,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод2,2) +")",mtError,Page,"СумГод2",0);  Рег=False; РедакторКБК("ВсегоСумГод2" ,0,False,False); ^False; fi;
    if not Round(СумГод3,2) =Round(ВсегоСумКБКГод3,2)  and not Год3 ="": НаОшибку("Сумма на "+Год3 +"г. ("+Str(СумГод3,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод3,2) +")",mtError,Page,"СумГод3",0);  Рег=False; РедакторКБК("ВсегоСумГод3" ,0,False,False); ^False; fi;
    if not Round(СумГод4,2) =Round(ВсегоСумКБКГод4,2)  and not Год4 ="": НаОшибку("Сумма на "+Год4 +"г. ("+Str(СумГод4,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод4,2) +")",mtError,Page,"СумГод4",0);  Рег=False; РедакторКБК("ВсегоСумГод4" ,0,False,False); ^False; fi;
    if not Round(СумГод5,2) =Round(ВсегоСумКБКГод5,2)  and not Год5 ="": НаОшибку("Сумма на "+Год5 +"г. ("+Str(СумГод5,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод5,2) +")",mtError,Page,"СумГод5",0);  Рег=False; РедакторКБК("ВсегоСумГод5" ,0,False,False); ^False; fi;
    if not Round(СумГод6,2) =Round(ВсегоСумКБКГод6,2)  and not Год6 ="": НаОшибку("Сумма на "+Год6 +"г. ("+Str(СумГод6,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод6,2) +")",mtError,Page,"СумГод6",0);  Рег=False; РедакторКБК("ВсегоСумГод6" ,0,False,False); ^False; fi;
    if not Round(СумГод7,2) =Round(ВсегоСумКБКГод7,2)  and not Год7 ="": НаОшибку("Сумма на "+Год7 +"г. ("+Str(СумГод7,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод7,2) +")",mtError,Page,"СумГод7",0);  Рег=False; РедакторКБК("ВсегоСумГод7" ,0,False,False); ^False; fi;
    if not Round(СумГод8,2) =Round(ВсегоСумКБКГод8,2)  and not Год8 ="": НаОшибку("Сумма на "+Год8 +"г. ("+Str(СумГод8,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод8,2) +")",mtError,Page,"СумГод8",0);  Рег=False; РедакторКБК("ВсегоСумГод8" ,0,False,False); ^False; fi;
    if not Round(СумГод9,2) =Round(ВсегоСумКБКГод9,2)  and not Год9 ="": НаОшибку("Сумма на "+Год9 +"г. ("+Str(СумГод9,2) +") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод9,2) +")",mtError,Page,"СумГод9",0);  Рег=False; РедакторКБК("ВсегоСумГод9" ,0,False,False); ^False; fi;
    if not Round(СумГод10,2)=Round(ВсегоСумКБКГод10,2) and not Год10="": НаОшибку("Сумма на "+Год10+"г. ("+Str(СумГод10,2)+") отличается от суммы по КБК ("+Str(ВсегоСумКБКГод10,2)+")",mtError,Page,"СумГод10",0); Рег=False; РедакторКБК("ВсегоСумГод10",0,False,False); ^False; fi;
 fi;
 if Учет_Реестр_ОФК:
    if not ПроверитьУчетРеестрОФК: ^False; fi;
 fi;
 --Проверяем на предмет существования счетов
 if ТекГод=Год1 : y0=0;
   |ТекГод=Год2 : y0=1;
   |ТекГод=Год3 : y0=2;
   |ТекГод=Год4 : y0=3;
   |ТекГод=Год5 : y0=4;
   |ТекГод=Год6 : y0=5;
   |ТекГод=Год7 : y0=6;
   |ТекГод=Год8 : y0=7;
   |ТекГод=Год9 : y0=8;
   |ТекГод=Год10: y0=9;
 fi;
 Раб.КСА.Начать;
 for Iter=1..УпрКБК do
  КБК_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],"ФКР","КБК",False);
  КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],"ФКР","КОСГУ",False);
  if ВД[Iter]="1":
     for y=1..3 do
      if y>1:
         Flag=not GetVariableN("СумКБКГод"+Str(y0+y)+"["+Str(Iter)+"]")=0;
        else
         Flag=True;
      fi;
      if Flag:
         СчДеб_=КБК_+"."+ВД[Iter]+".501."+Str(y)+"3."+КОСГУ_;
         СчКре_=КБК_+"."+ВД[Iter]+".502."+Str(y)+"1."+КОСГУ_;
         Раб.КСА.Добавить(СчДеб_);
         Раб.КСА.Добавить(СчКре_);
      fi;
     od;
    |not ВД[Iter]="3":
     for y=1..2 do
      if y>1:
         Flag=not GetVariableN("СумКБКГод"+Str(y0+y)+"["+Str(Iter)+"]")=0;
        else
         Flag=True;
      fi;
      if Flag:
         СчДеб_=КБК_+"."+ВД[Iter]+".506."+Str(y)+"0."+КОСГУ_;
         СчКре_=КБК_+"."+ВД[Iter]+".502."+Str(y)+"1."+КОСГУ_;
         Раб.КСА.Добавить(СчДеб_);
         Раб.КСА.Добавить(СчКре_);
      fi;
     od;
  fi;
 od;
 if Раб.КСА.Закончить(True): Message("Добавление счетов завершено"); fi;
 --Проверяем табличные признаки
 noМФ=False;
 isМФ=False;
 isФАИП=False;
 qМФ=0;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..УпрКБК do
  КБК_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],"ФКР","КБК",False);
  КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],"ФКР","КОСГУ",False);
  if ВД[Iter]="1":
     for y=1..3 do
      if y>1:
         Flag=not GetVariableN("СумКБКГод"+Str(y0+y)+"["+Str(Iter)+"]")=0;
        else
         Flag=True;
      fi;
      if Flag:
         СчДеб_=КБК_+"."+ВД[Iter]+".501."+Str(y)+"3."+КОСГУ_;
         СчКре_=КБК_+"."+ВД[Iter]+".502."+Str(y)+"1."+КОСГУ_;
         if Name_S(СчДеб_)=" ": НаОшибку("Неизвестный индентификатор счета дебета "+СчДеб_,mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
         if Name_S(СчКре_)=" ": НаОшибку("Неизвестный индентификатор счета кредита "+СчКре_,mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
         if not Correspond(СчДеб_,СчКре_): НаОшибку("Счета не могут корреспондировать "+СчДеб_+"/"+СчКре_,mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
      fi;
     od;
    |not ВД[Iter]="3":
     for y=1..2 do
      if y>1:
         Flag=not GetVariableN("СумКБКГод"+Str(y0+y)+"["+Str(Iter)+"]")=0;
        else
         Flag=True;
      fi;
      if Flag:
         СчДеб_=КБК_+"."+ВД[Iter]+".506."+Str(y)+"0."+КОСГУ_;
         СчКре_=КБК_+"."+ВД[Iter]+".502."+Str(y)+"1."+КОСГУ_;
         if Name_S(СчДеб_)=" ": НаОшибку("Неизвестный индентификатор счета дебета "+СчДеб_,mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
         if Name_S(СчКре_)=" ": НаОшибку("Неизвестный индентификатор счета кредита "+СчКре_,mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
         if not Correspond(СчДеб_,СчКре_): НаОшибку("Счета не могут корреспондировать "+СчДеб_+"/"+СчКре_,mtError,Page,"КБК",Iter); Рег=False; РедакторКБК("КБК",Iter,False,False); ^False; fi;
      fi;
     od;
  fi;
  tmp=Раб.Бюджет2005.Объединить(Общ_Призн1,Общ_Призн2," ");
  tmp=Раб.Бюджет2005.Объединить(tmp,Призн[Iter]," ");
  if not Раб.Бюджет.ПроверитьПризнакиОбязательные(СчДеб_,СчКре_,tmp,ИсклПризн): НаОшибку("",mtError,Page,"Призн",Iter); Рег=False; РедакторКБК("Призн_",Iter,False,False); ^False; fi;
  if not Раб.Бюджет.ПроверитьПризнакиСвязанные(СчДеб_,СчКре_,tmp,ИсклПризн): НаОшибку("",mtError,Page,"Призн",Iter); Рег=False; РедакторКБК("Призн_",Iter,False,False); ^False; fi;
  if МФ[Iter]="" and not Round(СумКБК[Iter],2)=0: noМФ=True; fi;
  if not МФ[Iter]="" and not Round(СумКБК[Iter],2)=0: isМФ=True; fi;
  if (noМФ=isМФ and isМФ) or ((ДатаК=1.1.100 or Year(ДатаК)<Int(ТекГод)) and noМФ): НаОшибку("Задайте график оплаты для текущего года",mtError,Page,"МФ",Iter); Рег=False; РедакторКБК("МФ",if(МФ[Iter]="",Iter,Iter-1),False,False); ^False; fi;
  if МФ[Iter]="" and not Round(СумКБК[Iter],2)=0: 
     if КонтрольМФ=0 and qМФ=0:
        if EnqOkCancel("Требуется задать график оплаты для текущего года. Игнорировать ?",mtWarning)=cmOk: qМФ=-1; else qМФ=1; fi;
     fi;
     if КонтрольМФ=1 or qМФ=1:
        НаОшибку("Задайте график оплаты для текущего года",mtError,Page,"МФ",Iter); 
        Рег=False;
        РедакторКБК("МФ",if(МФ[Iter]="",Iter,Iter-1),False,False); 
        ^False; 
     fi;
  fi;
  if not ФАИП[Iter]=nil:
     isФАИП=True;
     if RecordExists("РПО_ФАИП",ФАИП[Iter]):
        if GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Код")="": НаОшибку("Заполните код объекта ФАИП",mtError,Page,"ФАИП_",Iter); Рег=False; РедакторКБК("ФАИП_",Iter,False,False); ^False; fi;
        if GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим1")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим2")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим3")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим4")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим5")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим6")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим7")="" and 
           GetCardFieldS("РПО_ФАИП",ФАИП[Iter],"Наим8")="": НаОшибку("Заполните наименование объекта ФАИП",mtError,Page,"ФАИП_",Iter); Рег=False; РедакторКБК("ФАИП_",Iter,False,False); ^False; fi;
       else
        НаОшибку("Не найдена запись "+RecordToString(ФАИП[Iter])+" объекта ФАИП",mtError,Page,"ФАИП_",Iter); Рег=False; РедакторКБК("ФАИП_",Iter,False,False); ^False;
     fi;
  fi;
 od;
 if isФАИП:
    for Iter=1..УпрКБК do
     if ФАИП[Iter]=nil: НаОшибку("Заполните объект ФАИП",mtError,Page,"ФАИП_",Iter); Рег=False; РедакторКБК("ФАИП_",Iter,False,False); ^False; fi;
    od;
 fi;
 if not ПроверитьУникальностьКБК: ^False; fi;
 if not ПроверитьНаборСправ: ^False; fi;
 if not Round(СумТек-ВсегоСумКБК,2)=0 and not Учет_Реестр_ОФК and ver=0: НаОшибку("Сумма договора на текущий год отличается от суммы КБК",mtError,Page,"ВсегоСумКБК",0); Рег=False; РедакторКБК("ВсегоСум",Iter,False,False); ^False; fi;
 Page=5;
 isЦена=False;
 РасчетТМЦ;
 if УпрТМЦ=0: ^НаОшибку("Введите предмет договора",mtError,Page,"РедТМЦ",0); fi;
 for Iter=1..УпрТМЦ do
  if ДатаРег>=1.1.2015 or ДатаСвед2>=1.1.2015:
     if КВОЗ[Iter]="": НаОшибку("Введите код вида объекта закупки",mtError,Page,"КВОЗ_",Iter); Рег=False; РедакторТМЦ("КВОЗ",Iter); ^False; fi;
  fi;
  if НаимТМЦ[Iter]="": НаОшибку("Введите наименование товара, работ, услуг",mtError,Page,"НаимТМЦ",Iter); Рег=False; РедакторТМЦ("НаимТМЦ",Iter); ^False; fi;
  if ФЗ>=1:
     if ОКП[Iter]="": НаОшибку("Введите код ОКПД",mtError,Page,"ОКП",Iter); Рег=False; РедакторТМЦ("ОКП",Iter); ^False; fi;
     if Length(ОКП[Iter])=6: НаОшибку("Требуется код ОКПД, а не ОКП",mtError,Page,"ОКП",Iter); Рег=False; РедакторТМЦ("ОКДП",Iter); ^False; fi;
     if Length(ОКП[Iter])=7: НаОшибку("Требуется код ОКПД, а не ОКДП",mtError,Page,"ОКП",Iter); Рег=False; РедакторТМЦ("ОКДП",Iter); ^False; fi;
    else
     if ОКДП_Гр[Iter]="" and not Length(ОКП[Iter])=6: НаОшибку("Введите номенклатурную группу ОКДП",mtError,Page,"ОКДП_Гр",Iter); Рег=False; РедакторТМЦ("ОКДП_Гр",Iter); ^False; fi;
     if ОКП[Iter]="": НаОшибку("Введите код ОКДП",mtError,Page,"ОКП",Iter); Рег=False; РедакторТМЦ("ОКП",Iter); ^False; fi;
  fi;
  if ЕдИзм[Iter]="": НаОшибку("Введите единицу измерения",mtError,Page,"ЕдИзм",Iter); Рег=False; РедакторТМЦ("ЕдИзм",Iter); ^False; fi;
  if Round(Цена[Iter],2)=0: НаОшибку("Введите цену за единицу",mtError,Page,"Цена",Iter); Рег=False; РедакторТМЦ("Цена",Iter); ^False; fi;
  if ПоЦене[Iter]:
     isЦена=True;
     if not Round(Кол[Iter],тчнКол)=0: НаОшибку("Количество не заполняется, в случае измерителя объекта закупки 'по цене за единицу'",mtError,Page,"Кол",Iter); Рег=False; РедакторТМЦ("Кол",Iter); ^False; fi;
     if not Round(СумТМЦ[Iter],2)=0 : НаОшибку("Сумма не заполняется, в случае измерителя объекта закупки 'по цене за единицу'",mtError,Page,"СумТМЦ",Iter); Рег=False; РедакторТМЦ("Сум",Iter); ^False; fi;
    else
     if Round(Кол[Iter],тчнКол)=0: НаОшибку("Введите количество",mtError,Page,"Кол",Iter); Рег=False; РедакторТМЦ("Кол",Iter); ^False; fi;
     if Round(СумТМЦ[Iter],2)=0 : НаОшибку("Введите сумму",mtError,Page,"СумТМЦ",Iter); Рег=False; РедакторТМЦ("Сум",Iter); ^False; fi;
  fi;
 od;
 if not Round(СумДок,2)=Round(ВсегоСумТМЦ,2) and not isЦена: НаОшибку("Сумма документа "+Format("%.2N",СумДок)+" отличается от суммы предмета всего "+Format("%.2N",ВсегоСумТМЦ)+" на "+Format("%.2N",СумДок-ВсегоСумТМЦ),mtError,Page,"ВсегоСумТМЦ",0); Рег=False; РедакторТМЦ("ВсегоСум",Iter); ^False; fi;
 if Рег_Реестр_ОФК:
    if not ПроверитьРегРеестрОФК: ^False; fi;
 fi;
 if ver>0:
    Исполнен=ТипИзм=99;
    Аннулирован=ТипИзм=-99;
 fi;
 if Исполнен:
    if not ПроверитьИспол: ^False; fi;
 fi;
 if Аннулирован:
    if not ПроверитьАннул: ^False; fi;
 fi;
 if ТипСвед=1:
    if not ПроверитьТипСвед: ^False; fi;
 fi;
-- if not Исп_ДокНом="" or not Исп_ДокДат=1.1.100 or not Исп_Орган="" or not Round(Исп_ДокСум,2)=0 or not Исп_УведНом="" or not Исп_УведДат=1.1.100:
--    Page=12;
--    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): ^НаОшибку("Сумма документа всего "+Format("%2.N",СумДок)+" должна быть равна сумме исполнительного документа "+Format("%2.N",Исп_ДокСум),mtError,Page,"Исп_УведНом",0); fi;
-- fi;
 if not Исп_Док=nil:
    Page=12;
    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): ^НаОшибку("Сумма документа всего "+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 FuncExists(Настр.ExtFunc_Verify):
    if not ExecuteFuncL(Настр.ExtFunc_Verify): ^False; fi;
 fi;
 ^True;
end;

Func СделатьНедейств(Rec:Record; Flag:L):L;
var OWA,n,t:I;
var SQLquery:S;
var CMF:l;
 CMF=False;
 OWA=OpenWorkArea(crdДоговор,"","UKey="+RecordToString(Rec));
 try
  if not Records(OWA)=0:
     BeginChanging(OWA,True); --True обязательно иначе теряем фокус документа!!!
     try
      if GetFieldL(OWA,1,"Недейств")=Flag:
         CancelChanging(OWA);
        else
         n=PutFieldL(OWA,1,"Недейств",Flag);
         EndChanging(OWA);
      fi;
     except
      CancelChanging(OWA);
      if ErrorCode=21907: --ClosedModFob
         CMF=GetFieldL(OWA,1,"ClosedModFob");
        else
         Message(ErrorMessage);
         ^False;
      fi;
     end;
  fi;
 finally
  CloseWorkArea(OWA);
 end;
 if CMF and SQLQueryEnabled:
    if not CurrentState=CrdusUnmodified: Message("Текущая запись изменяется в данный момент",mtError); ^False; fi;
    SQLquery="UPDATE "+GetRealCardfileName(crdДоговор)+" SET [ClosedModFob] =0, [UpdateTime] = DATEADD(second, 1, getdate()) , [MODIFIEDUSER] = '"+UserName(AliasName(crdДоговор))+"' WHERE [UKEY] = "+Str(RecordToInteger(Rec));
    Try
     ExecuteSQL(AliasName(crdДоговор),SQLquery);
    Except
     Message(ErrorMessage);
     ^False;
    end;
    RefreshCard(crdДоговор,ToDay);
    ShowProgress(11,"Обновление данных...");
    Try
     n=1; t=Time;
     ProgressPos(n);
     While GetCardFieldL(crdДоговор,Rec,"ClosedModFob") do
      if time-t>1:
         t=time;
         n=n+1;
         if n>11: Message("Превышено время обновления",mtError); ^False; fi;
      fi;
      ProgressPos(n);
     od;
    Finally
     CloseProgress;
    end;
     OWA=OpenWorkArea(crdДоговор,"","UKey="+RecordToString(Rec));
     Try
      BeginChanging(OWA,False);
      Try
       n=PutFieldL(OWA,1,"Недейств",Flag);
       n=PutFieldL(OWA,1,"ClosedModFob",True);
       EndChanging(OWA);
      Except
       CancelChanging(OWA);
       Message(ErrorMessage);
       ^False;
      end;
    Finally
     CloseWorkArea(OWA);
    end;
   |CMF and not SQLQueryEnabled: 
    Message("Для корректной работы, требуется разрешение на выполние SQL запросов, обратитесь к администратору сервера",mtError); 
    ^False;
 fi;
 ^True;
end;

Proc УдалитьЗаписи(Crd:String; Rec: Record);
var F :String;
var OWA:Integer;
 if Rec=nil: Rec=Current; fi;
 F=if(Crd=crdДоговор,"UKey=","Договор=")+RecordToString(Rec);
 OWA=OpenWorkArea(Crd,"",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;

Func MyPutFieldS(OWA:I; n:i; Field:S; Val:S):I;
 if not GetFieldS(OWA,n,Field)=Val: n=PutFieldS(OWA,n,Field,Val); FlagChanging=True; fi;
 ^n;
end;

Func MyPutFieldD(OWA:I; n:i; Field:S; Val:D):I;
 if not GetFieldD(OWA,n,Field)=Val: n=PutFieldD(OWA,n,Field,Val); FlagChanging=True; fi;
 ^n;
end;

Func MyPutFieldN(OWA:I; n:i; Field:S; Val:N):I;
 if not Round(GetFieldN(OWA,n,Field),4)=Round(Val,4): n=PutFieldN(OWA,n,Field,Val); FlagChanging=True; fi;
 ^n;
end;

Func MyPutFieldI(OWA:I; n:i; Field:S; Val:I):I;
 if not GetFieldI(OWA,n,Field)=Val: n=PutFieldI(OWA,n,Field,Val); FlagChanging=True; fi;
 ^n;
end;

Func MyPutFieldL(OWA:I; n:i; Field:S; Val:L):I;
 if not GetFieldL(OWA,n,Field)=Val: n=PutFieldL(OWA,n,Field,Val); FlagChanging=True; fi;
 ^n;
end;

Func MyPutFieldR(OWA:I; n:i; Field:S; Val:Record):I;
 if not GetFieldR(OWA,n,Field)=Val: n=PutFieldR(OWA,n,Field,Val); FlagChanging=True; fi;
 ^n;
end;

Func ОбновитьТабл:L;
var OWA,n,nr:i;
 FlagChanging=False;
 OWA=OpenWorkArea(crdДоговор_КБК,"","Договор="+RecordToString(Current));
 Try
  Nr=Records(OWA);
  BeginChanging(OWA);
  Try
   for n=1..nr do
    n=MyPutFieldD(OWA,n,"ДАТАРЕГ",ДатаРег);
    n=MyPutFieldS(OWA,n,"ТЕКГОД",ТекГод);
    if Учет_Реестр_ОФК or ver>0:
       n=MyPutFieldS(OWA,n,"ГОД1" ,Год1);
       n=MyPutFieldS(OWA,n,"ГОД2" ,Год2);
       n=MyPutFieldS(OWA,n,"ГОД3" ,Год3);
       n=MyPutFieldS(OWA,n,"ГОД4" ,Год4);
       n=MyPutFieldS(OWA,n,"ГОД5" ,Год5);
       n=MyPutFieldS(OWA,n,"ГОД6" ,Год6);
       n=MyPutFieldS(OWA,n,"ГОД7" ,Год7);
       n=MyPutFieldS(OWA,n,"ГОД8" ,Год8);
       n=MyPutFieldS(OWA,n,"ГОД9" ,Год9);
       n=MyPutFieldS(OWA,n,"ГОД10",Год10);
       if ТекГод=Год1 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод1"));
         |ТекГод=Год2 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод2"));
         |ТекГод=Год3 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод3"));
         |ТекГод=Год4 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод4"));
         |ТекГод=Год5 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод5"));
         |ТекГод=Год6 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод6"));
         |ТекГод=Год7 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод7"));
         |ТекГод=Год8 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод8"));
         |ТекГод=Год9 : n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод9"));
         |ТекГод=Год10: n=MyPutFieldN(OWA,n,"Сум",GetFieldN(OWA,n,"СумГод10"));
       fi;
    fi;
    n=MyPutFieldS(OWA,n,"КОНТР_ПРИЗН",Контр_Призн);
    n=MyPutFieldS(OWA,n,"ОБЩ_ПРИЗН1",Общ_Призн1);
    n=MyPutFieldS(OWA,n,"ОБЩ_ПРИЗН2",Общ_Призн2);
    n=MyPutFieldS(OWA,n,"ДОГОВОР_ПРИЗН","ДОГОВОР."+Признак);
    n=MyPutFieldS(OWA,n,"ДОГОВОР_GUID",GUID);
    n=MyPutFieldS(OWA,n,"РПО_КЛЮЧ",РПО_Ключ);
    n=MyPutFieldL(OWA,n,"РЕГ",Рег);
    n=MyPutFieldL(OWA,n,"ИСПОЛНЕН",Исполнен);
    n=MyPutFieldD(OWA,n,"ИСПОЛДАТА",ИсполДата);
    n=MyPutFieldS(OWA,n,"ИСПОЛКМНТ",ИсполКмнт);
    n=MyPutFieldL(OWA,n,"АННУЛИРОВАН",Аннулирован);
    n=MyPutFieldD(OWA,n,"АННУЛДАТА",АннулДата);
    n=MyPutFieldS(OWA,n,"АННУЛКМНТ",АннулКмнт);
   od;
   if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
  Except
   CancelChanging(OWA);
   Message(ErrorMessage);
   ^False;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 --
 FlagChanging=False;
 OWA=OpenWorkArea(crdДоговор_ТМЦ,"","Договор="+RecordToString(Current));
 Try
  Nr=Records(OWA);
  BeginChanging(OWA);
  Try
   for n=1..nr do
    n=MyPutFieldS(OWA,n,"КОНТР_ПРИЗН",Контр_Призн);
    n=MyPutFieldS(OWA,n,"ОБЩ_ПРИЗН1",Общ_Призн1);
    n=MyPutFieldS(OWA,n,"ОБЩ_ПРИЗН2",Общ_Призн2);
    n=MyPutFieldS(OWA,n,"ДОГОВОР_GUID",GUID);
    n=MyPutFieldS(OWA,n,"РПО_КЛЮЧ",РПО_Ключ);
    n=MyPutFieldL(OWA,n,"РЕГ",Рег);
    n=MyPutFieldD(OWA,n,"ДАТАРЕГ",ДатаРег);
    n=MyPutFieldL(OWA,n,"АННУЛИРОВАН",Аннулирован);
   od;
   if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
  Except
   CancelChanging(OWA);
   Message(ErrorMessage);
   ^False;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 ^True;
end;

Func СранитьТбл(Rec: Record; tOA:I):L;
var sOWA,sOA,t,tt,f,ff:I;
 sOWA=OpenWorkArea(crdБО,"","UKey="+RecordToString(Rec));
 Try
  sOA=OpenArray(sOWA,1,"РАСШИФР","");
  tt=Records(tOA);
  if not tt=Records(sOA): ^False; fi;
  ff=GetCardFileFields(crdБО+"@РАСШИФР",BufF,mtlAll);
  for f=1..ff do
   BufT[f]=GetCardFileFieldType(crdБО+"@РАСШИФР",BufF[f]);
  od;
  for t=1..tt do
   for f=1..ff do
    if BufT[f]=mtlREAL:    if not Round(GetFieldN(tOA,t,BufF[f]),2)=Round(GetFieldN(sOA,t,BufF[f]),2): ^False; fi;
      |BufT[f]=mtlINTEGER: if not GetFieldI(tOA,t,BufF[f])=GetFieldI(sOA,t,BufF[f]): ^False; fi;
      |BufT[f]=mtlBOOLEAN: if not GetFieldL(tOA,t,BufF[f])=GetFieldL(sOA,t,BufF[f]): ^False; fi;
      |BufT[f]=mtlSTRING:  if not GetFieldS(tOA,t,BufF[f])=GetFieldS(sOA,t,BufF[f]): ^False; fi;
      |BufT[f]=mtlDATE:    if not GetFieldD(tOA,t,BufF[f])=GetFieldD(sOA,t,BufF[f]): ^False; fi;
      |BufT[f]=mtlREF:     if not GetFieldR(tOA,t,BufF[f])=GetFieldR(sOA,t,BufF[f]): ^False; fi;
    fi;
   od;
  od;
 Finally
  CloseWorkArea(sOWA);
 end;
 ^True;
end;

Func СведБО_(OWA:I; Self:Record; aУчет:L; parentБО:Record; dТекГод:I; isИА:L):Record;
var OA,n,n2,Iter,m,z,OWAs,OAs,s,ss,Номер_,ТекГод_,Изм_Номер_,БО_Тип_Док_,БО_ФорматНомер_,Изм_ФорматНомер_,БО_ДлинаНомер_:i;
var val,ПризнОбщ_,Призн_,Ист_,КБК_,БК_,КОСГУ_,ТипКБК_,Предм_,Предм2_,Предм3_,Предм4_,Key,Изм_НомерДок_,БО_Сепаратор_,Изм_Префикс_,Изм_Сепаратор_,БО_Признак_,Доп_Ном_Реестр_:S;
var newНомер,Flag,setЗаполР1_Гр8,f20130901:L;
var Изм_ДатаДок_,ДатаИА:D;
var Сум_,Сум2_,СумДок_:N;
var ФАИП_:Record;
var crcПредм,crcПримеч:I;
 FlagChanging=False;
 newНомер=False;
 if Abs(ТипИзм)=4 and not isИА: БО_Тип_Док_=2;
   |not parentБО=nil: БО_Тип_Док_=1;
   |True: БО_Тип_Док_=0;
 fi;
 if Self=nil: n=0; else n=GetRecordNumber(OWA,Self); fi;
 ТекГод_=Int(ТекГод)+dТекГод;
 if ver=0:
    ДатаИА=if(Исполнен:ИсполДата|Аннулирован:АннулДата|True:1.1.100);
    if not ДатаСвед2=1.1.100: ДатаИА=ДатаСвед2; fi;
    if Year(ДатаИА)>Int(ТекГод): ДатаИА=Dat(31,12,Int(ТекГод)); fi;
   else
    ДатаИА=if(Исполнен or Аннулирован,ДатаСвед,1.1.100);
 fi;
 if Учет_Реестр_ОФК or ver>0:
    if isИА:
--       СумДок_=0;
--       for z=1..10 do
--        if GetVariableS("Год"+Str(z))<ТекГод:
--           СумДок_=СумДок_+GetVariableN("СумГод"+Str(z)); --сумма факт. исполнена в прошлые года
--        fi;
--       od;
--       СумДок_=if(Исполнен:ИсполФактОпл|Аннулирован:АннулФактОпл|True:СумДок)-СумДок_; --факт исполнена в текущем есть разница исполнена всего-факт. прошлых лет
--       СумДок_=if(Исполнен:ИсполФактОпл|Аннулирован:СумДок|True:СумДок);
--       СумДок_=if(Исполнен:СумДок|Аннулирован:АннулФактОпл|True:СумДок);
       СумДок_=СумДок;
      else
--       СумДок_=0;
--       for z=1..10 do
--        if GetVariableS("Год"+Str(z))>=ТекГод:
--           СумДок_=СумДок_+GetVariableN("СумГод"+Str(z));
--        fi;
--       od;
       СумДок_=СумДок;
    fi;
   else
    if isИА:
       --СумДок_=if(Исполнен:ИсполФактОпл|Аннулирован:АннулФактОпл|True:СумТек);
--       СумДок_=if(Исполнен:ИсполФактОпл|Аннулирован:СумДок|True:СумДок);
--       СумДок_=if(Исполнен:СумДок|Аннулирован:АннулФактОпл|True:СумДок);
       СумДок_=СумДок;
      else
       --СумДок_=СумТек;
       СумДок_=СумДок;
    fi;
 fi;
 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;
       if n=0:
          n=InsertRecord(OWA);
          newНомер=True;
          FlagChanging=True;
         else
          if БО_Тип_Док_=1:
             Изм_ДатаДок_=GetFieldD(OWA,n,"Изм_ДатаДок");
             Изм_ФорматНомер_=GetFieldI(OWA,n,"Изм_ФорматНомер");
             Изм_Номер_=GetFieldI(OWA,n,"Изм_Номер");
             Изм_Префикс_=GetFieldS(OWA,n,"Изм_Префикс");
             Изм_Сепаратор_=GetFieldS(OWA,n,"Изм_Сепаратор");
             Изм_НомерДок_=GetFieldS(OWA,n,"Изм_НомерДок");
             if (isИА and not Изм_ДатаДок_=ДатаИА and not ДатаИА=1.1.100) or (not isИА and not Изм_ДатаДок_=ДатаСвед and not ДатаИзм=1.1.100) or not Изм_Префикс_=ПрефиксНомСвед or not Изм_ФорматНомер_=БО_ФорматНомер_:
                 Изм_ДатаДок_=if(isИА,ДатаИА,ДатаСвед);
                 Изм_ФорматНомер_=БО_ФорматНомер_;
                 Изм_Номер_=Раб.Обл.СледСУчетомДатыФ(crdБО,"Изм_Номер","Изм_ДатаДок",Изм_ДатаДок_,"(ТипДок=1 or OverrideТипДок='1')"+if(БО_ФорматНомер_=0,""," and Изм_Префикс='"+ПрефиксНомСвед+"'"));
                 Изм_Префикс_=ПрефиксНомСвед;
                 Изм_Сепаратор_=БО_Сепаратор_;
                 Изм_НомерДок_=Str(Изм_Номер_);
             fi;
            else
             newНомер=(not ТекГод_=GetFieldI(OWA,n,"ТекГод") or not ПрефиксНомСвед=GetFieldS(OWA,n,"Префикс"));
          fi; --if БО_Тип_Док_=1:
       fi; --if n=0:
       ClearVariable(Buf);
       if newНомер:
          if БО_Тип_Док_=0 or БО_Тип_Док_=2:
             Номер_=Раб.Обл.СледСУчетомДатыФ(crdБО,"Номер","ДатаДок",if(dТекГод<0,Dat(1,1,ТекГод_),ДатаСвед),"(ТипДок=0 or ТипДок=2 or OverrideТипДок='0' or OverrideТипДок='2')"+if(БО_ФорматНомер_=0,""," and Префикс='"+ПрефиксНомСвед+"'"));
             n=MyPutFieldI(OWA,n,"ФорматНомер",БО_ФорматНомер_);
             n=MyPutFieldI(OWA,n,"Номер",Номер_);
             n=MyPutFieldS(OWA,n,"Префикс",ПрефиксНомСвед);
             n=MyPutFieldS(OWA,n,"Сепаратор",БО_Сепаратор_);
             n=MyPutFieldS(OWA,n,"НомерДок",Format("%."+Str(БО_ДлинаНомер_)+"D",Номер_));
            else
             Изм_ДатаДок_=if(isИА,ДатаИА,ДатаСвед);
             Изм_ФорматНомер_=БО_ФорматНомер_;
             Изм_Префикс_=ПрефиксНомСвед;
             Изм_Сепаратор_=БО_Сепаратор_;
             Изм_Номер_=Раб.Обл.СледСУчетомДатыФ(crdБО,"Изм_Номер","Изм_ДатаДок",Изм_ДатаДок_,"(ТипДок=1 or OverrideТипДок='1')"+if(БО_ФорматНомер_=0,""," and Изм_Префикс='"+ПрефиксНомСвед+"'"));
             Изм_НомерДок_=Str(Изм_Номер_);
          fi;
       fi;
       n=MyPutFieldD(OWA,n,"ДатаДок",if(dТекГод<0,if(Dat(1,1,ТекГод_)>ДатаДок,Dat(1,1,ТекГод_),ДатаДок),ДатаСвед));  --????
       n=MyPutFieldI(OWA,n,"ТипДок",БО_Тип_Док_);
       n=MyPutFieldI(OWA,n,"ТекГод",ТекГод_);
       if not parentБО=nil:
          z=GetRecordNumber(OWA,parentБО);
          if БО_Тип_Док_=2: --для переригистрации номер предудещего БО хранится в полях "изм_*"
             n=MyPutFieldI(OWA,n,"Изм_ФорматНомер",GetFieldI(OWA,z,"ФорматНомер"));
             n=MyPutFieldI(OWA,n,"Изм_Номер",GetFieldI(OWA,z,"Номер"));
             n=MyPutFieldS(OWA,n,"Изм_Префикс",GetFieldS(OWA,z,"Префикс"));
             n=MyPutFieldS(OWA,n,"Изм_Сепаратор",GetFieldS(OWA,z,"Сепаратор"));
             n=MyPutFieldS(OWA,n,"Изм_НомерДок",GetFieldS(OWA,z,"НомерДок"));
             n=MyPutFieldD(OWA,n,"Изм_ДатаДок",GetFieldD(OWA,z,"Изм_ДатаДок"));
             n=MyPutFieldI(OWA,n,"Изм",0);
            else
             n=MyPutFieldI(OWA,n,"ФорматНомер",GetFieldI(OWA,z,"ФорматНомер"));
             n=MyPutFieldI(OWA,n,"Номер",GetFieldI(OWA,z,"Номер"));
             n=MyPutFieldS(OWA,n,"Префикс",GetFieldS(OWA,z,"Префикс"));
             n=MyPutFieldS(OWA,n,"Сепаратор",GetFieldS(OWA,z,"Сепаратор"));
             n=MyPutFieldS(OWA,n,"НомерДок",GetFieldS(OWA,z,"НомерДок"));
             n=MyPutFieldI(OWA,n,"Изм_Номер",Изм_Номер_);
             n=MyPutFieldI(OWA,n,"Изм_ФорматНомер",Изм_ФорматНомер_);
             n=MyPutFieldS(OWA,n,"Изм_Префикс",Изм_Префикс_);
             n=MyPutFieldS(OWA,n,"Изм_Сепаратор",Изм_Сепаратор_);
             n=MyPutFieldS(OWA,n,"Изм_НомерДок",Изм_НомерДок_);
             n=MyPutFieldD(OWA,n,"Изм_ДатаДок",Изм_ДатаДок_);
             n=MyPutFieldI(OWA,n,"Изм",GetFieldI(OWA,z,"Изм")+1);
          fi;
          if GetFieldS(OWA,n,"РегНомер")="":
             n=MyPutFieldS(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,"НомерДок"));
       n=MyPutFieldS(OWA,n,"Признак",БО_Признак_);
       n=MyPutFieldS(OWA,n,"Признак_Кмнт",if(GetFieldL(OWA,n,"Рег"),"Учетный номер "+GetFieldS(OWA,n,"РегНомер")+" ","")+НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Контр.КорИмя);
       n=MyPutFieldR(OWA,n,"Рекв",Учр);
       n=MyPutFieldR(OWA,n,"Банк",if(Учр_Банк_Свед=nil,Учр_Банк,Учр_Банк_Свед));
       n=MyPutFieldS(OWA,n,"ГРБС",Раб.Бюджет.НаимКБК("ППП2006",Учр.РПО_ППП));
       n=MyPutFieldS(OWA,n,"Глава",Учр.РПО_ППП);
       n=MyPutFieldS(OWA,n,"Осн_ДокВид",if(ДатаСвед<1.7.2013,if(Учет_Реестр_ОФК,"1","2"),ВидДок));
       n=MyPutFieldS(OWA,n,"Осн_ДокНаим",НаимДок.Наим);
       n=MyPutFieldS(OWA,n,"Осн_ДокНом",НомерДок);
       n=MyPutFieldD(OWA,n,"Осн_ДокДат",ДатаДок);
       n=MyPutFieldD(OWA,n,"Осн_ДокДН",ДатаН);
       n=MyPutFieldD(OWA,n,"Осн_ДокДК",ДатаК);
       n=MyPutFieldN(OWA,n,"Осн_ДокСум",СумДок_);
       n=MyPutFieldS(OWA,n,"Осн_ДокОКВ",ОКВ);
       n=MyPutFieldN(OWA,n,"Осн_ДокСумРуб",if(not ОКВ='643' or (ДатаСвед>=1.7.2013 and (setЗаполР1_Гр8 or f20130901)),СумДок_,0));
       n=MyPutFieldN(OWA,n,"Осн_ДокПроцАв",ПроцАв);
       n=MyPutFieldN(OWA,n,"Осн_ДокСумАв",СумАв);
       n=MyPutFieldR(OWA,n,"РеквП",Контр);
       n=MyPutFieldR(OWA,n,"БанкП",Контр_Банк);
       OA=OpenArray(OWA,n,"Раздел2","");
       DeleteAllRecords(OA);
       for Iter=1..Контр_Банк2 do
        n2=InsertRecord(OA,Iter);
        n2=MyPutFieldR(OA,n2,"РеквП",Контр);
        n2=MyPutFieldR(OA,n2,"БанкП",Контр_Банк2[Iter].Контр_Банк);
        n2=MyPutFieldS(OA,n2,"Призн_К",Контр_Призн);
       od;
       for Iter=1..Контр2 do
        n2=InsertRecord(OA,Контр_Банк2+Iter);
        n2=MyPutFieldR(OA,n2,"РеквП",Контр2[Iter].Контр);
        n2=MyPutFieldR(OA,n2,"БанкП",Контр2[Iter].Контр_Банк);
        n2=MyPutFieldS(OA,n2,"Призн_К",CardFileRecSign("Контрагент","Признак","К",Контр2[Iter].Контр));
       od;
       CloseWorkArea(OA);
       --Раздел3
--       n=MyPutFieldS(OWA,n,"Исп_ДокНом",Исп_ДокНом);
--       n=MyPutFieldD(OWA,n,"Исп_ДокДат",Исп_ДокДат);
--       n=MyPutFieldS(OWA,n,"Исп_Орган",Исп_Орган);
--       n=MyPutFieldN(OWA,n,"Исп_ДокСум",Исп_ДокСум);
--       n=MyPutFieldS(OWA,n,"Исп_УведНом",Исп_УведНом);
--       n=MyPutFieldD(OWA,n,"Исп_УведДат",Исп_УведДат);
       n=MyPutFieldR(OWA,n,"Исп_Док",Исп_Док);
       n=MyPutFieldS(OWA,n,"Исп_ДокНом",Исп_Док.Ном);
       n=MyPutFieldD(OWA,n,"Исп_ДокДат",Исп_Док.Дат);
       n=MyPutFieldS(OWA,n,"Исп_Орган",Исп_Док.Суд_Орган);
       n=MyPutFieldN(OWA,n,"Исп_ДокСум",Исп_Док.Сум);
       n=MyPutFieldS(OWA,n,"Исп_УведНом",Исп_Док.УведНом);
       n=MyPutFieldD(OWA,n,"Исп_УведДат",Исп_Док.УведДат);
       --Раздел4
       n=MyPutFieldS(OWA,n,"Доп_РазмещЗаказ",if(Учет_Реестр_ОФК,Раб.Договор.КонвРазмещЗаказ(РазмещЗаказ,if(Секрет>1:"491"|ДатаДок>=01.01.100:"1191"|True:""),"1191"),""));
       n=MyPutFieldD(OWA,n,"Доп_ДатаИтог",if(Учет_Реестр_ОФК,ДатаИтог,1.1.100));
       n=MyPutFieldS(OWA,n,"Доп_ВидДокОсн",if(Учет_Реестр_ОФК,if(ВидДокОсн="",Trim(ExtractWord(2,РеквДокОсн,",")),ВидДокОсн),""));
       n=MyPutFieldS(OWA,n,"Доп_НомДокОсн",if(Учет_Реестр_ОФК,if(НомДокОсн="",Trim(ExtractWord(1,РеквДокОсн,",")),НомДокОсн),""));
       n=MyPutFieldD(OWA,n,"Доп_ДатаДокОсн",if(Учет_Реестр_ОФК,ДатаДокОсн,1.1.100));
       n=MyPutFieldS(OWA,n,"Доп_Статус",if(isИА and Исполнен:"1"|isИА and Аннулирован:"2"|true:""));
       Доп_Ном_Реестр_="";
       if Учет_Реестр_ОФК and Рег_Реестр_ОФК:
          if Дата_Реестр_ОФК<1.7.2014: Доп_Ном_Реестр_=Ном_Реестр_ОФК;
            |Length(Ном_Реестр_ОФК)=21: Доп_Ном_Реестр_=SubStr(Ном_Реестр_ОФК,1,19); --ТФФ v.13
            |Length(Ном_Реестр_ОФК)=23: Доп_Ном_Реестр_=SubStr(Ном_Реестр_ОФК,1,19); --??? см про 31 значный номер
            |Length(Ном_Реестр_ОФК)=29: Доп_Ном_Реестр_=SubStr(Ном_Реестр_ОФК,9,19); --ТФФ v.13
            |Length(Ном_Реестр_ОФК)=31: Доп_Ном_Реестр_=SubStr(Ном_Реестр_ОФК,9,19); --??? из ФК был получен 31 значный номер
            |True: Доп_Ном_Реестр_=Ном_Реестр_ОФК;
          fi;
       fi;
       n=MyPutFieldS(OWA,n,"Доп_Ном_Реестр",Доп_Ном_Реестр_);
       OA=OpenArray(OWA,n,"Расшифр","");
        DeleteAllRecords(OA);
--        if БО_Тип_Док_=1 and not isИА and not parentБО=nil:
--<1>        if БО_Тип_Док_=1 and (not isИА or (Аннулирован and Round(СумДок,2)=0)) and not parentБО=nil:
        if БО_Тип_Док_=1 and not parentБО=nil:
           OWAs=OpenWorkArea(crdБО,"","UKey="+RecordToString(parentБО)); --открываем отдельную рабочиию область на предка иначе тереям фокус на подтаблицу
           Try
            OAs=OpenArray(OWAs,1,"Расшифр","");
            Try
             ss=Records(OAs);
             for s=1..ss do
              ClearVariable(BufN);
              for m=1..17 do
               if m<13:
                  BufN[m]=GetFieldN(OAs,s,"Сум1_"+Str(m));
                 else
                  BufN[m]=GetFieldN(OAs,s,"Сум"+Str(m-11));
               fi;
              od;
              if not Round(SumOfArray(BufN,12),2)=0 or not Round(BufN[13],2)=0 or not Round(BufN[14],2)=0 or not Round(BufN[15],2)=0 or not Round(BufN[16],2)=0 or not Round(BufN[17],2)=0:
                 ФАИП_=GetFieldR(OAs,s,"ФАИП");
                 Ист_=GetFieldS(OAs,s,"Ист");
                 ТипКБК_=GetFieldS(OAs,s,"ТипКБК");
                 КБК_=GetFieldS(OAs,s,"КБК");
                 Призн_=GetFieldS(OAs,s,"Призн");
                 crcПредм=Раб.CRC16.CRC16_(0,GetFieldS(OAs,s,"Предм1"));
                 crcПредм=Раб.CRC16.CRC16_(crcПредм,GetFieldS(OAs,s,"Предм2"));
                 crcПредм=Раб.CRC16.CRC16_(crcПредм,GetFieldS(OAs,s,"Предм3"));
                 crcПредм=Раб.CRC16.CRC16_(crcПредм,GetFieldS(OAs,s,"Предм4"));
                 Предм_=Str16(crcПредм);
                 crcПримеч=Раб.CRC16.CRC16_(0,GetFieldS(OAs,s,"Примеч"));
                 Key=RecordToString(ФАИП_)+"#"+Ист_+"#"+ТипКБК_+"#"+КБК_+"#"+Призн_+"#"+Предм_+"#"+Str16(crcПримеч);
                 n2=SearchInArray(Buf,Key,True);
                 if n2=-1:
                    n2=InsertInArraySort(Buf,Key);
                    n2=InsertRecord(OA,n2);
                    n2=PutFieldR(OA,n2,"ФАИП",ФАИП_);
                    n2=PutFieldS(OA,n2,"Ист",Ист_);
                    n2=PutFieldS(OA,n2,"ТипКБК",ТипКБК_);
                    n2=PutFieldS(OA,n2,"КБК",КБК_);
                    n2=PutFieldS(OA,n2,"Призн",Призн_);
                    n2=PutFieldS(OA,n2,"Предм1",GetFieldS(OAs,s,"Предм1"));
                    n2=PutFieldS(OA,n2,"Предм2",GetFieldS(OAs,s,"Предм2"));
                    n2=PutFieldS(OA,n2,"Предм3",GetFieldS(OAs,s,"Предм3"));
                    n2=PutFieldS(OA,n2,"Предм4",GetFieldS(OAs,s,"Предм4"));
                    n2=PutFieldS(OA,n2,"Примеч",GetFieldS(OAs,s,"Примеч"));
                    n2=PutFieldS(OA,n2,"ДопКл" ,GetFieldS(OAs,s,"ДопКл"));
                    n2=PutFieldS(OA,n2,"СчДеб1",GetFieldS(OAs,s,"СчДеб1"));
                    n2=PutFieldS(OA,n2,"СчКре1",GetFieldS(OAs,s,"СчКре1"));
                    n2=PutFieldS(OA,n2,"СчДеб2",GetFieldS(OAs,s,"СчДеб2"));
                    n2=PutFieldS(OA,n2,"СчКре2",GetFieldS(OAs,s,"СчКре2"));
                    n2=PutFieldS(OA,n2,"СчДеб3",GetFieldS(OAs,s,"СчДеб3"));
                    n2=PutFieldS(OA,n2,"СчКре3",GetFieldS(OAs,s,"СчКре3"));
                    for m=1..17 do
                     if m<13:
                        n2=PutFieldN(OA,n2,"Сум_Пре1_"+Str(m),BufN[m]);
                       else
                        n2=PutFieldN(OA,n2,"Сум_Пре"+Str(m-11),BufN[m]);
                     fi;
                    od;
                   else
                    for m=1..17 do
                     if m<13:
                        n2=PutFieldN(OA,n2,"Сум_Пре1_"+Str(m),GetFieldN(OA,n2,"Сум_Пре1_"+Str(m))+BufN[m]);
                       else
                        n2=PutFieldN(OA,n2,"Сум_Пре"+Str(m-11),GetFieldN(OA,n2,"Сум_Пре"+Str(m-11))+BufN[m]);
                     fi;
                    od;
                 fi; --if n2=-1:
              fi; --if not Round(SumOfArray(BufN,12),2)=0.....
             od; --for s=1..ss do
            Finally
             CloseWorkArea(OAs);
            end;
           Finally
            CloseWorkArea(OWAs);
           end;
        fi; --if БО_Тип_Док_=1 and not isИА and not parentБО=nil:
        ПризнОбщ_=Trim(Общ_Призн1+" "+Общ_Призн2);
        if not Исп_Док=nil:
           ПризнОбщ_=Trim(ПризнОбщ_+" "+Исп_Док_Признак_);
        fi;
        if not ТипИзм=5: --аннул бо
           for Iter=1..УпрКБК do
            КБК_=Раб.Формат.ReplaceSubStr(КБК[Iter],".","");
            ТипКБК_=Раб.Бюджет2005.ТипКБКСчета(КБК[Iter]);
            БК_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],ТипКБК_,"БК",False);
            КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],ТипКБК_,"КОСГУ",False);
            if ТипКБК_="ФКР": ТипКБК_="10";
              |ТипКБК_="КИФД": ТипКБК_=if(Раб.Бюджет2005.ВзятьТипКИФД(КБК[Iter])="КИВнФ","32","31");
              |True: ТипКБК_="";
            fi;
            Призн_=Раб.Бюджет2005.СортироватьНаборСлов(Trim(ПризнОбщ_+" "+Призн[Iter])," ",True);
            if ПредмКБК[Iter]="" and ПредмКБК2[Iter]="" and ПредмКБК3[Iter]="" and ПредмКБК4[Iter]="":
               Предм_ =Содерж;
               Предм2_=Содерж2;
               Предм3_=Содерж3;
               Предм4_=Содерж4;
              else
               Предм_ =ПредмКБК[Iter];
               Предм2_=ПредмКБК2[Iter];
               Предм3_=ПредмКБК3[Iter];
               Предм4_=ПредмКБК4[Iter];
            fi;
            crcПредм=Раб.CRC16.CRC16_(0,Предм_);
            crcПредм=Раб.CRC16.CRC16_(crcПредм,Предм2_);
            crcПредм=Раб.CRC16.CRC16_(crcПредм,Предм3_);
            crcПредм=Раб.CRC16.CRC16_(crcПредм,Предм4_);
            crcПримеч=Раб.CRC16.CRC16_(0,ПримечКБК[Iter]);
            Key=RecordToString(ФАИП[Iter])+"#"+ВД[Iter]+"#"+ТипКБК_+"#"+КБК_+"#"+Призн_+"#"+Str16(crcПредм)+"#"+Str16(crcПримеч);
            z=SearchInArray(Buf,Key,True);
            if z=-1:
               z=InsertInArraySort(Buf,Key);
               n2=InsertRecord(OA,z);
               n2=PutFieldR(OA,n2,"ФАИП",ФАИП[Iter]);
               n2=PutFieldS(OA,n2,"Ист",ВД[Iter]);
               n2=PutFieldS(OA,n2,"ТипКБК",ТипКБК_);
               n2=PutFieldS(OA,n2,"КБК",КБК_);
               n2=PutFieldS(OA,n2,"Призн",Призн_);
               n2=PutFieldS(OA,n2,"Предм1",Предм_);
               n2=PutFieldS(OA,n2,"Предм2",Предм2_);
               n2=PutFieldS(OA,n2,"Предм3",Предм3_);
               n2=PutFieldS(OA,n2,"Предм4",Предм4_);
               n2=PutFieldS(OA,n2,"Примеч",ПримечКБК[Iter]);
               n2=PutFieldS(OA,n2,"ДопКл","");
               n2=PutFieldS(OA,n2,"СчДеб1",if(ВД[Iter]="1":БК_+"."+ВД[Iter]+".501.13."+КОСГУ_|not ВД[Iter]="3":БК_+"."+ВД[Iter]+".506.10."+КОСГУ_|True:""));
               n2=PutFieldS(OA,n2,"СчКре1",if(ВД[Iter]="1":БК_+"."+ВД[Iter]+".502.11."+КОСГУ_|not ВД[Iter]="3":БК_+"."+ВД[Iter]+".502.11."+КОСГУ_|True:""));
               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.21."+КОСГУ_|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:""));
--             n2=PutFieldL(OA,n2,"Нов",БО_Тип_Док_=1 and not isИА and not parentБО=nil);
               n2=PutFieldL(OA,n2,"Нов",БО_Тип_Док_=1 and not parentБО=nil);
            fi;
            n2=z;
            for m=1..12 do
             if m=12:
                Flag=(МФ[Iter]="" and ((Mon(ДатаК)=m and Year(ДатаК)=ТекГод_) or Year(ДатаК)>ТекГод_)) or МФ[Iter]=Format("%.2D",m);
               else
                Flag=(МФ[Iter]="" and Mon(ДатаК)=m and Year(ДатаК)=ТекГод_) or МФ[Iter]=Format("%.2D",m);
             fi;
             if Flag:
                if not ТекГод_=Int(ТекГод): --если текущий год отмотан назад
                   if Int(Год1)=ТекГод_: Сум_=СумКБКГод1[Iter];
                     |Int(Год2)=ТекГод_: Сум_=СумКБКГод2[Iter];
                     |Int(Год3)=ТекГод_: Сум_=СумКБКГод3[Iter];
                     |Int(Год4)=ТекГод_: Сум_=СумКБКГод4[Iter];
                     |Int(Год5)=ТекГод_: Сум_=СумКБКГод5[Iter];
                     |Int(Год6)=ТекГод_: Сум_=СумКБКГод6[Iter];
                     |Int(Год7)=ТекГод_: Сум_=СумКБКГод7[Iter];
                     |Int(Год8)=ТекГод_: Сум_=СумКБКГод8[Iter];
                     |Int(Год9)=ТекГод_: Сум_=СумКБКГод9[Iter];
                   fi;
                  else
                   Сум_=СумКБК[Iter];
                fi;
                Сум2_=if(Int(Год1) <ТекГод_ and not Год1="" ,СумКБКГод1[Iter],0)
                     +if(Int(Год2) <ТекГод_ and not Год2="" ,СумКБКГод2[Iter],0)
                     +if(Int(Год3) <ТекГод_ and not Год3="" ,СумКБКГод3[Iter],0)
                     +if(Int(Год4) <ТекГод_ and not Год4="" ,СумКБКГод4[Iter],0)
                     +if(Int(Год5) <ТекГод_ and not Год5="" ,СумКБКГод5[Iter],0)
                     +if(Int(Год6) <ТекГод_ and not Год6="" ,СумКБКГод6[Iter],0)
                     +if(Int(Год7) <ТекГод_ and not Год7="" ,СумКБКГод7[Iter],0)
                     +if(Int(Год8) <ТекГод_ and not Год8="" ,СумКБКГод8[Iter],0)
                     +if(Int(Год9) <ТекГод_ and not Год9="" ,СумКБКГод9[Iter],0)
                     +if(Int(Год10)<ТекГод_ and not Год10="",СумКБКГод10[Iter],0)
                     ; --считаем суммы кбк по годом исключая текущий
               else
                Сум_=0;
                Сум2_=0;
             fi;
             if БО_Тип_Док_=1 and isИА:
                --<1>n2=PutFieldN(OA,n2,"Сум_Пре1_"+Str(m),GetFieldN(OA,n2,"Сум_Пре1_"+Str(m))+Сум_); <1>
                if Flag:
                   if (ТекГод=Год2 and СумГод2=0) or (ТекГод=Год3 and СумГод3=0) or (ТекГод=Год4 and СумГод4=0) or (ТекГод=Год5 and СумГод5=0) or (ТекГод=Год6 and СумГод6=0) or (ТекГод=Год7 and СумГод7=0) or (ТекГод=Год8 and СумГод8=0) or (ТекГод=Год9 and СумГод9=0) or (ТекГод=Год10 and СумГод10=0):
                      --если тек год нулевой
                      Сум_=Min(Сум_,ФактОплКБК[Iter]-Сум2_);
                      Сум_=Max(Сум_,0); --Проверка на минус
                     else
                      Сум_=ФактОплКБК[Iter]-Сум2_;
                   fi;
                  else
                   Сум_=0;
                fi;
                n2=PutFieldN(OA,n2,"Сум1_"+Str(m),GetFieldN(OA,n2,"Сум1_"+Str(m))+Сум_);
               else
                n2=PutFieldN(OA,n2,"Сум1_"+Str(m),GetFieldN(OA,n2,"Сум1_"+Str(m))+Сум_);
             fi;
            od;
            if БО_Тип_Док_=1 and isИА:
               n2=PutFieldN(OA,n2,"Сум_Пре2",GetFieldN(OA,n2,"Сум_Пре2")+if(Год2=Str(ТекГод_+1):СумКБКГод2[Iter]|Год3=Str(ТекГод_+1):СумКБКГод3[Iter]|Год4=Str(ТекГод_+1):СумКБКГод4[Iter]|Год5=Str(ТекГод_+1):СумКБКГод5[Iter]|Год6 =Str(ТекГод_+1):СумКБКГод6 [Iter]|Год7 =Str(ТекГод_+1):СумКБКГод7 [Iter]|Год8 =Str(ТекГод_+1):СумКБКГод8 [Iter]|Год9 =Str(ТекГод_+1):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+1):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум_Пре3",GetFieldN(OA,n2,"Сум_Пре3")+if(Год3=Str(ТекГод_+2):СумКБКГод3[Iter]|Год4=Str(ТекГод_+2):СумКБКГод4[Iter]|Год5=Str(ТекГод_+2):СумКБКГод5[Iter]|Год6=Str(ТекГод_+2):СумКБКГод6[Iter]|Год7 =Str(ТекГод_+2):СумКБКГод7 [Iter]|Год8 =Str(ТекГод_+2):СумКБКГод8 [Iter]|Год9 =Str(ТекГод_+2):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+2):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум_Пре4",GetFieldN(OA,n2,"Сум_Пре4")+if(Год4=Str(ТекГод_+3):СумКБКГод4[Iter]|Год5=Str(ТекГод_+3):СумКБКГод5[Iter]|Год6=Str(ТекГод_+3):СумКБКГод6[Iter]|Год7=Str(ТекГод_+3):СумКБКГод7[Iter]|Год8 =Str(ТекГод_+3):СумКБКГод8 [Iter]|Год9 =Str(ТекГод_+3):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+3):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум_Пре5",GetFieldN(OA,n2,"Сум_Пре5")+if(Год5=Str(ТекГод_+4):СумКБКГод5[Iter]|Год6=Str(ТекГод_+4):СумКБКГод6[Iter]|Год7=Str(ТекГод_+4):СумКБКГод7[Iter]|Год8=Str(ТекГод_+4):СумКБКГод8[Iter]|Год9 =Str(ТекГод_+4):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+4):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум_Пре6",GetFieldN(OA,n2,"Сум_Пре6")+if(Год6=Str(ТекГод_+5):СумКБКГод6[Iter]+СумКБКГод7[Iter]+СумКБКГод8[Iter]+СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год7=Str(ТекГод_+5):СумКБКГод7[Iter]+СумКБКГод8[Iter]+СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год8=Str(ТекГод_+5):СумКБКГод8[Iter]+СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год9=Str(ТекГод_+5):СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год10=Str(ТекГод_+5):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум2",0);
               n2=PutFieldN(OA,n2,"Сум3",0);
               n2=PutFieldN(OA,n2,"Сум4",0);
               n2=PutFieldN(OA,n2,"Сум5",0);
               n2=PutFieldN(OA,n2,"Сум6",0);
              else
               n2=PutFieldN(OA,n2,"Сум2",GetFieldN(OA,n2,"Сум2")+if(Год2=Str(ТекГод_+1):СумКБКГод2[Iter]|Год3=Str(ТекГод_+1):СумКБКГод3[Iter]|Год4=Str(ТекГод_+1):СумКБКГод4[Iter]|Год5=Str(ТекГод_+1):СумКБКГод5[Iter]|Год6=Str(ТекГод_+1):СумКБКГод6[Iter]|Год7 =Str(ТекГод_+1):СумКБКГод7 [Iter]|Год8 =Str(ТекГод_+1):СумКБКГод8 [Iter]|Год9 =Str(ТекГод_+1):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+1):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум3",GetFieldN(OA,n2,"Сум3")+if(Год3=Str(ТекГод_+2):СумКБКГод3[Iter]|Год4=Str(ТекГод_+2):СумКБКГод4[Iter]|Год5=Str(ТекГод_+2):СумКБКГод5[Iter]|Год6=Str(ТекГод_+2):СумКБКГод6[Iter]|Год7=Str(ТекГод_+2):СумКБКГод7[Iter]|Год8 =Str(ТекГод_+2):СумКБКГод8 [Iter]|Год9 =Str(ТекГод_+2):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+2):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум4",GetFieldN(OA,n2,"Сум4")+if(Год4=Str(ТекГод_+3):СумКБКГод4[Iter]|Год5=Str(ТекГод_+3):СумКБКГод5[Iter]|Год6=Str(ТекГод_+3):СумКБКГод6[Iter]|Год7=Str(ТекГод_+3):СумКБКГод7[Iter]|Год8=Str(ТекГод_+3):СумКБКГод8[Iter]|Год9 =Str(ТекГод_+3):СумКБКГод9 [Iter]|Год10=Str(ТекГод_+3):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум5",GetFieldN(OA,n2,"Сум5")+if(Год5=Str(ТекГод_+4):СумКБКГод5[Iter]|Год6=Str(ТекГод_+4):СумКБКГод6[Iter]|Год7=Str(ТекГод_+4):СумКБКГод7[Iter]|Год8=Str(ТекГод_+4):СумКБКГод8[Iter]|Год9=Str(ТекГод_+4):СумКБКГод9[Iter]|Год10=Str(ТекГод_+4):СумКБКГод10[Iter]|True:0));
               n2=PutFieldN(OA,n2,"Сум6",GetFieldN(OA,n2,"Сум6")+if(Год6=Str(ТекГод_+5):СумКБКГод6[Iter]+СумКБКГод7[Iter]+СумКБКГод8[Iter]+СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год7=Str(ТекГод_+5):СумКБКГод7[Iter]+СумКБКГод8[Iter]+СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год8=Str(ТекГод_+5):СумКБКГод8[Iter]+СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год9=Str(ТекГод_+5):СумКБКГод9[Iter]+СумКБКГод10[Iter]|Год10=Str(ТекГод_+5):СумКБКГод10[Iter]|True:0));
            fi;
           od; --for Iter=1..УпрКБК do
        fi;  --if not ТипИзм=5: --аннул бо
        --Удаляем "нулевые" КБК
        ss=Records(OA);
        for s=1..ss do
         n2=ss-(s-1);
         Flag=True;
         for m=1..17 do
          if m<13:
             if not Round(GetFieldN(OA,n2,"Сум1_"+Str(m)),2)=0 or (БО_Тип_Док_=1 and not Round(GetFieldN(OA,n2,"Сум_Пре1_"+Str(m)),2)=0): Flag=False; Break; fi;
            else
             if not Round(GetFieldN(OA,n2,"Сум"+Str(m-11)),2)=0 or (БО_Тип_Док_=1 and Round(GetFieldN(OA,n2,"Сум_Пре"+Str(m-11)),2)=0): Flag=False; Break; fi;
          fi;
         od;
         if Flag: DeleteRecord(OA,n2); fi;
        od;
        --
        if not FlagChanging: FlagChanging=not СранитьТбл(GetRecordKey(OWA,n),OA); fi;
       CloseWorkArea(OA);
       n=MyPutFieldL(OWA,n,"УчетФК",УчетБО_ФК);
       n=MyPutFieldS(OWA,n,"GUID_FK",БО_GUID_FK);
       n=MyPutFieldS(OWA,n,"ДолжнРук",if(isИА,if(ver=0,ДолжнРук2,ДолжнРук),ДолжнРук));
       n=MyPutFieldS(OWA,n,"ФиоРук",if(isИА,if(ver=0,ФиоРук2,ФиоРук),ФиоРук));
       n=MyPutFieldD(OWA,n,"ДатаПодписи",if(isИА,if(ver=0,ДатаРук2,ДатаРук),ДатаРук));
       n=MyPutFieldL(OWA,n,"ЭтоАссигн",False);
       n=MyPutFieldS(OWA,n,"Призн_ЛС",Раб.Бюджет2005.БанкВПризн(if(Учр_Банк_Свед=nil,Учр_Банк,Учр_Банк_Свед)));
       n=MyPutFieldS(OWA,n,"Призн_К",Контр_Призн);
       n=MyPutFieldS(OWA,n,"Призн_К_Пре",Договор_Пре.Контр_Призн);
       n=MyPutFieldS(OWA,n,"Призн_Договор","ДОГОВОР."+Признак);
       n=MyPutFieldI(OWA,n,"Секрет",Секрет);
       n=MyPutFieldR(OWA,n,"Договор",Current);
       n=MyPutFieldR(OWA,n,"БО",parentБО);
       n=MyPutFieldR(OWA,n,"БО_Пре",parentБО);
       n=MyPutFieldS(OWA,n,"OverrideТипДок",if(ТипИзм=-4,"0",""));
       n=MyPutFieldS(OWA,n,"OverrideЗнач","");
       n=MyPutFieldS(OWA,n,"РПО_Ключ",РПО_Ключ);
       n=MyPutFieldI(OWA,n,"ver",if(ДатаСвед>=1.7.2013,11,0));
    fi; --if aУчет:
    n=MyPutFieldL(OWA,n,"Учитывать",aУчет);
    Self=GetRecordKey(OWA,n);
 fi;
 ^Self;
end;

Func СведБО(aУчет:L):L;
var OWA,nr,n,БО_ТипДок,БО_ТекГод,БО_ФорматНомер_:i;
var БО_ДопСтатус,ff,Msg:S;
var БО_Договор,Rec0,Rec1,Rec2,Rec3,Prev0,Prev1,Prev2,Prev3: Record; --0 ссылка на обязательство прошлого года (для совместимости) 1 --базовая запись (т.е. генерит признак) 2 --изменение 3 -- измененение (исполнение или аннулирование)
var Flag,Child:L;
 if not ExistsCardFile(crdБО): ^not aУчет; fi;
 if aУчет:
    if Раб.Настр.Начать(blnБО,0,0,"",GetGUID):
       БО_ФорматНомер_=Int(Раб.Настр.ВзятьЗначение("setФорматНомер"));
    fi;
    if not БО_ФорматНомер_=0:
       if ПрефиксНомСвед="": ^НаОшибку("Заполните префикс номера сведений",mtError,0,"ПрефиксНомСвед",0); fi;
    fi;
    if not Abs(ТипИзм)=4 and not ТипИзм=0:
       if not Year(ДатаИзм)=Year(ДатаРег):
          if AsString(Template.Object)="cbУчетБО":
             ^НаОшибку("Формирование БО допустимо в пределах текущего года, в противном случае, выберите тип изменения 'перерегистрации документа на очередной год'",mtError,3,"ДатаИзм"+if(ТипИзм=99:" "|ТипИзм=-99:"  "|True:""),0);
            else
             ^False;
          fi;
       fi;
    fi;
    if ДатаСвед<ДатаИзм:
       if AsString(Template.Object)="cbУчетБО":
          ^НаОшибку("Дата формирования сведений БО не может быть ранее даты изменения",mtError,3,"ДатаСвед",0);
         else
          ^False;
       fi;
    fi;
 fi;
 if ДатаСвед=1.1.100: ДатаСвед=ДатаРег; fi;
 Rec0=nil; Rec1=nil; Rec2=nil; Rec3=nil; Prev1=nil; Prev2=nil; Prev3=nil;
 РасчетКБК;
 РасчетТМЦ;
 -- Flag=Int(Год1)=Int(ТекГод)-1 or Int(Год2)=Int(ТекГод)-1 or Int(Год3)=Int(ТекГод)-1 or Int(Год4)=Int(ТекГод)-1 or Int(Год5)=Int(ТекГод)-1;
 -- if Flag and aУчет:
 --    Refresh(False,Dat(31,12,Int(ТекГод)-1));
 --    Flag=ExistsTransactions("*.1.304.05.*|((*.?.201.?1.*|*.?.201.?7.*)&~*.3.???.??.*)",Dat(1,1,Int(ТекГод)-1),Dat(31,12,Int(ТекГод)-1));
 -- fi;
 Flag=False;
 ff="";
 if not Договор_Пре=nil and RecordExists(crdДоговор,Договор_Пре):
    ff=" or ДОГОВОР="+RecordToString(Договор_Пре);
    Child=True;
   else
    Child=False;
 fi;
 ff="ДОГОВОР="+RecordToString(Current)+ff;
 OWA=OpenWorkArea(crdБО,"ТекГод;Доп_Статус;ТипДок",ff);
 Try
  nr=Records(OWA);
  for n=1..nr do
   БО_Договор=GetFieldR(OWA,n,"Договор");
   БО_ТипДок=GetFieldI(OWA,n,"ТипДок");
   БО_ТекГод=GetFieldI(OWA,n,"ТекГод");
   БО_ДопСтатус=GetFieldS(OWA,n,"Доп_Статус");
   if БО_Договор=Current:
      if БО_ТипДок=0 and БО_ТекГод=Int(ТекГод)-1: Rec0=GetRecordKey(OWA,n); --Исчем БО прошлого года (без поддержки перерегистрации)
        |БО_ТипДок=0 or БО_ТипДок=2 and БО_ТекГод=Int(ТекГод): Rec1=GetRecordKey(OWA,n);  --Исчем БО текущего года
        |БО_ТипДок=1 and БО_ДопСтатус="": Rec2=GetRecordKey(OWA,n);  --Есть изменение БО (не исполнение)
        |БО_ТипДок=1 and not БО_ДопСтатус="": Rec3=GetRecordKey(OWA,n);  --Есть изменение БО (исполнение или аннулирование)
      fi;
     else
      if БО_ТипДок=0 or БО_ТипДок=2 and БО_ТекГод=Int(ТекГод)-1: Prev0=GetRecordKey(OWA,n); --Исчем БО прошлого года
        |БО_ТипДок=0 or БО_ТипДок=2 and БО_ТекГод=Int(Договор_Пре.ТекГод): Prev1=GetRecordKey(OWA,n);  --Исчем БО текущего года
        |БО_ТипДок=1 and БО_ДопСтатус="": Prev2=GetRecordKey(OWA,n);  --Есть изменение БО (не исполнение)
        |БО_ТипДок=1 and not БО_ДопСтатус="": Prev3=GetRecordKey(OWA,n);  --Есть изменение БО (исполнение или аннулирование)
      fi;
   fi;
  od;
  if Rec2=nil and not Rec3=nil and ver>0: Rec2=Rec3; Rec3=nil; fi; --для новой версии
  if Child:
     if Prev2=nil and not Prev3=nil and ver>0: Prev2=Prev3; Prev3=nil; fi; --для новой версии
     if not Prev1=nil:
        n=GetRecordNumber(OWA,Prev1);
        if not Договор_Пре.УчетБО=GetFieldL(OWA,n,"Учитывать"): 
           Msg="Обнаружены расхождения статуса предыдущей редакции документа "+RecordToString(Договор_Пре)+" и статуса бюджетного обязательства "+RecordToString(Prev1);
           if Abs(ТипИзм)=4:
              Trace(Msg);
             else
              Message(Msg,mtError);
              ^False;
           fi;
        fi;
     fi;
     if not Prev2=nil:
        n=GetRecordNumber(OWA,Prev2);
        if not Договор_Пре.УчетБО=GetFieldL(OWA,n,"Учитывать"): 
           Msg="Обнаружены расхождения статуса предыдущей редакции документа "+RecordToString(Договор_Пре)+" и статуса бюджетного обязательства "+RecordToString(Prev2);
           if Abs(ТипИзм)=4:
              Trace(Msg);
             else
              Message(Msg,mtError);
              ^False;
           fi;
        fi;
     fi;
     if ver=0:
        if Prev3=nil:
           if Договор_Пре.УчетБО and (Договор_Пре.Аннулирован or Договор_Пре.Исполнен): 
              Msg="Обнаружены расхождения статуса предыдущей редакции документа "+RecordToString(Договор_Пре)+" и статуса бюджетного обязательства "+RecordToString(Prev3);
              if Abs(ТипИзм)=4:
                 Trace(Msg);
                else
                 Message(Msg,mtError);
                 ^False;
              fi;
           fi;
          else
           n=GetRecordNumber(OWA,Prev3);
           if not (Договор_Пре.УчетБО and (Договор_Пре.Аннулирован or Договор_Пре.Исполнен))=GetFieldL(OWA,n,"Учитывать"): 
              Msg="Обнаружены расхождения статуса предыдущей редакции документа "+RecordToString(Договор_Пре)+" и статуса бюджетного обязательства "+RecordToString(Prev3);
              if Abs(ТипИзм)=4:
                 Trace(Msg);
                else
                 Message(Msg,mtError);
                 ^False;
              fi;
           fi;
           if Договор_Пре.УчетБО and (Договор_Пре.Аннулирован or Договор_Пре.Исполнен): 
              Msg="Статус предыдущей редакции документа "+RecordToString(Договор_Пре)+" "+if(Договор_Пре.Аннулирован,"'РАСТОРГНУТ.'","'ИСПОЛНЕН.'")+" Внесение изменений невозможно";
              if Abs(ТипИзм)=4:
                 Trace(Msg);
                else
                 Message(Msg,mtError);
                 ^False;
              fi;
           fi;
        fi;
     fi;
     if Договор_Пре.УчетБО and (Prev0=nil and Prev1=nil and Prev2=nil): 
        Msg="Не найдена запись сведений о принятом обязательстве предыдущей редакции документа "+RecordToString(Договор_Пре);
        if Abs(ТипИзм)=4:
           Trace(Msg);
          else
           Message(Msg,mtError);
           ^False;
        fi;
     fi;
  fi;
  BeginChanging(OWA);
  Try
   if (Flag or not Rec0=nil) and Договор_Пре=nil: --создаем БО с данными прошлого года (для совместимости)
      Rec0=СведБО_(OWA,Rec0,aУчет and Flag,nil,-1,False); --сохраняем БО на год ранее на случай если года еще разделены
      if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
      BeginChanging(OWA);
   fi;
   --
   if Child and Abs(ТипИзм)=4:  --создаем перерегистрацию
      Rec1=СведБО_(OWA,Rec1,aУчет,if(not Prev2=nil:Prev2|not Prev1=nil:Prev1|not Prev0=nil:Prev0|true:nil),0,False);
      Rec2=nil;
     |not Child or not Договор_Пре.УчетБО:  --создаем "базовую" запись
      Rec1=СведБО_(OWA,Rec1,aУчет,nil,0,False);
      Rec2=nil;
     |True:
      Rec2=СведБО_(OWA,Rec2,aУчет,if(not Prev3=nil:Prev3|not Prev2=nil:Prev2|not Prev1=nil:Prev1|not Prev0=nil:Prev0|true:nil),0,if(ver=0,False,(Аннулирован or Исполнен))); --создаем изменение
      Rec1=nil;
   fi;
   if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
   if ver=0:
      BeginChanging(OWA);
      --
      Rec3=СведБО_(OWA,Rec3,aУчет and (Аннулирован or Исполнен),if(Rec2=nil,Rec1,Rec2),0,True); --создаем изменение (исполнение)
      if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
   fi;
   --
   SetFilter(OWA,"ДОГОВОР="+RecordToString(Current)+" and not (UKey="+RecordToString(Rec0)+" or UKey="+RecordToString(Rec1)+"or UKey="+RecordToString(Rec2)+"or UKey="+RecordToString(Rec3)+")");
   nr=Records(OWA);
   if nr>0:
      BeginChanging(OWA);
      FlagChanging=False;
      for n=1..nr do
       n=MyPutFieldL(OWA,n,"Учитывать",False);
      od;
      if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
   fi;
 Except
  CancelChanging(OWA);
  Raise;
 end;
 Finally
  CloseWorkArea(OWA);
 end;
 if aУчет: 
    if not RecordExists(crdБО,if(Rec2=nil,Rec1,Rec2)): БО=nil; Message("Внезапная ошибка создания БО",mtError); ^False; fi;
   else 
    Rec1=nil;
    Rec2=nil;
 fi;
 if aУчет and (Аннулирован or Исполнен) and ver=0:
    if not RecordExists(crdБО,Rec3): БО_Изм=nil; Message("Внезапная ошибка внесения изменений в БО",mtError); ^False; fi;
   else
    Rec3=nil;
 fi;
 БО=if(Rec2=nil,Rec1,Rec2);
 БО_Изм=Rec3;
 ^True;
end;

Func ПризнОбнов:L;
 if GUID="" or GUID="NEW": GUID=GetGUID; fi;
 ГодДок=Str(Year(ДатаДок));
 if RecordExists(crdДоговор,Договор_Пре):  --оставляем старый признак (возможна смена контрагента?)
    Код=Договор_Пре.Код;
   else
    Код=if(ГодДок="",GUID,ГодДок)+"@"+if(Контр=nil,GUID,SubStr(Контр_Призн,Pos(".",Контр_Призн)+1,255))+"@"+if(НомерДок="",GUID,НомерДок)+if(НомерДокДоп="","","_"+НомерДокДоп);
 fi;
 Код=Up(Код);
 Признак_Кмнт=НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Содерж;
 if not НеДейств:
    if FuncExists(Настр.ExtFunc_SetupSign):
       Признак=ExecuteFuncS(Настр.ExtFunc_SetupSign);
      else
       Признак=Раб.Договор.КодВПризнак(if(not Pos("{",Код)=0 or not Pos("}",Код)=0,GUID,Код));
    fi;
    Признак=Up(Признак);
    if Признак="": ^False; fi;
 fi;
 ^True;
end;

Func КонвОКДП_Гр(flГр:S):S;
var OWA,n,nr:I;
var tmp:S;
 FlagChanging=False;
 OWA=OpenWorkArea(crdДоговор_ТМЦ,"","Договор="+RecordToString(Current));
 Try
  Nr=Records(OWA);
  BeginChanging(OWA);
  Try
   for n=1..nr do
    tmp=GetFieldS(OWA,n,"ОКП");
    if Length(tmp)=7:
       tmp=Раб.Договор.ВзятьЗначОКДП(tmp,flГр);
       n=MyPutFieldS(OWA,n,"ОКДП_Гр",tmp);
    fi;
   od;
   if FlagChanging: EndChanging(OWA); else CancelChanging(OWA); fi;
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 tmp="";
 if FlagChanging: 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 and (ДатаДок>=01.01.100 and Секрет<2):
    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 ExtOnVerify:L;
 if FuncExists(Настр.ExtFunc_OnVerify): ^ExecuteFuncL(Настр.ExtFunc_OnVerify); fi;
 ^True;
end;

Func ПроверитьУник:L;
var OWA:I;
 OWA=OpenWorkArea(crdДоговор_Признак,"","Признак='"+Признак+"' and not Договор="+RecordToString(Current)+if(Договор_Пре=nil,""," and not Договор="+RecordToString(Договор_Пре)));
 try
  if not Records(OWA)=0 then ^НаОшибку("Повторный ввод договора:^MГод="+ГодДок+"^MКонтрагент="+RecordToString(Контр)+" "+Контр.КорИмя+"^MНомер="+НомерДок+" "+НомерДокДоп,mtError,2,"НомерДок",0); fi;
 finally
  CloseWorkArea(OWA);
 end;
 ^True;
end;

Func ПолучПапкуКлючГЭК(sp:s):S;
var Папка_,Ключ_:S;
 Папка_=if(not Настр.Общ_Справ1="" and Настр.Общ_Справ_ГЭК1,Up(Общ_Призн1)+"\","");
 Ключ_=if(not Настр.Общ_Справ1="" and Настр.Общ_Справ_ГЭК1,Up(Общ_Призн1),"");
 Папка_=Раб.Бюджет2005.Объединить(Папка_,if(not Настр.Общ_Справ2="" and Настр.Общ_Справ_ГЭК2,Up(Общ_Призн2)+"\",""),"\");
 Ключ_=Раб.Бюджет2005.Объединить(Ключ_,if(not Настр.Общ_Справ2="" and Настр.Общ_Справ_ГЭК2,Up(Общ_Призн2),""),"#");
 ^Папка_+sp+Ключ_;
end;

Func ПрибитьЖука:L;
var OWA:I;
 OWA=OpenWorkArea(crdДоговор,"","UKey="+RecordToString(Current));
 Try
  if not Records(OWA)=0:
     Message("Упс! Получен не уникальный ключ записи. Перезапустите сервер",mtError);
     ^True;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^False;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Загл2_OnEnter(FieldName: String; Iter: Integer): logical;
 if НеДейств:
    if EnqOkCancel("Данная редакция документа является НЕДЕЙСТВУЮЩЕЙ, вы хотите перейти на ДЕЙСТВУЮЩИЮ редакцию ?")=cmOk:
       if RecordExists(crdДоговор,Признак_Ref.Договор):
          if Рег: EditorCancel; fi;
          Раб.Переход.Crd=crdДоговор;
          Раб.Переход.Bln=blnДоговор;
          Раб.Переход.Modal=ModalMode;
          Раб.Переход.Rec=Признак_Ref.Договор;
          OpenBlank("Раб.Переход",False);
         else
          Message("Экземпляр документа "+RecordToString(Признак_Ref.Договор)+" не найден",mtError);
       fi;
    fi;
   else
    Message("Данная редакция документа является ДЕЙСТВУЮЩЕЙ");
 fi;
 Return False;
end;

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

Proc Контр_onClick(Row: Integer; Col: Integer; Double: Logical);
var Iter: I;
var Field,Field_,Bln:S;
var Rec: Record;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 Rec=nil;
 if Match(Field,"Учр*"): 
    Field_="Учр";
    Field=SubStr(Field,5,255); 
    Rec=Учр;
   |Match(Field,"Контр*"): 
    if AsString(Template.Name)="S2_2": 
       Field_="Контр2";
       Rec=Контр2[Iter].Контр;
      else
       Field_="Контр";
       Rec=Контр;
    fi;
    Field=SubStr(Field,7,255); 
 fi;
 if Rec=nil: Exit; fi;
 Bln="";
 if Field="РПО_ППП" or Field="РПО_Страна" or Field="РПО_ОКСМ" or Field="Статус" or Field="КОПФ" or Field="ОКПО": Bln="РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП"; fi;
 if Field="Статус": Field="РПО_Статус_"; fi;
 ExecuteProc("Инфо.Контрагент.Вызвать",Rec,Bln,Field,0);
 if Field_="Учр": Учр=Учр; --Вызываем обновление поля
   |Field_="Контр": Контр=Контр;
   |Field_="Контр2": Контр2[Iter].Контр=Контр2[Iter].Контр;
 fi;
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 Iter:I;
var Field:S;
var Rec: Record;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 Rec=nil;
 if Match(Field,"Учр_Банк_Свед*"): Field=SubStr(Field,10,255); Rec=Учр_Банк_Свед;
   |Match(Field,"Учр_Банк*"): Field=SubStr(Field,10,255); Rec=Учр_Банк;
   |Match(Field,"Контр_Банк*"): Field=SubStr(Field,12,255); Rec=if(AsString(Template.Name)="S2_1":Контр_Банк2[Iter].Контр_Банк|AsString(Template.Name)="S2_2":Контр2[Iter].Контр_Банк|true:Контр_Банк);
   |True: Exit;
 fi;
 Инфо.БанкСчета.Вызвать(Rec,Field,1);
end;

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

Proc ДатаСвед_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ДатаСвед2":
    if ДатаРук2<ДатаСвед2: ДатаРук2=ДатаСвед2; fi;
   else
    if ДатаРук<ДатаСвед: ДатаРук=ДатаСвед; fi;
 fi;
 Оформление;
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;
var tmp:I;
 tmp=Секрет;
 Секрет=Int(Раб.Договор.Секретность(Секрет,True));
 if not tmp=Секрет:
    РазмещЗаказ="";
 fi;
 Return False;
end;

Func Общ_Призн0_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=AnaElection("ЗК.*",False,False,tmp);
 if tmp="": ^False; fi;
 Общ_Призн0=tmp;
 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;
 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;
 Return False;
end;

Func Контр_OnEnter(FieldName: String; Iter: Integer): logical;
var Name:S;
var rec:record;
 Name=AsString(Template.Name);
 if Name="S2_2":
    Rec=Контр2[Iter].Контр;
   else
    Rec=Контр;
 fi;
 if not rec=nil:
    rec=OpenCardFile("Контрагент","",Rec,crdRecordOnly);
   else
    rec=Раб.Документы.ВыборСФильтром("Контрагент","ПолнИмя","");
 fi;
 if not Rec=nil:
    if Name="S2_2":
       Контр2[Iter].Контр=Rec;
       if Контр2[Iter].Наличные:
          Контр2[Iter].Контр_Банк=nil;
         else
          Контр2[Iter].Контр_Банк=Раб.Бюджет2005.БанкСчет(Контр2[Iter].Контр,False);
       fi;
      else
       Контр=Rec;
       Контр_Призн=CardFileRecSign("Контрагент","Признак","К",Rec);
       if Наличные:
          Контр_Банк=nil;
         else
          Контр_Банк=Раб.Бюджет2005.БанкСчет(Контр,False);
       fi;
    fi;
 fi;
 Return  False;
end;

Func Контр_Статус_OnEnter(FieldName: String; Iter: Integer): logical;
 Контр_Статус=Раб.Договор.СтатусКонтрагента(Контр_Статус,True,"18Н");
 Return False;
end;

Func Контр_Статус2_OnEnter(FieldName: String; Iter: Integer): logical;
 Контр2[Iter].Контр_Статус=Раб.Договор.СтатусКонтрагента(Контр_Статус,True,"18Н");
 Return False;
end;

Func Наличные_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="Наличные2_":
    Контр2[Iter].Наличные=not Контр2[Iter].Наличные;
    Контр2[Iter].Контр_Банк=nil;
   else
    Наличные=not Наличные;
    Контр_Банк=nil;
 fi;
 Return False;
end;

Func Контр_Банк_onEnter(FieldName: String; Iter: Integer): logical;
var Name:S;
var Контр_,Rec: Record;
 Name=AsString(Template.Name);
 if Name="S2_2":
    if Контр2[Iter].Наличные: Message("Вводить банковские реквизиты не требуется",mtWarning); Template.Field="Наличные2_"; ^False; fi;
    if Контр2[Iter].Контр=nil: Message("Выберите контрагента",mtError); Template.Name=Name; Template.Field="Контр.ПолнИмя"; Template.Frame=Iter; ^False; fi;
    Контр_=Контр2[Iter].Контр;
   else
    if Контр=nil: Message("Выберите контрагента",mtError); Template.Field="Контр.ПолнИмя"; ^False; fi;
    Контр_=Контр;
 fi;
 if Name="S2_1":
    Rec=Контр_Банк2[Iter].Контр_Банк;
   |Name="S2_2":
    Rec=Контр2[Iter].Контр_Банк;
   |True:
    if Наличные:
       Message("Вводить банковские реквизиты не требуется",mtWarning); Template.Field="Наличные_"; ^False;
      else
       Rec=Контр_Банк;
    fi;
 fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Контр_),Rec,crdRecordOnly);
 if not Rec=nil:
    if Name="S2_1":
       Контр_Банк2[Iter].Контр_Банк=Rec;
      |Name="S2_2":
       Контр2[Iter].Контр_Банк=Rec;
      |True:
       Контр_Банк=Rec;
    fi;
 fi;
 Return False;
end;

Func ТипСвед_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if not FieldName="ТипСвед_":
    if ТипСвед=0:
       Страница=2;
       ВывестиСтраницу;
       Message("Для ввода данного поля выберите тип сведений 'Измененные'",mtWarning);
       Template.Field="ТипСвед_";
       ^False;
    fi;
    ^True;
 fi;
 ClearVariable(Buf);
 Buf[1]="Первичные";
 Buf[2]="Измененные";
 n=Alternate("Тип сведений",Buf,-1,ТипСвед+1,12);
 if n=0: ^False; fi;
 ТипСвед=n-1;
 Return False;
end;

Proc ДатаРег_OnExit(FieldName: String; Iter: Integer);
 if ДатаРег=1.1.100:
    ТекГод="";
   else
    ТекГод=Str(Year(ДатаРег));
 fi;
 Оформление;
 ОбновВерсиюОКДП_Гр;
end;

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

Proc НаимДок_OnExit(FieldName: String; Iter: Integer);
 Оформление;
end;

Func ВидДок_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="государственный контракт";
 Buf[2]="договор";
 Buf[3]="соглашение";
 Buf[4]="- (прочерк) заполняется в случае отсутствия необходимости указания вида документа-основания в предусмотренных законодательством случаях";
 n=Alternate("Вид документа",Buf,-1,1,12);
 if n>0 and n<4: ВидДок=Buf[n];
   |n=4: ВидДок="-";
 fi;
 Return False;
end;

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
 if FieldName="НомерДок": НомерДок=Trim(НомерДок);
   |FieldName="НомерДокДоп": НомерДокДоп=Trim(НомерДокДоп);
 fi;
 if not Настр=nil:
    if FuncExists(Настр.ExtFunc_SetupIND):
       ВнутрНомерДок=ExecuteFuncS(Настр.ExtFunc_SetupIND);
    fi;
 fi;
end;

Proc ДатаДок_OnExit(FieldName: String; Iter: Integer);
 Год1=Str(Year(ДатаДок));
 Год2="";
 Год3="";
 Год4="";
 Год5="";
 Год6="";
 Год7="";
 Год8="";
 Год9="";
 Год10="";
 if not ДатаДок=1.1.100 and НоваяЗапись:
    ОбновВерсиюОКДП_Гр;
    Оформление;
 fi;
 if ДатаН=1.1.100 and not ДатаДок=1.1.100: ДатаН=ДатаДок; fi;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var dtmp :Date;
var Field:s;
 Template.HideEditor(False);
 dtmp=Calendar(ToDay);
 if dtmp<=1.1.100: ^Cur; fi;
 Field=Trim(AsString(Template.Field));
 PutVariableD(Field,dtmp);
 if Field="ДатаРег": ДатаРег_OnExit(Field,1);
   |Field="ДатаДок": ДатаДок_OnExit(Field,1);
   |Field="ДатаИзм" and Abs(ТипИзм)=4: ДатаРег=ДатаИзм; ДатаРег_OnExit(Field,1);
   |Field="ДатаСвед" or Field="ДатаСвед2": ДатаСвед_OnExit(Field,1);
 fi;
 ^Cur;
end;

Func ВнутрНомерДок_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Настр=nil:
   if FuncExists(Настр.ExtFunc_SetupIND):
       if ВнутрНомерДок="":
        ВнутрНомерДок=ExecuteFuncS(Настр.ExtFunc_SetupIND);
       fi;
       Message("Настроена автоматическая процедура присвоения внутреннего номера. Измененение вручную невозможно",mtWarning);
       ^False;
    fi;
 fi;
 Return True;
end;

Func Год_OnVerify(FieldName: String; Iter: Integer; Value: String):Logical;
 if Value="" then ^True; fi;
 if Int(Value)=0:
    if Value="0" or Value="00" or Value="000" or Value="0000": ^True; fi;
    Message("Поле должно содержать только числа",mtError);
    ^False;
 fi;
 Return True;
end;

Proc Год_OnExit(FieldName: String; Iter: Integer);
var Value,YYYY:S;
var l,n,z:I;
 YYYY=Str(Year(ToDay));
 Value=GetVariableS(FieldName);
 L=Length(Value);
 if L=0: Exit; fi;
 Value=SubStr(YYYY,1,4-L)+Value;
 PutVariableS(FieldName,Value);
 --Проверка на повтор года
 ClearVariable(Buf);
 for n=1..10 do
  Buf[n]=GetVariableS("Год"+Str(n));
 od;
 for n=1..10 do
  if not Buf[n]="":
     z=SearchInArray(Buf,Buf[n],False);
     if z=n: z=SearchInArray(Buf,Buf[n],False,n+1); fi;
     if not z=-1:
        Message("Повторный ввод года "+Value,mtError);
        PutVariableS(FieldName,"");
        Break;
     fi;
  fi;
 od;
end;

Proc СумДок_OnExit(FieldName: String; Iter: Integer);
 СумДок=Round(СумДок,2);
 if СумГод2=0: СумГод1=СумДок; fi;
 if not RoundПроцАв(ПроцАв)=0: ExecuteProc("ПроцАв_OnExit",FieldName,Iter); fi;
end;

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

Proc СумОб_OnExit(FieldName: String; Iter: Integer);
 if not НоваяЗапись:
    РасчетОбеспеч;
    if not Round(СумОб,2)=0 and Round(ВсегоОстОбеспеч+ДС_ВсегоОстОбеспеч,2)=0 and not Abs(ТипИзм)=99:
       if EnqOkCancel("Внимание! Документы подверждающие принятие на учет сумм обеспечения не найдены. Перейти в раздел обеспечения, для поиска данных сумм ?",mtWarning)=cmOk:
          ExecuteProc("Страница_onClick","btnОбеспеч");
       fi;
    fi;
 fi;
end;

Func ПроцАв_OnEnter(FieldName: String; Iter: Integer): logical;
 if Round(СумДок,2)=0: Message("Введите сумму документа всего",mtError); Template.Field="СумДок"; ^False; fi;
 Return True;
end;

Proc ПроцАв_OnExit(FieldName: String; Iter: Integer);
 ПроцАв=RoundПроцАв(ПроцАв);
 СумАв=Round(СумДок*ПроцАв/100,2);
end;

Proc СумАв_OnExit(FieldName: String; Iter: Integer);
 СумАв=Round(СумАв,2);
 if not ПроцАв=0 or ДатаРег>=1.7.2013 or ДатаИзм>=1.7.2013:
    ПроцАв=RoundПроцАв(СумАв*100/СумДок);
 fi;
end;

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

Func Пер_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 ClearVariable(Buf);
 Buf[1]="нет";
 Buf[2]="ежедневно";
 Buf[3]="еженедельно";
 Buf[4]="два раза в месяц";
 Buf[5]="ежемесячно";
 Buf[6]="ежеквартально";
 Buf[7]="раз в полгода";
 Buf[8]="другое (ручной ввод)";
 n=Alternate("Выберите периодичность",Buf,-1,SearchInArray(Buf,Пер),12);
 if not n=0 and not n=8:
    Template.HideEditor(False);
    Пер=Buf[n];
 fi;
 Return Cur;
end;

Func РазмещЗаказ_OnEnter(FieldName: String; Iter: Integer): logical;
 if ДатаДок=1.1.100 and ФЗ=0: Message("Выберите дату документа",mtError); Template.Field="ДатаДок"; ^False; fi;
 if ДатаРег>=1.1.2015:
    РазмещЗаказ=Раб.Договор.СОП(РазмещЗаказ,True,if(Секрет>0,"18Н","136Н"));
   else
    РазмещЗаказ=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,True,if(ФЗ>=1:"44ФЗ"|Секрет>1:"491"|ДатаДок<01.01.100:""|True:"1191"));
 fi;
 Return False;
end;

Func НомИзв_OnEnter(FieldName: String; Iter: Integer): logical;
 if РазмещЗаказ="": Message("Выберите способ размещения заказа",mtError); Template.Field="РазмещЗаказ_"; ^False; fi;
 if not (РазмещЗаказ="1" or РазмещЗаказ="2" or РазмещЗаказ=if(ДатаДок>=01.01.100,"4","5")): Message("Для выбранного способа размещения заказа ("+РазмещЗаказ_+") указывать номер присвоенный извещению о проведении конкурса, аукциона, запроса котировок не требуется",mtWarning); ^False; fi;
 Return True;
end;

Proc РеквДокОсн_OnExit(FieldName: String; Iter: Integer);
 РеквДокОсн="";
end;

Func РеквДокОсн_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:s;
 Template.HideEditor(False);
 tmp=Раб.Вспом.Основание.Выполнить("РПО_Договор.РеквДокОсн");
 if not tmp="":
    PutVariableS(AsString(Template.Field),tmp);
 fi;
 Return Cur;
end;

Func ИнфоДокОсн_OnEnter(FieldName: String; Iter: Integer): logical;
 if РазмещЗаказ="": Message("Выберите способ определения поставщика (подрядчика, исполнителя)",mtError); Template.Field="РазмещЗаказ_"; ^False; fi;
 if not SubStr(РазмещЗаказ,1,2)="11" and not РазмещЗаказ="0": Message("Поле заполняеться только для способа № 11",mtError); Template.Field="РазмещЗаказ_"; ^False; fi;
 Return True;
end;

Func ИстФин_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n:i;
 Template.HideEditor(False);
 ClearVariable(Buf);
 Buf[1]="00000000 Российская Федерация";
-- Buf[1]="Российская Федерация";
 n=Alternate("Источник финансирования контракта",Buf,-1,SearchInArray(Buf,ИстФин),12);
 if not n=0:
    ИстФин=SubStr(Buf[n],10,255);
    ИстФин_ОКТМО=SubStr(Buf[n],1,8);
    hИстФин=ИстФин;
    hИстФин_ОКТМО=ИстФин_ОКТМО;
    hИстФин=ИстФин;
 fi;
 Return Cur;
end;

Proc ИстФин_OnExit(FieldName: String; Iter: Integer);
 PutVariableS("h"+FieldName,GetVariableS(FieldName));
end;

Func КодБюдж_OnEnter(FieldName: String; Iter: Integer): logical;
 КодБюдж=Раб.Договор.НаименованиеБюджета(КодБюдж,True,if(ДатаРег>=1.1.2015,"18Н",""));
 НаимБюдж=Раб.Договор.НаименованиеБюджета(КодБюдж,False,if(ДатаРег>=1.1.2015,"18Н",""));
 hКодБюдж=КодБюдж;
 hНаимБюдж=НаимБюдж;
 Return False;
end;

Proc КодБюдж_OnExit(FieldName: String; Iter: Integer);
 НаимБюдж="";
end;

Func ВидВнеБюдж_OnEnter(FieldName: String; Iter: Integer): logical;
 ВидВнеБюдж=Раб.Договор.ВидВнеБюджетныхСредств(ВидВнеБюдж,True,if(ДатаРег>=1.1.2015,"18Н","44ФЗ"));
 Return False;
end;

Proc ВидВнеБюдж_OnExit(FieldName: String; Iter: Integer);
 ВидВнеБюдж="";
end;

Proc ДатаИзм_OnExit(FieldName: String; Iter: Integer);
 if Abs(ТипИзм)=4:
    ДатаРег=ДатаИзм;
    ДатаРег_OnExit(FieldName,Iter);
 fi;
end;

Func ТипИзм_onEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if ТипСвед=0:
    Страница=2; 
    ВывестиСтраницу;
    Message("Для ввода данного поля выберите тип сведений 'Измененные'",mtWarning);
    Template.Field="ТипСвед_";
   else
    ClearVariable(Buf);
    Buf[1]="Изменение договора (контракта) --например, дополнительное соглашение";
    Buf[2]="Исправление сведений --например, исправление очепятки";
    Buf[3]="Внутреннее изменение --например, изменение аналитики, счетов учета";
    Buf[4]="Перерегистрация на очередной год (сведения о БО ранее ПОДАВАЛИСЬ в ФК (учетный номер БО выдан))";
    Buf[5]="Перерегистрация на очередной год (сведения о БО ранее НЕ ПОДАВАЛИСЬ в ФК))";
    Buf[6]="Исполнение";
    Buf[7]="Расторжение";
    Buf[8]="Аннулирование БО";
    n=Alternate("Тип изменения",Buf,-1,if(ТипИзм=-4:5|ТипИзм=99:6|ТипИзм=-99:7|ТипИзм=5:8|True:ТипИзм),12);
    if n=5: ТипИзм=-4;
      |n=6: ТипИзм= 99; if not ВозможностьИспол: ^False; fi;
      |n=7: ТипИзм=-99;
      |n=8: ТипИзм= 5;
      |not n=0: ТипИзм=n;
    fi;
    Исполнен=ТипИзм=99;
    Аннулирован=ТипИзм=-99;
 fi;
 if not n=0: Оформление; fi;
 Return False;
end;

Proc ТипИзм_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(ТипИзм);
 Исполнен=False;
 Аннулирован=False;
 Оформление;
end;

Func НПИзм_OnEnter(FieldName: String; Iter: Integer): logical;
 if ТипСвед_OnEnter(FieldName,Iter)=False: ^False; fi;
 if ТипИзм=1 or ТипИзм=2 or НПИзм=0:
    ^True;
   else
    Message("Изменение порядкового номера допустимо только для типа изменения 1 или 2",mtError);
    Template.Field="ТипИзм_";
    ^False;
 fi;
 Return False;
end;

Func НПИзм_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 НПИзм=Раб.Обл.СледФ(crdДоговор,"НПИзм","not UKey="+RecordToString(Current)+" and Признак='"+Признак+"'");
 Return Cur;
end;

Func ИсполПризнак_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="0 -- исполнение этапа";
 Buf[2]="1 -- полное исполнение";
 n=Alternate("Признак исполнения",Buf,-1,1,12);
 if not n=0:
    ИсполПризнак=SubStr(Buf[n],1,1);
    ИсполПризнак="1"; --!!!!
 fi;
 Return False;
end;

Proc ИсполПризнак_OnExit(FieldName: String; Iter: Integer);
 ИсполПризнак="";
end;

Func АннулПризнак_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="2 -- контракт расторгнут";
 Buf[2]="3 -- контракт признан недействительным";
 n=Alternate("Признак расторжения",Buf,-1,1,12);
 if not n=0:
    АннулПризнак=SubStr(Buf[n],1,1);
 fi;
 Return False;
end;

Proc АннулПризнак_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(АннулПризнак);
end;

Func АннулКодОсн_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="1 соглашение сторон";
 Buf[2]="2 судебный акт";
 Buf[3]="3 односторонний отказ заказчика от исполнения контракта в соответствии с гражданским законодательством Российской Федерации";
 Buf[4]="4 односторонний отказ поставщика (подрядчика, исполнителя) от исполнения контракта в соответствии с гражданским законодательством Российской Федерации";
 n=Alternate("Основание расторжения",Buf,-1,Int(АннулКодОсн),12);
 if not n=0:
    АннулКодОсн=Str(n);
    АннулКодДок=АннулКодОсн+"1";
 fi;
 Return False;
end;

Proc АннулКодОсн_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(АннулКодОсн);
end;

Func АннулКодДок_OnEnter(FieldName: String; Iter: Integer): logical;
var OWA,n,z:i;
 ClearVariable(Buf);
 Buf[1]="11 дополнительное соглашение к контракту";
 Buf[2]="21 судебный акт";
 Buf[3]="31 решение заказчика об одностороннем отказе от исполнения контракта";
 Buf[4]="41 решение поставщика (подрядчика, исполнителя) об одностороннем отказе от исполнения контракта";
 n=Alternate("Основание расторжения",Buf,-1,Int(АннулКодДок),12);
 if not n=0:
    АннулКодДок=SubStr(Buf[n],1,2);
    АннулКодОсн=SubStr(АннулКодДок,1,1);
    OWA=OpenWorkArea("РПО_ДОГОВОР_НАИМ","Наим","Наим='"+SubStr(Buf[n],4,255)+"'");
    Try
     if Records(OWA)=0:
        BeginChanging(OWA);
        Try
         z=InsertRecord(OWA);
         z=PutFieldS(OWA,z,"Наим",SubStr(Buf[n],4,255));
         НаимИзм=GetRecordKey(OWA,1);
         EndChanging(OWA);
        Except
         CancelChanging(OWA);
         Raise;
        End;
       else
        НаимИзм=GetRecordKey(OWA,1);
     fi;
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 Return False;
end;

Proc АннулКодДок_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(АннулКодДок);
end;

Func КодШтраф_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 n=1;   Buf[n]="11 ненадлежащее исполнение поставщиком (подрядчиком, исполнителем) обязательств, предусмотренных контрактом, за исключением просрочки исполнения поставщиком (подрядчиком, исполнителем) обязательств (в том числе гарантийного обязательства), предусмотренных контрактом";
 n=n+1; Buf[n]="12 ненадлежащее исполнение заказчиком обязательств, предусмотренных контрактом, за исключением просрочки исполнения обязательств, предусмотренных контрактом";
 n=n+1; Buf[n]="21 просрочка исполнения поставщиком (подрядчиком, исполнителем) обязательств, предусмотренных контрактом (в том числе гарантийного обязательства)";
 n=n+1; Buf[n]="22 просрочка исполнения заказчиком обязательств, предусмотренных контрактом";
 n=Alternate("Причины начисления неустоек (штрафов, пеней)",Buf,-1,1,12);
 if not n=0:
    if Штраф=0: InsertFrame(Штраф,1); fi;
    Штраф[Iter].Код=SubStr(Buf[n],1,2);
 fi;
 Return False;
end;

Proc КодШтраф_OnExit(FieldName: String; Iter: Integer);
 Штраф[Iter].Код="";
end;

Func РасчетИА_OnEnter(FieldName: String; Iter: Integer): logical;
var i,ii,n,nn,OWA,m,z:i;
var tmp,МФ,Ист,КБК,Призн,Призн_,Предм:S;
var КР,СумПреГод:N;
var ДН,ДК:D;
 if Рег: ^False; fi;
 if not (Исполнен or Аннулирован): Message("Документ должен иметь статус исполнен/аннулирован",mtError); Template.Field="ТипИзм_"; ^False; fi;
 if ver<1 and not Учет_Реестр_ОФК: Message("К сожеланию данная возможность реализовано, только для версии документа старше 0",mtError); ^False; fi;
 if EnqOkCancel("Ранее заполненные данные об исполнении/аннулировании будут очищены. Вы уверены ?",mtWarning)=cmCancel: ^False; fi;
-- ДН=Dat(1,1,Int(ТекГод));
-- ДК=Dat(1,1,Int(ТекГод)+1)-1;
 ДН=Dat(1,1,Year(ДатаДок));
 ДК=Dat(1,1,Year(ДатаИзм)+1)-1;
 Раб.Договор.exclЗКР=True;
 Раб.Договор.exclЗачетАв=True;
 Раб.Договор.Договор_Оплата(Current,ДН,ДК,"","","",0,False,False,False);
 КР=Раб.Договор.LstСум[1];
 СумПреГод=0;
 if not Год1 ="" and Год1 <ТекГод: СумПреГод=СумПреГод+СумГод1; fi;
 if not Год2 ="" and Год2 <ТекГод: СумПреГод=СумПреГод+СумГод2; fi;
 if not Год3 ="" and Год3 <ТекГод: СумПреГод=СумПреГод+СумГод3; fi;
 if not Год4 ="" and Год4 <ТекГод: СумПреГод=СумПреГод+СумГод4; fi;
 if not Год5 ="" and Год5 <ТекГод: СумПреГод=СумПреГод+СумГод5; fi;
 if not Год6 ="" and Год6 <ТекГод: СумПреГод=СумПреГод+СумГод6; fi;
 if not Год7 ="" and Год7 <ТекГод: СумПреГод=СумПреГод+СумГод7; fi;
 if not Год8 ="" and Год8 <ТекГод: СумПреГод=СумПреГод+СумГод8; fi;
 if not Год9 ="" and Год9 <ТекГод: СумПреГод=СумПреГод+СумГод9; fi;
 if not Год10="" and Год10<ТекГод: СумПреГод=СумПреГод+СумГод10; fi;
 if Исполнен: ИсполФактОпл=СумПреГод+КР; else АннулФактОпл=СумПреГод+КР; fi;
 tmp="";
 Раб.Договор.exclЗКР=True;
 Раб.Договор.exclЗачетАв=True;
 ii=Раб.Договор.Договор_Оплата(Current,ДН,ДК,"","","",0,True,False,False);
 for i=1..ii do
  n=ii-(i-1);
  if Раб.Договор.LstКарт[n]="ПОРУЧ":
     tmp=DateToString(Раб.Договор.lstДатДок[n])+",№"+Раб.Договор.lstНомДок[n]+",платежное поручение";
     Break;
  fi;
 od;
 if Исполнен: ИсполКмнт=tmp; else АннулКмнт=tmp; fi;
 Раб.CRC16.Init;
 ClearVariable(Buf);
 ClearVariable(BufT);
 OWA=OpenWorkArea(crdДоговор_КБК,"НП","Договор="+RecordToString(Current));
 Try
  nn=Records(OWA);
  ShowProgress(nn*3,"Расчет...");
  BeginChanging(OWA,True);
  Try
   for n=1..nn do
    ProgressPos(n);
    МФ=GetFieldS(OWA,n,"МФ");
    if not МФ="": 
       Ист=GetFieldS(OWA,n,"ВД");
       КБК=GetFieldS(OWA,n,"КБК");
       Призн=GetFieldS(OWA,n,"Призн");
       Предм=GetFieldS(OWA,n,"Предм");
       Предм=Str16(Раб.CRC16.CRC16_(0,Предм));
       z=SearchInArray(Buf,Ист+"#"+КБК+"#"+Призн+"#"+Предм+"#"+МФ,True);
       if z=-1:
          z=InsertInArraySort(Buf,Ист+"#"+КБК+"#"+Призн+"#"+Предм+"#"+МФ);
          InsertInArray(BufT,z,n);
         else
          BufT[z]=n;
       fi;
       for m=1..12 do
        if SearchInArray(Buf,Ист+"#"+КБК+"#"+Призн+"#"+Предм+"#"+Format("%.2D",m),True)=-1:
           z=InsertInArraySort(Buf,Ист+"#"+КБК+"#"+Призн+"#"+Предм+"#"+Format("%.2D",m));
           InsertInArray(BufT,z,n);
        fi;
       od;
    fi;
   od;
   for n=1..nn do
    ProgressPos(nn+n);
    МФ=GetFieldS(OWA,n,"МФ");
    Ист=GetFieldS(OWA,n,"ВД");
    КБК=GetFieldS(OWA,n,"КБК");
    Призн=GetFieldS(OWA,n,"Призн");
    Призн_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн," ","&");
    Предм=GetFieldS(OWA,n,"Предм");
    Предм=Str16(Раб.CRC16.CRC16_(0,Предм));
    СумПреГод=0;
    if not Год1 ="" and Год1 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод1"); fi;
    if not Год2 ="" and Год2 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод2"); fi;
    if not Год3 ="" and Год3 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод3"); fi;
    if not Год4 ="" and Год4 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод4"); fi;
    if not Год5 ="" and Год5 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод5"); fi;
    if not Год6 ="" and Год6 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод6"); fi;
    if not Год7 ="" and Год7 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод7"); fi;
    if not Год8 ="" and Год8 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод8"); fi;
    if not Год9 ="" and Год9 <ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод9"); fi;
    if not Год10="" and Год10<ТекГод: СумПреГод=СумПреГод+GetFieldN(OWA,n,"СумГод10"); fi;
    if not МФ="":
       ДН=Dat(1,Int(МФ),Int(ТекГод));
       if МФ="12": ДК=Dat(1,1,Int(ТекГод)+1)-1; else ДК=Dat(1,Int(МФ)+1,Int(ТекГод))-1; fi;
       z=SearchInArray(Buf,Ист+"#"+КБК+"#"+Призн+"#"+Предм+"#"+МФ,True);
       DeleteFromArray(Buf,z);
       DeleteFromArray(BufT,z);
    fi;
    Раб.Договор.exclЗКР=True;
    Раб.Договор.exclЗачетАв=True;
    Раб.Договор.Договор_Оплата(Current,ДН,ДК,Ист,КБК,Призн_,0,False,False,False);
    n=PutFieldN(OWA,n,"ФактОпл",СумПреГод+Раб.Договор.LstСум[1]);
   od;
   ii=LengthOfArray(Buf);
   ShowProgress(ii*3,"Расчет...");
   for i=1..ii do
    ProgressPos(ii+ii+i);
    МФ=ExtractWord(5,Buf[i],"#");
    Ист=GetFieldS(OWA,BufT[i],"ВД");
    КБК=GetFieldS(OWA,BufT[i],"КБК");
    Призн=GetFieldS(OWA,BufT[i],"Призн");
    Призн_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(Призн," ","&");
    ДН=Dat(1,Int(МФ),Int(ТекГод));
    if МФ="12": ДК=Dat(1,1,Int(ТекГод)+1)-1; else ДК=Dat(1,Int(МФ)+1,Int(ТекГод))-1; fi;
    Раб.Договор.exclЗКР=True;
    Раб.Договор.exclЗачетАв=True;
    Раб.Договор.Договор_Оплата(Current,ДН,ДК,Ист,КБК,Призн_,0,False,False,False);
    if not Round(Раб.Договор.LstСум[1],2)=0:
       n=InsertRecord(OWA);
       CopyRecord(OWA,OWA,BufT[i],n);
       n=PutFieldI(OWA,n,"НП",nn);
       n=PutFieldS(OWA,n,"МФ",МФ);
       n=PutFieldN(OWA,n,"СумГод1",0);
       n=PutFieldN(OWA,n,"СумГод2",0);
       n=PutFieldN(OWA,n,"СумГод3",0);
       n=PutFieldN(OWA,n,"СумГод4",0);
       n=PutFieldN(OWA,n,"СумГод5",0);
       n=PutFieldN(OWA,n,"СумГод6",0);
       n=PutFieldN(OWA,n,"СумГод7",0);
       n=PutFieldN(OWA,n,"СумГод8",0);
       n=PutFieldN(OWA,n,"СумГод9",0);
       n=PutFieldN(OWA,n,"СумГод10",0);
       n=PutFieldN(OWA,n,"ФактОпл",Раб.Договор.LstСум[1]);
    fi;
   od;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if Round(if(Исполнен,ИсполФактОпл,АннулФактОпл),2)=Round(СумДок,2):
    OWA=OpenWorkArea(crdДоговор_ТМЦ,"НП","Договор="+RecordToString(Current));
    Try
     nn=Records(OWA);
     BeginChanging(OWA,True);
     Try
      for n=1..nn do
       n=PutFieldN(OWA,n,"ФактКол",GetFieldN(OWA,n,"Кол"));
       n=PutFieldN(OWA,n,"ФактСум",GetFieldN(OWA,n,"Сум"));
      od;
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
    Finally
     CloseWorkArea(OWA);
     CloseProgress;
    end;
    РасчетТМЦ;
 fi;
 РасчетКБК;
 if not Round(ВсегоФактОплКБК,2)=Round(if(Исполнен,ИсполФактОпл,АннулФактОпл),2): 
    Message("Все так сложно все так запутано, но разбираться некогда брат ... придется видимо руками посчитать, к сожалению",mtWarning);
   else
    if Исполнен and ИсполКмнт="": 
       Message("Основание исполнения не заполнено, так как не нашли нужное платежное поручение",mtWarning);
      else
       Message("Расчет успешно завершен");
    fi;
 fi;
 Return False;
end;

Func ФИОРук2_OnEnter(FieldName: String; Iter: Integer): logical;
 if ДолжнРук2="": ДолжнРук2=ДолжнРук; fi;
 if ФИОРук2="": ФИОРук2=ФИОРук; fi;
 Return True;
end;

Func РасчетИнфоИА_OnEnter(FieldName: String; Iter: Integer): logical;
var OWA,OA,n,nr,z,i,ii,nОпл:I;
var Key_:S;
var Rec: Record;
 if Рег: ^False; fi;
 ClearVariable(Инфо_ИА);
 ClearVariable(Buf);
 ClearVariable(recДО);
 OWA=OpenWorkArea("РПО_ДО","ДатаДок","Рег and Match(Признак,'"+Признак+"!')"+if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015," and not Аванс",""));
 Try
  nr=Records(OWA);
  ShowProgress(nr*2,"Расчет....");
  if not nr=0 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015):
     OA=OpenArray(OWA,1,"Расшифр","","not Кол=0");
  fi;
  for n=1..nr do
   ProgressPos(n);
   Key_=Раб.Формат.ДатаСтр(GetFieldD(OWA,n,"ДатаДок"),14);
   z=InsertInArraySort(Buf,Key_);
   z=InsertFrame(Инфо_ИА,z);
   recДО[z]=GetRecordKey(OWA,n);
   Инфо_ИА[z].ДатДок=GetFieldD(OWA,n,"ДатаДок");
   Инфо_ИА[z].НаимДок=GetFieldS(OWA,n,"НаимДок.Наим");
   Инфо_ИА[z].НомДок=GetFieldS(OWA,n,"НомерДок");
   Инфо_ИА[z].СумДок=GetFieldN(OWA,n,"СумДок");
   if ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015:
      ii=Records(OA);
      for i=1..ii do
       Инфо_ИА[z].КолДок=Инфо_ИА[z].КолДок+GetFieldN(OWA,n,"Кол");
      od;
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 OWA=OpenWorkArea("РПО_ЗАЯВКА_КР","ДокОперДат","Проводить and Осн_ДокВид='"+НаимДок.Наим+"' and Осн_ДокНом='"+НомерДок+"' and Осн_ДокДат="+DateToString(ДатаДок)+if(ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015," and not Док_Аванс",""));
 Try
  nr=Records(OWA);
  if not nr=0 and (ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015):
     OA=OpenArray(OWA,1,"Расшифр","");
  fi;
  if ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015:
     if (verТФФ>=17 or ДатаСвед2>=1.6.2015):
        if not nr=0:
           ShowProgress(Инфо_ИА*2,"Расчет....");
           Iter=1;
           nОпл=0;
           While Iter<=Инфо_ИА do
            ProgressPos(Инфо_ИА+Iter);
            SetFilter(OA,"ДО="+RecordToString(recДО[Iter]));
            for n=1..nr do
             Rec=GetRecordKey(OWA,n);
             ii=Records(OA);
             for i=1..ii do
              if i=1:
                 nОпл=nОпл+1; --количество оплат документа разными ЗКР
                 if nОпл>1:
                    Rec=recДО[Iter];
                    Iter=InsertFrame(Инфо_ИА,Iter+1);
                    recДО[Iter]=Rec;
                 fi;
                 Инфо_ИА[Iter].ДатОпл=GetFieldD(OWA,n,"ДокОперДат");
                 Инфо_ИА[Iter].НомОпл=GetFieldS(OWA,n,"ДокОперНом");
                 Инфо_ИА[Iter].СумОпл=GetFieldN(OA,i,"Сум");
                else
                 Инфо_ИА[Iter].СумОпл=Инфо_ИА[Iter].СумОпл+GetFieldN(OA,i,"Сум");
              fi;
             od; --for i=1..ii do
            od; --for n=1..nr do
            nОпл=0;
            Iter=Iter+1;
           od; --While Iter<=Инфо_ИА do
          else
           ProgressPos(Инфо_ИА+Инфо_ИА);
        fi;
       else
        ShowProgress(nr*2,"Расчет....");
        for n=1..nr do
         ProgressPos(nr+n);
         Rec=GetRecordKey(OWA,n);
         for Iter=1..Инфо_ИА do
          if Инфо_ИА[Iter].ДатОпл=1.1.100:
             SetFilter(OA,"ДО="+RecordToString(recДО[Iter]));
             ii=Records(OA);
             for i=1..ii do
              if i=1:
                 Инфо_ИА[Iter].ДатОпл=GetFieldD(OWA,n,"ДокОперДат");
                 Инфо_ИА[Iter].НомОпл=GetFieldS(OWA,n,"ДокОперНом");
                 Инфо_ИА[Iter].СумОпл=GetFieldN(OA,i,"Сум");
                else
                 Инфо_ИА[Iter].СумОпл=Инфо_ИА[Iter].СумОпл+GetFieldN(OA,i,"Сум");
              fi;
             od;
          fi;
         od;
        od;
     fi;
    else
     ShowProgress(nr*2,"Расчет....");
     for n=1..nr do
      ProgressPos(nr+n);
      Key_=Раб.Формат.ДатаСтр(GetFieldD(OWA,n,"ДокОперДат"),14);
      z=InsertInArraySort(Buf,Key_);
      z=InsertFrame(Инфо_ИА,z);
      Инфо_ИА[z].ДатДок=GetFieldD(OWA,n,"ДокОперДат");
      Инфо_ИА[z].НаимДок="платежное поручение";
      Инфо_ИА[z].НомДок=GetFieldS(OWA,n,"ДокОперНом");
      Инфо_ИА[z].СумДок=GetFieldN(OWA,n,"Док_Сум");
     od;
  fi;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 Return False;
end;

Func КурсОпл_OnEnter(FieldName: String; Iter: Integer): logical;
 if ОКВ="643":
    Message("Для кода валюты 643 вводить курс не требуется",mtError);
    ^False;
 fi;
 Return True;
end;

Func РедКБК_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Рег:
    РедакторКБК("",0,Рег,Исполнен and not Аннулирован);
 fi;
 Return False;
end;

Func ПросмотрКБК_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile(crdДоговор_КБК,"Договор="+RecordToString(Current));
 Return False;
end;

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

Func БО__OnEnter(FieldName: String; Iter: Integer): logical;
var БО_:Record;
 if (FieldName="БО_" or FieldName="БО_Изм_") and БО=nil and (FieldName="БО_И" or FieldName="БО_А") and БО_Изм=nil: ^False; fi;
 БО_=if(FieldName="БО_" or FieldName="БО_Изм_",БО,БО_Изм);
 if not RecordExists(crdБО,БО_): Message("Бюджетное обязательство "+RecordToString(БО_)+" не найдено",mtError); ^False; fi;
 if ModalMode and isBlankOpen(BlnБО): Message("Бланк бюджетного обязательства уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
 if isBlankOpen(blnБО): Close(blnБО); fi;
 if Рег: EditorCancel; fi;
 OpenBlank(blnБО,True,БО_);
 Return False;
end;

Func РедПредмет_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Рег:
    Rec=OpenCardFile(crdДоговор_ТМЦ,"Договор="+RecordToString(Current));
   else
    РедакторТМЦ("",0);
 fi;
 Return False;
end;

Func ОбновПредмет_OnEnter(FieldName: String; Iter: Integer): logical;
 РасчетТМЦ;
 Return False;
end;

Func verОКДП_Гр_OnEnter(FieldName: String; Iter: Integer): logical;
var i,v:i;
var msg:s;
 if ДатаРег=1.1.100: Message("Введите дату принятия к учету",mtError); Страница=2; ВывестиСтраницу; 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;

Proc ОКДП_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,tmp:s;
var Iter:I;
 Iter=AsInteger(Template.Frame);
 Field=AsString(Template.Field);
 tmp=GetVariableS(Field+"["+Str(Iter)+"]");
 if tmp="": Exit; fi;
 if Field="ОКП":  
    if ФЗ>=1:
       tmp=Раб.Договор.ВзятьЗначОКПД(tmp,"Наим");
      else
       tmp=Раб.Договор.ВзятьЗначОКДП(tmp,"Наим");
    fi;
   |Field="ОКДП_Гр": tmp=Раб.Бюджет.НаимКБК(if(verОКДП_Гр=273,"ОКДП_ГР273","ОКДП_ГР"),tmp);
   |true: tmp="";
 fi;
 if not tmp="":
    Message(tmp);
 fi;
end;

Func РедГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 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:
       MyEditorApply;
    fi;
 fi;
 tmp=ПолучПапкуКлючГЭК("|");
 Раб.Вспом.Сканер.extПапка=ExtractWord(1,tmp,"|");
 Раб.Вспом.Сканер.vКлюч=ExtractWord(2,tmp,"|");
 Раб.Вспом.Сканер.Вызвать("Сканирование договора",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(4,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);
 if Double:
    СвязДок_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
 fi;
end;

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

Func СводкаИзм_OnEnter(FieldName: String; Iter: Integer): logical;
 for Iter=1..УпрИзм do
  if ИзмТек[Iter]="*": Break; fi;
 od;
 if Iter=1: Message("Нет данных для сравнения"); ^False; fi;
 Раб.Вспом.Договор_Сводка_Изм.Сравнить(crdДоговор,ИзмRec[Iter-1],ИзмRec[Iter]);
 Return False;
end;

Func ИзмДок_onEnter(FieldName: String; Iter: Integer): logical;
var w,ww:i;
var Rec: Record;
 ClearVariable(Buf);
 if FieldName="ИзмБО":
    ИзмБОRec[Iter]=Trim(Раб.Формат.ReplaceSubStr(ИзмБОRec[Iter],"{0}",""));
    if ИзмБОRec[Iter]="": Rec=nil;
      |not Pos(" ",ИзмБОRec[Iter])=0:
       ww=WordsCount(ИзмБОRec[Iter]," ");
       for w=1..ww do
        Buf[w]=Trim(ExtractWord(w,ИзмБО[Iter],";"));
       od;
       w=Alternate("Выберите обязательство",Buf,-1,1,12);
       if w=0: ^False; fi;
       Rec=StringToRecord(ExtractWord(w,ИзмБОRec[Iter]," "));
      |True: Rec=StringToRecord(ИзмБОRec[Iter]);
    fi;
    if not RecordExists(crdБО,Rec): Message("Обязательство (бюджетное) "+RecordToString(Rec)+" не найдено",mtError); ^False; fi;
    if ModalMode and isBlankOpen(BlnБО): Message("Бланк бюджетного обязательства уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
    if isBlankOpen(blnБО): Close(blnБО); fi;
    if Рег: EditorCancel; fi;
    OpenBlank(blnБО,True,Rec);
   else
    if ИзмТек[Iter]="*": Message("Вы уже находитесь на текущей записи"); ^False; fi;
    if not RecordExists(crdДоговор,ИзмRec[Iter]): Message("Запись "+RecordToString(ИзмRec[Iter])+" не найдена",mtError); ^False; fi;
    if Рег: EditorCancel; fi;
    Раб.Переход.Crd=crdДоговор;
    Раб.Переход.Bln=blnДоговор;
    Раб.Переход.Modal=ModalMode;
    Раб.Переход.Rec=ИзмRec[Iter];
    OpenBlank("Раб.Переход",False);
 fi;
 Return False;
end;

Proc ИзмДок_onClick(Row: Integer; Col: Integer; Double: Logical);
 if Double:
    ИзмДок_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
 fi;
end;

Proc ОтчДок_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:S;
var Rec: Record;
 if НеДейств:
    if RecordExists(crdДоговор,Признак_Ref.Договор):
       Rec=Признак_Ref.Договор;
      else
       Message("Для вызова отчета перейдите в действующию редакцию документа",mtError);
       Template.Field="Загл2";
       Exit;
    fi;
   else
    Rec=Current;
 fi;
 bln="Документы.ДоговорПост.Отчет";
 PutVariableD(bln+".ДОтчет",ToDay);
 PutVariableR(bln+".recДоговор0",Rec);
 PutVariableS(bln+".НомерДок",НомерДок);
 PutVariableR(bln+".recПост",Контр);
 PutVariableS(bln+".НаимПост",Контр.КорИмя);
 PutVariableL(bln+".Run",True);
 OpenBlank(bln,True);
end;

Proc ОтчДО_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:S;
 bln="Документы.ДоговорПост.ДО_Отчет";
 PutVariableD(bln+".ДН",1.1.100);
 PutVariableD(bln+".ДК",ToDay+1);
 PutVariableD(bln+".ДК2",1.1.100);
 PutVariableI(bln+".Статус",1);
 PutVariableR(bln+".Контр",nil);
 PutVariableS(bln+".Контр_","");
 PutVariableR(bln+".Договор",Current);
 PutVariableS(bln+".Договор_",НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок));
 PutVariableS(bln+".ДоговорПризн",Признак);
 PutVariableS(bln+".УслОбщПризн1","");
 PutVariableS(bln+".УслОбщПризн2","");
 PutVariableS(bln+".УслПризн","");
 PutVariableS(bln+".УслКБК","");
 PutVariableS(bln+".УслВД","");
 PutVariableL(bln+".Run2",True);
 OpenBlank(bln,True);
end;

Proc АктСверки_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:S;
 bln="Контрагенты.АктСверки";
 PutVariableD(bln+".ДН",Dat(1,1,Year(ToDay)));
 PutVariableD(bln+".ДК",ToDay);
 PutVariableS(bln+".ПризнКонтр",Контр_Призн);
 PutVariableS(bln+".Контр",if(Контр.КорИмя="",Контр_Призн,Контр.КорИмя));
 PutVariableS(bln+".Контр_ИНН",if(Контр.ИНН="" and Контр.КПП="","","ИНН:"+Контр.ИНН+" КПП:"+Контр.КПП));
 PutVariableS(bln+".К_ДолжнРук",Контр.ДолжнРук);
 PutVariableS(bln+".К_ФИОРук",Контр.ФИОРук);
 PutVariableS(bln+".К_ДолжнБух",Контр.ДолжнБух);
 PutVariableS(bln+".К_ФИОБух",Контр.ФИОБух);
 PutVariableS(bln+".УслАнДоговор","ДОГОВОР."+Признак+"!");
 PutVariableS(bln+".УслАн","");
 PutVariableS(bln+".НомДоговор",НомерДок);
 PutVariableD(bln+".ДатДоговор",ДатаДок);
 PutVariableI(bln+".Упр",0);
 PutVariableN(bln+".ОстДебН",0);
 PutVariableN(bln+".ОстКреН",0);
 PutVariableD(bln+".ДО[1]",1.1.100);
 PutVariableS(bln+".Содерж[1]","");
 PutVariableN(bln+".СумДеб[1]",0);
 PutVariableN(bln+".СумКре[1]",0);
 PutVariableN(bln+".К_СумДеб[1]",0);
 PutVariableN(bln+".К_СумКре[1]",0);
 OpenBlank(bln,True);
end;

Proc Прил1_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:s;
 if ДатаРег>=1.1.2015:
    bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ1_СВЕД_18Н";
   else
    bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ2_ИНФО";
 fi;
 Раб.Обмен.Очистить;
 Раб.Обмен.Recipient=bln;
 Раб.Обмен.BufS1[1]=RecordToString(Current);
 OpenBlank(bln,True);
 Раб.Обмен.Очистить;
end;

Proc ВыгрузПрил1_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:S;
 if not Рег: Message("Документ должен быть зарегистрован",mtError); Template.Object="cbРег"; Exit; fi;
 if not Учет_Реестр_ОФК: Message("Должен быть установлен флаг 'Подлежит учету в реестре ГК'",mtError); Template.Object="cbУчетРеестрОФК"; Exit; fi;
 if Секрет<1: Message("Выгрузка актуальна только для документов соотвествующих Пост. Прав. РФ от 20.11.2013 № 1084",mtWarning); fi;
 if ДатаРег>=1.1.2015:
    bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ВЫГРУЗКА_FK_TXGS"+if(verТФФ<19,"150701","151001");
    if isBlankOpen(bln): Close(bln); fi;
    PutVariableR(bln+".Run",Current);
    OpenBlank(bln,True);
   else
    Message("Выгрузка в формате TXGS"+if(verТФФ<13,"140101","140701")+" больше не поддерживается",mtWarning);
--    bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ВЫГРУЗКА_FK_TXGS"+if(verТФФ<13,"140101","140701");
--    if isBlankOpen(bln): Close(bln); fi;
--    PutVariableR(bln+".Run",Current);
--    OpenBlank(bln,True);
 fi;
end;

Proc Прил2_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,bln:S;
 if Исполнен or Аннулирован:
    Field=AsString(Template.Field);
    if ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015:
       if Field="Прил2Вариант": Exit; fi;
       bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ2_ИСПОЛ_18н";
      else
       bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ3_ИСПОЛ";
    fi;
    Раб.Обмен.Очистить;
    Раб.Обмен.Recipient=bln+if(Field="Прил2Вариант","_ВАРИАНТ","");
    Раб.Обмен.BufS1[1]=RecordToString(Current);
    OpenBlank(Раб.Обмен.Recipient,True);
    Раб.Обмен.Очистить;
   else
    Message("Документ должен быть исполнен или расторгнут",mtError);
 fi;
end;

Proc ВыгрузПрил2_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln:s;
 if not Рег: Message("Документ должен быть зарегистрован",mtError); Template.Object="cbРег"; Exit; fi;
 if not Учет_Реестр_ОФК: Message("Должен быть установлен флаг 'Подлежит учету в реестре ГК'",mtError); Template.Object="cbУчетРеестрОФК"; Exit; fi;
 if not Исполнен and not Аннулирован: Message("Документ должен быть исполнен или расторгнут",mtError); Template.Object="cbИспол"; Exit; fi;
 if Секрет<1: Message("Выгрузка актуальна только для документов соотвествующих Пост. Прав. РФ от 20.11.2013 № 1084",mtWarning); fi;
 if ДатаСвед2>=1.1.2015 or ДатаРег>=1.1.2015:
    bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ВЫГРУЗКА_FK_TXIS"+if(verТФФ<19,"150505","150505");
    if isBlankOpen(bln): Close(bln); fi;
    PutVariableR(bln+".Run",Current);
    OpenBlank(bln,True);
   else
    Message("Выгрузка в формате TXIS"+if(verТФФ<13,"140101","140701")+" больше не поддерживается",mtWarning);
--    bln="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ВЫГРУЗКА_FK_TXIS"+if(verТФФ<13,"140101","140701");
--    if isBlankOpen(bln): Close(bln); fi;
--    PutVariableR(bln+".Run",Current);
--    OpenBlank(bln,True);
 fi;
end;

Proc ЭкспортCDF_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if not CurrentState=CrdusUnmodified:
    if EnqOkCancel("Сохранить изменения ?",mtWarning)=cmOk: EditorApply; fi;
 fi;
 Раб.Вспом.Договор_Связать_Табл.Вызвать(GetGUID,"UKey="+RecordToString(Current),True,True,"");
 Message("Операция завершена");
end;

Proc ИмпортCDF_OnClick(Row: Integer; Col: Integer; Double: Logical);
var F,n,nn,p,State:I;
var FName,Crd,Цель,FileS,FileT:S;
 if ChooseFolder(FName,"Выберите папку для импорт")=cmCancel: Message("Отказ от операции"); Exit; fi;
 if not ExistFile(FName+"\.Выгрузка"): Message("Папка не содержит описание выгрузки",mtError); Exit; fi;
 ClearVariable(Buf);
 nn=0;
 F=TextFileOpenRead(FName+"\.Выгрузка");
 Try
  While not TextFileEndOfFile(F) do
   nn=nn+1;
   Buf[nn]=TextFileReadLn(F);
  od;
 Finally
  TextFileClose(F);
 end;
 for n=1..nn do
  if not Int(ExtractWord(2,Buf[n],"="))=0:
     crd=ExtractWord(1,Buf[n],"=");
     ImportCard(ieCRD, --Формат
                crd, --Картотека обязательное имя картотеки, в которую импортируется заданный файл
                FName+"\"+crd, --Файл полное или короткое имя файла со структурой заданной картотеки
                False, --ВидимПоля загружать только видимые поля (Истина) или все поля (Ложь)
                True, --Режим загружать поля CreateTime, UpdateTime, CreatedUser, ModifiedUser
                False, --DOS загружать текст в кодировке DOS (Истина) или в кодировке Windows (Ложь);
                True, --Подтв запрашивать подтверждения (Истина) или нет (Ложь).
                ovrNone, --Действ целочисленная константа для разрешения конфликтных ситуаций в импорте
                False, --Удал удалять содержимое картотеки (Истина) или нет (Ложь);
                True, --ПоказДиалог показывать диалог соответствия полей (Истина) даже
                False --Настройки логический параметр, определяющий, использовать ли настройки браузера картотеки при загрузке
               );


    Trace("Картотека "+Crd+" загружена");
  fi;
 od;
 Message("Загрузка картотек завершена");
 nn=0;
 F=TextFileOpenRead(FName+"\.ВыгрузкаГЭК");
 Try
  While not TextFileEndOfFile(F) do
   nn=nn+1;
   Buf[nn]=TextFileReadLn(F);
  od;
 Finally
  TextFileClose(F);
 end;
 if not nn=0:
    if EnqOkCancel("Загрузить файлы ГЭК ?",mtWarning)=cmCancel: Message("Загрузка файлов ГЭК отменена"); Exit; fi;
    Цель=Раб.Вспом.Сканер.RootFolderImage;
    if Раб.Настр.Начать("РАБ.ВСПОМ.СКАНЕР",0,0,"",GetGUID):
       Цель=Раб.Настр.ВзятьЗначение("RootFolderImage");
    fi;
    if Цель="": Message("Не указана папка приемник ГЭК",mtError); Exit; fi;
    State=0;
    p=0;
    ShowProgress(nn,"Копирование файлов ГЭК...");
    Try
     for n=1..nn do
      ProgressPos(n);
      FileS=Раб.Бюджет2005.Контроль2Слэш(FName+"\ГЭК\"+Buf[n]);
      FileT=Раб.Бюджет2005.Контроль2Слэш(Цель+"\"+Buf[n]);
      if ExistFile(FileS):
         if ExistFile(FileT):
            if State<3:
               State=Enquiry("","Файл "+FileT+" уже существует, перезаписать ?","Нет;Да;Нет для всех;Да для всех;Отмена",mtWarning);
               if State=5 or State=0: Message("Отказ от копирования файлов ГЭК",mtWarning); Exit; fi;
            fi;
         fi;
         if State=0 or State=2 or State=4:
            CopyFile(FileS,FileT);
            if State<3: State=0; fi;
         fi;
        else
         Trace("Файл "+FileS+" не найден");
      fi;
     od;
    Finally
     CloseProgress;
    end;
    Message("Скопировано файлов ГЭК "+Str(p)+" из "+Str(nn));
 fi;
end;

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

Func КопирФайл_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
 РасчетФайл;
 if УпрФайл=0: Message("Нет данных для копирования",mtError); ^False; fi;
 i=Раб.Вспом.Файлы.Копировать(crdДоговор,RecordToInteger(Current),"",0,"","*","");
 if i>=0:
    Message("Скопировано файлов "+Str(i)+" из "+Str(УпрФайл));
 fi;
 Return False;
end;

Func УдалФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 if Рег: ^False; fi;
 РасчетФайл;
 if EnqOkCancel("Все файлы будет удалены, Вы уверены ?",mtWarning)=cmCancel: ^False; fi;
 Раб.Вспом.Файлы.Стереть(crdДоговор,RecordToInteger(Current),"*");
 РасчетФайл;
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var Field:S;
 if FieldName="A2_1":
    if not Рег:
       InsertFrame(Контр2,Контр2+1);
    fi;
   |FieldName="A2_2":
    if not Рег:
       InsertFrame(Контр_Банк2,Iter+1);
    fi;
   |FieldName="A_ДокОсн":
    if not Рег:
       InsertFrame(ДокОсн,ДокОсн+1);
    fi;
   |FieldName="A2_ДокОсн":
    if not Рег:
       InsertFrame(ДокОсн,Iter+1);
    fi;
   |Match(FieldName,"AСд*"):
    if not Рег:
       if FieldName="AСд_1": visСд2=True;
         |FieldName="AСд_2": visСд3=True;
         |FieldName="AСд_3": visСд4=True;
       fi;
       Оформление;
    fi;
   |Match(FieldName,"A3*"):
    if not Рег:
       if FieldName="A3_1": visИнфоДокОсн2=True;
         |FieldName="A3_2": visИнфоДокОсн3=True;
         |FieldName="A3_3": visИнфоДокОсн4=True;
       fi;
       Оформление;
    fi;
   |Match(FieldName,"AФЦ*"):
    if not Рег:
       if FieldName="AФЦ_1": visФЦ2=True;
         |FieldName="AФЦ_2": visФЦ3=True;
         |FieldName="AФЦ_3": visФЦ4=True;
       fi;
       Оформление;
    fi;
   |Match(FieldName,"A4*"):
    if not Рег:
       if FieldName="A4_1": visГод2 =True; Field="A4_2";
         |FieldName="A4_2": visГод3 =True; Field="A4_3";
         |FieldName="A4_3": visГод4 =True; Field="A4_4";
         |FieldName="A4_4": visГод5 =True; Field="A4_5";
         |FieldName="A4_5": visГод6 =True; Field="A4_6";
         |FieldName="A4_6": visГод7 =True; Field="A4_7";
         |FieldName="A4_7": visГод8 =True; Field="A4_8";
         |FieldName="A4_8": visГод9 =True; Field="A4_9";
         |FieldName="A4_9": visГод10=True; Field="D4_10";
         |true: ^False;
       fi;
       Оформление;
       Template.Field=Field;
    fi;
   |FieldName="A5":
    if not Рег:
       InsertFrame(Инфо_ИА,Инфо_ИА+1);
       if Инфо_ИА=1:
          Оформление;
       fi;
    fi;
   |FieldName="A6":
    if not Рег:
       InsertFrame(Штраф,Штраф+1);
    fi;
   |True:
    InsertFrame(УпрФайл,УпрФайл+1);
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
var Field:S;
 if FieldName="D2_1":
    if not Рег:
       DeleteFrame(Контр2,Iter);
    fi;
   |FieldName="D2_2":
    if not Рег:
       DeleteFrame(Контр_Банк2,Iter);
    fi;
   |FieldName="D2_ДокОсн":
    if not Рег:
       DeleteFrame(ДокОсн,Iter);
    fi;
   |Match(FieldName,"DСд*"):
    if not Рег:
       if FieldName="DСд_2":
          if not Содерж3="" or not Содерж4="": ^False; fi;
          visСд2=False; Содерж2="";
         |FieldName="DСд_3":
          if not Содерж4="": ^False; fi;
          visСд3=False; Содерж3="";
         |FieldName="DСд_4":
          visСд4=False; Содерж4="";
       fi;
       Оформление;
    fi;
   |Match(FieldName,"D3*"):
    if not Рег:
       if FieldName="D3_2": 
          if not ИнфоДокОсн3="" or not ИнфоДокОсн4="": ^False; fi;
          visИнфоДокОсн2=False; ИнфоДокОсн2="";
         |FieldName="D3_3": 
          if not ИнфоДокОсн4="": ^False; fi;
          visИнфоДокОсн3=False; ИнфоДокОсн3="";
         |FieldName="D3_4": 
          visИнфоДокОсн4=False; ИнфоДокОсн4="";
       fi;
       Оформление;
    fi;
   |Match(FieldName,"DФЦ*"):
    if not Рег:
       if FieldName="DФЦ_2":
          if not ФормулаЦены3="" or not ФормулаЦены4="": ^False; fi;
          visФЦ2=False; ФормулаЦены2="";
         |FieldName="DФЦ_3":
          if not ФормулаЦены4="": ^False; fi;
          visФЦ3=False; ФормулаЦены3="";
         |FieldName="DФЦ_4":
          visФЦ4=False; ФормулаЦены4="";
       fi;
       Оформление;
    fi;
   |Match(FieldName,"D4*"):
    if not Рег:
       if FieldName="D4_2":
          if not Round(СумГод3,2)=0 or not Round(СумГод4,2)=0 or not Round(СумГод5,2)=0 or not Round(СумГод6,2)=0 or not Round(СумГод7,2)=0 or not Round(СумГод8,2)=0 or not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0 
             or not Год3="" or not Год4="" or not Год5="" or not Год6="" or not Год7="" or not Год8="" or not Год9="" or not Год10="":
             ^False; 
          fi;
          visГод2 =False; СумГод2 =0; Год2 =""; Field="D4_1";
         |FieldName="D4_3":
          if not Round(СумГод4,2)=0 or not Round(СумГод5,2)=0 or not Round(СумГод6,2)=0 or not Round(СумГод7,2)=0 or not Round(СумГод8,2)=0 or not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0
             or not Год4=""or not Год5="" or not Год6="" or not Год7="" or not Год8=""or not Год9="" or not Год10="":
             ^False; 
          fi;
          visГод3 =False; СумГод3 =0; Год3 =""; Field="D4_2";
         |FieldName="D4_4":
          if not Round(СумГод5,2)=0 or not Round(СумГод6,2)=0 or not Round(СумГод7,2)=0 or not Round(СумГод8,2)=0 or not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0
             or not Год5="" or not Год6="" or not Год7="" or not Год8="" or not Год9="" or not Год10="":
             ^False; 
          fi;
          visГод4 =False; СумГод4 =0; Год4 =""; Field="D4_3";
         |FieldName="D4_5":
          if not Round(СумГод6,2)=0 or not Round(СумГод7,2)=0 or not Round(СумГод8,2)=0 or not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0
             or not Год6="" or not Год7="" or not Год8="" or not Год9=""or not Год10="":
             ^False; 
          fi;
          visГод5 =False; СумГод5 =0; Год5 =""; Field="D4_4";
         |FieldName="D4_6":
          if not Round(СумГод7,2)=0 or not Round(СумГод8,2)=0 or not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0
             or not Год7="" or not Год8="" or not Год9="" or not Год10="":
             ^False; 
          fi;
          visГод6 =False; СумГод6 =0; Год6 =""; Field="D4_5";
         |FieldName="D4_7":
          if not Round(СумГод8,2)=0 or not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0
             or not Год8="" or not Год9="" or not Год10="":
             ^False; 
          fi;
          visГод7 =False; СумГод7 =0; Год7 =""; Field="D4_6";
         |FieldName="D4_8":
          if not Round(СумГод9,2)=0 or not Round(СумГод10,2)=0
             or not Год9="" or not Год10="":
             ^False; 
          fi;
          visГод8 =False; СумГод8=0; Год8 =""; Field="D4_7";
         |FieldName="D4_9":
          if not Round(СумГод10,2)=0
             or not Год10="":
             ^False; 
          fi;
          visГод9 =False; СумГод9 =0; Год9 =""; Field="D4_8";
         |FieldName="D4_10":
          visГод10=False; СумГод10=0; Год10=""; Field="D4_9";
         |True: ^False;
       fi;
       Оформление;
       Template.Field=Field;
    fi;
   |FieldName="D5":
    if not Рег:
       DeleteFrame(Инфо_ИА,Iter);
       if Инфо_ИА=0:
          Оформление;
          Template.Field="ИсполКмнт";
       fi;
    fi;
   |FieldName="D6":
    if not Рег:
       DeleteFrame(Штраф,Iter);
    fi;
   |True:
    if not Файл[Iter]="":
       if EnqOkCancel("Файл '"+Файл[Iter]+"' будет удален, вы уверены ?",mtWarning)=cmCancel: ^False; fi;
       Раб.Вспом.Файлы.Стереть(crdДоговор,RecordToInteger(Current),Файл[Iter]);
    fi;
    DeleteFrame(УпрФайл,Iter);
 fi;
 Return False;
end;

Func Файл_OnEnter(FieldName: String; Iter: Integer): logical;
var ret:i;
var vПапка,vКлюч,tmp:S;
 if Файл[Iter]="":
    if НоваяЗапись:
       EditorApply;
    fi;
    tmp=ПолучПапкуКлючГЭК("|");
    vПапка=ExtractWord(1,tmp,"|");
    vКлюч=ExtractWord(2,tmp,"|");
    ret=Раб.Вспом.Файлы.Добавить(crdДоговор,RecordToInteger(Current),vПапка,"",ФайлКмнт[Iter],vКлюч);
    if ret>0:
       Раб.Вспом.Файлы.Показ(IntegerToRecord(ret),blnДоговор+".Файл["+str(Iter)+"]",blnДоговор+".ФайлКмнт["+str(Iter)+"]",blnДоговор+".ФайлШтамп["+str(Iter)+"]","",blnДоговор+".ФайлCU["+str(Iter)+"]",blnДоговор+".ФайлMU["+str(Iter)+"]");
    fi;
   else
    Раб.Вспом.Файлы.Вызвать(crdДоговор,RecordToInteger(Current),Файл[Iter],"");
 fi;
 Return False;
end;

Proc Файл_OnExit(FieldName: String; Iter: Integer);
 ОбновФайл_OnEnter(FieldName,Iter);
end;

Proc Файл_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 if not Файл[Iter]="":
    Раб.Вспом.Файлы.Вызвать(crdДоговор,RecordToInteger(Current),Файл[Iter],"");
 fi;
end;

Proc ФайлКмнт_OnExit(FieldName: String; Iter: Integer);
var ret:i;
var vПапка,vКлюч,tmp:S;
 if not Файл[Iter]="":
    tmp=ПолучПапкуКлючГЭК("|");
    vПапка=ExtractWord(1,tmp,"|");
    vКлюч=ExtractWord(2,tmp,"|");
    ret=Раб.Вспом.Файлы.Обновить(crdДоговор,RecordToInteger(Current),vПапка,Файл[Iter],ФайлКмнт[Iter],vКлюч,if(FieldName="loadФайл","","-1"));
    if ret>0:
       Раб.Вспом.Файлы.Показ(IntegerToRecord(ret),blnДоговор+".Файл["+str(Iter)+"]",blnДоговор+".ФайлКмнт["+str(Iter)+"]",blnДоговор+".ФайлШтамп["+str(Iter)+"]","",blnДоговор+".ФайлCU["+str(Iter)+"]",blnДоговор+".ФайлMU["+str(Iter)+"]");
    fi;
 fi;
end;

Func openФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 Файл_OnEnter(FieldName,Iter);
 Return False;
end;

Func loadФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 if Файл[Iter]="":
    Файл_OnEnter(FieldName,Iter);
   else
    ФайлКмнт_OnExit(FieldName,Iter);
 fi;
 Return False;
end;

Func loadПапка_OnEnter(FieldName: String; Iter: Integer): logical;
var ret:i;
var vПапка,vКлюч,tmp:S;
 if НоваяЗапись:
    EditorApply;
 fi;
 tmp=ПолучПапкуКлючГЭК("|");
 vПапка=ExtractWord(1,tmp,"|");
 vКлюч=ExtractWord(2,tmp,"|");
 ret=Раб.Вспом.Файлы.ЗагрузПапку(crdДоговор,RecordToInteger(Current),vПапка,if(Файл[Iter]="",ФайлКмнт[Iter],""),vКлюч,50);
 РасчетФайл;
 Message("Успешно загружено файлов "+Str(ret)+" из "+Str(LengthOfArray(Раб.Бюджет2005.Dir)));
 Return False;
end;

Func delФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Файл[Iter]="":
    if EnqOkCancel("Файл '"+Файл[Iter]+"' будет удален, вы уверены ?",mtWarning)=cmCancel: ^False; fi;
    Раб.Вспом.Файлы.Стереть(crdДоговор,RecordToInteger(Current),Файл[Iter]);
    РасчетФайл;
 fi;
 Return False;
end;

Func copyФайл_OnEnter(FieldName: String; Iter: Integer): logical;
 Раб.Вспом.Файлы.Копировать(crdДоговор,RecordToInteger(Current),"",0,"",Файл[Iter],"");
 Return False;
end;

Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?")=cmCancel: ^False; fi;
 fi;
 КонтрольМФ=0;
 тчнКол_=10;
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 Настр_(True);
 Страница=2;
 ВывестиСтраницу;
 Return False;
end;

Func КонтрольМФ_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
 ClearVariable(Buf);
 Buf[1]="Игнорировать";
 Buf[2]="Запрашивать";
 Buf[3]="Проверять";
 n=Alternate("Выберите режим проверки",Buf,-1,КонтрольМФ+2,12);
 if not n=0:
    КонтрольМФ=n-2;
 fi;
 Return False;
end;

Func fКонтрольЛБО_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Отключить";
 Buf[2]="Мягкий контроль (предупреждать)";
 Buf[3]="Жесткий контроль (сообщение об ошибке)";
 n=Alternate("Выберите режим контроля",Buf,-1,if(fКонтрольЛБО=1:3|fКонтрольЛБО=-1:1|True:2),12);
 if not n=0:
    fКонтрольЛБО=if(n=1:-1|n=2:0|n=3:1);
 fi;
 Return False;
end;

Func fСокрКонтрольГК_OnEnter(FieldName: String; Iter: Integer): logical;
 fСокрКонтрольГК=not fСокрКонтрольГК;
 Return False;
end;

Proc extBtnUsrName_OnExit(FieldName: String; Iter: Integer);
 Оформление;
end;

Func extBtnUsrOnClick_OnEnter(FieldName: String; Iter: Integer): logical;
 if extBtnUsrName="":
    Message("Задайте имя кнопки",mtError);
    Template.Field="extBtnUsrName";
    ^False;
 fi;
 Return True;
end;

Func extBtnUsrOnClick_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    if not ProcExists(Value): Message("Процедура '"+Value+"' не найдена",mtError); ^False; fi;
 fi;
 Return True;
end;

Func СканГЭК2_OnEnter(FieldName: String; Iter: Integer): logical;
var Bln:S;
 --if Рег and FieldName="СканГЭК2": ^False; fi;
 if FieldName="СканГЭК2" and not Рег: EditorApply; fi;
 if ГЭК2Crd[Iter]="РПО_СКАН_ДОК" or FieldName="СканГЭК2":
    bln="Раб.Вспом.Скан_Док";
    if ModalMode and isBlankOpen(bln): Message("Бланк уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
    if isBlankOpen(bln): Close(bln); fi;
    ExecuteProc(bln+".Вызвать",if(FieldName="СканГЭК2",False,Рег),ToDay,crdДоговор,Current,НаимДок.Наим,НомерДок,ДатаДок,"",True,if(FieldName="СканГЭК2",nil,ГЭК2Rec[Iter]));
    РасчетГЭК2;
   else
    Раб.Вспом.Сканер.Вызвать("Сканирование",ГЭК2Crd[Iter],RecordToInteger(ГЭК2Rec[Iter]),"",True,False);
 fi;
 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=Раб.Вспом.Сканер.ЧитатьГЭК(ГЭК2Crd[Iter],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;

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

Proc СоздатьОбеспеч_onClick(Row: Integer; Col: Integer; Double: Logical);
var OWA,OA,n,i,ii:i;
var bln,Mask,Призн_,tmp:s;
var Rec: Record;
-- if not УпрОбеспеч=0 or not ДС_УпрОбеспеч=0: Exit; fi;
 if Признак="":
    Message("Выполните сохранение карточки",mtWarning);
 fi;
 if Double:
    Rec=nil;
    ClearVariable(Buf);
    Buf[1]="Денежные средства. Привязать контракт к карточке обеспечения (по номеру платежного поручения)";
    Buf[2]="Денежные средства. Привязать контракт к карточке обеспечения (по номеру извещения, контрагенту, сумме)";
    Buf[3]="Создать новую карточку обеспечения (Банковская гарантия или Денежные средства)";
    i=Alternate("Выберите режим",Buf,-1,1,12);
    if i=1:
       Rec=Раб.Поиск.ВыборИзКартотеки2("Выбор платежного поручения...","ПРИХПЛПОРУЧЕНИЯ","НомерБум|ДатаДок:D|Сумма:N|РеквКонтр:R|НазначПлат|НазначПлат|НазначПлат","Номер плат. поруч.|Дата плат. поруч.|Сумма плат. поруч.|Плательщик|Назначение платежа|Номер извещения|Номер контракт"," |1.1.100|"+Str(СумОб,2)+"|"+RecordToString(Контр)+"| |"+if(НомИзв=""," ",НомИзв)+"|"+НомерДок,"РПО_Проводить");
       if not Rec=nil:
          OWA=OpenWorkArea("ПРИХПЛПОРУЧЕНИЯ","","UKey="+RecordToString(Rec));
          Try
           OA=OpenArray(OWA,1,"РПО_Расшифр","");
           ii=Records(OA);
           for i=1..ii do
            Призн_=GetFieldS(OA,i,"Призн");
            Призн_=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Призн_," ","СВР.ОИО.*","");
            Break;
           od;
          Finally
           CloseWorkArea(OWA);
          end;
          if Призн_="": Message("Выбранное платежное поручение не содержит информацию о обеспечении (признак СВР.ОИО.*)",mtError); Exit; fi;
          Rec=SignToRecord(Призн_);
          if Rec=nil: Message("Не возможно преобразовать признак обеспечения '"+Призн_+"' в запись",mtError); Exit; fi;
          OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","","UKey="+RecordToString(Rec));
          Try
           tmp=GetFieldS(OWA,1,"Обяз_Призн");
           if not tmp="":
              Message("Выбранная карточка обеспечения уже содержит информацию о контракте "+GetFieldS(OWA,1,"Обяз_Наим")+" №"+GetFieldS(OWA,1,"Обяз_Ном")+" от "+DateToString(GetFieldD(OWA,1,"Обяз_Дат")),mtError);
              Exit;
           fi;
          Finally
           CloseWorkArea(OWA);
          end;
       fi;
      |i=2:
       Rec=Раб.Поиск.ВыборИзКартотеки2("Выбор карточки обеспечения...","РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","НомИзв|Сум:N|Принципал_Рекв:R|Содерж|Кмнт","Номер извещения|Сумма обеспечения|Плательщик|Содержание|Комментарий",if(НомИзв=""," ",НомИзв)+"|"+Str(СумОб,2)+"|"+RecordToString(Контр)+"| | |","");
       if not Rec=nil:
          OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","","UKey="+RecordToString(Rec));
          Try
           tmp=GetFieldS(OWA,1,"Обяз_Призн");
           if not tmp="":
              Message("Выбранная карточка обеспечения уже содержит информацию о контракте "+GetFieldS(OWA,1,"Обяз_Наим")+" №"+GetFieldS(OWA,1,"Обяз_Ном")+" от "+DateToString(GetFieldD(OWA,1,"Обяз_Дат")),mtError);
              Exit;
           fi;
          Finally
           CloseWorkArea(OWA);
          end;
       fi;
      |i=3:
       if EnqOkCancel("Создать карточку обеспечения исполнения обязательства ?")=cmOk:
          ClearVariable(Buf);
          Buf[1]="Денежные средства";
          Buf[2]="Банковская гарантия";
          Buf[3]="Другое";
          n=Alternate("Выберите вид обеспечения исполнения обязательства",Buf,-1,1,12);
          if n=0: Exit; fi;
          bln="Инфо.Обесп_Испол_Обяз";
          PutVariableS(bln+".inВид",if(n=1:"ДС"|n=2:"БГ"|true:""));
          PutVariableS(bln+".inОбяз_Призн","ДОГОВОР."+Признак);
          PutVariableS(bln+".inОбяз_Наим",НаимДок.Наим);
          PutVariableS(bln+".inОбяз_Ном",НомерДок);
          PutVariableD(bln+".inОбяз_Дат",ДатаДок);
          PutVariableS(bln+".inНомИзв",НомИзв);
          PutVariableR(bln+".inБенефициар_Рекв",Учр);
          PutVariableR(bln+".inПринципал_Рекв",Контр);
          Mask=Раб.Бюджет2005.СписокСправ(if(n=1,"*.3.304.01.*","ЗАБ.10!"),0,GetVariableS(bln+".ИсклПризн"));
          if not Mask="":
             if Раб.Бюджет2005.MatchMask(Общ_Призн1,Mask):
                Призн_=Общ_Призн1;
             fi;
             if Раб.Бюджет2005.MatchMask(Общ_Призн2,Mask):
                Призн_=Призн_+" "+Общ_Призн2;
             fi;
          fi;
          PutVariableS(bln+".inПризн",Trim(Призн_));
          OpenBlank(bln,True,nil);
          РасчетОбеспеч;
       fi;
    fi;
    if not Rec=nil:
       OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","","UKey="+RecordToString(Rec));
       Try
        tmp=GetFieldS(OWA,1,"Обяз_Призн");
        if not tmp="":
           Message("Выбранная карточка обеспечения уже содержит информацию о контракте "+GetFieldS(OWA,1,"Обяз_Наим")+" №"+GetFieldS(OWA,1,"Обяз_Ном")+" от "+DateToString(GetFieldD(OWA,1,"Обяз_Дат")),mtError);
           Exit;
        fi;
        BeginChanging(OWA);
        Try
         n=PutFieldS(OWA,1,"Обяз_Призн","ДОГОВОР."+Признак);
         n=PutFieldS(OWA,1,"Обяз_Наим",НаимДок.Наим);
         n=PutFieldS(OWA,1,"Обяз_Ном",НомерДок);
         n=PutFieldD(OWA,1,"Обяз_Дат",ДатаДок);
         EndChanging(OWA);
        Except
         CancelChanging(OWA);
         Raise;
        end;
       Finally
        CloseWorkArea(OWA);
       end;
       РасчетОбеспеч;
       for i=1..ДС_УпрОбеспеч do
        if Rec=ДС_UKeyОбеспеч[i]:
           Message("Привязка карточки обеспечения к контракту выполнена успешно");
           Exit;
        fi;
       od;
       Message("Возможно, что-то пошло, не так");
    fi;
 fi;
end;

Proc Обеспеч_onClick(Row: Integer; Col: Integer; Double: Logical);
var Field:S;
var Iter:I;
 if Double:
    Field=AsString(Template.Field);
    Iter=AsInteger(Template.Frame);
    Refresh;
    if Field="Сум1Обеспеч" or Field="Дат1Обеспеч": 
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"+ЗАБ.10!","ДОГОВОР."+Признак+"|"+ПризнОбеспеч[Iter]);
      |Field="Сум2Обеспеч" or Field="Дат2Обеспеч": 
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"-ЗАБ.10!","ДОГОВОР."+Признак+"|"+ПризнОбеспеч[Iter]);
      |Field="ОстОбеспеч": 
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"ЗАБ.10!","ДОГОВОР."+Признак+"|"+ПризнОбеспеч[Iter]);
      |Field="ДС_Сум1Обеспеч" or Field="ДС_Дат1Обеспеч" or Field="ДС_ПП1Обеспеч":
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"*.3.304.01.730","ДОГОВОР."+Признак+"|"+ДС_ПризнОбеспеч[Iter]);
      |Field="ДС_Сум2Обеспеч" or Field="ДС_Дат2Обеспеч" or Field="ДС_ПП2Обеспеч":
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"*.3.304.01.830|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*)","ДОГОВОР."+Признак+"|"+ДС_ПризнОбеспеч[Iter]);
      |Field="ДС_ОстОбеспеч":
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*)","ДОГОВОР."+Признак+"|"+ДС_ПризнОбеспеч[Iter]);
      |True: 
       if IsBlankOpen("ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ"):
          Message("Карточка обеспечение исполнения обязательств уже открыта, закройте текущий бланк");
         else
          if Field="пп" and AsString(Template.Name)="S37":
             Field="ДС_"+Field;
          fi;
          OpenBlank("ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ",True,if(Match(Field,"ДС_*"),ДС_UKeyОбеспеч[Iter],UKeyОбеспеч[Iter]));
       fi;
    fi;
 fi;
end;

Proc ОтчОбеспеч_OnClick(Row: Integer; Col: Integer; Double: Logical);
var OWA,n,nn:i;
var Призн_,voc,bln:S;
 if Признак="":
    Message("Выполните сохранение карточки",mtWarning);
   else
    Призн_="";
    OWA=OpenWorkArea("РПО_ОБЕСП_ИСПОЛ_ОБЯЗ","","(Вид='ДС' or Вид='ДС.ОИО' or Вид='БГ') and Обяз_Призн='ДОГОВОР."+Признак+"'");
    Try
     nn=Records(OWA);
     for n=1..nn do
      voc=GetFieldS(OWA,n,"Вид");
      voc=if(voc="ДС" or voc="ДС.ОИО":"СВР."|voc="БГ":"ЗАБ10."|True:"");
      Призн_=Раб.Бюджет2005.Объединить(Призн_,voc+GetFieldS(OWA,n,"Признак"),"|");
     od;
    Finally
     CloseWorkArea(OWA);
    end;
    Призн_=Раб.Бюджет2005.Объединить(Призн_,"ДОГОВОР."+Признак,"|");
    Refresh;
    if AsString(Template.Field)="ОтчОбеспеч":
       bln="ОТЧЕТЫ.СПРАВКИ.ОБЕСП_ИСПОЛ_ОБЯЗ";
       PutVariableD(bln+".ДК",ToDay+1);
       PutVariableS(bln+".ПризнДоп",Призн_);
       PutVariableL(bln+".Run",True);
       OpenBlank(bln,True);
      else
       Report('"'+PlanVar("Общие")+'\Отчеты\Служебные отчеты.lst"."001"',1.1.100,ToDay+1,"ЗАБ.10!|*.3.304.01.*|(*.3.ЗАБ.00.830/*.3.ЗАБ.КР.*)",Призн_);
    fi;
 fi;
end;

Proc ВозвратОбеспеч_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter,n:I;
var bln:s;
var Flag:L;
 РасчетОбеспеч;
 ClearVariable(Buf);
 ClearVariable(BufI);
 for Iter=1..УпрОбеспеч do
  if Round(ОстОбеспеч[Iter],2)>0 and not UKeyОбеспеч[Iter]=nil:
     n=n+1;
     Buf[n]=ВидОбеспеч[Iter]+" №"+НомОбеспеч[Iter]+" от "+DateToString(ДатОбеспеч[Iter])+" ="+Format("%.2N",ОстОбеспеч[Iter]);
     BufI[n]=Iter;
  fi;
 od;
 for Iter=1..ДС_УпрОбеспеч do
  if Round(ДС_ОстОбеспеч[Iter],2)>0 and not ДС_UKeyОбеспеч[Iter]=nil:
     n=n+1;
     Buf[n]=ДС_ПП1Обеспеч[Iter]+" ="+Format("%.2N",ДС_ОстОбеспеч[Iter]);
     BufI[n]=-Iter;
  fi;
 od;
 if n=0:
    Message("Нет данных для возврата (снятия с учета)");
    Exit;
 fi;
 bln="ИНФО.ОБЕСП_ИСПОЛ_ОБЯЗ";
 n=Alternate("Выберите документ для возврата/снятия с учета",Buf,-1,1,12);
 if not n=0:
    Iter=BufI[n];
    if Iter>0:
       PutVariableL(bln+".Run",True);
       PutVariableS(bln+".Call","btnУчет_OnClick");
       PutVariableS(bln+".CallParam","btnСписать");
       OpenBlank(bln,True,UKeyОбеспеч[Iter]);
       Flag=True;
      |Iter<0:
       Iter=Abs(Iter);
       PutVariableL(bln+".Run",True);
       PutVariableS(bln+".Call","btnВозврат_OnClick");
       PutVariableS(bln+".CallParam","btnВозврат");
       OpenBlank(bln,True,ДС_UKeyОбеспеч[Iter]);
       Flag=True;
      |True: Exit;
    fi;
    if not Flag:
       Message("Данных для возврата денежных средства (снятия с учета банковской гарантии) не найдено");
      else
       РасчетОбеспеч;
    fi;
 fi;
end;

Proc СоздатьПП1093_OnClick(Row: Integer; Col: Integer; Double: Logical);
var OWA,n,НомИзм_:I;
var Rec: Record;
 if Double:
    OWA=OpenWorkArea("РПО_ДОГОВОР_ОТЧ_ИСПОЛ","","Договор="+RecordToString(Current));
    Try
     НомИзм_=if(Records(OWA)=0,-99,-1);
     BeginChanging(OWA);
     Try
      n=InsertRecord(OWA);
      Rec=GetRecordKey(OWA,n);
      n=PutFieldD(OWA,n,"ДАТАОТЧ",ToDay);
      n=PutFieldI(OWA,n,"НОМИЗМ",НомИзм_);
      n=PutFieldR(OWA,n,"ДОГОВОР",Current);
      n=PutFieldS(OWA,n,"РПО_КЛЮЧ",РПО_КЛЮЧ);
      n=PutFieldS(OWA,n,"ДОЛЖНРУК",ДолжнРук);
      n=PutFieldS(OWA,n,"ФИОРУК",ФИОРук);
      n=PutFieldD(OWA,n,"ДАТАРУК",ToDay);
      n=PutFieldD(OWA,n,"Р3_1_3",ДатаН);
      n=PutFieldD(OWA,n,"Р3_2_3",Срок);
      n=PutFieldN(OWA,n,"Р3_3_3",СумДок);
      n=PutFieldN(OWA,n,"Р3_51_3",СумАв);
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
    Finally
     CloseWorkArea(OWA);
    end;
    OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ОТЧЕТ_ИСПОЛ_ГК",True,Rec);
    Расчет1093;
 fi;
end;

Proc ОбновПП1093_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if Double:
    Расчет1093;
 fi;
end;

Proc ПросмотрПП1093_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if Double:
    OpenCardFile("РПО_ДОГОВОР_ОТЧ_ИСПОЛ","ДОГОВОР="+RecordToString(Current));
 fi;
end;

Proc ПП1093_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if Double:
    OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ОТЧЕТ_ИСПОЛ_ГК",True,ПП1093_Rec[AsInteger(Template.Frame)]);
    Расчет1093;
 fi;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc rbФЗ_OnChange(Sender: String);
 РазмещЗаказ="";
 Оформление;
end;

Proc cbРег_OnChange(Sender: String);
var hСтраница:I;
var Err,setБО:L;
 if SkipEvent: Exit; fi;
 Err=False;
 setБО=False;
 hСтраница=Страница;
 if Рег=False:
    if not Признак_Ref.Договор=Current and RecordExists(crdДоговор_Признак,Признак_Ref) then
       Message("Данная редакция договора изменена и не может быть исключена из обработки",mtError);
       EditorCancel;
      else
       if Страница=7: 
          Try
          РасчетСвязДок(""); 
          except
          end;
         else 
          Страница=7; 
          ВывестиСтраницу; 
       fi;
       if not УпрДок=0: Message("Признак документа (ДОГОВОР."+Признак+") используется в проводках"+Chr(13)+"Исключение (изменение) документа из обработки может привести к ошибке^MДля безопасного изменения сведений РЕКОМЕНДУЕТСЯ нажать на кнопку 'ИЗМЕНИТЬ'",mtWarning); fi;
       if БО.Рег or БО_Изм.Рег:
          Message("Обязательство зарегистровано в ФК (учетный номер "+БО.РегНомер+")^MИзменение данных, может привести к рассогласованию поданных сведений^MДля безопасного изменения сведений РЕКОМЕНДУЕТСЯ нажать на кнопку 'ИЗМЕНИТЬ'",mtWarning);
         |БО.ВБанк or БО_Изм.ВБанк:
          Message("Обязательство передано в ФК (дата выгрузки "+DateToString(БО.ДатаРейс)+")^MИзменение данных, может привести к рассогласованию поданных сведений^MДля безопасного изменения сведений РЕКОМЕНДУЕТСЯ нажать на кнопку 'ИЗМЕНИТЬ'",mtWarning);
       fi;
       if EnqOkCancel("Вы уверены, что хотите исключить документ из обработки ?",mtWarning)=cmCancel:
          EditorCancel;
          cbРег.State=Рег;
          Exit;
         else
          if УчетБО and not Рег:
             Рег=True; --вовзращаем заначени флага на случай если будет ошибка в функциях с БО
             cbРег.State=Рег;
             УчетБО=False;
             cbУчетБО.State=УчетБО; --здесь произойдет вызов cbУчетБО_OnChange(Sender: String);
             Рег=False;
             cbРег.State=Рег;
            else
             СведБО(False); --на всякий случай
          fi;
     fi;--if EnqOkCancel(Msg,mtWarning)=cmCancel:
    fi;--if not Признак_Ref.Договор=Current then
   else-- if Рег=False:
    if not Договор_Пре=nil and RecordExists(crdДоговор,Договор_Пре) then
       if not Договор_Пре.Рег then
          Message("Изменение к недействующей редакции не может быть принято к учету",mtError);
          Err=true;
         else
--          if Договор_Пре.Исполнен then Message("Договор исполнен и не может быть изменен",mtError); Err=true;
--            |Договор_Пре.Аннулирован then Message("Договор аннулирован и не может быть изменен",mtError); Err=true;
--          fi;
       fi;
    fi;
    if not Err then
       Рег=Проверить;
       Err=not Рег;
       if Err: СведБО(False); else setБО=УчетБО_ФК; fi; --на всякий случай
      else
       Рег=False;
    fi;
 fi;-- if Рег=False:
 cbРег.State=Рег;
 if not Err:
    MyEditorApply;
    if setБО or (Рег and Договор_Пре.УчетБО): УчетБО=True; cbУчетБО.State=УчетБО; fi;
 fi;
 Оформление;
 if not hСтраница=Страница and not Err:
    Страница=hСтраница;
    ВывестиСтраницу;
 fi;
end;

Proc cbИспол_OnChange(Sender: String);
 if Исполнен and ver=0: --снимаем старое исполнение
    Исполнен=False;
    cbИспол.State=Исполнен;
    if УчетБО:
       УчетБО=СведБО(True);
       Исполнен=not УчетБО;
       if УчетБО:
          Message("Внесение изменений в бюджетное обязательство успешно завершено");
          Страница=3;
          ВывестиСтраницу;
          Template.Field="БО_И";
       fi;
       cbИспол.State=Исполнен;
       if not AsLogical(cbУчетБО.State)=УчетБО:
          cbУчетБО.State=УчетБО;
       fi;
    fi;
    MyEditorApply;
    Оформление;
   else
    if Исполнен_ or (Рег and Аннулирован):
       НаОшибку("Для изменения статуса документа (ИСПОЛНЕН), выберите необходимое значение",mtWarning,3,"ТипИзм_",1);
      else
       if Рег:
          ExecuteProc("btnИзм_OnClick",Sender);
         else
          if ver=0:
             Message("Для изменения статуса документа на (ИСПОЛНЕН), вначале требуется принять документ к учету",mtWarning);
             Template.Object="cbРег";
            else
             ТипИзм=99;
             Исполнен=True;
             Аннулирован=False;
             cbИспол.State=Исполнен;
             if not AsLogical(cbАннул.State): cbАннул.State=Аннулирован_; fi;
          fi;
       fi;
    fi;
 fi;
end;

Proc cbАннул_OnChange(Sender: String);
 if Аннулирован and ver=0: --снимаем старое аннулирование
    Аннулирован=False;
    cbАннул.State=Аннулирован;
    if УчетБО:
       УчетБО=СведБО(True);
       Аннулирован=not УчетБО;
       if УчетБО:
          Message("Внесение изменений в бюджетное обязательство успешно завершено");
          Страница=3;
          ВывестиСтраницу;
          Template.Field="БО_А";
       fi;
       cbАннул.State=Аннулирован;
       if not AsLogical(cbУчетБО.State)=УчетБО:
          cbУчетБО.State=УчетБО;
       fi;
    fi;
    MyEditorApply;
    Оформление;
   else
    if Аннулирован_ or (Рег and Исполнен):
       НаОшибку("Для изменения статуса документа (АННУЛИРОВАН), выберите необходимое значение",mtWarning,3,"ТипИзм_",1);
      else
       if Рег:
          ExecuteProc("btnИзм_OnClick",Sender);
         else
          if ver=0:
             Message("Для изменения статуса документа на (АННУЛИРОВАН), вначале требуется принять документ к учету",mtWarning);
             Template.Object="cbРег";
            else
             ТипИзм=-99;
             Аннулирован=True;
             Исполнен=False;
             cbАннул.State=Аннулирован;
             if not AsLogical(cbИспол.State): cbИспол.State=Исполнен_; fi;
          fi;
       fi;
    fi;
 fi;
end;

Proc cbУчетБО_OnChange(Sender: String);
var i:i;
var req,КБК_:s;
var Д_:D;
 Try
  if УчетБО:
     УчетБО=False;
     УчетБО=СведБО(True);
     if УчетБО:
        Message("Бюджетное обязательство успешно создано");
        if not fКонтрольЛБО=-1:
           Раб.Вспом.ОстЛБО.ОчиститьВх;
           Раб.Вспом.ОстЛБО.ОчиститьВх2;
           Д_=if(БО.Рег:БО.РегДата|БО.ТипДок=1:БО.Изм_ДатаДок|True:БО.ДатаДок);
           for i=1..БО.Расшифр do
            if БО.Расшифр[i].Ист="1" and БО.Расшифр[i].ТипКБК="10":
               КБК_=SubStr(БО.Расшифр[i].КБК,1,3)+"."+SubStr(БО.Расшифр[i].КБК,4,4)+"."+SubStr(БО.Расшифр[i].КБК,8,7)+"."+SubStr(БО.Расшифр[i].КБК,15,3)+"."+SubStr(БО.Расшифр[i].КБК,18,3);
               Раб.Вспом.ОстЛБО.ДобавитьПБО(Д_+1,КБК_,БО.Расшифр[i].Призн,0);
               if not БО=nil:
                  Раб.Вспом.ОстЛБО.ДобавитьПБО2(Д_+1,"БО."+БО.Признак,КБК_,БО.Расшифр[i].Призн,0);
               fi;
            fi;
           od;
           i=Раб.Вспом.ОстЛБО.Проверить;
           if fКонтрольЛБО=1 and i=-1:
              УчетБО=not СведБО(False);
             |not i=1:
              if EnqOkCancel("Игнорировать данное предупреждение ?",mtWarning)=cmCancel:
                 УчетБО=not СведБО(False);
              fi;
           fi;
        fi;
        if Договор_Пре=nil or Abs(ТипИзм)=4:
           Страница=4;
           ВывестиСтраницу;
           Template.Field="БО_";
           Template.Frame=1;
          else
           Страница=3;
           ВывестиСтраницу;
           Template.Field="БО_Изм_";
        fi;
     fi;
     else
      УчетБО=True;
      req="";
      if (БО.Рег or БО_Изм.Рег) and AsString(Template.Object)="cbУчетБО":
          req="Обязательство зарегистровано в ФК (учетный номер "+БО.РегНомер+")^MИзменение данных, может привести к рассогласованию поданных сведений^MДля безопасного изменения сведений РЕКОМЕНДУЕТСЯ нажать на кнопку 'ИЗМЕНИТЬ'^MИгнорировать данное предупреждение ?";
        |(БО.ВБанк or БО_Изм.ВБанк) and AsString(Template.Object)="cbУчетБО":
          req="Обязательство передано в ФК (дата выгрузки "+DateToString(БО.ДатаРейс)+")^MИзменение данных, может привести к рассогласованию поданных сведений^MДля безопасного изменения сведений РЕКОМЕНДУЕТСЯ нажать на кнопку 'ИЗМЕНИТЬ'^MИгнорировать данное предупреждение ?";
      fi;
      if not req="":
         if EnqOkCancel(req,mtWarning)=cmCancel: Template.Object="btnИзм"; Exit; fi;
      fi;
      УчетБО=not СведБО(False);
  fi;
 Finally
  cbУчетБО.State=УчетБО;
 end;
 MyEditorApply;
 Оформление;
end;

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

Proc cbУчетРеестрОФК_OnChange(Sender: String);
 if Учет_Реестр_ОФК:
    if Год1=ТекГод: СумГод1=СумТек; 
      |Год2=ТекГод: СумГод2=СумТек;
      |Год3=ТекГод: СумГод3=СумТек;
      |Год4=ТекГод: СумГод4=СумТек;
      |Год5=ТекГод: СумГод5=СумТек;
    fi;
   else
    if Год1=ТекГод: СумТек=СумГод1;
      |Год2=ТекГод: СумТек=СумГод2;
      |Год3=ТекГод: СумТек=СумГод3;
      |Год4=ТекГод: СумТек=СумГод4;
      |Год5=ТекГод: СумТек=СумГод5;
    fi;
 fi;
 Оформление;
 if Страница=4: РасчетКБК; fi;
end;

Proc cbРегРеестрОФК_OnChange(Sender: String);
 if Рег and Рег_Реестр_ОФК:
    Рег_Реестр_ОФК=ПроверитьРегРеестрОФК;
 fi;
 cbРегРеестрОФК.State=Рег_Реестр_ОФК;
 СведБО(УчетБО);
 MyEditorApply;
 Оформление;
end;

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

Proc btnСохранить_OnClick(Sender: String);
 MyEditorApply;
end;

Proc btnОтменить_OnClick(Sender: String);
 EditorCancel;
end;

Proc btnИзм_OnClick(Sender: String);
var n:I;
var err1,err2,Папка_,Ключ_,val,cmd2,cmd3:S;
var Old,New: Record;
var forceRereg:L;
 forceRereg = False;
 if not Рег:  Message('Текущий документ должен быть зарегистрован',mtError); Template.Object="cbРег"; Exit; fi;
-- if Исполнен and not Sender="cbИспол": Message('Исполненный документ не может быть изменен',mtError); Template.Object="cbИспол"; Exit; fi;
-- if Аннулирован and not Sender="cbАннул": Message('Аннулированный документ не может быть изменен',mtError); Template.Object="cbАннул"; Exit; fi;
 if not ЕстьИзменения=nil: Message('Документ уже изменялся, для внесения измений откройте действующий экземпляр документ',mtError);  Template.Object="btnИзменения"; Exit; fi;
 if НеДейств: Message('Документ имеет статус "недействительный" изменение невозможно',mtError); Exit; fi;
 if not УчетБО:
    if EnqOkCancel("Вы уверены, что документ не должен учитываться как бюджетное обязательство ?",mtWarning)=cmCancel: Template.Object="cbУчетБО"; Exit; fi;
   else
    if not RecordExists("РПО_СВЕД_БО", БО):--БО = nil:
       if EnqOkCancel("Бюджетное обязательство не найдено, возможна только перерегистрация."+chr(13)+"Продолжить ?",mtWarning) = cmOk:
          forceRereg = True;
         else
          Template.Object="cbУчетБО"; Exit;
       fi;
    fi;
 fi;
 if not УчетБО=БО.Учитывать and not forceRereg:
    Message("Обнаружены расхождения статуса бюджетного обязательства и текущего документа (переустановите флаг 'Учитывать как обязательства (бюджетное)')",mtError);
    Template.Object="cbУчетБО"; 
    Exit; 
 fi;
 if Признак_Ref=nil:
    Признак_Ref=nil;
    MyEditorApply;  --нуно создание признака
   else
    if not CurrentState=CrdusUnmodified: MyEditorApply; fi;
 fi;
 if Признак_Ref=nil: Message("Ошибка обновления ссылки на признак документа",mtError); Exit; fi;
 if forceRereg:
    n=-4;
   |Sender="cbИспол":
    n=99;
   |Sender="cbАннул":
    n=-99;
   |True:
    ClearVariable(Buf);
    Buf[1]="Изменение договора (контракта) --например, дополнительное соглашение";
    Buf[2]="Исправление сведений --например, исправление очепятки";
    Buf[3]="Внутреннее изменение --например, изменение аналитики, счетов учета";
    Buf[4]="Перерегистрация на очередной год (сведения о БО ранее ПОДАВАЛИСЬ в ФК (учетный номер БО получен))";
    Buf[5]="Перерегистрация на очередной год (сведения о БО ранее НЕ ПОДАВАЛИСЬ в ФК))";
    Buf[6]="Исполнение";
    Buf[7]="Расторжение (аннулирование)";
    Buf[8]="Аннулирование БО";
    n=Alternate("Тип изменения",Buf,-1,if(ТипИзм=-4:5|ТипИзм=99:6|ТипИзм=-99:7|ТипИзм=5:8|True:ТипИзм),12);
    if n=0: Exit;
      |n=5: n=-4;
      |n=6: n=99;
      |n=7: n=-99;
      |n=8: n=5;
    fi;
 fi;
 if n=99:
    if not ВозможностьИспол: Exit; fi;
 fi;
 err1=""; err2="";
 Old=Current;
 ShowProgress(5,"Перенос данных документа...");
 Try
  ProgressPos(1);
  cmd2="Исполнен:L:"+if(n=99,"True","False")+"|Аннулирован:L:"+if(n=-99,"True","False");
  if (n=99 or n=-99) and ver=0:
     if not ДолжнРук2="": cmd2=cmd2+"|ДолжнРук:S:"+ДолжнРук2; fi;
     if not ФИОРук2="": cmd2=cmd2+"|ФИОРук:S:"+ФИОРук2; fi;
     if not ДатаСвед2=1.1.100: cmd2=cmd2+"|ДатаСвед:D:"+DateToString(ДатаСвед2); fi;
     if not ДатаРук2=1.1.100: cmd2=cmd2+"|ДатаРук:D:"+DateToString(ДатаРук2); fi;
  fi;
  if n=-99 and not ТипИзм=-99:
     cmd3="НаимИзм:R:{0}|НомерИзм:S: |ДатаДИзм:D:1.1.100";
  fi;
  New=Раб.Договор.Договор_Копировать(Old,"Недейств:L:True|Рег:L:False|УчетБО:L:False|Договор_Пре:R:"+RecordToString(Old)+"|ТипИзм:I:"+Str(n)+"|ТипСвед:I:1|GUID:S:NEW|БО:R:{0}|БО_ИЗМ:R:{0}|ClosedModFob:L:False|ver:I:1|НомРейс:I:0|ДатаРейс:D:1.1.100|НомРейс2:I:0|ДатаРейс2:D:1.1.100",cmd2,cmd3);
  if not New=nil:
     val=ПолучПапкуКлючГЭК("|");
     Папка_=ExtractWord(1,val,"|");
     Ключ_=ExtractWord(2,val,"|");
     Try
      ProgressPos(2);
      n=Раб.Вспом.Сканер.ЧитатьГЭК(crdДоговор,RecordToInteger(Old),"jpg",true);
      if n>0:
         ShowProgress(5,"Перенос графической электронной копии документа...");
         ProgressPos(2);
         CopyArray(Раб.Вспом.Сканер.ФайлГЭК,Раб.Вспом.Сканер.Img);
        Try
         Раб.Вспом.Сканер.КолЛист=n;
         ProgressPos(3);
         Раб.Вспом.Сканер.extПапка=Папка_;
         Раб.Вспом.Сканер.vКлюч=Ключ_;
         Раб.Вспом.Сканер.СохранГЭК(crdДоговор,RecordToInteger(New),"jpg");
        Finally
         ClearVariable(Раб.Вспом.Сканер.Img); --нуно очистить список файлов, иначе будут удалены при заходе в бланк
         Раб.Вспом.Сканер.КолЛист=1;
        end;
      fi;
     Except
      Err1=ErrorMessage;
     end;
     ProgressPos(4);
     --
     ShowProgress(5,"Перенос прикрепленных файлов...");
     ProgressPos(5);
     Try
      Раб.Вспом.Файлы.Копировать(crdДоговор,RecordToInteger(Old),crdДоговор,RecordToInteger(New),Папка_,"*",Ключ_);
     Except
      Err2=ErrorMessage;
     end;
  fi;
 Finally
  CloseProgress;
  if not Err1="":
     Message("К сожалению, при переносе графической электронной копии документа, возникли непредвиденные трудности",mtWarning);
     Trace(Err1);
  fi;
  if not Err2="":
     Message("К сожалению, при переносе прикрепленных файлов, возникли непредвиденные трудности",mtWarning);
     Trace(Err2);
  fi;
  if not New=nil: 
     Страница=3;
     ВывестиСтраницу;
     Template.Field="ДатаИзм";
     New=Current(New);
  fi;
 end;
end;

Proc btnИморт_OnClick(Sender: String);
var OWA,OA,OWA2,n,nn,i,ii,z,zz:i;
var ВД_,КБК_,Призн_,ДопКл_,КВОЗ_,ОКПД_,Предм_,ЕдИзм_,Key_:S;
var Цена_,Сум_,Кол_:N;
var Rec: Record;
 if not Договор_Пре=nil: Message("Данный экземпляр документа не является первичным, импорт невозможен",mtError); Exit; fi;
 ClearVariable(Buf);
 Buf[1]="Импорт из принимаемых обязательств (заявки на закупку)";
 n=Alternate("Выберите источник импорта",Buf,-1,1,12);
 if n=0: Exit; fi;
 if EnqOkCancel("Внимание! Текущие данные буду утеряны. Вы уверены ?",mtWarning)=cmCancel: Exit; fi;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор заявки","РПО_ЗАЯВКА_ЗАКУП","НомерДок|ДатаДок:D|ВнутрНомерДок","Номер заявки|Дата заявки|Внутренний номер заявки","Рег and not НеДейств and Справ='ЗК'");
 if Rec=nil: Exit; fi;
 EditorApply;
 OWA=OpenWorkArea("РПО_ЗАЯВКА_ЗАКУП","","UKey="+RecordToString(Rec));
 Try
  ФЗ=GetFieldI(OWA,1,"ФЗ");
  ИКЗ=GetFieldS(OWA,1,"ИКЗ");
  Учр=GetFieldR(OWA,1,"Учр");
  Учр_Банк=Раб.Бюджет2005.БанкСчет(Учр,False);
  if not Учр_Банк_Свед.Контрагент=Учр:
     Учр_Банк_Свед=nil;
  fi;
  Общ_Призн0="ЗК."+GetFieldS(OWA,1,"Признак");
  Общ_Призн1=GetFieldS(OWA,1,"Общ_Призн1");
  if Настр.Общ_Справ1="" or not Match(Общ_Призн1,Настр.Общ_Справ1):
     Общ_Призн1="";
  fi;
  Общ_Призн2=GetFieldS(OWA,1,"Общ_Призн2");
  if Настр.Общ_Справ2="" or not Match(Общ_Призн2,Настр.Общ_Справ2):
     Общ_Призн2="";
  fi;
  ДолжнРук=Учр.ДолжнРук;
  ФИОРук=Учр.ФИОРук;
  Секрет=GetFieldI(OWA,1,"Секрет");
  СумДок=GetFieldN(OWA,1,"СумДок");
  ОКВ=GetFieldS(OWA,1,"ОКВ");
  КурсВал=GetFieldN(OWA,1,"КурсВал");
  СумГод1 =GetFieldN(OWA,1,"СумГод1");
  СумГод2 =GetFieldN(OWA,1,"СумГод2");
  СумГод3 =GetFieldN(OWA,1,"СумГод3");
  СумГод4 =GetFieldN(OWA,1,"СумГод4");
  СумГод5 =GetFieldN(OWA,1,"СумГод5");
  СумГод6 =GetFieldN(OWA,1,"СумГод6");
  СумГод7 =GetFieldN(OWA,1,"СумГод7");
  СумГод8 =GetFieldN(OWA,1,"СумГод8");
  СумГод9 =GetFieldN(OWA,1,"СумГод9");
  СумГод10=GetFieldN(OWA,1,"СумГод10");
  Год1 =GetFieldS(OWA,1,"Год1");
  Год2 =GetFieldS(OWA,1,"Год2");
  Год3 =GetFieldS(OWA,1,"Год3");
  Год4 =GetFieldS(OWA,1,"Год4");
  Год5 =GetFieldS(OWA,1,"Год5");
  Год6 =GetFieldS(OWA,1,"Год6");
  Год7 =GetFieldS(OWA,1,"Год7");
  Год8 =GetFieldS(OWA,1,"Год8");
  Год9 =GetFieldS(OWA,1,"Год9");
  Год10=GetFieldS(OWA,1,"Год10");
  СумОб=GetFieldN(OWA,1,"СумОбКт");
  ПроцАв=GetFieldN(OWA,1,"ПроцАв");
  СумАв=GetFieldN(OWA,1,"СумАв");
  Содерж=GetFieldS(OWA,1,"Содерж");
  Срок=GetFieldD(OWA,1,"Срок");
  Пер=GetFieldS(OWA,1,"Пер");
  РазмещЗаказ=GetFieldS(OWA,1,"РазмещЗаказ");
  if not Length(РазмещЗаказ)=5:
     РазмещЗаказ=Раб.Договор.СОП2СРЗ(РазмещЗаказ,"СРЗ");
     if Секрет>0 and РазмещЗаказ="20000":
        РазмещЗаказ="";
     fi;
  fi;
  НомИзв=GetFieldS(OWA,1,"НомИзв");
  OA=OpenArray(OWA,1,"Расшифр","ВД;КБК;ПРИЗН","not (Сум1=0 and Сум2=0 and Сум3=0 and Сум4=0 and Сум5=0 and Сум6=0 and Сум7=0 and Сум8=0 and Сум9=0 and Сум10=0)");
  ii=Records(OA);
  --КБК
  ClearVariable(Buf);
  zz=0;
  OWA2=OpenWorkArea(crdДоговор_КБК,"","Договор="+RecordToString(Current));
  Try
   nn=Records(OWA2);
   BeginChanging(OWA2);
   Try
    for i=1..ii do
     ВД_=GetFieldS(OA,i,"ВД");
     КБК_=GetFieldS(OA,i,"КБК");
     Призн_=GetFieldS(OA,i,"Призн");
     ДопКл_=GetFieldS(OA,i,"ДопКл");
     Key_=ВД_+"#"+КБК_+"#"+ДопКл_+"#"+Призн_;
     z=SearchInArray(Buf,Key_,True);
     if z=-1:
        z=InsertInArraySort(Buf,Key_);
        zz=zz+1;
        if zz>nn:
           z=InsertRecord(OWA2);
           nn=nn+1;
        fi;
        z=PutFieldS(OWA2,z,"ВД",ВД_);
        z=PutFieldS(OWA2,z,"КБК0",КБК_);
        z=PutFieldS(OWA2,z,"КБК",КБК_);
        z=PutFieldS(OWA2,z,"ДопКл",ДопКл_);
        z=PutFieldS(OWA2,z,"Призн",Призн_);
        z=PutFieldR(OWA2,z,"Договор",Current);
        z=PutFieldN(OWA2,z,"СумГод1",GetFieldN(OA,i,"Сум1"));
        z=PutFieldN(OWA2,z,"СумГод2",GetFieldN(OA,i,"Сум2"));
        z=PutFieldN(OWA2,z,"СумГод3",GetFieldN(OA,i,"Сум3"));
        z=PutFieldN(OWA2,z,"СумГод4",GetFieldN(OA,i,"Сум4"));
        z=PutFieldN(OWA2,z,"СумГод5",GetFieldN(OA,i,"Сум5"));
        z=PutFieldN(OWA2,z,"СумГод6",GetFieldN(OA,i,"Сум6"));
        z=PutFieldN(OWA2,z,"СумГод7",GetFieldN(OA,i,"Сум7"));
        z=PutFieldN(OWA2,z,"СумГод8",GetFieldN(OA,i,"Сум8"));
        z=PutFieldN(OWA2,z,"СумГод9",GetFieldN(OA,i,"Сум10"));
       else
        z=PutFieldN(OWA2,z,"СумГод1",GetFieldN(OWA2,z,"СумГод1")+GetFieldN(OA,i,"Сум1"));
        z=PutFieldN(OWA2,z,"СумГод2",GetFieldN(OWA2,z,"СумГод2")+GetFieldN(OA,i,"Сум2"));
        z=PutFieldN(OWA2,z,"СумГод3",GetFieldN(OWA2,z,"СумГод3")+GetFieldN(OA,i,"Сум3"));
        z=PutFieldN(OWA2,z,"СумГод4",GetFieldN(OWA2,z,"СумГод4")+GetFieldN(OA,i,"Сум4"));
        z=PutFieldN(OWA2,z,"СумГод5",GetFieldN(OWA2,z,"СумГод5")+GetFieldN(OA,i,"Сум5"));
        z=PutFieldN(OWA2,z,"СумГод6",GetFieldN(OWA2,z,"СумГод6")+GetFieldN(OA,i,"Сум6"));
        z=PutFieldN(OWA2,z,"СумГод7",GetFieldN(OWA2,z,"СумГод7")+GetFieldN(OA,i,"Сум7"));
        z=PutFieldN(OWA2,z,"СумГод8",GetFieldN(OWA2,z,"СумГод8")+GetFieldN(OA,i,"Сум8"));
        z=PutFieldN(OWA2,z,"СумГод9",GetFieldN(OWA2,z,"СумГод9")+GetFieldN(OA,i,"Сум10"));
     fi;
    od;
    for z=1..(nn-zz) do
     DeleteRecord(OWA2,nn-(z-1));
    od;
    for z=1..zz do
     z=PutFieldI(OWA2,z,"НП",z);
    od;
    EndChanging(OWA2);
   Except
    CancelChanging(OWA2);
    Raise;
   end;
  Finally
   CloseWorkArea(OWA2);
  end;
  --Предм
  Order(OA,"КВОЗ;ОКДП;Предм;ЕдИзм");
  ClearVariable(Buf);
  zz=0;
  OWA2=OpenWorkArea(crdДоговор_ТМЦ,"","Договор="+RecordToString(Current));
  Try
   nn=Records(OWA2);
   BeginChanging(OWA2);
   Try
    for i=1..ii do
     КВОЗ_=GetFieldS(OA,i,"КВОЗ");
     ОКПД_=GetFieldS(OA,i,"ОКДП");
     Предм_=GetFieldS(OA,i,"Предм");
     ЕдИзм_=GetFieldS(OA,i,"ЕдИзм");
     Кол_=GetFieldN(OA,i,"Объем1")+GetFieldN(OA,i,"Объем2")+GetFieldN(OA,i,"Объем3")+GetFieldN(OA,i,"Объем4")+GetFieldN(OA,i,"Объем5")+GetFieldN(OA,i,"Объем6")+GetFieldN(OA,i,"Объем7")+GetFieldN(OA,i,"Объем8")+GetFieldN(OA,i,"Объем9")+GetFieldN(OA,i,"Объем10");
     Сум_=GetFieldN(OA,i,"Сум1")+GetFieldN(OA,i,"Сум2")+GetFieldN(OA,i,"Сум3")+GetFieldN(OA,i,"Сум4")+GetFieldN(OA,i,"Сум5")+GetFieldN(OA,i,"Сум6")+GetFieldN(OA,i,"Сум7")+GetFieldN(OA,i,"Сум8")+GetFieldN(OA,i,"Сум9")+GetFieldN(OA,i,"Сум10");
     Цена_=Round(Сум_/Кол_,2);
     Key_=КВОЗ_+"#"+ОКПД_+"#"+Str16(Раб.CRC16.crc30_(Раб.CRC16.Init30,Предм_))+"#"+Up(ЕдИзм_)+"#"+Str(Цена_,2);
     z=SearchInArray(Buf,Key_,True);
     if z=-1:
        z=InsertInArraySort(Buf,Key_);
        zz=zz+1;
        if zz>nn:
           z=InsertRecord(OWA2);
           nn=nn+1;
        fi;
     fi;
    od;
    for z=1..(nn-zz) do
     DeleteRecord(OWA2,nn-(z-1));
    od;
    for z=1..zz do
     z=PutFieldI(OWA2,z,"НП",z);
     z=PutFieldR(OWA2,z,"Договор",Current);
     z=PutFieldN(OWA2,z,"Кол",0);
     z=PutFieldN(OWA2,z,"Сум",0);
    od;
    for i=1..ii do
     КВОЗ_=GetFieldS(OA,i,"КВОЗ");
     ОКПД_=GetFieldS(OA,i,"ОКДП");
     Предм_=GetFieldS(OA,i,"Предм");
     ЕдИзм_=GetFieldS(OA,i,"ЕдИзм");
     Кол_=GetFieldN(OA,i,"Объем1")+GetFieldN(OA,i,"Объем2")+GetFieldN(OA,i,"Объем3")+GetFieldN(OA,i,"Объем4")+GetFieldN(OA,i,"Объем5")+GetFieldN(OA,i,"Объем6")+GetFieldN(OA,i,"Объем7")+GetFieldN(OA,i,"Объем8")+GetFieldN(OA,i,"Объем9")+GetFieldN(OA,i,"Объем10");
     Сум_=GetFieldN(OA,i,"Сум1")+GetFieldN(OA,i,"Сум2")+GetFieldN(OA,i,"Сум3")+GetFieldN(OA,i,"Сум4")+GetFieldN(OA,i,"Сум5")+GetFieldN(OA,i,"Сум6")+GetFieldN(OA,i,"Сум7")+GetFieldN(OA,i,"Сум8")+GetFieldN(OA,i,"Сум9")+GetFieldN(OA,i,"Сум10");
     Цена_=Round(Сум_/Кол_,2);
     Key_=КВОЗ_+"#"+ОКПД_+"#"+Str16(Раб.CRC16.crc30_(Раб.CRC16.Init30,Предм_))+"#"+Up(ЕдИзм_)+"#"+Str(Цена_,2);
     z=SearchInArray(Buf,Key_,True);
     z=PutFieldS(OWA2,z,"КВОЗ",КВОЗ_);
     z=PutFieldR(OWA2,z,"ТМЦ",nil);
     z=PutFieldS(OWA2,z,"НаимТмц",Предм_);
     z=PutFieldS(OWA2,z,"НаимТмц2",GetFieldS(OA,i,"Предм2"));
     z=PutFieldS(OWA2,z,"НаимТмц3",GetFieldS(OA,i,"Предм3"));
     z=PutFieldS(OWA2,z,"НаимТмц4",GetFieldS(OA,i,"Предм4"));
     z=PutFieldI(OWA2,z,"ТМЦ16",Раб.CRC16.crc16_(0,Предм_));
     z=PutFieldS(OWA2,z,"ОКП",ОКПД_);
     z=PutFieldS(OWA2,z,"ОКДП_ГР","");
     z=PutFieldL(OWA2,z,"ПоЦене",GetFieldL(OA,i,"ПоЦене"));
     z=PutFieldS(OWA2,z,"Точн",GetFieldS(OA,i,"Точн"));
     z=PutFieldS(OWA2,z,"ЕдИзм",ЕдИзм_);
     z=PutFieldN(OWA2,z,"Цена",Цена_);
     z=PutFieldN(OWA2,z,"Кол",GetFieldN(OWA2,z,"Кол")+Кол_);
     z=PutFieldN(OWA2,z,"Сум",GetFieldN(OWA2,z,"Сум")+Сум_);
     z=PutFieldS(OWA2,z,"ОКСМ","");
    od;
    EndChanging(OWA2);
   Except
    CancelChanging(OWA2);
    Raise;
   end;
  Finally
   CloseWorkArea(OWA2);
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 if Страница=4: РасчетКБК;
   |Страница=5: РасчетТМЦ;
 fi;
 Message("Импорт успешно завершен");
end;

Proc btnНастр_OnClick(Sender: String);
 Настр_(False);
 Страница=-1;
 ВывестиСтраницу;
end;

Proc btnУдалить_OnClick(Sender: String);
var n,nn,OWA:i;
var Val,Test:S;
var Rec,Ref,Self,Pre: Record;
var Flag:L;
 if НоваяЗапись:
    EditorCancel;
    Close;
 fi;
 if not ЕстьИзменения=nil: Message("Запись изменена и не может быть удалена", mtError); Exit; fi;
 if EnqOkCancel("Удалить текущий документ и связанные с ним обязательства (бюджетное) ?",mtWarning)=cmCancel: Exit; fi;
 Val=Str(Time);
 if Input(Test,"Для подтверждения наберите '"+Val+"'")=cmCancel: Message("Операция отменена"); Exit; fi;
 if not Test=Val: Message("Операция отменена, неправильный код подтверждения"); Exit; fi;
 Template.Object="btnУдалить";
 if Страница=7:
    РасчетСвязДок(Sender);
   else
    Страница=7;
    ВывестиСтраницу;
 fi;
 for n=1..УпрДок do
  if not ДокCrd[n]=crdБО and not ДокCrd[n]=crdДоговор_Признак:
     НаОшибку("Документ удалить нельзя, т.к. существуют ссылающиеся на него документы",mtError,Страница,"ДокНаим",n);
     Exit;
  fi;
 od;
 РасчетГЭК2;
 EditorCancel;
 Pre=nil;
 Self=Current;
 --Делаем тек. запись не действительной
 if RecordExists(crdДоговор,Договор_Пре):
    Pre=Договор_Пре;
    if СделатьНедейств(Договор_Пре,False): --Делаем действительной предкопию копию
       if not Self=Current: Message("Внезапная ошибка (фаза луны не той четверти) "+RecordToString(Self)+"<>"+RecordToString(Current),mtError); Exit; fi;
       Rec=Раб.Договор.ПризнОбнов(Договор_Пре.Признак_Ref,Договор_Пре,"ДОГОВОР","ДОГОВОР",Договор_Пре.Признак,Договор_Пре.Признак_Кмнт,Договор_Пре.РПО_Ключ,if(ТипИзм=0,ДатаРег,ДатаИзм),False);
       if Rec=nil: 
          СделатьНедейств(Договор_Пре,True);
          Message("Ошибка актуализации предыдущей версии документа "+RecordToString(Договор_Пре)+" (признак), удаление текущего документа не возможно",mtError); 
          Exit;
       fi;
      else
       Message("Ошибка актуализации предыдущей версии документа "+RecordToString(Договор_Пре)+" (недейств.), удаление текущего документа не возможно",mtError);
       Exit;
    fi;
 fi;
 --
 Ref=Признак_Ref.Договор;
 Rec=Признак_Ref;
 if not Признак_Ref=nil:
    OWA=OpenWorkArea(crdДоговор,"","Ukey="+RecordToString(Self));
    try
     BeginChanging(OWA,True);
     try
      n=PutFieldR(OWA,1,"Признак_Ref",IntegerToRecord(-Abs(RecordToInteger(Признак_Ref)))); --укурено правда? тогда признак не слетает
      EndChanging(OWA);
     except
      CancelChanging(OWA);
     end;
    finally
     CloseWorkArea(OWA);
    end;
 fi;
 if not Rec=nil and Ref=Self:
    Раб.Договор.УдалитьПризнак(Rec);
 fi;
 --Делаем проверки на зависшую запись признака
 ClearVariable(Buf);
 OWA=OpenWorkArea(crdДоговор_Признак,"","Договор="+RecordToString(Self));
 try
  nn=Records(OWA);
  for n=1..nn do
   Buf[n]=RecordToString(GetRecordKey(OWA,n));
  od;
 finally
  CloseWorkArea(OWA);
 end;
 for n=1..nn do
  Раб.Договор.УдалитьПризнак(StringToRecord(Buf[n]));
 od;
 --
 УдалитьЗаписи(crdБО,Self);
 УдалитьЗаписи(crdДоговор_КБК,Self);
 УдалитьЗаписи(crdДоговор_ТМЦ,Self);
 Раб.Вспом.Сканер.УдалитьГЭК(crdДоговор,RecordToInteger(Self),"");
 Раб.Вспом.Файлы.Стереть(crdДоговор,RecordToInteger(Self),"*");
 for n=1..УпрГЭК2 do
  if ГЭК2Crd[n]="РПО_СКАН_ДОК":
     if GetCardFieldS(ГЭК2Crd[n],ГЭК2Rec[n],"Док")=crdДоговор_Признак and GetCardFieldI(ГЭК2Crd[n],ГЭК2Rec[n],"Запись")=RecordToInteger(Rec):
        Flag=ExecuteFuncL("Раб.Вспом.Скан_Док.Стереть",ГЭК2Rec[n]);
     fi;
  fi;
 od;
 УдалитьЗаписи("РПО_ДОГОВОР_ОТЧ_ИСПОЛ",Self);
 УдалитьЗаписи(crdДоговор,Self);
 if Pre=nil:
    Message("Документ успешно удален");
    Close;
   else
    Pre=Current(Pre);
    Message("Документ успешно удален.^MВнимание! Текущей записью сделана предыдущая редакция документа");
 fi;
end;

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

Proc btnUsr_OnClick(Sender: String);
 if not extBtnUsrOnClick="":
    if not ProcExists(extBtnUsrOnClick): Message("Процедура '"+extBtnUsrOnClick+"' не найдена",mtError); Exit; fi;
 fi;
 if not CurrentState=CrdusUnmodified: MyEditorApply; fi;
 ExecuteProc(extBtnUsrOnClick,Sender);
end;

Proc btnИзменения_OnClick(Sender: String);
var Rec:Record;
 if ModalMode: Message("Переход в модальном режиме невозможен",mtWarning); Exit; fi;
 Rec=ЕстьИзменения;
 if not Rec=nil then
    if not RecordExists(crdДоговор,Rec): Message("Запись "+RecordToString(Rec)+" не надйена",mtError); Exit; fi;
    if Рег: EditorCancel; fi;
    Раб.Переход.Crd=crdДоговор;
    Раб.Переход.Bln=blnДоговор;
    Раб.Переход.Modal=ModalMode;
    Раб.Переход.Rec=Rec;
    OpenBlank("Раб.Переход",False);
 fi;
end;

Proc btnОригинал_OnClick(Sender: String);
 if ModalMode: Message("Переход в модальном режиме невозможен",mtWarning); Exit; fi;
 if not Договор_Пре=nil then
    if not RecordExists(crdДоговор,Договор_Пре): Message("Запись "+RecordToString(Договор_Пре)+" не надйена",mtError); Exit; fi;
    if Рег: EditorCancel; fi;
    Раб.Переход.Crd=crdДоговор;
    Раб.Переход.Bln=blnДоговор;
    Раб.Переход.Modal=ModalMode;
    Раб.Переход.Rec=Договор_Пре;
    OpenBlank("Раб.Переход",False);
 fi;
end;

Proc Страница_onClick(Sender: String);
 if Sender="btnЗаказчик": Страница=0;
   |Sender="btnПоставщик":Страница=1;
   |Sender="btnОбщСвед":  Страница=2;
   |Sender="btnДопСвед":  Страница=3;
   |Sender="btnКБК":      Страница=4;
   |Sender="btnПредмет":  Страница=5;
   |Sender="btnГЭК1":     Страница=6;
   |Sender="btnСвязДок":  Страница=7;
   |Sender="btnИсторДок": Страница=8;
   |Sender="btnСервис":   Страница=9;
   |Sender="btnФайлы":    Страница=10;
   |Sender="btnГЭК2":     Страница=11;
   |Sender="btnРекИспДок":Страница=12;
   |Sender="btnОбеспеч"  :Страница=13;
   |Sender="btn1093"     :Страница=14;
 fi;
 ВывестиСтраницу;
end;

Func SectionOnInsert(SectName: String): Logical;
 Return not Рег;
end;

Func SectionOnDelete(SectName: String; Iter: Integer): Logical;
 Return not Рег;
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 OnTimer(Sender: String);
 Timer1.Active=False;
 if tmr>10: Message("Превышено время ожидания обновления данных",mtError); Exit; fi;
 if CurrentState=CrdusUnmodified:
    if not Договор_Пре.НеДейств: --делаем предыдущаю запиь недействительной
       if not СделатьНедейств(Договор_Пре,True): Message("Ошибка деактуализации предущей версии документа "+RecordToString(Договор_Пре),mtError); Exit; fi;
    fi;
   else
    tmr=tmr+1;
    Timer1.Active=True;
 fi;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 Timer1.Active=False;
 First=True;
 fОКВ=0;
end;

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

Proc OnRead;
var Flag:L;
 SelfRecord=Current;
 Раб.CRC16.Init;
 Настр_(False);
 visГод2 =not Round(СумГод2 ,2)=0 or not Год2 ="";
 visГод3 =not Round(СумГод3 ,2)=0 or not Год3 ="";
 visГод4 =not Round(СумГод4 ,2)=0 or not Год4 ="";
 visГод5 =not Round(СумГод5 ,2)=0 or not Год5 ="";
 visГод6 =not Round(СумГод6 ,2)=0 or not Год6 ="";
 visГод7 =not Round(СумГод7 ,2)=0 or not Год7 ="";
 visГод8 =not Round(СумГод8 ,2)=0 or not Год8 ="";
 visГод9 =not Round(СумГод9 ,2)=0 or not Год9 ="";
 visГод10=not Round(СумГод10,2)=0 or not Год10="";
 visСд2=not Содерж2="";
 visСд3=not Содерж3="";
 visСд4=not Содерж4="";
 visИнфоДокОсн2=not ИнфоДокОсн2="";
 visИнфоДокОсн3=not ИнфоДокОсн3="";
 visИнфоДокОсн4=not ИнфоДокОсн4="";
 visФЦ2=not ФормулаЦены2="";
 visФЦ3=not ФормулаЦены3="";
 visФЦ4=not ФормулаЦены4="";
 if НоваяЗапись:
    if ПрибитьЖука: EditorCancel; Exit; fi;
    ПоУмолчанию;
    Страница=0;
    ОбновВерсиюОКДП_Гр;
   else
    if Страница>5 or Страница<0: Страница=2; fi;
 fi;
 if RecordToInteger(Признак_Ref)<0: 
  --  Message("Текущая запись не была правильно удалена, повторите процедуру удаления",mtError);
    Признак_Ref=Признак_Ref;
    EditorApply;
 fi;
 if not First: Оформление; ВывестиСтраницу; fi;
 if GUID="NEW": Template.Field="ДатаИзм"; fi;
 if RecordExists(crdДоговор,Договор_Пре):
    if not Договор_Пре.НеДейств and not GUID="NEW": GUID="NEW"; fi;  --пытаемся исправиить недейств. документа
    Flag=True;
    Try
     if not Договор_Пре.Рег: Message("Предыдущия редакция документа должна быть зарегистрована",mtError); Flag=False; Exit; fi;
--     if Договор_Пре.Исполнен: Message("Предыдущия редакция документа имеет статус 'Исполненный', документ не может быть изменен",mtError); Flag=False; Exit; fi;
--     if Договор_Пре.Аннулирован: Message("Предыдущия редакция документа имеет статус 'Аннулированный', документ не может быть изменен",mtError); Flag=False; Exit; fi;
     if not Договор_Пре.НеДейств and not GUID="NEW": Message("Предыдущия редакция документа должна быть недействующей",mtError); Flag=False; Exit; fi;
    Finally
     if not Flag and CurrentState=crdusModified:
        EditorCancel;
     fi;
    end;
 fi;
 if GUID="NEW": GUID="NEW"; EditorApply; Оформление; fi; --вызываем обновление для срабатывания недействительности
end;

Func AfterUpdate (Flag:L):L;
 tmr=0;
 Timer1.Active=Flag;
 ^True;
end;

Func OnVerify: Logical;
var Rec: Record;
var GUID_:S;
 if not SelfRecord=Current: Message("Обнаружено несовпадение записей, сохранение невозможно",mtError); ^False; fi;
-- if RecordToInteger(Признак_Ref)<0: Message("Текущая запись не была правильно удалена, сохранение невозможно, повторите процедуру удаления",mtError); ^False; fi;
 if not ЕстьИзменения=nil: Message("Вносить изменения в недействующую редакцию запрещено, для изменения документа откройте действующию редакцию",mtError); Template.Field="Загл2"; ^False; fi;
 if RecordExists(crdДоговор,Договор_Пре):
--    if Договор_Пре.Исполнен: Message("Предыдущия редакция документа имеет статус 'Исполненный', документ не может быть изменен",mtError); ^False; fi;
--    if Договор_Пре.Аннулирован: Message("Предыдущия редакция документа имеет статус 'Аннулированный', документ не может быть изменен",mtError); ^False; fi;
    if not Договор_Пре.Рег: Message("Предыдущия редакция договора должна быть зарегистрована",mtError); ^False; fi;
    if not Договор_Пре.НеДейств and not GUID="NEW": Message("Предыдущия редакция документа должна быть недействующей, документ не может быть изменен",mtError); ^False; fi;
    if not Договор_Пре.Признак=Признак: ^НаОшибку("Признак документа не должен изменяться ("+Договор_Пре.Признак+"<>"+Признак+")",mtError,2,"Признак_",0); fi;
    if not Договор_Пре.НомерДок+Договор_Пре.НомерДокДоп=НомерДок+НомерДокДоп: ^НаОшибку("Номер документа не должен изменяться ("+Раб.Бюджет2005.Объединить(Договор_Пре.НомерДок,Договор_Пре.НомерДокДоп,"/")+"<>"+Раб.Бюджет2005.Объединить(НомерДок,НомерДокДоп,"/")+")",mtError,2,"НомерДок",0); fi;
    if not Year(Договор_Пре.ДатаДок)=Year(ДатаДок): ^НаОшибку("Дата (год) документа не должна изменяться ("+DateToString(Договор_Пре.ДатаДок)+"<>"+DateToString(ДатаДок)+")",mtError,2,"ДатаДок",0); fi;
 fi;
 GUID_=GUID;
 НеДейств=False; --текущая действует в любом случае
 if СчДеб5="": СчДеб5=DefСчДеб5; fi;
 if СчКре5="": СчКре5=DefСчКре5; fi;
 ТекГод=Str(Year(ДатаРег));
 if Учет_Реестр_ОФК or ver>0:
    if ТекГод=Год1 : СумТек=СумГод1;
      |ТекГод=Год2 : СумТек=СумГод2;
      |ТекГод=Год3 : СумТек=СумГод3;
      |ТекГод=Год4 : СумТек=СумГод4;
      |ТекГод=Год5 : СумТек=СумГод5;
      |ТекГод=Год6 : СумТек=СумГод6;
      |ТекГод=Год7 : СумТек=СумГод7;
      |ТекГод=Год8 : СумТек=СумГод8;
      |ТекГод=Год9 : СумТек=СумГод9;
      |ТекГод=Год10: СумТек=СумГод10;
    fi;
 fi;
 if ФорматДок="": ФорматДок="П"; fi;
 if УчетБО_ФК and БО_GUID_FK="":
    БО_GUID_FK=Раб.Бюджет2005.MyGUID("FK");
 fi;
 if ver>0:
    if not Исполнен=(ТипИзм=99): Исполнен=ТипИзм=99; fi;
    if not Аннулирован=(ТипИзм=-99): Аннулирован=ТипИзм=-99; fi;
 fi;
 if not ТипИзм_=ТипИзм_Кмнт: ТипИзм_Кмнт=ТипИзм_; fi;
 if not Настр=nil:
    if FuncExists(Настр.ExtFunc_SetupIND):
       ВнутрНомерДок=ExecuteFuncS(Настр.ExtFunc_SetupIND);
    fi;
 fi;
 if not ПризнОбнов: Message("Ошибка создания признака документа",mtError); GUID=GUID_; ^False; fi;
 if not ПроверитьУник: GUID=GUID_; ^False; fi;
 if not ОбновитьТабл: GUID=GUID_; ^False; fi;
 if not ExtOnVerify: GUID=GUID_; ^False; fi;
 if not Признак_Ref=nil:
    Признак_Ref=IntegerToRecord(Abs(RecordToInteger(Признак_Ref)));
 fi;
 Rec=Раб.Договор.ПризнОбнов(Признак_Ref,Current,"ДОГОВОР","ДОГОВОР",Признак,Признак_Кмнт,РПО_Ключ,if(ТипИзм=0,ДатаРег,ДатаИзм),False);
 if Rec=nil:
    Message("Ошибка создания записи признака документа",mtError);
    GUID=GUID_;
    ^False;
   else
    if not RecordExists(crdДоговор_Признак,Признак_Ref) or Признак_Ref=Rec:
       Признак_Ref=Rec;
      else
       Message("Ошибка создания записи признака документа ("+RecordToString(Признак_Ref)+"<>"+RecordToString(Rec)+")",mtError);
       GUID=GUID_;
       ^False;
    fi;
 fi;
 Return AfterUpdate(GUID_="NEW");
end;

Proc OnCancel;
 ОчиститьКБК;
 ОчиститьТМЦ;
 Оформление;
 ВывестиСтраницу;
end;
--Обработчики событий шаблона -----
--

Конец