-- Шаблон создан мастером бланков
-- 10.12.2005 11:39:35
--
БланкСШаблоном "Детализация по КБК";

btnОчистить: Object;
btnЗагрузПре: Object;

var Режим:I;
var FlagEdit:L;
var FlagModify:L;

--Глобальные переменные
var ДатаРег:D;
var ТекГод:S;
var Год1:S;
var Год2:S;
var Год3:S;
var Год4:S;
var Год5:S;
var Год6:S;
var Год7:S;
var Год8:S;
var Год9:S;
var Год10:S;
var Контр_Призн:S;
var Общ_Призн1:S;
var Общ_Призн2:S;
var ВД[]:S;
var КБК0[]:S;
var КБК[]:S;
var Призн[]:S;
var Сум[]:N;
var МФ[]:S;
var СумГод1[]:N;
var СумГод2[]:N;
var СумГод3[]:N;
var СумГод4[]:N;
var СумГод5[]:N;
var СумГод6[]:N;
var СумГод7[]:N;
var СумГод8[]:N;
var СумГод9[]:N;
var СумГод10[]:N;
var Предм[]:S;
var Предм2[]:S;
var Предм3[]:S;
var Предм4[]:S;
var Примеч[]:S;
var ФАИП[]:Record;
var ФАИП_[]:S;
var ФактОпл[]:N;
var СчДеб[]:S;
var СчКре[]:S;
var Договор:Record;
var Договор_GUID:S;
var Договор_Призн:S;
var РПО_Ключ:S;
var blnДоговор:S;
var ИсклПризн:S;
---
var Рег:L;
var Факт:L;
var Учет_Реестр_ОФК:L;
var ТекГод_:S="на "+ТекГод+" г.";
var Год1_ :S="на "+Год1+" г.";
var Год2_ :S="на "+Год2+" г.";
var Год3_ :S="на "+Год3+" г.";
var Год4_ :S="на "+Год4+" г.";
var Год5_ :S="на "+Год5+" г.";
var Год6_ :S="на "+Год6+" г.";
var Год7_ :S="на "+Год7+" г.";
var Год8_ :S="на "+Год8+" г.";
var Год9_ :S="на "+Год9+" г.";
var Год10_:S="на "+Год10+" г.";
var СчДеб5 :S;
var СчКре5 :S;
var МаскаСч:S=Раб.Договор.МаскаСчКБК;
var Общ_Справ1:S;
var Общ_Справ2:S;
var Секрет:I;
var ДатаДок:D;
--
var A:S=if(Рег,"","+");
var AA:S=if(Рег,"","++");
var D:S=if(Рег,"","-");
var Упр:I;
var пп[]:I=$;
var Призн_[]:S=Призн[$];
var lenПредм[]:i=Length(Предм[$])+Length(Предм2[$])+Length(Предм3[$])+Length(Предм4[$]);
var Предм_[]:S=if(lenПредм[$]>255,SubStr(Предм[$],1,252)+">>>",Предм[$]);
var exПредм:S=">>";
var Предм__:S="";

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

var Компенсатор:I=25-Упр;
--
var Загл3:S=if(Секрет>0,"Актуальное КБК текущего периода","КБК");
var Гр2  :L;
var Гр03 :L;
var Гр3  :L;
var Гр4  :L;
var Гр6  :L;
var Гр7  :L;
var Гр8  :L;
var Гр9  :L;
var Гр2_ :S=if(Гр2,"Дуб.","Не дуб.");
var Гр03_:S=if(Гр03,"Дублировать","Не дублировать");
var Гр3_ :S=if(Гр3,"Дублировать","Не дублировать");
var Гр4_ :S=if(Гр4,"Дублировать","Не дублировать");
var Гр6_ :S=if(Гр6,"Дуб.","Не дуб.");
var Гр7_ :S=if(Гр7,"Дублировать","Не дублировать");
var Гр8_ :S=if(Гр8,"Дублировать","Не дублировать");
var Гр9_ :S=if(Гр9,"Дублировать","Не дублировать");
var ЗаполФакт:S="Заполнить";
--
var OWA:I;
var State:I;
var eNoSave:I=1;
var eNoError:I=0;
var eReadCrd:I=-1;
var eLock:I=-2;
var eLockCrd:I=-2;
var eWriteCrd:I=-4;
var eReadParam:I=-5;

var Run:L;
var Загл:S=if(Режим=1:"Изменение детализации договора по КБК"|true:"Детализация договора по КБК");
var ЗаглСум:S=if(Режим=1:"Сумма изменения (+/-)"|true:"Сумма");

var tplFieldName:S;
var tplFrame:I;

S1: Section;
S2: Section;
S3: Section;

Timer1: Object;

var ID:S;

var SelfCrd:S;

var Buf   []:S;
var Buf2  []:S;
var Buf2_2[]:S;
var Buf2_3[]:S;
var Buf2_4[]:S;
var BufI  []:I;
--
--Процедуры и функции -------------   
Proc ОчиститьТаб;
 ClearVariable(Упр);
 ClearVariable(ВД);
 ClearVariable(КБК0);
 ClearVariable(КБК);
 ClearVariable(Призн);
 ClearVariable(Сум);
 ClearVariable(МФ);
 ClearVariable(СумГод1);
 ClearVariable(СумГод2);
 ClearVariable(СумГод3);
 ClearVariable(СумГод4);
 ClearVariable(СумГод5);
 ClearVariable(СумГод6);
 ClearVariable(СумГод7);
 ClearVariable(СумГод8);
 ClearVariable(СумГод9);
 ClearVariable(СумГод10);
 ClearVariable(ФАИП);
 ClearVariable(ФАИП_);
 ClearVariable(Предм);
 ClearVariable(Предм2);
 ClearVariable(Предм3);
 ClearVariable(Предм4);
 ClearVariable(Примеч);
 ClearVariable(ФактОпл);
 ClearVariable(СчДеб);
 ClearVariable(СчКре);
end;

Proc Очистить;
 ClearVariable(ДатаРег);
 ClearVariable(ТекГод);
 ClearVariable(Год1);
 ClearVariable(Год2);
 ClearVariable(Год3);
 ClearVariable(Год4);
 ClearVariable(Год5);
 ClearVariable(Год6);
 ClearVariable(Год7);
 ClearVariable(Год8);
 ClearVariable(Год9);
 ClearVariable(Год10);
 ClearVariable(Контр_Призн);
 ClearVariable(Общ_Призн1);
 ClearVariable(Общ_Призн2);
 ClearVariable(Договор);
 ClearVariable(Договор_Призн);
 ClearVariable(Договор_GUID);
 ClearVariable(Общ_Справ1);
 ClearVariable(Общ_Справ2);
 ClearVariable(Секрет);
 ClearVariable(ДатаДок);
 ОчиститьТаб;
end;

Proc НеПустаяТаблица(nn:i);
var n:i;
 if Упр=0: 
    for n=1..nn do
     InsertFrame(Упр,Упр+1);
    od;
 fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Упр do
  if КБК0[Iter]="" and
     КБК[Iter]="" and
     Призн[Iter]="" and
     МФ[Iter]="" and
     ((Учет_Реестр_ОФК and
      СумГод1[Iter]=0 and
      СумГод2[Iter]=0 and
      СумГод3[Iter]=0 and
      СумГод4[Iter]=0 and
      СумГод5[Iter]=0 and
      СумГод6[Iter]=0 and
      СумГод7[Iter]=0 and
      СумГод8[Iter]=0 and
      СумГод9[Iter]=0 and
      СумГод10[Iter]=0 and
      Предм [Iter]="" and
      Предм2[Iter]="" and
      Предм3[Iter]="" and
      Предм4[Iter]="" and
      Примеч[Iter]="" and
      ФАИП[Iter]=nil and
      ФактОпл[Iter]=0) or
      (not Учет_Реестр_ОФК and
       Сум[Iter]=0)): DeleteFrame(Упр,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Proc MyClose;
 Timer1.Active=True;
end;

Proc LockCrd;
var Nr,n:I;
 Try
  Nr=Records(OWA);
  for n=1..nr do
   if not LockRecord(OWA,n,0) and State=eNoError: State=eLock; Message("Редактирование данных невозможно. Недостаточно прав или данные изменяется другим пользователем",mtError); MyClose; fi;
  od;
 Except
  State=eLockCrd;
  MyClose;
  Raise;
 end;
end;

Proc ReadCrd (OWA_:I);
var n,nr:i;
 ОчиститьТаб;
 ShowProgress(0,"Чтение данных.....");
 Try
  Try
   Nr=Records(OWA_);
   ShowProgress(Nr,"Чтение данных.....");
   for n=1..Nr do
    ProgressPos(n);
    InsertFrame(Упр,Упр+1);
    ВД[Упр]=GetFieldS(OWA_,n,"ВД");
    if Секрет>0 and Учет_Реестр_ОФК:
       КБК0[Упр]=GetFieldS(OWA_,n,"КБК0");
    fi;
    КБК[Упр]=GetFieldS(OWA_,n,"КБК");
    Призн[Упр]=GetFieldS(OWA_,n,"Призн");
    Сум[Упр]=GetFieldN(OWA_,n,"Сум");
    МФ[Упр]=GetFieldS(OWA_,n,"МФ");
    СумГод1[Упр]=GetFieldN(OWA_,n,"СумГод1");
    СумГод2[Упр]=GetFieldN(OWA_,n,"СумГод2");
    СумГод3[Упр]=GetFieldN(OWA_,n,"СумГод3");
    СумГод4[Упр]=GetFieldN(OWA_,n,"СумГод4");
    СумГод5[Упр]=GetFieldN(OWA_,n,"СумГод5");
    СумГод6[Упр]=GetFieldN(OWA_,n,"СумГод6");
    СумГод7[Упр]=GetFieldN(OWA_,n,"СумГод7");
    СумГод8[Упр]=GetFieldN(OWA_,n,"СумГод8");
    СумГод9[Упр]=GetFieldN(OWA_,n,"СумГод9");
    СумГод10[Упр]=GetFieldN(OWA_,n,"СумГод10");
    Предм [Упр]=GetFieldS(OWA_,n,"Предм");
    Предм2[Упр]=GetFieldS(OWA_,n,"Предм2");
    Предм3[Упр]=GetFieldS(OWA_,n,"Предм3");
    Предм4[Упр]=GetFieldS(OWA_,n,"Предм4");
    Примеч[Упр]=GetFieldS(OWA_,n,"Примеч");
    ФАИП[Упр]=GetFieldR(OWA_,n,"ФАИП");
    if RecordExists("РПО_ФАИП",ФАИП[Упр]):
       ФАИП_[Упр]=GetFieldS(OWA_,n,"ФАИП.КОД")+Chr(13)+GetFieldS(OWA_,n,"ФАИП.Наим1");
      else
       if not ФАИП[Упр]=nil:
          ФАИП_[Упр]="Ошибка! ФАИП не найден "+RecordToString(ФАИП[Упр]);
       fi;
    fi;
    ФактОпл[Упр]=GetFieldN(OWA_,n,"ФактОпл");
    СчДеб[Упр]=GetFieldS(OWA_,n,"СчДеб");
    СчКре[Упр]=GetFieldS(OWA_,n,"СчКре");
   od;
  Except
   State=eReadCrd;
   MyClose;
   Raise;
  end;
 Finally
  CloseProgress;
 end;
 НеПустаяТаблица(15);
end;

Func WriteCrd:L;
var Nr,Iter,n:I;
 ShowProgress(Упр,"Запись данных....");
 УдалитьПустыеСтроки;
 Try
  if 1=0: BeginChanging(OWA); fi;  --Обман синтаксиса компилятора (Изменения начались еще ранее)
  Try
   Nr=Records(OWA);
   if (Nr>Упр and not canDelete(SelfCrd)) or (Упр>Nr and not canInsert(SelfCrd)): Message("Недостаточно прав для выполнения данной операции"); ^False; fi;
   if Nr>Упр: 
      if not canDelete(SelfCrd): Message("Недостаточно прав для выполнения данной операции"); ^False; fi;
      for n=Упр+1..nr do 
       DeleteRecord(OWA,Упр+1); 
      od; 
      Nr=Records(OWA);
   fi;
   for Iter=1..Упр do
    ProgressPos(Iter);
    --
    if Учет_Реестр_ОФК:
       if ТекГод=Год1: Сум[Iter]=СумГод1[Iter];
         |ТекГод=Год2: Сум[Iter]=СумГод2[Iter];
         |ТекГод=Год3: Сум[Iter]=СумГод3[Iter];
         |ТекГод=Год4: Сум[Iter]=СумГод4[Iter];
         |ТекГод=Год5: Сум[Iter]=СумГод5[Iter];
         |ТекГод=Год6: Сум[Iter]=СумГод6[Iter];
         |ТекГод=Год7: Сум[Iter]=СумГод7[Iter];
         |ТекГод=Год8: Сум[Iter]=СумГод8[Iter];
         |ТекГод=Год9: Сум[Iter]=СумГод9[Iter];
         |ТекГод=Год10:Сум[Iter]=СумГод10[Iter];
       fi;
       if Год1="": СумГод1[Iter]=0; fi;
       if Год2="": СумГод2[Iter]=0; fi;
       if Год3="": СумГод3[Iter]=0; fi;
       if Год4="": СумГод4[Iter]=0; fi;
       if Год5="": СумГод5[Iter]=0; fi;
       if Год6="": СумГод6[Iter]=0; fi;
       if Год7="": СумГод7[Iter]=0; fi;
       if Год8="": СумГод8[Iter]=0; fi;
       if Год9="": СумГод9[Iter]=0; fi;
       if Год10="":СумГод10[Iter]=0; fi;
    fi;
    if Iter>Nr: n=InsertRecord(OWA); else n=Iter; fi;
    if not GetFieldI(OWA,n,"НП")=пп[Iter]:                 n=PutFieldI(OWA,n,"НП",пп[Iter]); fi;
    if not GetFieldD(OWA,n,"ДатаРег")=ДатаРег:             n=PutFieldD(OWA,n,"ДатаРег",ДатаРег); fi;
    if not GetFieldS(OWA,n,"ТекГод")=ТекГод:               n=PutFieldS(OWA,n,"ТекГод",ТекГод); fi;
    if not GetFieldS(OWA,n,"Год1")=Год1:                   n=PutFieldS(OWA,n,"Год1",Год1); fi;
    if not GetFieldS(OWA,n,"Год2")=Год2:                   n=PutFieldS(OWA,n,"Год2",Год2); fi;
    if not GetFieldS(OWA,n,"Год3")=Год3:                   n=PutFieldS(OWA,n,"Год3",Год3); fi;
    if not GetFieldS(OWA,n,"Год4")=Год4:                   n=PutFieldS(OWA,n,"Год4",Год4); fi;
    if not GetFieldS(OWA,n,"Год5")=Год5:                   n=PutFieldS(OWA,n,"Год5",Год5); fi;
    if not GetFieldS(OWA,n,"Год6")=Год6:                   n=PutFieldS(OWA,n,"Год6",Год6); fi;
    if not GetFieldS(OWA,n,"Год7")=Год7:                   n=PutFieldS(OWA,n,"Год7",Год7); fi;
    if not GetFieldS(OWA,n,"Год8")=Год8:                   n=PutFieldS(OWA,n,"Год8",Год8); fi;
    if not GetFieldS(OWA,n,"Год9")=Год9:                   n=PutFieldS(OWA,n,"Год9",Год9); fi;
    if not GetFieldS(OWA,n,"Год10")=Год10:                 n=PutFieldS(OWA,n,"Год10",Год10); fi;
    if not GetFieldS(OWA,n,"Контр_Призн")=Контр_Призн:     n=PutFieldS(OWA,n,"Контр_Призн",Контр_Призн); fi;
    if not GetFieldS(OWA,n,"Общ_Призн1")=Общ_Призн1:       n=PutFieldS(OWA,n,"Общ_Призн1",Общ_Призн1); fi;
    if not GetFieldS(OWA,n,"Общ_Призн2")=Общ_Призн2:       n=PutFieldS(OWA,n,"Общ_Призн2",Общ_Призн2); fi;
    if not GetFieldS(OWA,n,"ВД")=ВД[Iter]:                 n=PutFieldS(OWA,n,"ВД",ВД[Iter]); fi;
    if Секрет>0 and Учет_Реестр_ОФК:
       if not GetFieldS(OWA,n,"КБК0")=КБК0[Iter]: n=PutFieldS(OWA,n,"КБК0",КБК0[Iter]); fi;
    fi;
    if not GetFieldS(OWA,n,"КБК")=КБК[Iter]:               n=PutFieldS(OWA,n,"КБК",КБК[Iter]); fi;
    if not GetFieldS(OWA,n,"Призн")=Призн[Iter]:           n=PutFieldS(OWA,n,"Призн",Призн[Iter]); fi;
    if not GetFieldN(OWA,n,"Сум")=Сум[Iter]:               n=PutFieldN(OWA,n,"Сум",Сум[Iter]); fi;
    if not GetFieldS(OWA,n,"МФ")=МФ[Iter]:                 n=PutFieldS(OWA,n,"МФ",МФ[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод1")=СумГод1[Iter]:       n=PutFieldN(OWA,n,"СумГод1",СумГод1[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод2")=СумГод2[Iter]:       n=PutFieldN(OWA,n,"СумГод2",СумГод2[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод3")=СумГод3[Iter]:       n=PutFieldN(OWA,n,"СумГод3",СумГод3[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод4")=СумГод4[Iter]:       n=PutFieldN(OWA,n,"СумГод4",СумГод4[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод5")=СумГод5[Iter]:       n=PutFieldN(OWA,n,"СумГод5",СумГод5[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод6")=СумГод6[Iter]:       n=PutFieldN(OWA,n,"СумГод6",СумГод6[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод7")=СумГод7[Iter]:       n=PutFieldN(OWA,n,"СумГод7",СумГод7[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод8")=СумГод8[Iter]:       n=PutFieldN(OWA,n,"СумГод8",СумГод8[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод9")=СумГод9[Iter]:       n=PutFieldN(OWA,n,"СумГод9",СумГод9[Iter]); fi;
    if not GetFieldN(OWA,n,"СумГод10")=СумГод10[Iter]:     n=PutFieldN(OWA,n,"СумГод10",СумГод10[Iter]); fi;
    if not GetFieldS(OWA,n,"Предм")=Предм[Iter]:           n=PutFieldS(OWA,n,"Предм",Предм[Iter]); fi;
    if not GetFieldS(OWA,n,"Предм2")=Предм2[Iter]:         n=PutFieldS(OWA,n,"Предм2",Предм2[Iter]); fi;
    if not GetFieldS(OWA,n,"Предм3")=Предм3[Iter]:         n=PutFieldS(OWA,n,"Предм3",Предм3[Iter]); fi;
    if not GetFieldS(OWA,n,"Предм4")=Предм4[Iter]:         n=PutFieldS(OWA,n,"Предм4",Предм4[Iter]); fi;
    if not GetFieldS(OWA,n,"Примеч")=Примеч[Iter]:         n=PutFieldS(OWA,n,"Примеч",Примеч[Iter]); fi;
    if not GetFieldR(OWA,n,"ФАИП")=ФАИП[Iter]:             n=PutFieldR(OWA,n,"ФАИП",ФАИП[Iter]); fi;
    if not GetFieldN(OWA,n,"ФактОпл")=ФактОпл[Iter]:       n=PutFieldN(OWA,n,"ФактОпл",ФактОпл[Iter]); fi;
    if not GetFieldS(OWA,n,"СчДеб")=СчДеб[Iter]:           n=PutFieldS(OWA,n,"СчДеб",СчДеб[Iter]); fi;
    if not GetFieldS(OWA,n,"СчКре")=СчКре[Iter]:           n=PutFieldS(OWA,n,"СчКре",СчКре[Iter]); fi;
    if not GetFieldR(OWA,n,"Договор")=Договор:             n=PutFieldR(OWA,n,"Договор",Договор); fi;
    if not GetFieldS(OWA,n,"Договор_Призн")=Договор_Призн: n=PutFieldS(OWA,n,"Договор_Призн",Договор_Призн); fi;
    if not GetFieldS(OWA,n,"Договор_GUID")=Договор_GUID:   n=PutFieldS(OWA,n,"Договор_GUID",Договор_GUID); fi;
    if not GetFieldS(OWA,n,"РПО_Ключ")=РПО_Ключ:           n=PutFieldS(OWA,n,"РПО_Ключ",РПО_Ключ); fi;
   od;
   EndChanging(OWA);
   BeginChanging(OWA);
   LockCrd;
   if 1=0: EndChanging(OWA); fi; ----Обман компилятора (Изменения пока не закроется бланк)
  Except
   State=eWriteCrd;
   MyClose;
   Raise;
  end;
 Finally
  CloseProgress;
 end;
 НеПустаяТаблица(1);
 ^True;
end;

Proc ПолучитьСч(Iter:I);
var КБК_,КОСГУ_,СчДеб_,СчКре_:S;
var Res:L;
var y,y0:i;
var Flag:L;
 if not ВД[Iter]="" and not КБК[Iter]="":
    Раб.КСА.Начать;
    КБК_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],"ФКР","КБК",False);
    КОСГУ_=Раб.Бюджет2005.ВзятьКодКБК(КБК[Iter],"ФКР","КОСГУ",False);
    if ТекГод=Год1: y0=0;
      |ТекГод=Год2: y0=1;
      |ТекГод=Год3: y0=2;
      |ТекГод=Год4: y0=3;
      |ТекГод=Год5: y0=4;
      |ТекГод=Год6: y0=5;
      |ТекГод=Год7: y0=6;
      |ТекГод=Год8: y0=7;
      |ТекГод=Год9: y0=8;
      |ТекГод=Год10:y0=9;
    fi;
    if ВД[Iter]="1":
       for y=1..3 do
        if y>1:
           Flag=not GetVariableN("СумГод"+Str(y0+y)+"["+Str(Iter)+"]")=0;
          else
           Flag=True;
        fi;
        СчДеб_=КБК_+"."+ВД[Iter]+".501."+Str(y)+"3."+КОСГУ_;
        СчКре_=КБК_+"."+ВД[Iter]+".502."+Str(y)+"1."+КОСГУ_;
        if Flag:
           Раб.КСА.Добавить(СчДеб_);
           Раб.КСА.Добавить(СчКре_);
        fi;
        if y=1:
           СчДеб[Iter]=СчДеб_;
           СчКре[Iter]=СчКре_;
        fi;
       od;
      |ВД[Iter]<>"3":
       for y=1..2 do
        if y>1:
           Flag=not GetVariableN("СумГод"+Str(y0+y)+"["+Str(Iter)+"]")=0;
          else
           Flag=True;
        fi;
        СчДеб_=КБК_+"."+ВД[Iter]+".506."+Str(y)+"0."+КОСГУ_;
        СчКре_=КБК_+"."+ВД[Iter]+".502."+Str(y)+"1."+КОСГУ_;
        if Flag:
           Раб.КСА.Добавить(СчДеб_);
           Раб.КСА.Добавить(СчКре_);
        fi;
        if y=1:
           СчДеб[Iter]=СчДеб_;
           СчКре[Iter]=СчКре_;
        fi;
       od;
    fi;
    Res=Раб.КСА.Закончить(False);
 fi;
end;

Proc Оформление;
var Obj: Object;
var s,c,bg,fc:i;
 btnОчистить.Enabled=not Рег or (Рег and not Факт);
 btnЗагрузПре.Enabled=not Рег or (Рег and not Факт);
 for s=1..3 do
  if FindObject("S"+Str(s),Obj):
     Obj.Column(6 ,ColVisible,Секрет>0 and Учет_Реестр_ОФК);
     Obj.Column(9 ,ColVisible,not Учет_Реестр_ОФК);
     Obj.Column(10,ColVisible,Учет_Реестр_ОФК and not Год1 ="");
     Obj.Column(11,ColVisible,Учет_Реестр_ОФК and not Год2 ="");
     Obj.Column(12,ColVisible,Учет_Реестр_ОФК and not Год3 ="");
     Obj.Column(13,ColVisible,Учет_Реестр_ОФК and not Год4 ="");
     Obj.Column(14,ColVisible,Учет_Реестр_ОФК and not Год5 ="");
     Obj.Column(15,ColVisible,Учет_Реестр_ОФК and not Год6 ="");
     Obj.Column(16,ColVisible,Учет_Реестр_ОФК and not Год7 ="");
     Obj.Column(17,ColVisible,Учет_Реестр_ОФК and not Год8 ="");
     Obj.Column(18,ColVisible,Учет_Реестр_ОФК and not Год9 ="");
     Obj.Column(19,ColVisible,Учет_Реестр_ОФК and not Год10="");
  fi;
 od;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Гр_onEnter(FieldName: String; Iter: Integer): logical;
 FieldName=Раб.Формат.ReplaceSubStr(FieldName,"_","");
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Return False;
end;

Func ЗаполФакт_OnEnter(FieldName: String; Iter: Integer): logical;
 for Iter=1..Упр do
  ФактОпл[Iter]=if(Учет_Реестр_ОФК,СумГод1[Iter]+СумГод2[Iter]+СумГод3[Iter]+СумГод4[Iter]+СумГод5[Iter]+СумГод6[Iter]+СумГод7[Iter]+СумГод8[Iter]+СумГод9[Iter]+СумГод10[Iter],Сум[Iter]);
 od;
 FlagModify=True;
 Return False;
end;

Proc ЗаполФакт_OnExit(FieldName: String; Iter: Integer);
 for Iter=1..Упр do
  ФактОпл[Iter]=0;
 od;
 FlagModify=True;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 if Рег or (Рег and Факт): ^False; fi;
 InsertFrame(Упр,Iter+1);
 if Гр2 or FieldName="AA" : ВД    [Iter+1]=ВД[Iter]; СчДеб[Iter+1]=СчДеб[Iter]; СчКре[Iter+1]=СчКре[Iter]; fi;
 if Гр03 or FieldName="AA": КБК0  [Iter+1]=КБК0[Iter]; fi;
 if Гр3 or FieldName="AA" : КБК   [Iter+1]=КБК[Iter]; СчДеб[Iter+1]=СчДеб[Iter]; СчКре[Iter+1]=СчКре[Iter]; fi;
 if Гр4 or FieldName="AA" : Призн [Iter+1]=Призн[Iter]; fi;
 if Гр6 or FieldName="AA" : МФ    [Iter+1]=МФ[Iter]; fi;
 if Гр7 or FieldName="AA" : Предм [Iter+1]=Предм[Iter]; Предм2[Iter+1]=Предм2[Iter]; Предм3[Iter+1]=Предм3[Iter]; Предм4[Iter+1]=Предм4[Iter]; fi;
 if Гр8 or FieldName="AA" : Примеч[Iter+1]=Примеч[Iter]; fi;
 if Гр9 or FieldName="AA" : ФАИП  [Iter+1]=ФАИП[Iter]; ФАИП_[Iter+1]=ФАИП_[Iter]; fi;
 FlagModify=True;
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 if Рег or (Рег and Факт): ^False; fi;
 DeleteFrame(Упр,Iter);
 НеПустаяТаблица(1);
 FlagModify=True;
 Return False;
end;

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

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 if ВД[Iter]="": Message("Выберите вид деятельности",mtError); Template.Field="ВД"; Template.Frame=Iter; ^False; fi;
 tmp=Раб.Бюджет2005.Объединить(МаскаСч,"*."+ВД[Iter]+"."+Раб.Бюджет2005.МаскаСч8,"&");
 Раб.КБК.Список_КБК_РазрДобав=True;
 Раб.КБК.Список_КБК_КодСч=ВД[Iter]+".???.??";
 Раб.КБК.Список_КБК_РазрКОСГУ=true;
 if FieldName="КБК0":
    if ДатаДок>=1.1.2014 and Year(ДатаДок)=Year(ДатаРег):
       tmp=Раб.КБК.Список(tmp,"ФКР","КБК+КОСГУ И");
       if not tmp="":
          КБК0[Iter]=tmp;
          FlagModify=True;
       fi;
      else
       Return True;
    fi;
   else
    tmp=Раб.КБК.Список(tmp,"ФКР","КБК+КОСГУ И");
    if not tmp="":
       FlagModify=True;
    fi;
 fi;
 if FlagModify=True:
    КБК[Iter]=tmp;
    ПолучитьСч(Iter);
 fi;
 Return False;
end;

Func КБК0_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Match(Value,"???.????.???????.???.???"): Message("КБК должен соотвествовать шаблону 123.1234.1234567.123.123",mtError); ^False; fi;
 Return True;
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;
 ПолучитьСч(Iter);
 tmp=ИсклПризн;
 if not Общ_Справ1="": tmp=tmp+"|"+Общ_Справ1; fi;
 if not Общ_Справ2="": tmp=tmp+"|"+Общ_Справ2; fi;
 tmp=Раб.Бюджет.НаборПризнаков(СчДеб[Iter],СчКре[Iter],tmp);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp);
 if tmp="": ^False; fi;
 Призн[Iter]=Раб.Бюджет.ДобавитьПризнак(Призн[Iter],tmp);
 Призн[Iter]=Раб.Бюджет2005.СортироватьНаборСлов(Призн[Iter]," ",True);
 FlagModify=True;
 Return False;
end;

Proc Призн_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
 Призн[Iter]=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2 (Призн[Iter]," ","Name_A");
 if not ФАИП[Iter]=nil:
    tmp=CardFileRecSign("РПО_ФАИП","Признак","ФАИП",ФАИП[Iter]);
    Призн[Iter]=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Призн[Iter]," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
 fi;
 FlagModify=True;
end;

Proc Сум_OnExit(FieldName: String; Iter: Integer);
 PutVariableN(FieldName+"["+Str(Iter)+"]",Round(GetVariableN(FieldName+"["+Str(Iter)+"]"),2));
 FlagModify=True;
end;

Func МФ_OnEnter(FieldName: String; Iter: Integer): logical;
var MM:I;
 FlagModify=True;
 ClearVariable(Buf);
  for MM=1..12 do
   Buf[mm]=if(MM<10,"0","")+Str(MM)+" --"+Месяц(MM);
  od;
 mm=Alternate("График оплаты",Buf,-1,Mon(ToDay),12);
 if mm=0: ^False; fi;
 МФ[Iter]=SubStr(Buf[mm],1,Pos(" --",Buf[mm])-1);
 FlagModify=True;
 Return False;
end;

Proc МФ_OnExit(FieldName: String; Iter: Integer);
 FlagModify=True;
end;

Func Предм_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="exПредм" or LenПредм[Iter]>255:
    ClearVariable(Раб.Договор.BufLS);
    Раб.Договор.BufLS[1]=Предм [Iter];
    Раб.Договор.BufLS[2]=Предм2[Iter];
    Раб.Договор.BufLS[3]=Предм3[Iter];
    Раб.Договор.BufLS[4]=Предм4[Iter];
    Раб.Договор.ВводДлинСтр("Предмет по документу- основанию",4,Рег);
    if not Раб.Договор.ROLS:
       Предм [Iter]=Раб.Договор.BufLS[1];
       Предм2[Iter]=Раб.Договор.BufLS[2];
       Предм3[Iter]=Раб.Договор.BufLS[3];
       Предм4[Iter]=Раб.Договор.BufLS[4];
       FlagModify=True;
    fi;
    ^False;
 fi;
 FlagEdit=True;
 Return True;
end;

Func Предм_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 Предм [Iter]=Value;
 Предм2[Iter]="";
 Предм3[Iter]="";
 Предм4[Iter]="";
 FlagModify=True;
 Return True;
end;

Proc Предм_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit: 
    FlagEdit=False;
   else
    Предм [Iter]="";
    Предм2[Iter]="";
    Предм3[Iter]="";
    Предм4[Iter]="";
    FlagModify=True;
 fi;
end;

Func Предм_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,crcПредм,z,OWA,n,nn:I;
var Field,Val:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 ClearVariable(Buf);
 ClearVariable(Buf2);
 ClearVariable(Buf2_2);
 ClearVariable(Buf2_3);
 ClearVariable(Buf2_4);
 ClearVariable(BufI);
 if Field="Примеч":
    for Iter=1..Упр do
     Val=GetVariableS(Field+"["+Str(Iter)+"]");
     if not Val="":
        crcПредм=Раб.CRC16.CRC16_(0,Val);
        z=SearchInArray(Buf,Str16(crcПредм),True);
        if z=-1:
           z=InsertInArraySort(Buf,Str16(crcПредм));
           InsertInArray(Buf2,z,Val);
           InsertInArray(BufI,z,Iter);
        fi;
     fi;
    od;
    if LengthOfArray(Buf)=0: Message("Еще не введено ни одного значения",mtError); ^Cur; fi;
    z=Alternate(if(Field="Предм_","Выберите предмет","Выберите примечание"),Buf2,-1,1,12);
    if not z=0:
       PutVariableS(Field+"["+Str(Iter)+"]",GetVariableS(Field+"["+Str(BufI[z])+"]"));
       FlagModify=True;
    fi;
   else
    OWA=OpenWorkArea("РПО_ДОГОВОР_ПОЗИЦИИ_ТМЦ","","Договор="+RecordToString(Договор));
    Try
     nn=Records(OWA);
     for n=1..nn do
      val=GetFieldS(OWA,n,"НАИМТМЦ")+GetFieldS(OWA,n,"НАИМТМЦ2")+GetFieldS(OWA,n,"НАИМТМЦ3")+GetFieldS(OWA,n,"НАИМТМЦ4");
      crcПредм=Раб.CRC16.CRC16_(0,Val);
      crcПредм=Раб.CRC16.CRC16_(crcПредм,GetFieldS(OWA,n,"НАИМТМЦ2"));
      crcПредм=Раб.CRC16.CRC16_(crcПредм,GetFieldS(OWA,n,"НАИМТМЦ3"));
      crcПредм=Раб.CRC16.CRC16_(crcПредм,GetFieldS(OWA,n,"НАИМТМЦ4"));
      z=SearchInArray(Buf,Str16(crcПредм),True);
      if z=-1:
         z=InsertInArraySort(Buf,Str16(crcПредм));
         InsertInArray(Buf2  ,z,GetFieldS(OWA,n,"НАИМТМЦ"));
         InsertInArray(Buf2_2,z,GetFieldS(OWA,n,"НАИМТМЦ2"));
         InsertInArray(Buf2_3,z,GetFieldS(OWA,n,"НАИМТМЦ3"));
         InsertInArray(Buf2_4,z,GetFieldS(OWA,n,"НАИМТМЦ4"));
      fi;
     od;
    Finally
     CloseWorkArea(OWA);
    end;
    if nn=0: Message("Таблица предмета документа должна быть предварительно заполнена",mtWarning); ^Cur; fi;
    z=Alternate(if(Field="Предм_","Выберите предмет","Выберите примечание"),Buf2,-1,1,12);
    if not z=0:
       Предм [Iter]=Buf2  [z];
       Предм2[Iter]=Buf2_2[z];
       Предм3[Iter]=Buf2_3[z];
       Предм4[Iter]=Buf2_4[z];
       FlagModify=True;
    fi;
 fi;
 Return Cur;
end;

Func ФАИП_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
var Rec: Record;
-- rec=Раб.Поиск.ВыборИзКартотеки("Выбор объекта ФАИП","РПО_ФАИП","КОД|НАИМ1|КМНТ","Код|Наименование|Комментарий","");
 rec=OpenCardFile("РПО_ФАИП","",ФАИП[Iter],crdRecordOnly);
 if not Rec=nil:
    ФАИП[Iter]=Rec;
    ФАИП_[Iter]=GetCardFieldS("РПО_ФАИП",Rec,"КОД")+Chr(13)+GetCardFieldS("РПО_ФАИП",Rec,"Наим1");
    tmp=CardFileRecSign("РПО_ФАИП","Признак","ФАИП",Rec);
    Призн[Iter]=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Призн[Iter]," ",tmp,SubStr(tmp,1,Pos(".",tmp))+"*","");
    FlagModify=True;
 fi;
 Return False;
end;

Proc ФАИП_OnExit(FieldName: String; Iter: Integer);
 FlagModify=True;
 ФАИП[Iter]=nil;
 ФАИП_[Iter]="";
 Призн[Iter]=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Призн[Iter]," ","ФАИП.*","");
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnСохранить_OnClick(Sender: String);
 if not canUpdate(SelfCrd): Message("Недостаточно прав для выполнения данной операции"); Exit; fi;
 FlagModify=not WriteCrd;
end;

Proc btnОтменить_OnClick(Sender: String);
 ReadCrd(OWA);
 FlagModify=False;
end;

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

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Таблица будет очищена, продолжить ?",mtWarning)=cmCancel: Exit; fi;
 ОчиститьТаб;
 НеПустаяТаблица(15);
end;

Proc btnЗагрузПре_OnClick(Sender: String);
var OWA:I;
var crdДоговор:S;
var Договор_Пре:Record;
 Договор_Пре=GetVariableR(blnДоговор+".Договор_Пре");
 crdДоговор=GetVariableS(blnДоговор+".crdДоговор");
 if RecordExists(crdДоговор,Договор_Пре):
    if EnqOkCancel("Таблица будет очищена, продолжить ?",mtWarning)=cmCancel: Exit; fi;
    OWA=OpenWorkArea(SelfCrd,"","Договор="+RecordToString(Договор_Пре));
    Try
     ReadCrd(OWA);
    Finally
     CloseWorkArea(OWA);
    end;
    Message("Данные успешно загружены");
    FlagModify=True;
   else
    Message("Предыдущая копия документа не найдена",mtError);
 fi;
end;

Proc OnTimer(Sender: String);
 Timer1.Active=False;
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 if SelfCrd="": SelfCrd=Раб.Договор.crdДоговор_КБК; fi;
 FlagModify=False;
 State=eNoError;
 if Run: LockCrd; ReadCrd(OWA); fi;
 Run=False;
 ID="*";
end;

Proc AfterOpen(Destroy: Logical);
 if not tplFieldName="":
    Template.Field=tplFieldName;
    if not tplFrame=0: Template.Frame=tplFrame; fi;
 fi;
 Оформление;
end;

Proc OnClose(Destroy: Logical);
 if FlagModify and State=eNoError:
    if EnqOkCancel("Сохранить изменения ?")=cmOk: WriteCrd; else State=eNoSave; fi;
 fi;
end;
--Обработчики событий шаблона -----



Конец
