-- Шаблон создан мастером бланков
-- 21.10.2005 15:14:34
--
БланкСШаблоном "Заявка на закупку", Редактор РПО_ЗАЯВКА_ЗАКУП;

var First:L;

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

var Испол_:L=ТипИзм=99;
var Аннул_:L=ТипИзм=-99;

var start:s="";

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

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

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

var ТипСвед_:S=if(Пре=nil,"Первичные","Измененные");
var ТекГод:S=Str(Year(ДатаРег));

var РазмещЗаказ_:S=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,False,if(not ФЗ=0,"44ФЗ",""));
var ДопТреб_:S=if(ДопТреб="0":"Нет"|True:Раб.Договор.СтатусКонтрагента(ДопТреб,False,"44ФЗ"));

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

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

var Год1_:S=if(Год1="","",Год1+" год");
var Год2_:S=if(Год2="","",Год2+" год");
var Год3_:S=if(Год3="","",Год3+" год");
var Год4_:S=if(Год4="","",Год4+" год");
var Год5_:S=if(Год5="","",Год5+" год");
var Год6_:S=if(Год6="","",Год6+" год");

var nРасшифр:I=Расшифр;
var A1:S=if(Рег,"","+");
var AA1:S=if(Рег,"","++");
var D1:S=if(Рег,"","-");
var пп[]:i=$;
var Призн_[]:S=Расшифр[$].Призн;
var ОКДП_Гр_:S;
var ОКДП_:S;
var МФ_[]:S=if(Расшифр[$].МФ="":""|not Pos("I",Расшифр[$].МФ)=0:Расшифр[$].МФ+" квартал"|True:Месяц(Int(Расшифр[$].МФ)));
var ПоЦене_[]:s=if(Расшифр[$].ПоЦене,"цена за единицу","количество");

var Изм1[]:N=Расшифр[$].Сум1-Расшифр[$].Сум_Пре1;
var Изм2[]:N=Расшифр[$].Сум2-Расшифр[$].Сум_Пре2;
var Изм3[]:N=Расшифр[$].Сум3-Расшифр[$].Сум_Пре3;
var Изм4[]:N=Расшифр[$].Сум4-Расшифр[$].Сум_Пре4;
var Изм5[]:N=Расшифр[$].Сум5-Расшифр[$].Сум_Пре5;
var Изм6[]:N=Расшифр[$].Сум6-Расшифр[$].Сум_Пре6;

var ИзмОбъем1[]:N=Расшифр[$].Объем1-Расшифр[$].Объем_Пре1;
var ИзмОбъем2[]:N=Расшифр[$].Объем2-Расшифр[$].Объем_Пре2;
var ИзмОбъем3[]:N=Расшифр[$].Объем3-Расшифр[$].Объем_Пре3;
var ИзмОбъем4[]:N=Расшифр[$].Объем4-Расшифр[$].Объем_Пре4;
var ИзмОбъем5[]:N=Расшифр[$].Объем5-Расшифр[$].Объем_Пре5;
var ИзмОбъем6[]:N=Расшифр[$].Объем6-Расшифр[$].Объем_Пре6;

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 ВсегоИзм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 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 СводкаИзм: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 ИзмRec[]:Record;
var ИзмБОRec[]:S;

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

var A2:S=if(Рег,"","+");
var D2:S=if(Рег,"","-");
var openФайл :S="3";
var loadФайл :S=if(Рег,"","q");
var loadПапка:S=if(Рег,"","1");
var delФайл  :S=if(Рег,"","r");
var copyФайл :S="<";

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

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

var Общ_Справ1:S;
var Общ_Справ_Наим1:S;
var Общ_Справ2:S;
var Общ_Справ_Наим2:S;
var Общ_Справ_ГЭК1:L;
var Общ_Справ_ГЭК2:L;
var extBtnUsrName:s;
var extBtnUsrOnClick:s;
var extBtnUsrName2:s;
var extBtnUsrOnClick2:s;
var extFunc_SetupIND:S;
var extFunc_SetupSign:S;
var extFunc_OnVerify:s;

var ТипСч:S=if(ТипДок=nil,"ЗАБ",ТипДок.ТипСч);
var КодСчД5:S=if(ТипДок=nil,"ЗАБ.ЗК",ТипДок.КодСчД5);
var КодСчК5:S=if(ТипДок=nil,"ЗАБАЛАНС",ТипДок.КодСчК5);
var Справ_:S=if(ТипДок=nil,"ЗК",ТипДок.Справ);
var Общ_Справ1_:S=if(ТипДок=nil,Общ_Справ1,ТипДок.Общ_Справ1);
var Общ_Справ_Наим1_:S=if(ТипДок=nil,Общ_Справ_Наим1,ТипДок.Общ_Справ_Наим1);
var Общ_Справ_ГЭК1_:L=if(ТипДок=nil,Общ_Справ_ГЭК1,ТипДок.Общ_Справ_ГЭК1);
var Общ_Справ_ГЭК1__:S=if(Общ_Справ_ГЭК1_,"Отдельная папка по имени признака","Общая папка");
var Общ_Справ2_:S=if(ТипДок=nil,Общ_Справ2,ТипДок.Общ_Справ2);
var Общ_Справ_Наим2_:S=if(ТипДок=nil,Общ_Справ_Наим2,ТипДок.Общ_Справ_Наим2);
var Общ_Справ_ГЭК2_:L=if(ТипДок=nil,Общ_Справ_ГЭК2,ТипДок.Общ_Справ_ГЭК2);
var Общ_Справ_ГЭК2__:S=if(Общ_Справ_ГЭК2_,"Отдельная папка по имени признака","Общая папка");
var extBtnUsrName_:S=if(ТипДок=nil,extBtnUsrName,ТипДок.extBtnUsrName);
var extBtnUsrOnClick_:S=if(ТипДок=nil,extBtnUsrOnClick,ТипДок.extBtnUsrOnClick);
var extBtnUsrName2_:S=if(ТипДок=nil,extBtnUsrName2,ТипДок.extBtnUsrName2);
var extBtnUsrOnClick2_:S=if(ТипДок=nil,extBtnUsrOnClick2,ТипДок.extBtnUsrOnClick2);
var extFunc_SetupIND_:S=if(ТипДок=nil,extFunc_SetupIND,ТипДок.extFunc_SetupIND);
var extFunc_SetupSign_:S=if(ТипДок=nil,extFunc_SetupSign,ТипДок.extFunc_SetupSign);
var extFunc_OnVerify_:S=if(ТипДок=nil,extFunc_OnVerify,ТипДок.extFunc_OnVerify);
var extКлюч:S;
var fКонтрольЛБО:I;
var fКонтрольЛБО_:S=if(fКонтрольЛБО=-1:"Отключен"|fКонтрольЛБО=1:"Жесткий"|True:"Мягкий");


var НастрGUID:S;

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

S0  : Section;
S1  : Section; --Сведения о заказчике
S2  : Section; --Общие сведения
S3  : 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;

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

btnИзм      :Object;
btnНастр    :Object;
btnИмпорт   :Object;
btnУдалить  :Object;
cbЗакрытьДок:Object;
cbРег       :Object;
cbИспол     :Object;
cbАннул     :Object;

rbФЗ0:Object;
rbФЗ1:Object;
rbФЗ2:Object;

btnUsr :Object;
btnUsr2:Object;

btnИзменения  :Object;
btnОригинал   :Object;
btnКонтрольЛБО:Object;


btnЗаказчик :Object;
btnОбщСвед  :Object;
btnДопСвед  :Object;
btnКБК      :Object;
btnГЭК      :Object;
btnИсторДок :Object;
btnФайлы    :Object;
btnОбеспеч  :Object;
btnСервис   :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 BufF[]:S;
var BufT[]:I;
var BufN[]:N;

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

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

Страница:I;

var FlagChanging:L;

var SkipEvent:L;

var SelfRecord:Record;
var NewRecord :Record;
var SelfBln:S="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ЗАЯВКА_ЗАКУП";
var SelfCrd:S="РПО_ЗАЯВКА_ЗАКУП";

Timer1:Object;
var tmr:I;

var ИсклСправ:S="ЗК.*|ПГ.*|ОКДП.*|ОКДП2.*|ОКПД.*|ОКПД2.*|ПЕРИОД.*|"+Справ_+".*";

var inТипДок:Record;
--
--Процедуры и функции ------------- 
Proc MyEditorApply;
 EditorApply;
end;

Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("Общ_Справ1","S");
    Раб.Настр.Добавить("Общ_Справ_Наим1","S");
    Раб.Настр.Добавить("Общ_Справ_ГЭК1","L");
    Раб.Настр.Добавить("Общ_Справ2","S");
    Раб.Настр.Добавить("Общ_Справ_Наим2","S");
    Раб.Настр.Добавить("Общ_Справ_ГЭК2","L");
    Раб.Настр.Добавить("extBtnUsrName","S");
    Раб.Настр.Добавить("extBtnUsrOnClick","S");
    Раб.Настр.Добавить("extBtnUsrName2","S");
    Раб.Настр.Добавить("extBtnUsrOnClick2","S");
    Раб.Настр.Добавить("extFunc_SetupIND","S");
    Раб.Настр.Добавить("extFunc_SetupSign","S");
    Раб.Настр.Добавить("extFunc_OnVerify","S");
    Раб.Настр.Добавить("extКлюч","S");
    Раб.Настр.Добавить("fКонтрольЛБО","I");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
end;
  
Func ЕстьИзменения:Record;
var OWA,nn:I;
 OWA=OpenWorkArea(SelfCrd,"","Пре="+RecordToString(Current));
 Try
  nn=Records(OWA);
  if not nn=0:
     ^GetRecordKey(OWA,1);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^nil;
end;

Proc НепустаяТаблица;
 if Расшифр=0: InsertFrame(Расшифр,Расшифр+1); fi;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor,x:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=0..5 do
  if FindObject("S"+Str(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;
 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;

Func ЗапретитьПоле (Field:S):L;
 if Field="Загл"    : ^not Пре=nil;
   |Field="ДатаРег" : ^not Пре=nil;
   |Field="Номер"   : ^not Пре=nil;
   |Field="НомерДок": ^Справ="ПГ";
   |Field="ДатаДок" : ^Справ="ПГ";
 fi;
 ^False;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var RO,isИзм,Flag:L;
var Field:S;
var Rec:Record;
 Rec=ЕстьИзменения;
 if Пре=nil or ТипИзм=3: isИзм=False; else isИзм=RecordExists(SelfCrd,Пре); fi;
 cbРег.Enabled=Rec=nil;
 btnИзм.Enabled=Рег;
 btnИзменения.Enabled=not Rec=nil;
 btnОригинал.Enabled=not Пре=nil;
 btnКонтрольЛБО.Enabled=Справ="ЗК";
 cbИспол.Enabled=Rec=nil;
 cbАннул.Enabled=Rec=nil;
 rbФЗ0.Enabled=not Рег and Rec=nil;
 rbФЗ1.Enabled=not Рег and Rec=nil;
 rbФЗ2.Enabled=not Рег and Rec=nil;
 btnИмпорт.Visible=not Рег and Rec=nil and Справ="ЗК";
 btnУдалить.Enabled=not Рег and Rec=nil;
 btnUsr.Visible=not extBtnUsrOnClick_="" and not extBtnUsrName_="";
 btnUsr.Caption=extBtnUsrName_;
 btnUsr2.Visible=not extBtnUsrOnClick2_="" and not extBtnUsrName2_="";
 btnUsr2.Caption=extBtnUsrName2_;
 --
 S0.Cell(2,3,CellFontColor,if(НеДейств,coRed,coGreen));
 --
 S1.Row(12,RowVisible,not Общ_Справ1_="" or not Общ_Призн1=""); S1.Row(12,RowVisible,not Общ_Справ1_="" or not Общ_Призн1="");
 S1.Row(13,RowVisible,not Общ_Справ1_="" or not Общ_Призн1=""); S1.Row(12,RowVisible,not Общ_Справ1_="" or not Общ_Призн1="");
 S1.Row(14,RowVisible,not Общ_Справ2_="" or not Общ_Призн2=""); S1.Row(14,RowVisible,not Общ_Справ2_="" or not Общ_Призн2="");
 S1.Row(15,RowVisible,not Общ_Справ2_="" or not Общ_Призн2=""); S1.Row(14,RowVisible,not Общ_Справ2_="" or not Общ_Призн2="");
 --
 for s=0..5 do
  if FindObject("S"+Str(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 s=4 or s=5:
             RO=Рег or not Rec=nil or Abs(ТипИзм)=99;
            |true:
             RO=Рег or not Rec=nil or ЗапретитьПоле(Field);
          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;
       if Field="@неПГ": Obj.Row(r,RowVisible,not Справ="ПГ");
         |Field="@Испол": Obj.Row(r,RowVisible,ТипИзм=99);
         |Field="@НеИспол": Obj.Row(r,RowVisible,not ТипИзм=99 or (ТипИзм=99 and ИсполДок1=nil and ИсполДок2=nil));
         |Field="@ЗК": Obj.Row(r,RowVisible,Справ="ЗК");
       fi;
      od;
     od;
  fi;
 od;
 for s=4..6 do
  if FindObject("S"+Str(s),Obj):
     Obj.Column(6 ,ColVisible,isИзм); --#Нов
     Obj.Column(7 ,ColVisible,Справ="ПГ" or Справ="ЗК"); --#Лот
     Obj.Column(10,ColVisible,Секрет<2 and ФЗ=0); --#ОКДП_Гр
     Obj.Column(11,ColVisible,Секрет<2 and ФЗ=0); --#ОКДП_Гр
     Obj.Column(12,ColVisible,ФЗ=0); --#ОКДП
     Obj.Column(13,ColVisible,ФЗ=0); --#ОКДП
     Obj.Column(14,ColVisible,not ФЗ=0); --#ОКПД
     Obj.Column(15,ColVisible,not ФЗ=0); --#ОКПД2
     Obj.Column(17,ColVisible,ФЗ=0); --#МФ_
     Obj.Column(18,ColVisible,not ФЗ=0); --#ИсполСрок
     Obj.Column(19,ColVisible,not ФЗ=0); --#ЕдИзм
--     Obj.Column(20,ColVisible,not Год1="");
     Obj.Column(22,ColVisible,isИзм);
     Obj.Column(23,ColVisible,not Год2="");
     Obj.Column(24,ColVisible,not Год2="" and isИзм);
     Obj.Column(25,ColVisible,not Год3="");
     Obj.Column(26,ColVisible,not Год3="" and isИзм);
     Obj.Column(27,ColVisible,not Год4="");
     Obj.Column(28,ColVisible,not Год4="" and isИзм);
     Obj.Column(29,ColVisible,not Год5="");
     Obj.Column(30,ColVisible,not Год5="" and isИзм);
     Obj.Column(31,ColVisible,not Год6="");
     Obj.Column(32,ColVisible,not Год6="" and isИзм);
  fi;
 od;
 --
 Flag=IsReadOnly(SelfCrd) or ClosedModFob;
 --Загл2
 S0.Cell(2,3,CellReadOnly,Flag); --#Загл2
 --ГЭК
 S7.Cell(2,3,CellReadOnly,Flag);
 S7.Cell(2,7,CellReadOnly,Flag);
 S7.Cell(4,3,CellReadOnly,Flag); --ГЭКвPDF
 S7.Cell(4,5,CellReadOnly,Flag);
 --История
 S9.Cell(2,3,CellReadOnly,Flag); --ОбновИсторДок
 S9.Cell(2,7,CellReadOnly,Flag); --СводкаИзм
 for c=2..14 do
  S9.Cell(1,c,CellReadOnly,Flag);
 od;
 --Прикрепленные документы
 for c=6..14 do
  if not (c=8 or c=9 or c=11 or c=12 or c=13):
     S15.Cell(1,c,CellReadOnly,Flag);
  fi;
 od;
end;

Proc ПоУмолчанию;
 if Учр=nil:
    Учр=Раб.Бюджет2005.НашРекв;
 fi;
 ТипДок=inТипДок;
 Справ=ТипДок.Справ;
 GUID=GetGUID;
 if ДатаРег=1.1.100: ДатаРег=ToDay; fi;
 if ДатаРег>1.1.2014: ФЗ=1; fi;
 Номер=Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаРег",ДатаРег,"Справ='"+Справ_+"' and Match(Признак,'"+Str(Year(ДатаРег))+".*')");
 if ОКВ="": ОКВ="643"; fi;
 Рег=False;
 ClosedModFob=False;
 verОКДП_Гр=273;
 Признак="";
 Пре=nil;
 Признак_Ref=nil;
 НеДейств=False;
 ЭтоИзм=False;
 Пре_Общ_Призн1="";
 Пре_Общ_Призн2="";
end;

Func РасчетГЭК:L;
var Y,i:I;
var Txt:S;
var Obj:Object;
var Flag,Vs:L;
 ClearVariable(ЛистГЭК);
 ClearVariable(ФайлГЭК);
 Y=AsInteger(S8.Row(1,RowTop,""));
 nГЭК=0;
 if Страница=4:
    nГЭК=Max(Раб.Вспом.Сканер.ЧитатьГЭК(SelfCrd,RecordToInteger(Current),"jpg",true),0);
    CopyArray(Раб.Вспом.Сканер.ФайлГЭК,ФайлГЭК);
    Template.Freeze(1,y+3);
   else
    if AsLogical(btnГЭК.Enabled): ^False; fi;
 fi;
 y=y+10;
 for i=1..MaxЛистГЭК do
  Txt="<нет изображения>";
  Flag=(Страница=4 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(S8.Row(4, RowVisible,""))=(nГЭК>6):  S8.Row(4, RowVisible,nГЭК>6); fi; --2 линия
 if not AsLogical(S8.Row(5, RowVisible,""))=(nГЭК>6):  S8.Row(5, RowVisible,nГЭК>6); fi;
 if not AsLogical(S8.Row(6, RowVisible,""))=(nГЭК>6):  S8.Row(6, RowVisible,nГЭК>6); fi;
 if not AsLogical(S8.Row(7, RowVisible,""))=(nГЭК>12): S8.Row(7, RowVisible,nГЭК>12); fi; --3 линия
 if not AsLogical(S8.Row(8, RowVisible,""))=(nГЭК>12): S8.Row(8, RowVisible,nГЭК>12); fi;
 if not AsLogical(S8.Row(9, RowVisible,""))=(nГЭК>12): S8.Row(9, RowVisible,nГЭК>12); fi;
 if not AsLogical(S8.Row(10,RowVisible,""))=(nГЭК>18): S8.Row(10,RowVisible,nГЭК>18); fi; --4 линия
 if not AsLogical(S8.Row(11,RowVisible,""))=(nГЭК>18): S8.Row(11,RowVisible,nГЭК>18); fi;
 if not AsLogical(S8.Row(12,RowVisible,""))=(nГЭК>18): S8.Row(12,RowVisible,nГЭК>18); fi;
 if not AsLogical(S8.Row(13,RowVisible,""))=(nГЭК>24): S8.Row(13,RowVisible,nГЭК>24); fi; --5 линия
 if not AsLogical(S8.Row(14,RowVisible,""))=(nГЭК>24): S8.Row(14,RowVisible,nГЭК>24); fi;
 if not AsLogical(S8.Row(15,RowVisible,""))=(nГЭК>24): S8.Row(15,RowVisible,nГЭК>24); fi;
 ^True;
end;

Proc РасчетИсторДок;
var OWA,n,nr,y,ТипИзм_:I;
var tmp:S;
var Rec: Record;
 if Страница=5:
    Y=AsInteger(S10.Row(1,RowTop,""));
    Template.Freeze(1,y);
   else
    Exit;
 fi;
 ClearVariable(УпрИзм);
 ClearVariable(ИзмCU);
 ClearVariable(ИзмMU);
 ClearVariable(ИзмТек);
 ClearVariable(ИзмРег);
 ClearVariable(ИзмНаим);
 ClearVariable(ИзмНом);
 ClearVariable(ИзмДат);
 ClearVariable(ИзмТС);
 ClearVariable(ИзмСтат);
 ClearVariable(ИзмКмнт);
 ClearVariable(ИзмRec);
 ShowProgress(3,"Сбор данных...");
 InsertFrame(УпрИзм,УпрИзм+1);
 ИзмCU[УпрИзм]=DateToString(CreateTime)+" "+CreatedUser;
 ИзмMU[УпрИзм]=DateToString(UpdateTime)+" "+ModifiedUser;
 ИзмТек[УпрИзм]="*";
 ИзмРег[УпрИзм]=if(ТипИзм=3 or ТипИзм=0,ДатаРег,ДатаИзм);
 ИзмНаим[УпрИзм]=if(ТипИзм=3 or ТипИзм=0,НаимДок.Наим,if(НаимИзм=nil,НаимДок.Наим,НаимИзм.Наим));
 ИзмНом[УпрИзм]=if(ТипИзм=3 or ТипИзм=0,НомерДок,if(НомДокИзм="",НомерДок,НомДокИзм));
 ИзмДат[УпрИзм]=if(ТипИзм=3 or ТипИзм=0,ДатаДок,if(ДатДокИзм=1.1.100,ДатаДок,ДатДокИзм));
 ИзмТС[УпрИзм]=if(ТипИзм=0:"Первич."|ТипИзм=2:"Исправл."|True:"Изменен.");
 ИзмСтат[УпрИзм]=if(ТипИзм=99:"Исполнен"|ТипИзм=-99:"Аннулирован"|not НеДейств:"Действ."|GUID="NEW":"Новый"|True:"Недейств.");
 ИзмКмнт[УпрИзм]=if(ТипИзм=0:Содерж|ТипИзм=3:"Перерегистрация на очередной год ("+ТекГод+")"|True:if(ОснИзм="",Содерж,ОснИзм));
 ИзмRec[УпрИзм]=Current;
 ProgressPos(1);
 Rec=Пре;
 OWA=OpenWorkArea(SelfCrd,"","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(ТипИзм_=3 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаРег"),GetFieldD(OWA,1,"ДатаИзм"));
   if ТипИзм_=3 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(ТипИзм_=3 or ТипИзм_=0,GetFieldS(OWA,1,"НомерДок"),if(GetFieldS(OWA,1,"НомДокИзм")="",GetFieldS(OWA,1,"НомерДок"),GetFieldS(OWA,1,"НомДокИзм")));
   ИзмДат[1]=if(ТипИзм_=3 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаДок"),if(GetFieldD(OWA,1,"ДатДокИзм")=1.1.100,GetFieldD(OWA,1,"ДатаДок"),GetFieldD(OWA,1,"ДатДокИзм")));
   ИзмТС[1]=if(ТипИзм_=0:"Первич."|ТипИзм_=2:"Исправл."|True:"Изменен.");
   ИзмСтат[1]=if(ТипИзм_=99:"Исполнен"|ТипИзм=-99:"Аннулирован"|not GetFieldL(OWA,1,"НеДейств"):"Действ."|GetFieldS(OWA,1,"GUID")="NEW":"Новый"|True:"Недейств.");
   ИзмКмнт[1]=if(ТипИзм_=0:GetFieldS(OWA,1,"Содерж")|ТипИзм_=3:"Перерегистрация на очередной год ("+Str(Year(GetFieldD(OWA,1,"ДатаРег")))+")"|True:if(GetFieldS(OWA,1,"ОснИзм")="",GetFieldS(OWA,1,"Содерж"),GetFieldS(OWA,1,"ОснИзм")));
   ИзмRec[1]=Rec;
   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(ТипИзм_=3 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаРег"),GetFieldD(OWA,1,"ДатаИзм"));
   if ТипИзм_=3 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(ТипИзм_=3 or ТипИзм_=0,GetFieldS(OWA,1,"НомерДок"),if(GetFieldS(OWA,1,"НомДокИзм")="",GetFieldS(OWA,1,"НомерДок"),GetFieldS(OWA,1,"НомДокИзм")));
   ИзмДат[УпрИзм]=if(ТипИзм_=3 or ТипИзм_=0,GetFieldD(OWA,1,"ДатаДок"),if(GetFieldD(OWA,1,"ДатДокИзм")=1.1.100,GetFieldD(OWA,1,"ДатаДок"),GetFieldD(OWA,1,"ДатДокИзм")));
   ИзмТС[УпрИзм]=if(ТипИзм_=0:"Первич."|ТипИзм_=2:"Исправл."|True:"Изменен.");
   ИзмСтат[УпрИзм]=if(ТипИзм_=99:"Исполнен"|ТипИзм=-99:"Аннулирован"|not GetFieldL(OWA,1,"НеДейств"):"Действ."|GetFieldS(OWA,1,"GUID")="NEW":"Новый"|True:"Недейств.");
   ИзмКмнт[УпрИзм]=if(ТипИзм_=0:GetFieldS(OWA,1,"Содерж")|ТипИзм_=3:"Перерегистрация на очередной год ("+Str(Year(GetFieldD(OWA,1,"ДатаРег")))+")"|True:if(GetFieldS(OWA,1,"ОснИзм")="",GetFieldS(OWA,1,"Содерж"),GetFieldS(OWA,1,"ОснИзм")));
   Rec=GetRecordKey(OWA,1);
   ИзмRec[УпрИзм]=Rec;
   SetFilter(OWA,"Пре="+RecordToString(Rec));
   nr=Records(OWA);
  od;
  ProgressPos(3);
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

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

Proc ВывестиСтраницу;
var Y:i;
 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;
 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;
 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;
    S5.Visible=Страница=3;
    S6.Visible=Страница=3;
 fi;
 if Страница=3:
    Y=AsInteger(S5.Row(1,RowTop,""));
    Template.Freeze(1,y);
 fi;
 btnКБК.Enabled=not Страница=3;
 --ГЭК
 if not AsLogical(S7.Visible)=(Страница=4):
    S7.Visible=Страница=4;
    S8.Visible=Страница=4;
 fi;
 РасчетГЭК;
 btnГЭК.Enabled=not Страница=4;
 --История изменения документа
 if not AsLogical(S9.Visible)=(Страница=5):
    S9.Visible=Страница=5;
    S10.Visible=Страница=5;
    S11.Visible=Страница=5;
 fi;
 btnИсторДок.Enabled=not Страница=5;
 РасчетИсторДок;
 --Сервис
 if not AsLogical(S12.Visible)=(Страница=6):
    S12.Visible=Страница=6;
 fi;
 if Страница=6:
    Y=AsInteger(S12.Row(4,RowTop,""));
    Template.Freeze(4,y);
 fi;
 btnСервис.Enabled=not Страница=6;
 --Прикрепленные файлы
 if not AsLogical(S13.Visible)=(Страница=7):
    S13.Visible=Страница=7;
    S14.Visible=Страница=7;
    S15.Visible=Страница=7;
    S16.Visible=Страница=7;
    РасчетФайл;
 fi;
 btnФайлы.Enabled=not Страница=7;
 --Настройка
 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;
end;

Proc ПолучитьСч(Iter:I);
var БК_,КОСГУ_,СчДеб_,СчКре_:S;
var Res:L;
 if not Расшифр[Iter].ВД="" and not Расшифр[Iter].КБК="":
    Раб.КСА.Начать;
    БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","БК",False);
    КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"ФКР","КОСГУ",False);
    Расшифр[Iter].СчДеб=БК_+"."+Расшифр[Iter].ВД+"."+КодСчД5+"."+КОСГУ_;
    if КодСчК5="ЗАБАЛАНС":
       Расшифр[Iter].СчКре="ЗАБАЛАНС";
      else
       Расшифр[Iter].СчДеб=БК_+"."+Расшифр[Iter].ВД+"."+КодСчК5+"."+КОСГУ_;
    fi;
    Раб.КСА.ДобавитьСч(Расшифр[Iter].СчДеб,ТипСч,True);
    Раб.КСА.ДобавитьСч(Расшифр[Iter].СчКре,ТипСч,False);
    Res=Раб.КСА.Закончить(False);
 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Предм,crcТреб:I;
var tmp:S;
 ClearVariable(Buf);
 for Iter=1..Расшифр do
  crcПредм=Раб.CRC16.crc30_(1073741823,Расшифр[Iter].Предм);
  crcПредм=Раб.CRC16.crc30_(crcПредм,Расшифр[Iter].Предм2);
  crcПредм=Раб.CRC16.crc30_(crcПредм,Расшифр[Iter].Предм3);
  crcПредм=Раб.CRC16.crc30_(crcПредм,Расшифр[Iter].Предм4);
  crcТреб=Раб.CRC16.crc30_(1073741823,Расшифр[Iter].Треб);
  crcТреб=Раб.CRC16.crc30_(crcТреб,Расшифр[Iter].Треб2);
  crcТреб=Раб.CRC16.crc30_(crcТреб,Расшифр[Iter].Треб3);
  crcТреб=Раб.CRC16.crc30_(crcТреб,Расшифр[Iter].Треб4);
  if ФЗ=0:
     Buf[Iter]=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн+"#"+Расшифр[Iter].МФ+"#"+Расшифр[Iter].ОКДП_Гр+"#"+Расшифр[Iter].ОКДП+"#"+Str16(crcПредм);
    else
     Buf[Iter]=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн+"#"+Расшифр[Iter].ОКДП+"#"+Расшифр[Iter].ОКВЭД+"#"+DateToString(Расшифр[Iter].ИсполСрок)+"#"+Расшифр[Iter].ИсполПер+"#"+Расшифр[Iter].ЕдИзм+"#"+Str16(crcПредм)+"#"+Str16(crcТреб);
  fi;
 od;
 for Iter=1..Расшифр do
  crcПредм=Раб.CRC16.crc30_(1073741823,Расшифр[Iter].Предм);
  crcПредм=Раб.CRC16.crc30_(crcПредм,Расшифр[Iter].Предм2);
  crcПредм=Раб.CRC16.crc30_(crcПредм,Расшифр[Iter].Предм3);
  crcПредм=Раб.CRC16.crc30_(crcПредм,Расшифр[Iter].Предм4);
  crcТреб=Раб.CRC16.crc30_(1073741823,Расшифр[Iter].Треб);
  crcТреб=Раб.CRC16.crc30_(crcТреб,Расшифр[Iter].Треб2);
  crcТреб=Раб.CRC16.crc30_(crcТреб,Расшифр[Iter].Треб3);
  crcТреб=Раб.CRC16.crc30_(crcТреб,Расшифр[Iter].Треб4);
  if ФЗ=0:
     tmp=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн+"#"+Расшифр[Iter].МФ+"#"+Расшифр[Iter].ОКДП_Гр+"#"+Расшифр[Iter].ОКДП+"#"+Str16(crcПредм);
    else
     Buf[Iter]=Расшифр[Iter].ВД+"#"+Расшифр[Iter].КБК+"#"+Расшифр[Iter].Призн+"#"+Расшифр[Iter].ОКДП+"#"+Расшифр[Iter].ОКВЭД+"#"+DateToString(Расшифр[Iter].ИсполСрок)+"#"+Расшифр[Iter].ИсполПер+"#"+Расшифр[Iter].ЕдИзм+"#"+Str16(crcПредм)+"#"+Str16(crcТреб);
  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,3,"КБК",Iter); 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.ПризнВСправ(Расшифр[Iter].Призн," ",".*"):
     ^НаОшибку("Различный набор справочников",mtError,3,"Призн_",Iter);
  fi;
 od;
 ^True;
end;

Func Проверить: L;
var Iter,y,Page,i:I;
var БК_,КОСГУ_,Призн_,Field,tmp,YYYY:S;
var Дат_:D;
var Сум_:N;
var Flag,isМФ:L;
 RefreshAna;
 if not ТипДок=nil:
    Flag=True;
    if ТипДок.Справ="" and Flag: Message("Код справочника заполнен",mtError); Flag=False; fi;
    if ТипДок.Наим="" and Flag: Message("Наименование не заполнено",mtError); Flag=False; fi;
    if ТипДок.ТипСч="" and Flag: Message("Тип счета не заполнен",mtError); Flag=False; fi;
    if ТипДок.КодСчД5="" and Flag: Message("Код счета дебета не заполнен",mtError); Flag=False; fi;
    if ТипДок.КодСчК5="" and Flag: Message("Код счета кредита не заполнен",mtError); Flag=False; fi;
    if not Flag:
       OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ЗАЯВКА_ЗАКУП_ТИП",True,ТипДок);
       ^False;
    fi;
 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 not Общ_Призн0="" and Name_A(Общ_Призн0)=" ": ^НаОшибку("Неизвестный аналитический признак "+Общ_Призн0,mtError,Page,"Общ_Призн0",0);  fi;
 if not Общ_Справ1_="" and Общ_Призн1="": ^НаОшибку("Введите "+Общ_Справ_Наим1_,mtError,Page,"Общ_Призн1",0);  fi;
 if not Общ_Справ2_="" and Общ_Призн2="": ^НаОшибку("Введите "+Общ_Справ_Наим2_,mtError,Page,"Общ_Призн2",0);  fi;
 if not Общ_Призн1="" and Name_A(Общ_Призн1)=" ": ^НаОшибку("Неизвестный аналитический признак "+Общ_Призн1,mtError,Page,"Общ_Призн1",0);  fi;
 if not Общ_Призн2="" and Name_A(Общ_Призн2)=" ": ^НаОшибку("Неизвестный аналитический признак "+Общ_Призн2,mtError,Page,"Общ_Призн2",0);  fi;
 Page=1;
 if ДатаРег=1.1.100: ^НаОшибку("Введите дату принятия к учету",mtError,Page,"ДатаРег",0); fi;
 if ДатаРег>=1.1.2014 and ФЗ=0: ^НаОшибку("Для даты принятия к учету >=1.1.2014 должен быть установлен флаг 44-ФЗ",mtError,Page,"ДатаРег",0); fi;
-- if НаимДок=nil or НаимДок.Наим="": ^НаОшибку("Введите наименование документа",mtError,Page,"НаимДок.Наим",0);  fi;
-- if НомерДок="": ^НаОшибку("Введите номер документа",mtError,Page,"НомерДок",0); fi;
-- if ДатаДок=1.1.100: ^НаОшибку("Введите дату документа",mtError,Page,"ДатаДок",0); fi;
 if not Справ="ПГ" and ДатаН=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 Year(ДатаРег)>Year(ДатаК) and not ДатаК=1.1.100: ^НаОшибку("Текущий год превышает год окончания документа",mtError,Page,"ДатаРег",0);  fi;
 if Round(СумДок,2)=0 and Round(СумГод1,2)=0 and Round(СумГод2,2)=0 and Round(СумГод3,2)=0 and Round(СумГод4,2)=0 and Round(СумГод5,2)=0 and Round(СумГод6,2)=0: ^НаОшибку("Введите сумму документа",mtError,Page,"СумДок",0);  fi;
 if ОКВ="": ^НаОшибку("Введите валюту документа",mtError,Page,"ОКВ",0); fi;
 if not Round(СумГод1,2)=0:
    if Год1="": ^НаОшибку("Введите I год документа",mtError,Page,"Год1",0); fi;
    if Name_A("ПЕРИОД."+Год1)=" ": ^НаОшибку("Неизвестный аналитический признак периода 'ПЕРИОД."+Год1+"'",mtError,Page,"Год1",0); fi;
 fi;
 if not Round(СумГод2,2)=0:
    if Год2="": ^НаОшибку("Введите II год документа",mtError,Page,"Год2",0); fi;
    if Name_A("ПЕРИОД."+Год2)=" ": ^НаОшибку("Неизвестный аналитический признак периода 'ПЕРИОД."+Год2+"'",mtError,Page,"Год2",0); fi;
 fi;
 if not Round(СумГод3,2)=0:
    if Год3="": ^НаОшибку("Введите III год документа",mtError,Page,"Год3",0); fi;
    if Name_A("ПЕРИОД."+Год3)=" ": ^НаОшибку("Неизвестный аналитический признак периода 'ПЕРИОД."+Год3+"'",mtError,Page,"Год3",0); fi;
 fi;
 if not Round(СумГод4,2)=0:
    if Год4="": ^НаОшибку("Введите IV год документа",mtError,Page,"Год4",0); fi;
    if Name_A("ПЕРИОД."+Год4)=" ": ^НаОшибку("Неизвестный аналитический признак периода 'ПЕРИОД."+Год4+"'",mtError,Page,"Год4",0); fi;
 fi;
 if not Round(СумГод5,2)=0:
    if Год4="": ^НаОшибку("Введите V год документа",mtError,Page,"Год5",0); fi;
    if Name_A("ПЕРИОД."+Год5)=" ": ^НаОшибку("Неизвестный аналитический признак периода 'ПЕРИОД."+Год5+"'",mtError,Page,"Год5",0); fi;
 fi;
 if not Round(СумГод6,2)=0:
    if Год4="": ^НаОшибку("Введите VI год документа",mtError,Page,"Год6",0); fi;
    if Name_A("ПЕРИОД."+Год6)=" ": ^НаОшибку("Неизвестный аналитический признак периода 'ПЕРИОД."+Год6+"'",mtError,Page,"Год6",0); fi;
 fi;
 if not Round(СумГод1+СумГод2+СумГод3+СумГод4+СумГод5+СумГод6,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: ^НаОшибку("Введите последний год документа",mtError,Page,"Год"+Str(Year(ДатаК)-Year(ДатаН)+1),0); fi;
 fi;
 if not ТекГод=Год1 and not ТекГод=Год2 and not ТекГод=Год3 and not ТекГод=Год4 and not ТекГод=Год5 and not ТекГод=Год6: ^НаОшибку("Недопустимы текущий год договора",mtError,Page,"ДатаРег",0); fi;
 if Год1=Год2 or Год1=Год3 or Год1=Год4 or Год1=Год5 or Год1=Год6: ^НаОшибку("Повторный ввод года "+Год1,mtError,Page,"Год1",0); fi;
 if not Год2="" and (Год2=Год3 or Год2=Год4 or Год2=Год5 or Год2=Год6): ^НаОшибку("Повторный ввод года "+Год2,mtError,Page,"Год2",0); fi;
 if not Год3="" and (Год3=Год4 or Год3=Год5 or Год3=Год6): ^НаОшибку("Повторный ввод года "+Год3,mtError,Page,"Год3",0); fi;
 if not Год4="" and (Год4=Год5 or Год4=Год6): ^НаОшибку("Повторный ввод года "+Год4,mtError,Page,"Год4",0); fi;
 if not Год5="" and Год5=Год6: ^НаОшибку("Повторный ввод года "+Год5,mtError,Page,"Год5",0); fi;
 if Пре=nil:
    if not Round(ПроцОбЗаяв,4)=0:
       if not Round(ПроцОбЗаяв,4)=Round(СумОбЗаяв*100/СумДок,4): ^НаОшибку("Указанный процент обеспечение заявки("+Str(ПроцОбЗаяв,4)+") не равен проценту исчисленного от общей суммы документа ("+Str(Round(СумОбЗаяв*100/СумДок,4),4)+")",mtError,Page,"ПроцОбЗаяв",0); fi;
    fi;
    if Round(СумОбЗаяв,2)>Round(СумДок,2) and not Round(СумОбЗаяв,2)=0: ^НаОшибку("Сумма обеспечения заявки не может превышать сумму документа всего",mtError,Page,"СумОбЗаяв",0); fi;
    if not Round(ПроцОбКт,4)=0:
       if not Round(ПроцОбКт,4)=Round(СумОбКт*100/СумДок,4): ^НаОшибку("Указанный процент обеспечение контракта("+Str(ПроцОбКт,4)+") не равен проценту исчисленного от общей суммы документа ("+Str(Round(СумОбКт*100/СумДок,4),4)+")",mtError,Page,"ПроцОбКт",0); fi;
    fi;
 fi;
 if Round(СумОбКт,2)>Round(СумДок,2) and not Round(СумОбКт,2)=0: ^НаОшибку("Сумма обеспечения контракта не может превышать сумму документа всего",mtError,Page,"СумОбКт",0); fi;
 if not Round(ПроцАв,4)=0:
    if not Round(ПроцАв,4)=Round(СумАв*100/СумДок,4): ^НаОшибку("Указанный процент авансового платежа ("+Str(ПроцАв,4)+") не равен проценту исчисленного от общей суммы документа ("+Str(Round(СумАв*100/СумДок,4),4)+")",mtError,Page,"ПроцАв",0); fi;
 fi;
 if Round(СумАв,2)>Round(СумДок,2) and not Round(СумАв,2)=0: ^НаОшибку("Сумма аванса не может превышать сумму документа всего",mtError,Page,"СумАв",0); fi;
 if Содерж="": ^НаОшибку("Введите краткое содержание",mtError,Page,"Содерж",0);  fi;
 if РазмещЗаказ="": ^НаОшибку("Введите способ размещения заказа",mtError,Page,"РазмещЗаказ_",0); fi;
 if not ФЗ=0 and РазмещСрок=1.1.100 and not РазмещЗаказ="10.83_2_7" and not РазмещЗаказ="11.93_1_4" and not РазмещЗаказ="11.93_1_5": ^НаОшибку("Укажите срок размещения заказа",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,"КБК",1); fi;
 isМФ=False;
 for Iter=1..Расшифр do
  if Расшифр[Iter].ВД="": ^НаОшибку("Выберите вид деятельности",mtError,Page,"ВД",Iter); fi;
  if Расшифр[Iter].КБК="": ^НаОшибку("Введите КБК",mtError,Page,"КБК",Iter); fi;
  if Round(Расшифр[Iter].Сум1,2)=0 and Round(Изм1[Iter],2)=0 and
     Round(Расшифр[Iter].Сум2,2)=0 and Round(Изм2[Iter],2)=0 and
     Round(Расшифр[Iter].Сум3,2)=0 and Round(Изм3[Iter],2)=0 and
     Round(Расшифр[Iter].Сум4,2)=0 and Round(Изм4[Iter],2)=0 and
     Round(Расшифр[Iter].Сум5,2)=0 and Round(Изм5[Iter],2)=0 and
     Round(Расшифр[Iter].Сум6,2)=0 and Round(Изм6[Iter],2)=0 and
     not Abs(ТипИзм)=99:
     ^НаОшибку("Введите сумму по КБК",mtError,Page,"Сум1",Iter);
  fi;
  if not Расшифр[Iter].МФ="": isМФ=True; fi;
 od;
 if not Abs(ТипИзм)=99:
    if not Round(СумГод1,2)=Round(ВсегоСум1,2) and not Год1="": ^НаОшибку("Сумма на "+Год1+" год ("+Str(СумГод1,2)+") отличается от суммы по КБК ("+Str(ВсегоСум1,2)+")",mtError,Page,"ВсегоСум1",0); fi;
    if not Round(СумГод2,2)=Round(ВсегоСум2,2) and not Год2="": ^НаОшибку("Сумма на "+Год2+" год ("+Str(СумГод2,2)+") отличается от суммы по КБК ("+Str(ВсегоСум2,2)+")",mtError,Page,"ВсегоСум2",0); fi;
    if not Round(СумГод3,2)=Round(ВсегоСум3,2) and not Год3="": ^НаОшибку("Сумма на "+Год3+" год ("+Str(СумГод3,2)+") отличается от суммы по КБК ("+Str(ВсегоСум3,2)+")",mtError,Page,"ВсегоСум3",0); fi;
    if not Round(СумГод4,2)=Round(ВсегоСум4,2) and not Год4="": ^НаОшибку("Сумма на "+Год4+" год ("+Str(СумГод4,2)+") отличается от суммы по КБК ("+Str(ВсегоСум4,2)+")",mtError,Page,"ВсегоСум4",0); fi;
    if not Round(СумГод5,2)=Round(ВсегоСум5,2) and not Год5="": ^НаОшибку("Сумма на "+Год5+" год ("+Str(СумГод5,2)+") отличается от суммы по КБК ("+Str(ВсегоСум5,2)+")",mtError,Page,"ВсегоСум5",0); fi;
    if not Round(СумГод6,2)=Round(ВсегоСум6,2) and not Год6="": ^НаОшибку("Сумма на "+Год6+" год ("+Str(СумГод6,2)+") отличается от суммы по КБК ("+Str(ВсегоСум6,2)+")",mtError,Page,"ВсегоСум6",0); fi;
 fi;
 --Проверяем на предмет существования счетов
 Раб.КСА.Начать;
 for Iter=1..Расшифр do
  БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","БК",False);
  КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","КОСГУ",False);
  Расшифр[Iter].СчДеб=БК_+"."+Расшифр[Iter].ВД+"."+КодСчД5+"."+КОСГУ_;
  if КодСчК5="ЗАБАЛАНС":
     Расшифр[Iter].СчКре="ЗАБАЛАНС";
    else
     Расшифр[Iter].СчКре=БК_+"."+Расшифр[Iter].ВД+"."+КодСчК5+"."+КОСГУ_;
  fi;
  Раб.КСА.ДобавитьСч(Расшифр[Iter].СчДеб,ТипСч,True);
  Раб.КСА.ДобавитьСч(Расшифр[Iter].СчКре,ТипСч,False);
 od;
 if Раб.КСА.Закончить(True): Message("Добавление счетов завершено"); fi;
 --Проверяем табличные признаки
 Раб.Бюджет.ПроверитьПризнакиНачать;
 for Iter=1..Расшифр do
  БК_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","БК",False);
  КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(Расшифр[Iter].КБК,"КР","КОСГУ",False);
  if Name_S(Расшифр[Iter].СчДеб)=" ": ^НаОшибку("Неизвестный индентификатор счета дебета "+Расшифр[Iter].СчДеб,mtError,Page,"СчДеб",Iter); fi;
  if Name_S(Расшифр[Iter].СчКре)=" ": ^НаОшибку("Неизвестный индентификатор счета кредита "+Расшифр[Iter].СчКре,mtError,Page,"СчДеб",Iter); fi;
  if not Correspond(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре): ^НаОшибку("Счета не могут корреспондировать "+Расшифр[Iter].СчДеб+"/"+Расшифр[Iter].СчКре,mtError,Page,"СчДеб",Iter); fi;
  tmp=Раб.Бюджет2005.Объединить(Общ_Призн1,Общ_Призн2," ");
  tmp=Раб.Бюджет2005.Объединить(tmp,Расшифр[Iter].Призн," ");
  if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,tmp,ИсклСправ): ^НаОшибку("",mtError,Page,"Призн_",Iter); fi;
  if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Расшифр[Iter].СчДеб,Расшифр[Iter].СчКре,tmp,ИсклСправ): ^НаОшибку("",mtError,Page,"Призн_",Iter); fi;
  if ФЗ=0:
     if Расшифр[Iter].ОКДП_Гр="" and not Расшифр[Iter].ОКДП="": ^НаОшибку("Введите номенклатурную группу ОКДП",mtError,Page,"ОКДП_Гр",Iter); fi;
     if not Расшифр[Iter].ОКДП_Гр="" and not Расшифр[Iter].ОКДП="":
        tmp=Раб.Договор.ВзятьЗначОКДП(Расшифр[Iter].ОКДП,"ГР273");
        if tmp="": tmp="000"; fi;
        if not tmp=Расшифр[Iter].ОКДП_Гр: ^НаОшибку("Недопустимый код номеклатурная группы "+Расшифр[Iter].ОКДП_Гр+", должен быть "+tmp+"^MВерсия номеклатурной группы "+verОКДП_Гр_,mtError,Page,"ОКДП_Гр",Iter); fi;
     fi;
     if isМФ and Расшифр[Iter].МФ="":
        if (ТекГод=Год1 and (not Round(Расшифр[Iter].Сум1,2)=0 or Round(Изм1[Iter],2)<0)) or
           (ТекГод=Год2 and (not Round(Расшифр[Iter].Сум2,2)=0 or Round(Изм2[Iter],2)<0)) or
           (ТекГод=Год3 and (not Round(Расшифр[Iter].Сум3,2)=0 or Round(Изм3[Iter],2)<0)) or
           (ТекГод=Год4 and (not Round(Расшифр[Iter].Сум4,2)=0 or Round(Изм4[Iter],2)<0)) or
           (ТекГод=Год5 and (not Round(Расшифр[Iter].Сум5,2)=0 or Round(Изм5[Iter],2)<0)) or
           (ТекГод=Год6 and (not Round(Расшифр[Iter].Сум6,2)=0 or Round(Изм6[Iter],2)<0)): ^НаОшибку("Введите график текущего года",mtError,Page,"МФ_",Iter);
        fi;
     fi;
    else
     if not РазмещЗаказ="0" and not РазмещЗаказ="10.83_2_7" and not РазмещЗаказ="11.93_1_4" and not РазмещЗаказ="11.93_1_5":
        if Расшифр[Iter].Лот=0 and (Справ="ПГ" or Справ="ЗК"): ^НаОшибку("Введите номер лота",mtError,Page,"Лот",Iter); fi;
        if Расшифр[Iter].ОКДП="": ^НаОшибку("Введите код по ОКПД",mtError,Page,"ОКДП ",Iter); fi;
        if ТипИзм=0 or ТипИзм=3 or Расшифр[Iter].Нов:
           if Length(Расшифр[Iter].ОКДП)=7: ^НаОшибку("Требуется код ОКПД, а не ОКДП",mtError,Page,"ОКДП ",Iter); fi;
           if Расшифр[Iter].ОКВЭД="": ^НаОшибку("Введите код по ОКВЭД",mtError,Page,"ОКВЭД",Iter); fi;
           if Расшифр[Iter].ОКПД2="" and not Расшифр[Iter].ОКВЭД2="": ^НаОшибку("Введите код по ОКПД 2",mtError,Page,"ОКПД2",Iter); fi;
           if Расшифр[Iter].ОКВЭД2="" and not Расшифр[Iter].ОКПД2="": ^НаОшибку("Введите код по ОКВЭД 2",mtError,Page,"ОКВЭД2",Iter); fi;
           if Расшифр[Iter].Предм="": ^НаОшибку("Введите предмет",mtError,Page,"Предм",Iter); fi;
           if Расшифр[Iter].ИсполСрок=1.1.100: ^НаОшибку("Введите срок исполнения",mtError,Page,"ИсполСрок",Iter); fi;
           if Расшифр[Iter].ИсполСрок>ДатаК and not ДатаК=1.1.100: ^НаОшибку("Срок исполнения (поставки) превышает дату окончания",mtError,Page,"ИсполСрок",Iter);  fi;
           if Расшифр[Iter].ИсполСрок<ДатаН: ^НаОшибку("Срок исполнения (поставки) не может быть ранее даты начала действия документа",mtError,Page,"ИсполСрок",Iter);  fi;
         --  if Расшифр[Iter].ИсполСрок<Срок: ^НаОшибку("Срок исполнения (поставки) не может быть ранее срока первой поставки",mtError,Page,"ИсполСрок",Iter);  fi;
           if Расшифр[Iter].ИсполПер="": ^НаОшибку("Выберите периодичность поставки",mtError,Page,"ИсполПер",Iter); fi;
           if ТипДок.УчетКол:
              if Расшифр[Iter].ЕдИзм="": ^НаОшибку("Введите единицу измерения",mtError,Page,"ЕдИзм",Iter); fi;
              if Расшифр[Iter].Точн="": ^НаОшибку("Введите точность измерителя",mtError,Page,"Точн",Iter); fi;
              if not (РазмещЗаказ="0" or РазмещЗаказ="10.83_2_7" or РазмещЗаказ="10.93_1_4" or РазмещЗаказ="10.93_1_5"):
                 if Расшифр[Iter].ПоЦене: ^НаОшибку("Для данного способа определения поставщика указывать измеритель предмета 'по цене' не допустимо",mtError,Page,"ПоЦене_",Iter); fi;
              fi;
              if not Round(Расшифр[Iter].Сум1,2)=0 and Round(Расшифр[Iter].Объем1,4)=0: ^НаОшибку("Заполните объем на "+Год1,mtError,Page,"Объем1",Iter); fi;
              if not Round(Расшифр[Iter].Сум2,2)=0 and Round(Расшифр[Iter].Объем2,4)=0: ^НаОшибку("Заполните объем на "+Год2,mtError,Page,"Объем2",Iter); fi;
              if not Round(Расшифр[Iter].Сум3,2)=0 and Round(Расшифр[Iter].Объем3,4)=0: ^НаОшибку("Заполните объем на "+Год3,mtError,Page,"Объем3",Iter); fi;
              if not Round(Расшифр[Iter].Сум4,2)=0 and Round(Расшифр[Iter].Объем4,4)=0: ^НаОшибку("Заполните объем на "+Год4,mtError,Page,"Объем4",Iter); fi;
              if not Round(Расшифр[Iter].Сум5,2)=0 and Round(Расшифр[Iter].Объем5,4)=0: ^НаОшибку("Заполните объем на "+Год5,mtError,Page,"Объем5",Iter); fi;
              if not Round(Расшифр[Iter].Сум6,2)=0 and Round(Расшифр[Iter].Объем6,4)=0: ^НаОшибку("Заполните объем на "+Год6,mtError,Page,"Объем6",Iter); fi;
              if Round(Расшифр[Iter].Сум1,2)=0 and not Round(Расшифр[Iter].Объем1,4)=0: ^НаОшибку("Заполните сумму на "+Год1+" или обнулите количество (цена)",mtError,Page,"Сум1",Iter); fi;
              if Round(Расшифр[Iter].Сум2,2)=0 and not Round(Расшифр[Iter].Объем2,4)=0: ^НаОшибку("Заполните сумму на "+Год2+" или обнулите количество (цена)",mtError,Page,"Сум2",Iter); fi;
              if Round(Расшифр[Iter].Сум3,2)=0 and not Round(Расшифр[Iter].Объем3,4)=0: ^НаОшибку("Заполните сумму на "+Год3+" или обнулите количество (цена)",mtError,Page,"Сум3",Iter); fi;
              if Round(Расшифр[Iter].Сум4,2)=0 and not Round(Расшифр[Iter].Объем4,4)=0: ^НаОшибку("Заполните сумму на "+Год4+" или обнулите количество (цена)",mtError,Page,"Сум4",Iter); fi;
              if Round(Расшифр[Iter].Сум5,2)=0 and not Round(Расшифр[Iter].Объем5,4)=0: ^НаОшибку("Заполните сумму на "+Год5+" или обнулите количество (цена)",mtError,Page,"Сум5",Iter); fi;
              if Round(Расшифр[Iter].Сум6,2)=0 and not Round(Расшифр[Iter].Объем6,4)=0: ^НаОшибку("Заполните сумму на "+Год6+" или обнулите количество (цена)",mtError,Page,"Сум6",Iter); fi;
           fi;
        fi;
     fi; --if not РазмещЗаказ="0" or not РазмещЗаказ="11.93_1_4" or not РазмещЗаказ="11.93_1_4":
     if РазмещЗаказ="10.83_2_7":
        if Расшифр[Iter].Предм="": ^НаОшибку("Введите предмет",mtError,Page,"Предм",Iter); fi;
     fi;
  fi;
 od;
 if not ПроверитьУникальностьКБК: ^False; fi;
 if not ПроверитьНаборСправ: ^False; fi;
 Page=2;
 if not Пре=nil and ТипИзм=0: ^НаОшибку("Введите тип изменения",mtError,Page,"ТипИзм_",0); fi;
 if not ТипИзм=0:
   if ДатаИзм=1.1.100: ^НаОшибку("Введите дату изменения",mtError,Page,"ДатаИзм",0); fi;
   if ДатаИзм<ДатаРег: ^НаОшибку("Дата изменения не может быть ранее даты регистрации документа",mtError,Page,"ДатаИзм",0); fi;
   if not ТипИзм=3 and not Year(ДатаИзм)=Year(ДатаРег): ^НаОшибку("Внесение изменений допустимо в пределах текущего года, в противном случае, выберите тип изменения 'перерегистрации на очередной год'",mtError,Page,"ДатаИзм",0); fi;
   if ДатаИзм<Пре.ДатаИзм: ^НаОшибку("Дата изменения не может быть ранее даты изменения предыдущей редакции документа "+DateToString(Пре.ДатаИзм),mtError,Page,"ДатаИзм",0); fi;
   if ДатаИзм<Пре.ДатаРег: ^НаОшибку("Дата изменения не может быть ранее даты принятия к учету предыдущей редакции документа "+DateToString(Пре.ДатаРег),mtError,Page,"ДатаИзм",0); fi;
   if ТипИзм=99:
      if НаимИзм=nil or НаимИзм.Наим="": ^НаОшибку("Введите наименование документа подтверждающего исполнение заявки",mtError,Page,"НаимИзм.Наим",0); fi;
      if ДатДокИзм=1.1.100: ^НаОшибку("Введите дату документа подтверждающего исполнение заявки",mtError,Page,"ДатДокИзм",0); fi;
      if ДатДокИзм>ДатаИзм: ^НаОшибку("Дата документа не может больше, чем дата изменения",mtError,Page,"ДатДокИзм",0); fi;
      if not ИсполДок1=nil or not ИсполДок2=nil:
         if ИсполДокПризн="": ^НаОшибку("Не задан признак документа подтверждающего исполнение заявки, перевыберите документа",mtError,Page,"ИсполДок_",0); fi;
         if Name_A(ИсполДокПризн)=" ": ^НаОшибку("Неизвестный аналитический признак документа подтверждающего исполнение заявки '"+ИсполДокПризн+"'",mtError,Page,"ИсполДок_",0); fi;
      fi;
   fi;
   if ОснИзм="": ^НаОшибку("Введите основание изменения",mtError,Page,"ОснИзм",0); fi;
 fi;
 Page=1;
 if not Пре=nil:
    if RecordExists(SelfCrd,Пре):
       if not Пре.ТипДок=ТипДок: ^НаОшибку("Тип документа не должен изменяться ("+RecordToString(Пре.ТипДок)+")",mtError,Page,"Загл",0); fi;
       if ТипИзм=3:
          ДатаРег=ДатаИзм;
          if Year(Пре.ДатаРег)+1>Year(ДатаРег): ^НаОшибку("При перерегистрации документа на очередной год, дата принятия к учету не может быть ранее 01 января очередного года",mtError,Page,"ДатаРег",0); fi;
         else
          if not Пре.Номер=Номер: ^НаОшибку("Порядковй номер не должен изменяться ("+Str(Пре.Номер)+")",mtError,Page,"Номер",0); fi;
          if not Пре.ДатаРег=ДатаРег: ^НаОшибку("Дата принятия к учета не должна изменяться ("+DateToString(Пре.ДатаРег)+")",mtError,Page,"ДатаРег",0); fi;
       fi;
--       if not Пре.НомерДок=НомерДок: ^НаОшибку("Номер документа не должен изменяться ("+Пре.НомерДок+")",mtError,Page,"НомерДок",0); fi;
--       if not Year(Пре.ДатаДок)=Year(ДатаДок): ^НаОшибку("Дата (год) документа не должна изменяться ("+DateToString(Пре.ДатаДок)+")",mtError,Page,"ДатаДок",0); fi;
--       if not Пре.НаимДок=НаимДок:
--          if EnqOkCancel("Изменилось наименование документа с '"+Пре.НаимДок.Наим+"' на '"+НаимДок.Наим+"'"+Chr(13)+"Вы уверены ?",mtWarning)=cmCancel: ^НаОшибку("",mtError,1,"НаимДок",0); fi;
--       fi;
    fi;
 fi;
 if not fКонтрольЛБО=-1 and Справ="ЗК":
    Раб.Вспом.ОстЛБО.ОчиститьВх;
    Раб.Вспом.ОстЛБО.ОчиститьВх2;
    Дат_=if(ТипИзм=0 or ТипИзм=3:ДатаДок|True:ДатаИзм);
    Призн_=Trim(Общ_Призн1+" "+Общ_Призн2);
    for i=1..Расшифр do
     if Расшифр[i].ВД="1":
        if ТипИзм=0 or ТипИзм=3:
           if ТекГод=Год1: Сум_=Изм1[i];
             |ТекГод=Год2: Сум_=Изм2[i];
             |ТекГод=Год3: Сум_=Изм3[i];
             |ТекГод=Год4: Сум_=Изм4[i];
             |ТекГод=Год5: Сум_=Изм5[i];
             |ТекГод=Год6: Сум_=Изм6[i];
             |true:        Сум_=0;
           fi;
          else
           if ТекГод=Год1: Сум_=Расшифр[i].Сум1;
             |ТекГод=Год2: Сум_=Расшифр[i].Сум2;
             |ТекГод=Год3: Сум_=Расшифр[i].Сум3;
             |ТекГод=Год4: Сум_=Расшифр[i].Сум4;
             |ТекГод=Год5: Сум_=Расшифр[i].Сум5;
             |ТекГод=Год6: Сум_=Расшифр[i].Сум6;
             |true:        Сум_=0;
           fi;
        fi;
	Раб.Вспом.ОстЛБО.ДобавитьПО(Дат_+1,Расшифр[i].КБК,Trim(Призн_+" "+Расшифр[i].Призн),Сум_);
     fi;
    od;
    i=Раб.Вспом.ОстЛБО.Проверить;
    if fКонтрольЛБО=1 and i=-1:
       ^False;
      |not i=1:
       if EnqOkCancel("Игнорировать данное предупреждение ?",mtWarning)=cmCancel:
          ^False;
       fi;
    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(SelfCrd,"","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(SelfCrd)+" SET [ClosedModFob] =0, [UpdateTime] = DATEADD(second, 1, getdate()) , [MODIFIEDUSER] = '"+UserName(AliasName(SelfCrd))+"' WHERE [UKEY] = "+Str(RecordToInteger(Rec));
    Try
     ExecuteSQL(AliasName(SelfCrd),SQLquery);
    Except
     Message(ErrorMessage);
     ^False;
    end;
    RefreshCard(SelfCrd,ToDay);
    ShowProgress(11,"Обновление данных...");
    Try
     n=1; t=Time;
     ProgressPos(n);
     While GetCardFieldL(SelfCrd,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(SelfCrd,"","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=SelfCrd,"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 ПризнОбнов:L;
 if GUID="" or GUID="NEW": GUID=GetGUID; fi;
 Признак_Кмнт=НаимДок.Наим+" №"+НомерДок+" от "+DateToString(ДатаДок)+" "+Содерж;
 if not НеДейств:
    if not RecordExists(SelfCrd,Пре):  --оставляем старый признак
       if FuncExists(ExtFunc_SetupSign_):
          Признак=ExecuteFuncS(ExtFunc_SetupSign_);
         else
          Признак=Раб.Договор.КодВПризнак(ТекГод+"@"+Format("%.5D",Номер));
       fi;
    fi;
    Признак=Up(Признак);
    if Признак="": ^False; fi;
 fi;
 ^True;
end;

Func ПроверитьУник:L;
var OWA:I;
 OWA=OpenWorkArea("РПО_ДОК_ПРИЗНАК","","СПРАВ='"+Справ_+"' and ПРИЗНАК='"+Признак+"' and ДОК='"+SelfCrd+"' and not ЗАПИСЬ="+Str(RecordToInteger(Current))+if(Пре=nil,""," and not ЗАПИСЬ="+Str(RecordToInteger(Пре))));
 try
  if not Records(OWA)=0 then ^НаОшибку("Повторный ввод документа:^MГод="+ТекГод+"^MСправочник="+Справ+"^MНомер="+Format("%.5D",Номер),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 КартПризнОбнов(recПризнак:Record; recДок:Record; refДок:S; valСправ:S; valПризнак:S; valКмнт:S; valКлюч:S; valДата:D; aRefresh:L):Record;
var OWA,n,z:I;
var Признак_,Справ_,tmp,err:S;
 err="";
 if recДок=nil or refДок="" or valСправ="" or valПризнак="": ^nil; fi;
 OWA=OpenWorkArea("РПО_ДОК_ПРИЗНАК","","UKey="+RecordToString(recПризнак));
 try
  n=Records(OWA);
  if not n=0 then
     Справ_=GetFieldS(OWA,1,"Справ");
     Признак_=GetFieldS(OWA,1,"Признак");
     if Признак_=valПризнак and Справ_=valСправ and GetFieldI(OWA,1,"Запись")=RecordToInteger(recДок) and GetFieldS(OWA,1,"Док")=refДок and GetFieldS(OWA,1,"Признак_Кмнт")=valКмнт and GetFieldS(OWA,1,"РПО_Ключ")=valКлюч and GetFieldD(OWA,1,"Дата")=valДата: ^recПризнак; fi;
     n=1;
  fi;
  if not Признак_=valПризнак or n=0:
     if not ValidSign(valСправ+"."+valПризнак):
        Раб.Бюджет.ПроверитьПризнак(valСправ+"."+valПризнак);
        ^nil; 
     fi;
     if aRefresh: Refresh; fi;
     if not Name_A(valСправ+"."+valПризнак)=" " then
        if not n=0:
           if SignUsed(valСправ+"."+valПризнак) then ^nil; fi;
           if not Раб.Бюджет2005.КартПризнакИспользуется("РПО_ДОК_ПРИЗНАК","Признак",recПризнак,valСправ+".*")="" then ^nil; fi;
        fi;
     fi;
  fi;
  BeginChanging(OWA,False);
  try
   if n=0 then
      if recПризнак=nil:
         n=InsertRecord(OWA);
        else
         n=InsertRecordByKey(OWA,recПризнак);
      fi;
      recПризнак=GetRecordKey(OWA,n);
   fi;
   if not Справ_=valСправ: n=PutFieldS(OWA,n,"Справ",valСправ); fi;
   if not Признак_=valПризнак: n=PutFieldS(OWA,n,"Признак",valПризнак); fi;
   if not refДок=GetFieldS(OWA,n,"Док"): n=PutFieldS(OWA,n,"Док",refДок); fi;
   if not RecordToInteger(recДок)=GetFieldI(OWA,n,"Запись"): n=PutFieldI(OWA,n,"Запись",RecordToInteger(recДок)); fi;
   if not valКмнт=GetFieldS(OWA,n,"Признак_Кмнт"): n=PutFieldS(OWA,n,"Признак_Кмнт",valКмнт); fi;
   if not valКлюч=GetFieldS(OWA,n,"РПО_Ключ"): n=PutFieldS(OWA,n,"РПО_Ключ",valКлюч); fi;
   if not valДата=GetFieldD(OWA,n,"Дата"): n=PutFieldD(OWA,n,"Дата",valДата); fi;
   EndChanging(OWA);
  except
   recПризнак=nil;
   CancelChanging(OWA);
   Err=ErrorMessage;
  end;
 finally
  CloseWorkArea(OWA);
 end;
 if not Err="": Message(Err,mtError); fi;
 ^recПризнак;
end;

Func УдалитьПризнак(recПризнак:Record):L;
var OWA:I;
 OWA=OpenWorkArea("РПО_ДОК_ПРИЗНАК","","UKey="+RecordToString(recПризнак));
 Try
  if Records(OWA)=0: ^True; fi;
  BeginChanging(OWA,False);
  Try
   DeleteAllRecords(OWA);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 ^True;
end;

Func Копировать(Rec:record; Cmd:S):Record;
var OWAs,OWAt,n,nn,n1,w,ww,OAt,y:I;
var tmp,field,typ,val,err:S;
var Res:Record;
 Res=nil;
 err="";
 OWAs=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Rec));
 try
  OWAt=OpenWorkArea(SelfCrd,"","1=0");
  Try
   Beginchanging(OWAt);
   Try
     n1=InsertRecord(OWAt);
     Res=GetRecordKey(OWAt,n1);
     CopyRecord(OWAs,OWAt,1,n1);
     ww=WordsCount(Cmd,"|");
     for w=1..ww do
      tmp=ExtractWord(w,Cmd,"|");
      Field=ExtractWord(1,tmp,":");
      Typ=ExtractWord(2,tmp,":");
      Val=ExtractWord(3,tmp,":");
      if Typ="S": n1=PutFieldS(OWAt,n1,Field,Val);
        |Typ="I": n1=PutFieldI(OWAt,n1,Field,Int(Val));
        |Typ="N": n1=PutFieldN(OWAt,n1,Field,StringToNumeric(Val));
        |Typ="D": n1=PutFieldD(OWAt,n1,Field,StringToDate(Val));
        |Typ="R": n1=PutFieldR(OWAt,n1,Field,StringToRecord(Val));
        |Typ="L": n1=PutFieldL(OWAt,n1,Field,Val="True");
        |True: Trace("Неизвестный тип поля '"+Typ+"'");
      fi;
     od;
     OAt=OpenArray(OWAt,n1,"Расшифр","");
     nn=Records(OAt);
     for n=1..nn do
      n=PutFieldL(OAt,n,"Нов",False);
      if not GetFieldI(OWAt,n1,"ТипИзм")=3:
         for y=1..10 do
          n=PutFieldN(OAt,n,"Сум_Пре"+Str(y),GetFieldN(OAt,n,"Сум"+Str(y)));
          n=PutFieldN(OAt,n,"Объем_Пре"+Str(y),GetFieldN(OAt,n,"Объем"+Str(y)));
          if GetFieldI(OWAt,n1,"ТипИзм")=-99 or (GetFieldI(OWAt,n1,"ТипИзм")=99 and (ТипДок.ИсполРежим=-1 or Справ="ЗК")):
             n=PutFieldN(OAt,n,"Сум"+Str(y),0);
             n=PutFieldN(OAt,n,"Объем"+Str(y),0);
          fi;
         od;
      fi;
     od;
     for n=1..nn do
      y=nn-(n-1);
      if not Abs(GetFieldI(OWAt,n1,"ТипИзм"))=99 and
             GetFieldN(OAt,y,"Сум1")=0 and GetFieldN(OAt,y,"Сум2")=0 and GetFieldN(OAt,y,"Сум3")=0 and GetFieldN(OAt,y,"Сум4")=0 and GetFieldN(OAt,y,"Сум5")=0 and GetFieldN(OAt,y,"Сум6")=0 and GetFieldN(OAt,y,"Сум7")=0 and GetFieldN(OAt,y,"Сум8")=0 and GetFieldN(OAt,y,"Сум9")=0 and GetFieldN(OAt,y,"Сум10")=0 and
             GetFieldN(OAt,y,"Сум_Пре1")=0 and GetFieldN(OAt,y,"Сум_Пре2")=0 and GetFieldN(OAt,y,"Сум_Пре3")=0 and GetFieldN(OAt,y,"Сум_Пре4")=0 and GetFieldN(OAt,y,"Сум_Пре5")=0 and GetFieldN(OAt,y,"Сум_Пре6")=0 and GetFieldN(OAt,y,"Сум_Пре7")=0 and GetFieldN(OAt,y,"Сум_Пре8")=0 and GetFieldN(OAt,y,"Сум_Пре9")=0 and GetFieldN(OAt,y,"Сум_Пре10")=0:
             DeleteRecord(OAt,y);
      fi;
     od;
     EndChanging(OWAt);
   Except
    CancelChanging(OWAt);
    err=ErrorMessage;
   End;
  Finally
   CloseWorkArea(OWAt);
  end;
 Finally
  CloseWorkArea(OWAs);
 end;
 if not err="": Message(err,mtError); ^nil; fi;
 ^Res;
end;

Proc Обнулить;
var n,Iter:i;
 if ТипИзм=-99 or (ТипИзм=99 and (ТипДок.ИсполРежим=-1 or Справ="ЗК")):
    Iter=1;
    While Iter<=Расшифр do
     if Расшифр[Iter].Нов:
        DeleteFrame(Расшифр,Iter);
       else
        for n=1..10 do
         PutVariableN("Расшифр["+Str(Iter)+"].Сум"+Str(n),0);
         PutVariableN("Расшифр["+Str(Iter)+"].Объем"+Str(n),0);
        od;
        Iter=Iter+1;
     fi;
    od;
 fi;
end;

Func КонтрольТипСвед(Iter:I):L;
 if RecordExists(SelfCrd,Пре) and not Расшифр[Iter].Нов and not ТипИзм=3: Message("Изменение данной строки невозможно, если необходимо аннулировать значение данной строки проставте '0' в суммовые показатели",mtError); ^False; fi;
 ^True;
end;

Func ПрибитьЖука:L;
var OWA:I;
 OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Current));
 Try
  if not Records(OWA)=0:
     Message("Упс! Получен не уникальный ключ записи. Перезапустите сервер",mtError);
     ^True;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^False;
end;

Proc ВызватьКарт (aRec:Record; aFilter:S; aСправ:S; aТипДок:Record);
var OWA,n:I;
 if aСправ="" and aТипДок=nil: aСправ="ЗК"; fi;
 OWA=OpenWorkArea("РПО_ЗАЯВКА_ЗАКУП_ТИП","","СПРАВ='"+aСправ+"'");
 Try
  if Records(OWA)=0:
     BeginChanging(OWA);
     Try
      n=InsertRecord(OWA);
      n=PutFieldS(OWA,n,"НАИМ",if(aСправ="ЗК":"Заявка на закупку"|aСправ="ПГ":"План-график"|True:""));
      n=PutFieldS(OWA,n,"СПРАВ",aСправ);
      n=PutFieldS(OWA,n,"КОДСЧД5",if(aСправ="ЗК":"ЗАБ.ЗК"|aСправ="ПГ":"ЗАБ.ПГ"|True:""));
      n=PutFieldS(OWA,n,"КОДСЧК5","ЗАБАЛАНС");
      n=PutFieldS(OWA,n,"ТИПСЧ","ЗАБАЛАНС");
      n=PutFieldL(OWA,n,"УЧЕТКОЛ",aСправ="ЗК" or aСправ="ПГ");
      n=PutFieldS(OWA,n,"КЛНКФИЛЬТР",if(aСправ="ЗК":""|aСправ="ПГ":""|True:""));
      n=PutFieldI(OWA,n,"ИСПОЛРЕЖИМ",if(aСправ="ЗК":-1|aСправ="ПГ": 1|True:0 ));
      n=PutFieldI(OWA,n,"РАЗРЕШЕНИЯ",0);
      n=PutFieldL(OWA,n,"ОБЕСПЕЧ",aСправ="ЗК");
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
  fi;
  aТипДок=GetRecordKey(OWA,Records(OWA));
 Finally
  CloseWorkArea(OWA);
 end;
 inТипДок=aТипДок;
 if not aFilter="": aFilter="("+aFilter+")"; fi;
 aFilter=Раб.Бюджет2005.Объединить(aFilter,if(aСправ="","","Справ='"+aСправ+"'")," and ");
-- aFilter=Раб.Бюджет2005.Объединить(aFilter,if(aТипДок=nil,"","ТипДок="+RecordToString(aТипДок))," and ");
 OpenCardFile(SelfCrd,aFilter,aRec);
end;

Func ЗаполнитьКлючДок:L;
var Flag:L;
 Flag=True;
 if FuncExists(extКлюч): 
    Flag=ExecuteFuncL(extКлюч);
 fi;
 ^Flag;
end;

Func ExtOnVerify:L;
 if FuncExists(ExtFunc_OnVerify_): ^ExecuteFuncL(ExtFunc_OnVerify_); fi;
 ^True;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Загл_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec,Store: Record;
var Flag:L;
 Store=ТипДок;
 Rec=OpenCardFile("РПО_ЗАЯВКА_ЗАКУП_ТИП","not НеДейств",ТипДок);
 if not Rec=nil:
    ТипДок=Rec;
    Flag=true;
    if ТипДок.Справ="" and Flag: Message("Код справочника заполнен",mtError); Flag=False; fi;
    if ТипДок.Наим="" and Flag: Message("Наименование не заполнено",mtError); Flag=False; fi;
    if ТипДок.ТипСч="" and Flag: Message("Тип счета не заполнен",mtError); Flag=False; fi;
    if ТипДок.КодСчД5="" and Flag: Message("Код счета дебета не заполнен",mtError); Flag=False; fi;
    if ТипДок.КодСчК5="" and Flag: Message("Код счета кредита не заполнен",mtError); Flag=False; fi;
    if not Flag:
       ТипДок=Store; 
       OpenBlank("ДОКУМЕНТЫ.ДОГОВОРПОСТ.ЗАЯВКА_ЗАКУП_ТИП",True,Rec);
       ^False; 
    fi;
    Справ=ТипДок.Справ;
    Номер=Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаРег",ДатаРег,"not Ukey="+recordToString(Current)+" and Справ='"+Справ_+"' and Match(Признак,'"+Str(Year(ДатаРег))+".*')");
    Оформление;
    for Iter=1..Расшифр do
     ПолучитьСч(Iter);
    od;
 fi;
 Return False;
end;

Proc Загл_OnExit(FieldName: String; Iter: Integer);
 ТипДок=nil;
 Справ=ТипДок.Справ;
 Номер=Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаРег",ДатаРег,"not Ukey="+recordToString(Current)+" and Справ='"+Справ_+"' and Match(Признак,'"+Str(Year(ДатаРег))+".*')");
 Оформление;
 for Iter=1..Расшифр do
  ПолучитьСч(Iter);
 od;
end;

Func Загл2_OnEnter(FieldName: String; Iter: Integer): logical;
 if НеДейств:
    if EnqOkCancel("Данная редакция документа является НЕДЕЙСТВУЮЩЕЙ, вы хотите перейти на ДЕЙСТВУЮЩИЮ редакцию ?")=cmOk:
       if RecordExists(SelfCrd,IntegerToRecord(Признак_Ref.Запись)):
          if Рег: EditorCancel; fi;
          Раб.Переход.Crd=SelfCrd;
          Раб.Переход.Bln=SelfBln;
          Раб.Переход.Modal=ModalMode;
          Раб.Переход.Rec=IntegerToRecord(Признак_Ref.Запись);
          OpenBlank("Раб.Переход",False);
         else
          Message("Экземпляр документа "+RecordToString(IntegerToRecord(Признак_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;
 fi;
 Return False;
end;

Proc Контр_onClick(Row: Integer; Col: Integer; Double: Logical);
var Iter: I;
var Field,Bln:S;
var Rec: Record;
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 Rec=nil;
 if Match(Field,"Учр*"): Field=SubStr(Field,5,255); Rec=Учр; fi;
 if Rec=nil: Exit; fi;
 Bln="";
 if Field="РПО_ППП": Bln="РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП"; fi;
 ExecuteProc("Инфо.Контрагент.Вызвать",Rec,Bln,Field,0);
end;

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

Func Общ_Призн0_onEnter(FieldName: String; Iter: Integer): logical;

 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;
 if Пре=nil: Message("Невозможно изменить статус документа т.к. документ существует в единственном экземпляре",mtError); ^False; fi;
 if not RecordExists(SelfCrd,Пре):
    if EnqOkCancel("Экземпляр документа "+RecordToString(Пре)+" не найден. Изменить тип сведений на первичные ?",mtWarning)=cmOk:
       Пре=nil;
    fi;
 fi;
 Return False;
end;

var ДатаРег_:D;

Func ДатаРег_OnEnter(FieldName: String; Iter: Integer): logical;
 ДатаРег_=ДатаРег;
 Return True;
end;

Proc ДатаРег_OnExit(FieldName: String; Iter: Integer);
 if not ДатаРег=1.1.100 and not Year(ДатаРег_)=Year(ДатаРег):
    Номер=Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаРег",ДатаРег,"not Ukey="+recordToString(Current)+" and Справ='"+Справ_+"' and Match(Признак,'"+Str(Year(ДатаРег))+".*')");
 fi;
end;

Func НаимДок_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var Flag:l;
 if FieldName="НаимИзм.Наим" and ТипИзм=0: Flag=ExecuteFuncL("ТипИзм_onEnter",FieldName,Iter); fi;
 Rec=Раб.Вспом.Договор_Наим.Выполнить(0);
 if not Rec=nil: 
    if FieldName="НаимДок.Наим" then НаимДок=Rec;
      |FieldName="НаимИзм.Наим" then НаимИзм=Rec;
    fi;
 fi;
 Return False;
end;

Proc НомерДок_OnExit(FieldName: String; Iter: Integer);
 if FuncExists(ExtFunc_SetupIND_):
    ВнутрНомерДок=ExecuteFuncS(ExtFunc_SetupIND_);
 fi;
end;

Proc ДатаДок_OnExit(FieldName: String; Iter: Integer);
 if Год1="": Год1=Str(Year(ДатаДок)); 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=AsString(Template.Field);
 PutVariableD(Field,dtmp);
 if Field="ДатаДок": ДатаДок_OnExit(Field,1);
   |Field="ДатаИзм" and ТипИзм=4: ДатаРег=ДатаИзм;
 fi;
 ^Cur;
end;

Func Номер_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 Номер=Раб.Обл.СледСУчетомДатыФ(SelfCrd,"Номер","ДатаРег",ДатаРег,"not Ukey="+recordToString(Current)+" and Справ='"+Справ_+"' and Match(Признак,'"+Str(Year(ДатаРег))+".*')");
 Return Cur;
end;

Func ВнутрНомерДок_OnEnter(FieldName: String; Iter: Integer): logical;
 if FuncExists(ExtFunc_SetupIND_):
    if ВнутрНомерДок="":
     ВнутрНомерДок=ExecuteFuncS(ExtFunc_SetupIND_);
    fi;
    Message("Настроена автоматическая процедура присвоения внутреннего номера. Измененение вручную невозможно",mtWarning);
    ^False;
 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..6 do
  Buf[n]=GetVariableS("Год"+Str(n));
 od;
 for n=1..6 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);
 if СумГод2=0:
    СумГод1=СумДок;
 fi;
 if Пре=nil:
    СумОбЗаяв=Round(СумДок*ПроцОбЗаяв/100,2);
    СумОбКт=Round(СумДок*ПроцОбКт/100,2);
 fi;
 СумАв=Round(СумДок*ПроцАв/100,2);
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;

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

Func Проц_OnVerify(FieldName: String; Iter: Integer; Value: Numeric): Logical;
 if Value<0 or Value>100: Message("Значение должно лежать в диапазоне 0..100",mtError); ^False; fi;
 Return True;
end;

Proc Проц_OnExit(FieldName: String; Iter: Integer);
var Проц_:N;
 Проц_=Round(GetVariableN(FieldName),4);
 PutVariableN(FieldName,Проц_);
 PutVariableN("Сум"+SubStr(FieldName,5,255),Round(СумДок*Проц_/100,2));
end;

Func СумПроц_OnVerify(FieldName: String; Iter: Integer; Value: Numeric): Logical;
 if Value>СумДок: Message("Сумма не может превышать сумму документа",mtError); ^False; fi;
 if Value<0: Message("Сумма не может быть отрицатльной",mtError); ^False; fi;
 Return True;
end;

Proc СумПроц_OnExit(FieldName: String; Iter: Integer);
 PutVariableN(FieldName,Round(GetVariableN(FieldName),2));
 PutVariableN("Проц"+SubStr(FieldName,4,255),Round(GetVariableN(FieldName)*100/СумДок,4));
end;

Func Содерж_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp,Field:s;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Раб.Вспом.Основание.Выполнить(SelfCrd+"."+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 РазмещЗаказ_OnEnter(FieldName: String; Iter: Integer): logical;
 РазмещЗаказ=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,True,if(not ФЗ=0:"44ФЗ"|Секрет>1:"491"|True:"1191"));
 Return False;
end;

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

Proc ДопТреб_OnExit(FieldName: String; Iter: Integer);
 ДопТреб="";
end;

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

Func ТипИзм_onEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if FieldName="ТипИзм_" or ТипИзм=0:
    ClearVariable(Buf);
    Buf[1]="Без изменений";
    Buf[2]="Изменение документа";
    Buf[3]="Исправление документа";
    Buf[4]="Перерегистрация на очередной год";
    Buf[5]="Исполнение";
    Buf[6]="Аннулирование";
    n=Alternate("Тип изменения",Buf,-1,if(ТипИзм=99:5|ТипИзм=-99:6|true:ТипИзм+1),12);
    if n=5: ТипИзм= 99;
      |n=6: ТипИзм=-99;
      |not n=0: ТипИзм=n-1;
    fi;
    if not n=0:
       Обнулить;
       Оформление;
    fi;
 fi;
 Return not FieldName="ТипИзм_";
end;

Proc ТипИзм_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(ТипИзм);
end;

Func ИсполДок_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор договора, контракта...","РПО_Договор","НомерДок","Номер документа","Рег and not НеДейств");
 if not Rec=nil:
    Rec=GetCardFieldR("РПО_Договор",Rec,"Признак_Ref");
    if not RecordExists("РПО_Договор_Признак",Rec): Message("Запись признака (Договор."+RecordToString(Rec)+") не найдена",mtError); ^False; fi;
    ИсполДок1=Rec;
    ИсполДок2=nil;
    НаимИзм=ИсполДок1.Договор.НаимДок;
    НомДокИзм=ИсполДок1.Договор.НомерДок;
    ДатДокИзм=ИсполДок1.Договор.ДатаДок;
    ИсполДокПризн="ДОГОВОР."+ИсполДок1.Признак;
    Оформление;
 fi;
 Return False;
end;

Proc ИсполДок_OnExit(FieldName: String; Iter: Integer);
 ИсполДок1=nil;
 ИсполДок2=nil;
 ИсполДокПризн="";
 Оформление;
end;

Proc ИсполДок_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln,crd:S;
var rec:Record;
 if not ИсполДок1=nil:
    bln=Раб.Договор.blnДоговор;
    crd=Раб.Договор.crdДоговор;
    rec=ИсполДок1.Договор;
   |not ИсполДок2=nil:
   |not Рег:
    ИсполДок_OnEnter(AsString(Template.Field),AsInteger(Template.Frame));
 fi;
 if not rec=nil and not crd="" and not bln="":
    if not RecordExists(Crd,rec): Message("Запись документа "+crd+"."+RecordToString(rec)+" не найдена",mtError); Exit; fi;
    OpenBlank(bln,true,rec);
 fi;
end;

Func ИсполППВх_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
var n:I;
var tmp:S;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор платежного поручения...","ПРИХПЛПОРУЧЕНИЯ","НОМЕРБУМ|ДАТАДОК:D","Номер|Дата","РПО_ПРОВОДИТЬ");
 if not Rec=nil:
    ИсполППВх=Rec;
    for n=1..ИсполППВх.РПО_РАСШИФР do
     tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(ИсполППВх.РПО_РАСШИФР[n].ПРИЗН," ","КОНКУРС.*","");
     if not tmp="":
        ИсполППВхПризн=tmp;
     fi;
    od;
    Оформление;
 fi;
 Return False;
end;

Proc ИсполППВх_OnExit(FieldName: String; Iter: Integer);
 ИсполППВх=nil;
 ИсполППВхПризн="";
 Оформление;
end;

Proc ИсполППВх_OnClick(Row: Integer; Col: Integer; Double: Logical);
var bln,crd:S;
var rec:Record;
 if ИсполДок1=nil and Рег:
    ИсполППВх_OnEnter(AsString(Template.Field),AsInteger(Template.Frame));
 fi;
 if not ИсполППВх=nil:
    if not RecordExists("ПРИХПЛПОРУЧЕНИЯ",ИсполППВх): Message("Запись документа "+"ПРИХПЛПОРУЧЕНИЯ"+"."+RecordToString(ИсполППВх)+" не найдена",mtError); Exit; fi;
    OpenBlank("ДОКУМЕНТЫ.БАНК.ПОРУЧ_ВХ",true,ИсполППВх);
 fi;
end;

Func verОКДП_Гр_OnEnter(FieldName: String; Iter: Integer): logical;
var i,v:i;
 ClearVariable(Buf);
 Buf[1]="Приказ Минэкономразвития РФ от 7 июня 2011 г. N 273";
 i=Alternate("Выберите редакцию номеклатуры",Buf,-1,if(verОКДП_Гр=273,1,1),12);
 if i=1: v=273;
   |true: ^False;
 fi;
 if not v=verОКДП_Гр:
    verОКДП_Гр=v;
 fi;
 Return False;
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,"|");
 Раб.Вспом.Сканер.Вызвать("Сканирование документа",SelfCrd,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=Раб.Вспом.Сканер.ЧитатьГЭК(SelfCrd,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;
 for Iter=1..УпрИзм do
  if ИзмТек[Iter]="*": Break; fi;
 od;
 if Iter=1: Message("Нет данных для сравнения"); ^False; fi;
 Раб.Вспом.Договор_Сводка_Изм.Сравнить(SelfCrd,ИзмRec[Iter-1],ИзмRec[Iter]);
 Return False;
end;

Func ИзмДок_onEnter(FieldName: String; Iter: Integer): logical;
var w,ww:i;
var Rec: Record;
 if ИзмТек[Iter]="*": Message("Вы уже находитесь на текущей записи"); ^False; fi;
 if not RecordExists(SelfCrd,ИзмRec[Iter]): Message("Запись "+RecordToString(ИзмRec[Iter])+" не найдена",mtError); ^False; fi;
 if Рег: EditorCancel; fi;
 Раб.Переход.Crd=SelfCrd;
 Раб.Переход.Bln=SelfBln;
 Раб.Переход.Modal=ModalMode;
 Раб.Переход.Rec=ИзмRec[Iter];
 OpenBlank("Раб.Переход",False);
 Return False;
end;

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

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

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

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

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
var Iter_,y:I;
 Iter_=Iter;
 if FieldName="A1" and not Рег and not Abs(ТипИзм)=99:
    Iter=InsertFrame(Расшифр,Iter+1);
    Расшифр[Iter].Нов=not Пре=nil and not ТипИзм=3;
   |FieldName="AA1" and not Рег and not Abs(ТипИзм)=99:
    Iter=InsertFrame(Расшифр,Iter+1);
    Расшифр[Iter].Нов=not Пре=nil and not ТипИзм=3;
    Расшифр[Iter].Лот=Расшифр[Iter_].Лот;
    Расшифр[Iter].ВД=Расшифр[Iter_].ВД;
    Расшифр[Iter].КБК=Расшифр[Iter_].КБК;
    Расшифр[Iter].ДопКл=Расшифр[Iter_].ДопКл;
    Расшифр[Iter].Призн=Расшифр[Iter_].Призн;
    for y=1..10 do
     PutVariableN("Расшифр["+str(Iter)+"].Сум"+Str(y),GetVariableN("Расшифр["+str(Iter_)+"].Сум"+Str(y)));
     PutVariableN("Расшифр["+str(Iter)+"].Объем"+Str(y),GetVariableN("Расшифр["+str(Iter_)+"].Объем"+Str(y)));
    od;
    Расшифр[Iter].МФ=Расшифр[Iter_].МФ;
    Расшифр[Iter].ОКДП_Гр=Расшифр[Iter_].ОКДП_Гр;
    Расшифр[Iter].ОКДП=Расшифр[Iter_].ОКДП;
    Расшифр[Iter].ОКДП_Призн=Расшифр[Iter_].ОКДП_Призн;
    Расшифр[Iter].ОКВЭД=Расшифр[Iter_].ОКВЭД;
    Расшифр[Iter].ОКСМ=Расшифр[Iter_].ОКСМ;
    Расшифр[Iter].Предм=Расшифр[Iter_].Предм;
    Расшифр[Iter].Предм2=Расшифр[Iter_].Предм2;
    Расшифр[Iter].Предм3=Расшифр[Iter_].Предм3;
    Расшифр[Iter].Предм4=Расшифр[Iter_].Предм4;
    Расшифр[Iter].Треб=Расшифр[Iter_].Треб;
    Расшифр[Iter].Треб2=Расшифр[Iter_].Треб2;
    Расшифр[Iter].Треб3=Расшифр[Iter_].Треб3;
    Расшифр[Iter].Треб4=Расшифр[Iter_].Треб4;
    Расшифр[Iter].ИсполСрок=Расшифр[Iter_].ИсполСрок;
    Расшифр[Iter].ИсполПер=Расшифр[Iter_].ИсполПер;
    Расшифр[Iter].ЕдИзм=Расшифр[Iter_].ЕдИзм;
    Расшифр[Iter].ПоЦене=Расшифр[Iter_].ПоЦене;
    Расшифр[Iter].Точн=Расшифр[Iter_].Точн;
    Расшифр[Iter].СчДеб=Расшифр[Iter_].СчДеб;
    Расшифр[Iter].СчКре=Расшифр[Iter_].СчКре;
    Расшифр[Iter].Кмнт2=Расшифр[Iter_].Кмнт2;
   |FieldName="A2": 
    Iter=InsertFrame(УпрФайл,УпрФайл+1);
 fi;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
  if FieldName="D1" and not Рег and (not Abs(ТипИзм)=99 or ТипИзм=3):
    if not Пре=nil and not Расшифр[Iter].Нов and not ТипИзм=3 and not (Расшифр[Iter].Сум1=0 and Изм1[Iter]=0 and Расшифр[Iter].Сум2=0 and Изм2[Iter]=0 and Расшифр[Iter].Сум3=0 and Изм3[Iter]=0 and Расшифр[Iter].Сум4=0 and Изм4[Iter]=0 and Расшифр[Iter].Сум5=0 and Изм5[Iter]=0 and Расшифр[Iter].Сум6=0 and Изм6[Iter]=0):
       Message("Для удаления данной строки введите нулевые значения в суммовые показатели",mtError); 
       ^False; 
    fi;
    DeleteFrame(Расшифр,Iter);
   |FieldName="D2":
    if not Файл[Iter]="":
       if EnqOkCancel("Файл '"+Файл[Iter]+"' будет удален, вы уверены ?",mtWarning)=cmCancel: ^False; fi;
       Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(Current),Файл[Iter]);
    fi;
    DeleteFrame(УпрФайл,Iter);
 fi;
Return False;
end;

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

Proc ВД_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].ВД=Пре.Расшифр[Iter].ВД;
    Exit;
 fi;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 НеПустаяТаблица;
 if Расшифр[Iter].ВД="": Message("Выберите источник",mtError); Template.Field="ВД"; Template.Frame=Iter; ^False; fi;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Раб.КБК.Список_КБК_РазрДобав=True;
 Раб.КБК.Список_КБК_КодСч=Расшифр[Iter].ВД+"."+КодСчД5;
 Раб.КБК.Список_КБК_РазрКОСГУ=true;
 tmp=Раб.КБК.Список("*.?.50?.??.*|*."+Расшифр[Iter].ВД+"."+КодСчД5+".*","КР","КБК+КОСГУ И");
 if tmp="": ^False; fi;
 Расшифр[Iter].КБК=tmp;
 ПолучитьСч(Iter);
 Return False;
end;

Proc КБК_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].КБК=Пре.Расшифр[Iter].КБК;
    Exit;
 fi;
end;

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

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

Func ОКДП_Гр_OnEnter(FieldName: String; Iter: Integer): logical;
 НеПустаяТаблица;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return Секрет<2;
end;

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

Proc ОКДП_Гр_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].ОКДП_Гр=Пре.Расшифр[Iter].ОКДП_Гр;
    Exit;
 fi;
 ОКДП_Гр_=Расшифр[Iter].ОКДП_Гр;
 Раб.Договор.ОКДП_Гр_Exit(selfbln+".ОКДП_Гр_");
 Расшифр[Iter].ОКДП_Гр=ОКДП_Гр_;
end;

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

Func ОКДП_OnEnter(FieldName: String; Iter: Integer): logical;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return True;
end;

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

Proc ОКДП_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].ОКДП=Пре.Расшифр[Iter].ОКДП;
    Exit;
 fi;
end;

Func ОКДП_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var Rec,Rec2: Record;
var tmp,s1,s2:S;
var Crd,txt:S;
var hОКДП:S;
var Flag:L;
 НеПустаяТаблица;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 crd=if(Секрет<2,"РПО_ОКДП","РПО_ОКП");
 txt=if(Секрет<2,"Общероссийский классификатор видов экономической деятельности, продукции и услуг (ОКДП)","Загрузить общероссийский классификатор продукции (ОКП) ?");
 if fОКДП=0: 
    fОКДП=Раб.Договор.ЗагрузСправ(crd,PlanVar("Std_Rpo")+"\DBF\"+crd,ieCRD,txt+Chr(13)+"Внимание! Процес загрузки займет значительное время"); 
 fi;
 if fОКДП=1:
    hОКДП=Расшифр[Iter].ОКДП;
    if Секрет<2:
       ОКДП_Гр_=Расшифр[Iter].ОКДП_Гр;
       ОКДП_=Расшифр[Iter].ОКДП;
       rec=Раб.Договор.ОКДП_Lookup(selfbln+".ОКДП_Гр_",selfbln+".ОКДП_",selfbln+".fОКДП",verОКДП_Гр);
       if not rec=nil:
          Расшифр[Iter].ОКДП_Гр=ОКДП_Гр_;
          Расшифр[Iter].ОКДП=ОКДП_;
       fi;
      else
       Rec=Раб.Поиск.ВыборИзКартотеки("Выбор из классификатора ОКП","РПО_ОКП","КОД|НАИМ","Код продукции|Наименование продукции","");
       if Rec=nil: ^Cur; fi;
       Расшифр[Iter].ОКДП=GetCardFieldS("РПО_ОКП",Rec,"КОД");
       tmp=GetCardFieldS("РПО_ОКП",Rec,"НАИМ");
       if (not Pos("/",tmp)=0 and SubStr(Расшифр[Iter].ОКДП,6,1)="0") or Раб.Договор.ОКП_ЕстьВидПрод(Расшифр[Iter].ОКДП):
          if EnqOkCancel("Детализировать для выбранной подгруппы виды продукции ?",mtWarning)=cmOk:
             tmp=SubStr(Расшифр[Iter].ОКДП,1,5)+"?";
             Rec2=OpenCardFile("РПО_ОКП","Match(КОД,'"+tmp+"')");
             if not Rec2=nil:
                Rec=Rec2;
                Расшифр[Iter].ОКДП=GetCardFieldS("РПО_ОКП",Rec,"КОД");
                tmp=GetCardFieldS("РПО_ОКП",Rec,"НАИМ");
             fi;
          fi;
       fi;
    fi;
 fi;
 Return Cur;
end;

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

Func ОКПД_OnEnter(FieldName: String; Iter: Integer): logical;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return True;
end;

Func ОКПД_OnVerify(FieldName: String; Iter: Integer; Value: String): logical;
var OWA,nr:I;
var Ps,F:S;
var Rec: Record;
 if FieldName="ОКПД2":
    Ps="2";
 fi;
 OWA=OpenWorkArea("РПО_ОКПД"+Ps,"Код","Код='"+Value+"' and Length(Код)=8");
 Try
  nr=Records(OWA);
 Finally
  CloseWorkArea(OWA);
 end;
 if nr=0: Message("Код '"+Value+"' не найден в справочнике ОКПД "+Ps,mtError); ^False; fi;
 F="Match(Код,'"+SubStr(Value,1,7)+"*')";
 OWA=OpenWorkArea("РПО_ОКВЭД"+Ps,"Код",F);
 Try
  nr=Records(OWA);
  if nr=0:
     F="Match(Код,'"+SubStr(Value,1,5)+"*')";
     SetFilter(OWA,F);
     nr=Records(OWA);
  fi;
  if nr=1:
     if FieldName="ОКПД2":
        Расшифр[Iter].ОКВЭД2=GetFieldS(OWA,1,"Код");
       else
        Расшифр[Iter].ОКВЭД=GetFieldS(OWA,1,"Код");
     fi;
    |nr>1:
     Message("Уточните код по ОКВЭД "+Ps);
     Rec=OpenCardFile("РПО_ОКВЭД"+Ps,F);
     if not Rec=nil:
        if FieldName="ОКПД2":
           Расшифр[Iter].ОКВЭД2=GetCardFieldS("РПО_ОКВЭД"+Ps,Rec,"Код");
          else
           Расшифр[Iter].ОКВЭД=GetCardFieldS("РПО_ОКВЭД"+Ps,Rec,"Код");
        fi;
     fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 Return True;
end;

Func ОКПД_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,OWA,nr:i;
var F,FieldName,Ps,Val:S;
var Rec: Record;
 НеПустаяТаблица;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 FieldName=AsString(Template.Field);
 if FieldName="ОКПД2":
    Ps="2";
 fi;
 Rec=Раб.Поиск.ВыборИзКартотеки("Выбор ОКПД "+Ps,"РПО_ОКПД"+Ps,"Код|Наим","Код|Наименование","");
 if not Rec=nil:
    val=SubStr(GetCardFieldS("РПО_ОКПД"+Ps,Rec,"Код"),1,8);
    if FieldName="ОКПД2":
       Расшифр[Iter].ОКПД2=val;
      else
       Расшифр[Iter].ОКДП=val;
    fi;
    --if Расшифр[Iter].Предм="": Расшифр[Iter].Предм=GetCardFieldS("РПО_ОКПД"+Ps,Rec,"Наим"); fi;
    F="Match(Код,'"+SubStr(val,1,7)+"*')";
    OWA=OpenWorkArea("РПО_ОКВЭД"+Ps,"Код",F);
    Try
     nr=Records(OWA);
     if nr=0:
        F="Match(Код,'"+SubStr(val,1,5)+"*')";
        SetFilter(OWA,F);
        nr=Records(OWA);
     fi;
     if nr=1:
        if FieldName="ОКПД2":
           Расшифр[Iter].ОКВЭД2=GetFieldS(OWA,1,"Код");
          else
           Расшифр[Iter].ОКВЭД=GetFieldS(OWA,1,"Код");
        fi;
       |nr>1:
        Message("Уточните код по ОКВЭД "+Ps);
        Rec=OpenCardFile("РПО_ОКВЭД"+Ps,F);
        if not Rec=nil:
           if FieldName="ОКПД2":
              Расшифр[Iter].ОКВЭД2=GetCardFieldS("РПО_ОКВЭД"+Ps,Rec,"Код");
             else
              Расшифр[Iter].ОКВЭД=GetCardFieldS("РПО_ОКВЭД"+Ps,Rec,"Код");
           fi;
        fi;
     fi;
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 Return Cur;
end;

Func ОКВЭД_OnEnter(FieldName: String; Iter: Integer): logical;
var OWA,nr:I;
var F,Ps,val:S;
var Rec: Record;
 if not КонтрольТипСвед(Iter): ^False; fi;
 if FieldName="ОКВЭД2":
    Ps="2";
    if Расшифр[Iter].ОКПД2="": Message("Выберите код ОКПД 2",mtError); Template.Field="ОКПД2"; Template.Frame=Iter; ^False; fi;
    val=Расшифр[Iter].ОКПД2;
   else
    if Расшифр[Iter].ОКДП="": Message("Выберите код ОКПД",mtError); Template.Field="ОКДП "; Template.Frame=Iter; ^False; fi;
    val=Расшифр[Iter].ОКДП;
 fi;
 OWA=OpenWorkArea("РПО_ОКВЭД"+Ps,"Код","Match(Код,'"+SubStr(Val,1,7)+"*')");
 Try
  nr=Records(OWA);
  if nr=0:
     F="Match(Код,'"+SubStr(val,1,5)+"*')";
    else
     F="Match(Код,'"+SubStr(val,1,7)+"*')";
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 Rec=OpenCardFile("РПО_ОКВЭД"+Ps,F);
 if not Rec=nil:
    if FieldName="ОКВЭД2":
       Расшифр[Iter].ОКВЭД2=GetCardFieldS("РПО_ОКВЭД"+Ps,Rec,"Код");
      else
       Расшифр[Iter].ОКВЭД=GetCardFieldS("РПО_ОКВЭД",Rec,"Код");
    fi;
 fi;
 Return False;
end;

Proc ОКВЭД_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    if FieldName="ОКВЭД2":
       Расшифр[Iter].ОКВЭД2=Пре.Расшифр[Iter].ОКВЭД2;
      else
       Расшифр[Iter].ОКВЭД=Пре.Расшифр[Iter].ОКВЭД;
    fi;
    Exit;
 fi;
end;

Func Предм_OnEnter(FieldName: String; Iter: Integer): logical;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return True;
end;

Proc Предм_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].Предм=Пре.Расшифр[Iter].Предм;
    Exit;
 fi;
end;

Func Предм_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var OWA,n,nr,OA,i,ii,z,Iter:i;
var Mask:S;
var UKey,SubUKey:Record;
 Template.HideEditor(False);
 if Input(Mask,"Введите шаблон поиска")=cmCancel: ^Cur; fi;
 if Mask="": Message("Шаблон поиска не может быть пустой",mtWarning); ^Cur; fi;
 НеПустаяТаблица;
 Iter=AsInteger(Template.Frame);
 ClearVariable(Buf);
 ClearVariable(Buf2);
 OWA=OpenWorkArea(SelfCrd,"","not НеДейств and not ФЗ=0");
 Try
  nr=Records(OWA);
  if not nr=0:
     OA=OpenArray(OWA,1,"Расшифр","","Match(Предм,'*"+Mask+"*')");
  fi;
  for n=1..nr do
   UKey=GetRecordKey(OWA,n);
   ii=Records(OA);
   for i=1..ii do
    z=z+1;
    Buf[z]=GetFieldS(OA,i,"ОКДП")+" "+SubStr(GetFieldS(OA,i,"Предм"),1,127)+" ["+GetFieldS(OA,i,"ЕдИзм")+"]";
    Buf2[z]=RecordToString(UKey)+"|"+RecordToString(GetRecordKey(OA,i));
   od;
  od;
  if z=0: Message("По шаблону поиска '"+Mask+"' ничего не найдено");^Cur; fi;
  z=Alternate("Вебирите значение",Buf,-1,1,12);
  if not z=0:
     n=GetRecordNumber(OWA,StringToRecord(ExtractWord(1,Buf2[z],"|")));
     i=GetRecordNumber(OA ,StringToRecord(ExtractWord(2,Buf2[z],"|")));
     Расшифр[Iter].ОКДП=GetFieldS(OA,i,"ОКДП");
     Расшифр[Iter].ОКВЭД=GetFieldS(OA,i,"ОКВЭД");
     Расшифр[Iter].Предм=GetFieldS(OA,i,"Предм");
     Расшифр[Iter].Треб=GetFieldS(OA,i,"Треб");
     Расшифр[Iter].ЕдИзм=GetFieldS(OA,i,"ЕдИзм");
     Расшифр[Iter].ПоЦене=GetFieldL(OA,i,"ПоЦене");
     Расшифр[Iter].Точн=GetFieldS(OA,i,"Точн");
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 Return Cur;
end;

Func Треб_OnEnter(FieldName: String; Iter: Integer): logical;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return True;
end;

Proc Треб_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].Треб=Пре.Расшифр[Iter].Треб;
    Exit;
 fi;
end;

Func МФ_OnEnter(FieldName: String; Iter: Integer): logical;
var mm:I;
 if not КонтрольТипСвед(Iter): ^False; fi;
 ClearVariable(Buf);
 for MM=1..12 do
  Buf[mm]=Format("%.2D",MM)+" --"+Месяц(MM);
 od;
 InsertInArray(Buf,1,"IV квартал");
 InsertInArray(Buf,1,"III квартал");
 InsertInArray(Buf,1,"II квартал");
 InsertInArray(Buf,1,"I квартал");
 mm=Alternate("Выберите плановый период текущего года",Buf,-1,1,12);
 if not mm=0:
    Расшифр[Iter].МФ=ExtractWord(1,Buf[mm]," ");
 fi;
 Return False;
end;

Proc МФ_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].МФ=Пре.Расшифр[Iter].МФ;
    Exit;
 fi;
 Расшифр[Iter].МФ="";
end;

Func ИсполСрок_OnEnter(FieldName: String; Iter: Integer): logical;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return true;
end;

Proc ИсполСрок_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].ИсполСрок=Пре.Расшифр[Iter].ИсполСрок;
    Exit;
 fi;
end;

Func ИсполСрок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var tmp:d;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    Iter=AsInteger(Template.Frame);
    Расшифр[Iter].ИсполСрок=tmp;
 fi;
 Return Cur;
end;

Func ИсполПер_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
 if not КонтрольТипСвед(Iter): ^False; fi;
 ClearVariable(Buf);
 Buf[1]="нет";
 Buf[2]="ежедневно";
 Buf[3]="еженедельно";
 Buf[4]="два раза в месяц";
 Buf[5]="ежемесячно";
 Buf[6]="ежеквартально";
 Buf[7]="раз в полгода";
 n=Alternate("Выберите периодичность",Buf,-1,SearchInArray(Buf,Расшифр[Iter].ИсполПер),12);
 if not n=0:
    Расшифр[Iter].ИсполПер=Buf[n];
 fi;
 Return False;
end;

Proc ИсполПер_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].ИсполПер=Пре.Расшифр[Iter].ИсполПер;
    Exit;
 fi;
end;

Func ЕдИзм_OnEnter(FieldName: String; Iter: Integer): logical;
 if not КонтрольТипСвед(Iter): ^False; fi;
 Return True;
end;

Func ЕдИзм_OnVerify(FieldName: String; Iter: Integer; Value: String): logical;
var OWA,nr:I;
 OWA=OpenWorkArea("РПО_ОКЕИ","НКБО","НКБО='"+Up(Value)+"'");
 Try
  nr=Records(OWA);
 Finally
  CloseWorkArea(OWA);
 end;
 if nr=0: Message("Единица измерения '"+Value+"' не найдена в справочнике ОКЕИ",mtError); ^False; fi;
 Return True;
end;

Proc ЕдИзм_OnExit(FieldName: String; Iter: Integer);
 if not КонтрольТипСвед(Iter): 
    Расшифр[Iter].ЕдИзм=Пре.Расшифр[Iter].ЕдИзм;
    Exit;
 fi;
end;

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

Func ПоЦене_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 if not КонтрольТипСвед(Iter): ^False; fi;
 ClearVariable(Buf);
 Buf[1]="Количество";
 if not (РазмещЗаказ="0" or РазмещЗаказ="10.83_2_7" or РазмещЗаказ="10.93_1_4" or РазмещЗаказ="10.93_1_5"):
    Buf[2]="Цена за единицу";
 fi;
 n=Alternate("Выберите измеритель объекта закупки",Buf,-1,if(Расшифр[Iter].ПоЦене,2,1),12);
 if not n=0:
    Расшифр[Iter].ПоЦене=(n=2);
    if Расшифр[Iter].ПоЦене:
       Расшифр[Iter].Точн="2";
    fi;
 fi;
 Return False;
end;

Func Точн_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var v:i;
 v=Abs(Int(Value));
 if v<0 or v>8: Message("Значение должно лежать в пределах 0..8",mtError); ^False; fi;
 Return True;
end;

Proc Точн_OnExit(FieldName: String; Iter: Integer);
 if not Расшифр[Iter].Точн="":
    Расшифр[Iter].Точн=Str(Abs(Int(Расшифр[Iter].Точн)));
    Расшифр[Iter].Объем1=Round(Расшифр[Iter].Объем1,Int(Расшифр[Iter].Точн));
    Расшифр[Iter].Объем2=Round(Расшифр[Iter].Объем2,Int(Расшифр[Iter].Точн));
    Расшифр[Iter].Объем3=Round(Расшифр[Iter].Объем3,Int(Расшифр[Iter].Точн));
    Расшифр[Iter].Объем4=Round(Расшифр[Iter].Объем4,Int(Расшифр[Iter].Точн));
    Расшифр[Iter].Объем5=Round(Расшифр[Iter].Объем5,Int(Расшифр[Iter].Точн));
    Расшифр[Iter].Объем6=Round(Расшифр[Iter].Объем6,Int(Расшифр[Iter].Точн));
 fi;
end;

Proc Объем_OnExit(FieldName: String; Iter: Integer);
 FieldName="Расшифр["+Str(Iter)+"]."+FieldName;
 PutVariableN(FieldName,Round(GetVariableN(FieldName),Int(Расшифр[Iter].Точн)));
end;

Proc Сч_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 if Double:
    Раб.КСА.Начать;
    Раб.КСА.ДобавитьСч(GetVariableS("Расшифр["+Str(Iter)+"].СчДеб"),ТипСч,True);
    Раб.КСА.ДобавитьСч(GetVariableS("Расшифр["+Str(Iter)+"].СчКре"),ТипСч,False);
    Раб.КСА.Закончить(True);
 fi;
end;

Func Файл_OnEnter(FieldName: String; Iter: Integer): logical;
var ret:i;
var vПапка,vКлюч,tmp:S;
 if Файл[Iter]="":
    if Рег: ^False; fi;
    EditorApply;
    tmp=ПолучПапкуКлючГЭК("|");
    vПапка=ExtractWord(1,tmp,"|");
    vКлюч=ExtractWord(2,tmp,"|");
    ret=Раб.Вспом.Файлы.Добавить(SelfCrd,RecordToInteger(Current),vПапка,"",ФайлКмнт[Iter],vКлюч);
    if ret>0:
       Раб.Вспом.Файлы.Показ(IntegerToRecord(ret),SelfBln+".Файл["+str(Iter)+"]",SelfBln+".ФайлКмнт["+str(Iter)+"]",SelfBln+".ФайлШтамп["+str(Iter)+"]","",SelfBln+".ФайлCU["+str(Iter)+"]",SelfBln+".ФайлMU["+str(Iter)+"]");
    fi;
   else
    if not Файл[Iter]="":
       Раб.Вспом.Файлы.Вызвать(SelfCrd,RecordToInteger(Current),Файл[Iter],"");
    fi;
 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]="":
    Раб.Вспом.Файлы.Вызвать(SelfCrd,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=Раб.Вспом.Файлы.Обновить(SelfBln,RecordToInteger(Current),vПапка,Файл[Iter],ФайлКмнт[Iter],vКлюч,if(FieldName="loadФайл","","-1"));
    if ret>0:
       Раб.Вспом.Файлы.Показ(IntegerToRecord(ret),SelfBln+".Файл["+str(Iter)+"]",SelfBln+".ФайлКмнт["+str(Iter)+"]",SelfBln+".ФайлШтамп["+str(Iter)+"]","",SelfBln+".ФайлCU["+str(Iter)+"]",SelfBln+".Файл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;
var vПапка,vКлюч,tmp:S;
 if Рег: ^False; fi;
 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 Рег: ^False; fi;
 EditorApply;
 tmp=ПолучПапкуКлючГЭК("|");
 vПапка=ExtractWord(1,tmp,"|");
 vКлюч=ExtractWord(2,tmp,"|");
 ret=Раб.Вспом.Файлы.ЗагрузПапку(SelfCrd,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 Рег: ^False; fi;
 if not Файл[Iter]="":
    if EnqOkCancel("Файл '"+Файл[Iter]+"' будет удален, вы уверены ?",mtWarning)=cmCancel: ^False; fi;
    Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(Current),Файл[Iter]);
    РасчетФайл;
 fi;
 Return False;
end;

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

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

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

Func Общ_Справ_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,tmp2:S;
 tmp=AnaElection("*.*",True);
 if not tmp="":
    tmp2=Name_A(tmp+".");
    tmp=tmp+".*";
    if (FieldName="Общ_Справ1" and tmp=Общ_Справ2) or (FieldName="Общ_Справ2" and tmp=Общ_Справ1): Message("Повторный ввод справочника "+tmp,mtError); ^False; fi;
    PutVariableS(FieldName,tmp);
    PutVariableS(SubStr(FieldName,1,9)+"_Наим"+SubStr(FieldName,10,1),tmp2);
 fi;
 Return False;
end;

Proc Общ_Справ_OnExit(FieldName: String; Iter: Integer);
 PutVariableS(SubStr(FieldName,1,9)+"_Наим"+SubStr(FieldName,10,1),"");
end;

Func Общ_Справ_ГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Отдельная папка по имени признака";
 Buf[2]="Общая папка";
 n=Alternate("Папка для ГЭК",Buf,-1,1,12);
 if not n=0:
    PutVariableL(SubStr(FieldName,1,Length(FieldName)-1),n=1);
 fi;
 Return False;
end;

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

Func extBtnUsrOnClick_OnEnter(FieldName: String; Iter: Integer): logical;
 if (extBtnUsrName="" and FieldName="extBtnUsrName") or (extBtnUsrName2="" and FieldName="extBtnUsrName2"):
    Message("Задайте имя кнопки",mtError);
    Template.Field="extBtnUsrName"+if(FieldName="extBtnUsrName2","2","");
    ^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 ext_OnVerify(FieldName: String; Iter: Integer; Value: S):Logical;
 if not FuncExists(Value):
    Message("Функция "+Value+" не найдена",mtError);
    ^False;
 fi;
 Return True;
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;

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 cbРег_OnChange(Sender: String);
var Msg:S;
var Err:L;
 if SkipEvent: Exit; fi;
 Err=False;
 if Рег=False:
    if not Признак_Ref.Запись=RecordToInteger(Current) and RecordExists("РПО_ДОК_ПРИЗНАК",Признак_Ref) then
       Message("Данная редакция документа изменена и не может быть исключена из обработки",mtError);
       EditorCancel;
      else
       Msg="Вы уверены, что хотите исключить данный документ из обработки?";
       if EnqOkCancel(Msg,mtWarning)=cmCancel:
          EditorCancel;
       fi;--if EnqOkCancel(Msg,mtWarning)=cmCancel:
    fi;--if not Признак_Ref.Договор=Current then
   else-- if Рег=False:
    if RecordExists(SelfCrd,Пре) then
       if not Пре.Рег then
          Message("Изменение к недействующей редакции не может быть принято к учету",mtError);
          Err=true;
       fi;
    fi;
    if not Err then
       Рег=Проверить;
      else
       Рег=False;
    fi;
 fi;-- if Рег=False:
 cbРег.State=Рег;
 if not Err:
    MyEditorApply;
 fi;
 Оформление;
end;

Proc cbЗакрытьДок_OnChange(Sender: String);
 MyEditorApply;
 Оформление;
end;

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

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

Proc btnИзм_OnClick(Sender: String);
var OWA,n:I;
var err1,err2,Папка_,Ключ_,val:S;
var Old,New,Rec,Self: Record;
 if not Рег:  Message('Текущий документ должен быть зарегистрован',mtError); Template.Object="cbРег"; Exit; fi;
 if not ЕстьИзменения=nil: Message('Документ уже изменялся, для внесения измений откройте действующий экземпляр документ',mtError);  Template.Object="btnИзменения"; Exit; fi;
 if НеДейств: Message('Документ имеет статус "недействительный" изменение невозможно',mtError); Exit; fi;
 if not ТипДок.Разрешения=0:
    RefreshCard("РПО_ЗАЯВКА_ЗАКУП_РАЗРЕШ");
    OWA=OpenWorkArea("РПО_ЗАЯВКА_ЗАКУП_РАЗРЕШ","","Док="+RecordToString(Current));
    Try
     if Records(OWA)=0: Message("Разрешение на изменение не найдено",mtError); Exit; fi;
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 if Признак_Ref=nil:
    Признак_Ref=nil;
    MyEditorApply;  --нуно создание признака
   else
    if not CurrentState=CrdusUnmodified: MyEditorApply; fi;
 fi;
 if Признак_Ref=nil: Message("Ошибка обновления ссылки на признак документа",mtError); Exit; fi;
 ClearVariable(Buf);
 Buf[1]="Изменение сведений";
 Buf[2]="Исправление сведений";
 Buf[3]="Перерегистрация на очередной год";
 Buf[4]="Исполнение";
 Buf[5]="Аннулирование";
 n=Alternate("Тип изменения",Buf,-1,if(Sender="cbИспол":4|Sender="cbАннул":5|True:ТипИзм),12);
 if n=0: Exit;
   |n=4: n=99;
   |n=5: n=-99;
 fi;
 err1=""; err2="";
 Old=Current;
 ShowProgress(5,"Перенос данных документа...");
 Try
  ProgressPos(1);
  New=Копировать(Old,"Недейств:L:True|Рег:L:False|ДатаРег:D:"+DateToString(if(n=3,if(Year(ToDay)>Year(ДатаРег),ToDay,Dat(1,1,Year(ДатаРег)+1)),ДатаРег))+"|Пре:R:"+RecordToString(Old)+"|ТипИзм:I:"+Str(n)+"|ДатаИзм:D:"+DateToString(if(n=3,if(Year(ToDay)>Year(ДатаРег),ToDay,Dat(1,1,Year(ДатаРег)+1)),ToDay))+"|Пре_Общ_Призн1:S:"+Пре.Общ_Призн1+"|Пре_Общ_Призн2:S:"+Пре.Общ_Призн2+"|ОснИзм:S:"+if(Abs(n)=99:""|n=3:"Перегистрация на очередной год"|True:ОснИзм)+"|GUID:S:NEW|ЭтоИзм:L:"+if(ТипИзм=3,"False","True")+"|ClosedModFob:L:False");  
  if not New=nil:
     val=ПолучПапкуКлючГЭК("|");
     Папка_=ExtractWord(1,val,"|");
     Ключ_=ExtractWord(2,val,"|");
     Try
      ProgressPos(2);
      n=Раб.Вспом.Сканер.ЧитатьГЭК(SelfCrd,RecordToInteger(Old),"jpg",true);
      if n>0:
         ShowProgress(5,"Перенос графической электронной копии документа...");
         ProgressPos(2);
         CopyArray(Раб.Вспом.Сканер.ФайлГЭК,Раб.Вспом.Сканер.Img);
        Try
         Раб.Вспом.Сканер.КолЛист=n;
         ProgressPos(3);
         Раб.Вспом.Сканер.extПапка=Папка_;
         Раб.Вспом.Сканер.vКлюч=Ключ_;
         Раб.Вспом.Сканер.СохранГЭК(SelfCrd,RecordToInteger(New),"jpg");
        Finally
         ClearVariable(Раб.Вспом.Сканер.Img); --нуно очистить список файлов, иначе будут удалены при заходе в бланк
         Раб.Вспом.Сканер.КолЛист=1;
        end;
      fi;
     Except
      Err1=ErrorMessage;
     end;
     ProgressPos(4);
     --
     ShowProgress(5,"Перенос прикрепленных файлов...");
     ProgressPos(5);
     Try
      Раб.Вспом.Файлы.Копировать(SelfCrd,RecordToInteger(Old),SelfCrd,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: 
     Страница=2;
     ВывестиСтраницу;
     Template.Field="ДатаИзм";
     New=Current(New);
  fi;
 end;
end;

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

Proc btnИмпорт_OnClick(Sender: String);
var n,OWAs,OAs,ss,s,Iter:i;
var ОБЩ_П1, ОБЩ_П2:S;
var Rec: Record;
 if RecordExists(SelfCrd,Пре):
    Message("Импорт возможен только в первичные данные",mtError);
    Exit;
 fi;
 if EnqOkCancel("Внимание! Текущие данные будут удалены, продолжить ?",mtWarning)=cmOk:
    ClearVariable(Buf);
    Buf[1]="План-график";
    n=Alternate("Выберите источник импорта",Buf,-1,1,12);
    if n=1:
       Rec=Раб.Поиск.ВыборИзКартотеки("Выбор позиции плана-графика...",SelfCrd,"НомерДок|ВнутрНомерДок","Номер заказа|Внутренний номер","Рег and not НеДейств and not ФЗ=0 and Справ='ПГ'");
       if not Rec=nil:
          EditorApply;
          OWAs=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Rec));
          Try
           --Пытаемся распихать общие признаки по их местам, иначе сохраняем для добавления в аналитику
           ОБЩ_П1 = GetFieldS(OWAs,1,"ОБЩ_ПРИЗН1");
           if ОБЩ_П1 <> '':
             if Общ_Справ1_=GetFieldS(OWAs,1,"ТипДок.Общ_Справ1"): 
                Общ_Призн1 = ОБЩ_П1;
                ОБЩ_П1 = '';
             fi;
           fi;
           if ОБЩ_П1 <> '':
             if Общ_Справ2_=GetFieldS(OWAs,1,"ТипДок.Общ_Справ1"):
                Общ_Призн2 = ОБЩ_П1;
                ОБЩ_П1 = '';
             fi;
           fi;
           ОБЩ_П2 = GetFieldS(OWAs,1,"ОБЩ_ПРИЗН2");
           if ОБЩ_П2 <> '':
             if Общ_Справ1_=GetFieldS(OWAs,1,"ТипДок.Общ_Справ2"):
                Общ_Призн1 = ОБЩ_П2;
                ОБЩ_П2 = '';
             fi;
           fi;
           if ОБЩ_П2 <> '':
             if Общ_Справ2_=GetFieldS(OWAs,1,"ТипДок.Общ_Справ2"):
                Общ_Призн2 = ОБЩ_П2;
                ОБЩ_П2 = '';
             fi;
           fi;
       ФЗ = GetFieldI(OWAs,1,"ФЗ");
           ОКВ=GetFieldS(OWAs,1,"ОКВ");
           Вал=GetFieldS(OWAs,1,"Вал");
           СумДок=GetFieldN(OWAs,1,"СумДок");
           КурсВал=GetFieldN(OWAs,1,"КурсВал");
           СумГод1=GetFieldN(OWAs,1,"СумГод1");
           СумГод2=GetFieldN(OWAs,1,"СумГод2");
           СумГод3=GetFieldN(OWAs,1,"СумГод3");
           СумГод4=GetFieldN(OWAs,1,"СумГод4");
           СумГод5=GetFieldN(OWAs,1,"СумГод5");
           СумГод6=GetFieldN(OWAs,1,"СумГод6");
           СумГод7=GetFieldN(OWAs,1,"СумГод7");
           СумГод8=GetFieldN(OWAs,1,"СумГод8");
           СумГод9=GetFieldN(OWAs,1,"СумГод9");
           СумГод10=GetFieldN(OWAs,1,"СумГод10");
           Год1=GetFieldS(OWAs,1,"Год1");
           Год2=GetFieldS(OWAs,1,"Год2");
           Год3=GetFieldS(OWAs,1,"Год3");
           Год4=GetFieldS(OWAs,1,"Год4");
           Год5=GetFieldS(OWAs,1,"Год5");
           Год6=GetFieldS(OWAs,1,"Год6");
           Год7=GetFieldS(OWAs,1,"Год7");
           Год8=GetFieldS(OWAs,1,"Год8");
           Год9=GetFieldS(OWAs,1,"Год9");
           Год10=GetFieldS(OWAs,1,"Год10");
           ПроцАв=GetFieldN(OWAs,1,"ПроцАв");
           СумАв=GetFieldN(OWAs,1,"СумАв");
           ПроцОбЗаяв=GetFieldN(OWAs,1,"ПроцОбЗаяв");
           СумОбЗаяв=GetFieldN(OWAs,1,"СумОбЗаяв");
           ПроцОбКт=GetFieldN(OWAs,1,"ПроцОбКт");
           СумОбКт=GetFieldN(OWAs,1,"СумОбКт");
           РазмещЗаказ=GetFieldS(OWAs,1,"РазмещЗаказ");
           Содерж=GetFieldS(OWAs,1,"Содерж");
           РазмещСрок=GetFieldD(OWAs,1,"РазмещСрок");
           Кмнт="План график №"+GetFieldS(OWAs,1,"НомерДок")+" от "+DateToString(GetFieldD(OWAs,1,"ДатаДок"));
           ДопТреб=GetFieldS(OWAs,1,"ДопТреб");
           Срок=GetFieldD(OWAs,1,"Срок");
           Пер=GetFieldS(OWAs,1,"Пер");
           Общ_Призн0="ПГ."+GetFieldS(OWAs,1,"Признак");
           OAs=OpenArray(OWAs,1,"Расшифр","");
           ss=Records(OAs);
           ClearVariable(Расшифр);
           for s=1..ss do
            if not (Round(GetFieldN(OAs,s,"Сум1"),2)=0 and
               Round(GetFieldN(OAs,s,"Сум2"),2)=0 and
               Round(GetFieldN(OAs,s,"Сум3"),2)=0 and
               Round(GetFieldN(OAs,s,"Сум4"),2)=0 and
               Round(GetFieldN(OAs,s,"Сум5"),2)=0 and
               Round(GetFieldN(OAs,s,"Сум6"),2)=0):
               Iter=InsertFrame(Расшифр,Расшифр+1);
               Расшифр[Iter].ВД=GetFieldS(OAs,s,"ВД");
               Расшифр[Iter].КБК=GetFieldS(OAs,s,"КБК");
               Расшифр[Iter].ДопКЛ=GetFieldS(OAs,s,"ДопКЛ");
               Расшифр[Iter].Призн=Раб.Бюджет2005.Объединить(
                                     Раб.Бюджет2005.Объединить(GetFieldS(OAs,s,"Призн"),
                                        ОБЩ_П1,' '),
                                     ОБЩ_П2,' ');
               Расшифр[Iter].Лот=GetFieldI(OAs,s,"Лот");
               Расшифр[Iter].ОКДП=GetFieldS(OAs,s,"ОКДП");
               Расшифр[Iter].ОКДП_Призн=GetFieldS(OAs,s,"ОКДП_Призн");
               Расшифр[Iter].ОКВЭД=GetFieldS(OAs,s,"ОКВЭД");
               Расшифр[Iter].ОКПД2=GetFieldS(OAs,s,"ОКПД2");
               Расшифр[Iter].ОКВЭД2=GetFieldS(OAs,s,"ОКВЭД2");
               Расшифр[Iter].ОКСМ=GetFieldS(OAs,s,"ОКСМ");
               Расшифр[Iter].Предм=GetFieldS(OAs,s,"Предм");
               Расшифр[Iter].Предм2=GetFieldS(OAs,s,"Предм2");
               Расшифр[Iter].Предм3=GetFieldS(OAs,s,"Предм3");
               Расшифр[Iter].Предм4=GetFieldS(OAs,s,"Предм4");
               Расшифр[Iter].Треб=GetFieldS(OAs,s,"Треб");
               Расшифр[Iter].Треб2=GetFieldS(OAs,s,"Треб2");
               Расшифр[Iter].Треб3=GetFieldS(OAs,s,"Треб3");
               Расшифр[Iter].Треб4=GetFieldS(OAs,s,"Треб4");
               Расшифр[Iter].ИсполСрок=GetFieldD(OAs,s,"ИсполСрок");
               Расшифр[Iter].ИсполПер=GetFieldS(OAs,s,"ИсполПер");
               Расшифр[Iter].ЕдИзм=GetFieldS(OAs,s,"ЕдИзм");
               Расшифр[Iter].Точн=GetFieldS(OAs,s,"Точн");
               Расшифр[Iter].ПоЦене=GetFieldL(OAs,s,"ПоЦене");
               Расшифр[Iter].Сум1=GetFieldN(OAs,s,"Сум1");
               Расшифр[Iter].Сум2=GetFieldN(OAs,s,"Сум2");
               Расшифр[Iter].Сум3=GetFieldN(OAs,s,"Сум3");
               Расшифр[Iter].Сум4=GetFieldN(OAs,s,"Сум4");
               Расшифр[Iter].Сум5=GetFieldN(OAs,s,"Сум5");
               Расшифр[Iter].Сум6=GetFieldN(OAs,s,"Сум6");
               Расшифр[Iter].Объем1=GetFieldN(OAs,s,"Объем1");
               Расшифр[Iter].Объем2=GetFieldN(OAs,s,"Объем2");
               Расшифр[Iter].Объем3=GetFieldN(OAs,s,"Объем3");
               Расшифр[Iter].Объем4=GetFieldN(OAs,s,"Объем4");
               Расшифр[Iter].Объем5=GetFieldN(OAs,s,"Объем5");
               Расшифр[Iter].Объем6=GetFieldN(OAs,s,"Объем6");
               Расшифр[Iter].Кмнт2=GetFieldS(OAs,s,"Кмнт2");
               ПолучитьСч(Iter);
            fi;
           od;
          Finally
           CloseWorkArea(OWAs);
          end;
          Message("Импорт завершен");
       fi;
    fi;
 fi;
end;

Proc btnУдалить_OnClick(Sender: String);
var n,nn,OWA,f,ff,c,cc:i;
var Rec,Ref,Self,Pre: Record;
 if not ЕстьИзменения=nil: Message("Запись изменена и не может быть удалена", mtError); Exit; fi;
 if EnqOkCancel("Удалить текущий документ ?",mtWarning)=cmCancel: Exit; fi;
 EditorCancel;
 Pre=nil;
 Self=Current;
 --Делаем тек. запись не действительной
 if RecordExists(SelfCrd,Пре):
    Pre=Пре;
    if СделатьНедейств(Пре,False): --Делаем действительной предкопию копию
       if not Self=Current: Message("Внезапная ошибка (фаза луны не той четверти) "+RecordToString(Self)+"<>"+RecordToString(Current),mtError); Exit; fi;
          Rec=КартПризнОбнов(Пре.Признак_Ref,Пре,SelfCrd,Справ,Пре.Признак,Пре.Признак_Кмнт,Пре.РПО_Ключ,if(ТипИзм=0,ДатаРег,ДатаИзм),False);
       if Rec=nil: 
          СделатьНедейств(Пре,True);
          Message("Ошибка актуализации предыдущей версии документа "+RecordToString(Пре)+" (признак), удаление текущего документа не возможно",mtError);
          Exit;
       fi;
      else
       Message("Ошибка актуализации предыдущей версии документа "+RecordToString(Пре)+" (недейств.), удаление текущего документа не возможно",mtError);
       Exit;
    fi;
 fi;
 --
 Ref=IntegerToRecord(Признак_Ref.Запись);
 Rec=Признак_Ref;
 if not Признак_Ref=nil:
    OWA=OpenWorkArea(SelfCrd,"","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;
 Раб.Вспом.Сканер.УдалитьГЭК(SelfCrd,RecordToInteger(Self),"");
 Раб.Вспом.Файлы.Стереть(SelfCrd,RecordToInteger(Self),"*");
 УдалитьЗаписи(SelfCrd,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 btnUsr2_OnClick(Sender: String);
 if not extBtnUsrOnClick2_="":
    if not ProcExists(extBtnUsrOnClick2_): Message("Процедура '"+extBtnUsrOnClick2_+"' не найдена",mtError); Exit; fi;
 fi;
 if not CurrentState=CrdusUnmodified: MyEditorApply; fi;
 ExecuteProc(extBtnUsrOnClick2_,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(SelfCrd,Rec): Message("Запись "+RecordToString(Rec)+" не надйена",mtError); Exit; fi;
    if Рег: EditorCancel; fi;
    Раб.Переход.Crd=SelfCrd;
    Раб.Переход.Bln=SelfBln;
    Раб.Переход.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(SelfCrd,Пре): Message("Запись "+RecordToString(Пре)+" не надйена",mtError); Exit; fi;
    if Рег: EditorCancel; fi;
    Раб.Переход.Crd=SelfCrd;
    Раб.Переход.Bln=SelfBln;
    Раб.Переход.Modal=ModalMode;
    Раб.Переход.Rec=Пре;
    OpenBlank("Раб.Переход",False);
 fi;
end;

Proc btnКонтрольЛБО_OnClick(Sender: String);
var i:i;
var Дат_:D;
var Сум_:N;
var Призн_:S;
 if CurrentState=CrdusInserted:
    EditorApply;
 fi;
 Раб.Вспом.ОстЛБО.ОчиститьВх;
 Раб.Вспом.ОстЛБО.ОчиститьВх2;
 Дат_=if(ТипИзм=0 or ТипИзм=3:ДатаДок|True:ДатаИзм);
 Призн_=Trim(Общ_Призн1+" "+Общ_Призн2);
 for i=1..Расшифр do
  if Расшифр[i].ВД="1" and not Расшифр[i].КБК="":
     Сум_=0;
     if Рег:
        if ТипИзм=0 or ТипИзм=3:
           if ТекГод=Год1: Сум_=Изм1[i];
             |ТекГод=Год2: Сум_=Изм2[i];
             |ТекГод=Год3: Сум_=Изм3[i];
             |ТекГод=Год4: Сум_=Изм4[i];
             |ТекГод=Год5: Сум_=Изм5[i];
             |ТекГод=Год6: Сум_=Изм6[i];
           fi;
          else
           if ТекГод=Год1: Сум_=Расшифр[i].Сум1;
             |ТекГод=Год2: Сум_=Расшифр[i].Сум2;
             |ТекГод=Год3: Сум_=Расшифр[i].Сум3;
             |ТекГод=Год4: Сум_=Расшифр[i].Сум4;
             |ТекГод=Год5: Сум_=Расшифр[i].Сум5;
             |ТекГод=Год6: Сум_=Расшифр[i].Сум6;
           fi;
        fi;
     fi;
     Раб.Вспом.ОстЛБО.ДобавитьПО(Дат_+1,Расшифр[i].КБК,Trim(Общ_Призн1+" "+Расшифр[i].Призн),Сум_);
  fi;
 od;
 Раб.Вспом.ОстЛБО.Вызвать;
end;

Proc cbИспол_OnChange(Sender: String);
 if Рег:
    ExecuteProc("btnИзм_OnClick",Sender);
   else
    if not Abs(ТипИзм)=99:
       ТипИзм=99;
       Обнулить;
       if not AsLogical(cbАннул.State): cbАннул.State=Аннул_; fi;
      else
       if RecordExists(SelfCrd,Пре):
          ТипИзм_onEnter("ТипИзм_",1);
         else
          ТипИзм=0;
       fi;
    fi;
    cbИспол.State=Испол_;
 fi;
 Оформление;
end;

Proc cbАннул_OnChange(Sender: String);
 if Рег:
    ExecuteProc("btnИзм_OnClick",Sender);
   else
    if not Abs(ТипИзм)=99:
       ТипИзм=-99;
       Обнулить;
       if not AsLogical(cbИспол.State): cbИспол.State=Испол_; fi;
      else
       if RecordExists(SelfCrd,Пре):
          ТипИзм_onEnter("ТипИзм_",1);
         else
          ТипИзм=0;
       fi;
    fi;
    cbАннул.State=Аннул_;
 fi;
 Оформление;
end;

Proc rbФЗ_OnChange(Sender: String);
 РазмещЗаказ="";
 Оформление;
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Сервис":   Страница=6;
   |Sender="btnФайлы":    Страница=7;
 fi;
 ВывестиСтраницу;
end;

Func S5OnInsert(SectName: String): Logical;
 Return not Рег and not Abs(ТипИзм)=99;
end;

Proc S5AfterInsert(SectName: String; Iter: Integer);
 Расшифр[Iter].Нов=not Пре=nil;
end;

Func S5OnDelete(SectName: String; Iter: Integer): Logical;
 if Abs(ТипИзм)=99: Message("Для исполнения или аннулирования вносить изменения в таблицу не требуется",mtError); ^False; fi;
 if not Пре=nil and not Расшифр[Iter].Нов and not ТипИзм=3: Message("Для удаления данной строки введите нулевые значения в суммовые показатели",mtError); ^False; fi;
 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 tmp:S;
var Flag:L;
 SelfRecord=Current;
 Настр(False);
 if RecordToInteger(Признак_Ref)<0: Message("Текущая запись не была правильно удалена, повторите процедуру удаления",mtError); Exit; fi;
 if Страница<0: Страница=1; fi;
 if НоваяЗапись:
    if ПрибитьЖука: EditorCancel; Exit; fi;
    NewRecord=Current;
    ПоУмолчанию;
    Страница=0;
    if Справ="ПГ":
       НомерДок="";
       ДатаДок=1.1.100;
       Раб.КСА.Начать;
       for Account tmp="*.ЗАБ.ЗК.*" do
        Раб.КСА.ДобавитьСч(Раб.Формат.ReplaceSubStr(tmp,".ЗАБ.ЗК.",".ЗАБ.ПГ."),"ЗАБ",True);
       od;
       Раб.КСА.Закончить(False);
    fi;
 fi;
 if not First: Оформление; ВывестиСтраницу; fi;
 if GUID="NEW": Template.Field="ДатаИзм"; fi;
 inТипДок=ТипДок;
 if RecordExists(SelfCrd,Пре):
    if not Пре.НеДейств and not GUID="NEW": GUID="NEW"; fi;  --пытаемся исправиить недейств. документа
    Flag=True;
    Try
     if not Пре.Рег: 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 Iter:I;
var Rec: Record;
var GUID_:S;
var Flag:L;
 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;
 ЭтоИзм=RecordExists(SelfCrd,Пре);
 if ЭтоИзм:
    if not Пре.Рег: Message("Предыдущия редакция договора должна быть зарегистрована",mtError); ^False; fi;
    if not Пре.НеДейств and not GUID="NEW": Message("Предыдущия редакция документа должна быть недействующей, документ не может быть изменен",mtError); ^False; fi;
    if not Пре.Признак=Признак: ^НаОшибку("Признак документа не должен изменяться ("+Пре.Признак+"<>"+Признак+")",mtError,1,"Признак_",0); fi;
    if ТипИзм=3:
       if Year(Пре.ДатаРег)+1>Year(ДатаРег): ^НаОшибку("При перерегистрации документа на очередной год, дата принятия к учету не может быть ранее 01 января очередного года",mtError,1,"ДатаРег",0); fi;
      else
       if not Пре.ТипДок=ТипДок: ^НаОшибку("Тип документа не должен изменяться ("+RecordToString(Пре.ТипДок)+")",mtError,1,"Загл",0); fi;
       if not Пре.Номер=Номер: ^НаОшибку("Порядковй номер не должен изменяться ("+Str(Пре.Номер)+")",mtError,1,"Номер",0); fi;
       if not Пре.ДатаРег=ДатаРег: ^НаОшибку("Дата принятия к учета не должна изменяться ("+DateToString(Пре.ДатаРег)+")",mtError,1,"ДатаРег",0); fi;
    fi;
 fi;
 if ТипИзм=3 or ТипИзм=0:
    ЭтоИзм=False;
 fi;
 for Iter=1..Расшифр do
  if Рег:
     if ФЗ=0:
        Расшифр[Iter].ОКДП_Призн=Раб.Договор.ОКДП_В_Признак(Расшифр[Iter].ОКДП_Гр,Расшифр[Iter].ОКДП,False,verОКДП_Гр);
       else
        Расшифр[Iter].ОКДП_Гр="";
        Расшифр[Iter].ОКДП_Призн=Раб.Договор.ОКДП_В_Признак("",Расшифр[Iter].ОКДП,False,ФЗ);
     fi;
     if not Расшифр[Iter].ОКДП_Призн="": Flag=True; fi;
  fi;
 od;
 if Flag:
    RefreshAna;
    for Iter=1..Расшифр do
     if ФЗ=0:
        if not Расшифр[Iter].ОКДП_Гр="":
           if Name_A(Расшифр[Iter].ОКДП_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак номенклатурной группы '"+Расшифр[Iter].ОКДП_Призн+"'",mtError,3,"ОКДП_Гр",Iter); Рег=False; ^False; fi;
        fi;
       else
        if Name_A(Расшифр[Iter].ОКДП_Призн)=" ": ^НаОшибку("Неизвестный аналитический признак '"+Расшифр[Iter].ОКДП_Призн+"'",mtError,3,"ОКДП ",Iter); Рег=False; ^False; fi;
     fi;
    od;
 fi;
 GUID_=GUID;
 НеДейств=False; --текущая действует в любом случае
 if not ТипИзм_=ТипИзм_Кмнт: ТипИзм_Кмнт=ТипИзм_; fi;
 Справ=Справ_;
 Пре_Общ_Призн0=Пре.Общ_Призн0;
 Пре_Общ_Призн1=Пре.Общ_Призн1;
 Пре_Общ_Призн2=Пре.Общ_Призн2;
 if FuncExists(ExtFunc_SetupIND_):
    ВнутрНомерДок=ExecuteFuncS(ExtFunc_SetupIND_);
 fi;
 if not ПризнОбнов: Message("Ошибка создания признака документа",mtError); GUID=GUID_; ^False; fi;
 if not ПроверитьУник: GUID=GUID_; ^False; fi;
 if not ЗаполнитьКлючДок: ^False; fi;
 if not ExtOnVerify: GUID=GUID_; ^False; fi;
 Rec=КартПризнОбнов(Признак_Ref,Current,SelfCrd,Справ,Признак,Признак_Кмнт,РПО_Ключ,if(ТипИзм=0,ДатаРег,ДатаИзм),False);
 if Rec=nil:
    Message("Ошибка создания записи признака документа",mtError);
    GUID=GUID_;
    ^False;
   else
    if not RecordExists("РПО_ДОК_ПРИЗНАК",Признак_Ref) or Признак_Ref=Rec:
       Признак_Ref=Rec;
      else
       Message("Ошибка создания записи признака документа ("+RecordToString(Признак_Ref)+"<>"+RecordToString(Rec)+")",mtError);
       GUID=GUID_;
       ^False;
    fi;
 fi;
 inТипДок=ТипДок;
 Return AfterUpdate(GUID_="NEW");
end;

Proc OnCancel;
var OWA:I;
 if not RecordExists(SelfCrd,NewRecord): --пробуем зачистить за собой признак в случае если основная запись не была создана
    OWA=OpenWorkArea("РПО_ДОК_ПРИЗНАК","","ДОК='"+SelfCrd+"' and ЗАПИСЬ="+Str(RecordToInteger(NewRecord)));
    Try
     if not Records(OWA)=0:
        BeginChanging(OWA,False);
        Try
         DeleteAllRecords(OWA);
         EndChanging(OWA);
        Except
         CancelChanging(OWA);
         Message(ErrorMessage,mtError);
        end;
     fi;
    Finally
     CloseWorkArea(OWA);
    end;
    NewRecord=nil;
 fi;
 Оформление;
 ВывестиСтраницу;
end;
--Обработчики событий шаблона -----
--


Конец