-- Шаблон создан мастером бланков
-- 19.02.2007 10:33:15
--
БланкСШаблоном "Сведения о государственном или муниципальном контракте либо гражданско-правовом договоре бюджетного учреждения на поставки товаров, выполнение работ, оказание услуг (его изменении), заключенном по итогам размещения заказа";

f491:L;
fУтвДок:L;
var f1191:L=not f491;

fMDuplex:L=False; --нуно переписывать форму т.к. если есть периодические секции невозможно точно вычислить границы листов

var Секрет:I;
var УтвДок1:S=if(f491:"Приложение N 1"+Chr(13)+"к Положению о ведении реестра государственных или муниципальных контрактов, в которые включаются сведения, касающиеся размещения заказов и составляющие государственную тайну"
                |True:"Приложение N 1"+Chr(13)+"к Положению о ведении государственных и муниципальных контрактов, а также гражданско-правовых договоров бюджетных учреждений на поставки товаров, выполнение работ, оказание услуг и о требованиях к технологическим,");
var УтвДок2:S=if(f491:""
                |True:"программным, лингвистическим, правовым и организационным средствам обеспечения пользования официальным сайтом в сети Интернет, на котором размещается указанный реестр");

КолКопий:I=[2];

var Загл:S=if(f491,"Сведения о государственном или муниципальном контракте (его изменении), содержащем сведения, составляющие государственную тайну, заключенном государственным или муниципальным заказчиком","Сведения о государственном или муниципальном контракте либо гражданско-правовом договоре бюджетного учреждения на поставки товаров, выполнение работ, оказание услуг (его изменении), заключенном по итогам размещения заказа");
var ДатаСвед:D=[ToDay];
var Заказчик:Record;
var Заказчик_ПолнИмя1:S;
var Заказчик_ПолнИмя2:S;
var Заказчик_ПолнИмя:S=Заказчик_ПолнИмя1+Заказчик_ПолнИмя2;
var Заказчик_КБП:S;
var Заказчик_ИНН:S;
var Заказчик_КПП:S;
var ТипСвед:S=["Первичные"];
var НППО:S;
var НаимБюдж:S;
var КодБюдж:S;
var НаимВнеБюдж:S;
var ВидВнеБюдж:S;
var СпособРазмещЗаказ:S;
var ТипИзм:I;
var ТипИзменения:S;
var ЗаглДатаИтог:s=if(f491,"Дата проведения закрытого аукциона (подведения итогов закрытого конкурса)","Дата проведения аукциона (подведения итогов конкурса, итогов запроса котировок или итогов торгов на товарной бирже)");
var ДатаИтог:D;
var РазмещЗаказ:S;
var ЗаглРеквДокОсн:s=if(f491,"(дата, номер, наименование документа)","(дата, номер, наименование документа (реквизиты документа), являющегося основанием для изменения условий контракта)");
var РеквДокОсн:S;
var ДатаДок:D;
var НомерДок:S;
var ОКВ:S;
var СумДок:N;
var ДатаК:D;
var НомИзв:S;
var Ном_Реестр_ОФК:S;

var ЗаглСум1:S=if(f491,"Сумма контракта (рублей)","Сумма контракта, рублей");
var Гр12:I=if(f491,8,12);
var Год1[]:S;
var Год1_[]:S=if(Год1[$]="","на"+Chr(13)+"20___"+Chr(13)+"год","на"+Chr(13)+"20"+Год1[$]+Chr(13)+"год");
var Год2[]:S;
var Год2_[]:S=if(Год2[$]="","на"+Chr(13)+"20___"+Chr(13)+"год","на"+Chr(13)+"20"+Год2[$]+Chr(13)+"год");
var A1:S="+";
var D1:S="-";
var Итого:S="Итого"+if(f491,":","");

var Упр1:I;
var Р1_КБК[]:S;
var Р1_Сум1[]:N;
var Р1_Сум2[]:N;
var Р1_Сум3[]:N;
var Р1_Сум4[]:N;
var Р1_Сум5[]:N;
var Р1_Сум6[]:N;
var Р1_Сум7[]:N;
var Р1_Сум8[]:N;
var Р1_Сум9[]:N;
var Р1_Сум10[]:N;
var Р1_Прим[]:S;

var Итог_Р1_Сум1:N=SumOfArray(Р1_Сум1,Упр1);
var Итог_Р1_Сум2:N=SumOfArray(Р1_Сум2,Упр1);
var Итог_Р1_Сум3:N=SumOfArray(Р1_Сум3,Упр1);
var Итог_Р1_Сум4:N=SumOfArray(Р1_Сум4,Упр1);
var Итог_Р1_Сум5:N=SumOfArray(Р1_Сум5,Упр1);
var Итог_Р1_Сум6:N=SumOfArray(Р1_Сум6,Упр1);
var Итог_Р1_Сум7:N=SumOfArray(Р1_Сум7,Упр1);
var Итог_Р1_Сум8:N=SumOfArray(Р1_Сум8,Упр1);
var Итог_Р1_Сум9:N=SumOfArray(Р1_Сум9,Упр1);
var Итог_Р1_Сум10:N=SumOfArray(Р1_Сум10,Упр1);

var Р2_НаимГр1:S=if(f491,"Код экономической классификации расходов бюджетов Российской Федерации","Код классификации операций сектора государственного управления Российской Федерации");

var A2:S="+";
var D2:S="-";

var Упр2:I;
var Р2_КБК[]:S;
var Р2_Сум1[]:N;
var Р2_Сум2[]:N;
var Р2_Сум3[]:N;
var Р2_Сум4[]:N;
var Р2_Сум5[]:N;
var Р2_Сум6[]:N;
var Р2_Сум7[]:N;
var Р2_Сум8[]:N;
var Р2_Сум9[]:N;
var Р2_Сум9[]:N;
var Р2_Сум10[]:N;

var Итог_Р2_Сум1:N=SumOfArray(Р2_Сум1,Упр2);
var Итог_Р2_Сум2:N=SumOfArray(Р2_Сум2,Упр2);
var Итог_Р2_Сум3:N=SumOfArray(Р2_Сум3,Упр2);
var Итог_Р2_Сум4:N=SumOfArray(Р2_Сум4,Упр2);
var Итог_Р2_Сум5:N=SumOfArray(Р2_Сум5,Упр2);
var Итог_Р2_Сум6:N=SumOfArray(Р2_Сум6,Упр2);
var Итог_Р2_Сум7:N=SumOfArray(Р2_Сум7,Упр2);
var Итог_Р2_Сум8:N=SumOfArray(Р2_Сум8,Упр2);
var Итог_Р2_Сум9:N=SumOfArray(Р2_Сум9,Упр2);
var Итог_Р2_Сум10:N=SumOfArray(Р2_Сум10,Упр2);

var A3:S="+";
var D3:S="-";

var ЗаглОКП:S=if(f491,"Код продукции по ОКП","Код продукции по ОКДП");
var ЗаглЦена:S=if(f491,"Цена  за единицу (рублей)","Цена  за единицу, рублей");
var ЗаглСум2:S=if(f491,"Сумма (рублей)","Сумма, рублей");

var Упр3:I;
var пп[]:i=$;
var НаимТмц[]:S;
var ОКП[]:S;
var ЕдИзм[]:S;
var Цена[]:N;
var Кол[]:N;
var СумТМЦ[]:N;
var ТМЦ[]:Record;

var ИтогСумТМЦ:N=SumOfArray(СумТМЦ,Упр3);

var A4:S="+";
var D4:S="-";

var Упр4:I;
var Контр[]:Record;
var Контр_ПолнИмя[]:S;
var Контр_Страна[]:S;
var Контр_ОКСМ[]:S;
var Контр_Адрес[]:S;
var Контр_ИНН[]:S;
var Контр_КПП[]:S;
var Контр_Статус[]:S;
var Контр_Телефон[]:S;

var ДолжнРук:S=if(f491:"Руководитель (иное уполномоченное лицо)"|True:"Руководитель или иное уполномоченное лицо");
var ФИОРук:S;
var ДатаРук:D=[ДатаСвед];

var РасшифрПодписи:s=if(f491,"(расшифровка)","(расшифровка подписи)");

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

var Buf[]:S;

cb491: Object;

sНЗ_491 : Section;
sНЗ_1191: Section;

S1_1: Section;
S1_2: Section;
S1_3: Section;
S2_1: Section;
S2_2: Section;
S2_3: Section;
S3_1: Section;
S3_2: Section;
S3_3: Section;
S4_1: Section;
S4_2: Section;

S5_1: Section;
S5_2: Section;

var XS:I=2100; --Размер листа
var YS:I=2970; --Размер листа
--
var тчнКол:i=[10];
--
var SelfCfg:S="РПО.Документы.ДоговорПост.Прил1_Сведения.000.cfg";
--Процедуры и функции -------------
Proc Оформление;
var Obj: Object;
var s,c,w:I;
 for s=1..3 do
  if FindObject("S1_"+Str(s),Obj):
     w=if(f491,230,150);
     for c=2..5 do
      Obj.Column(c,ColWidth,w);
     od;
     Obj.Column(6,ColWidth,if(f491,220,140));
     Obj.Column(7,ColWidth,if(f491,220,130));
     for c=8..11 do
      Obj.Column(c,ColVisible,not f491);
     od;
  fi;
 od;
 --
 for s=1..3 do
  if FindObject("S2_"+Str(s),Obj):
     w=if(f491,240,150);
     for c=2..7 do
      Obj.Column(c,ColWidth,w);
     od;
     for c=8..11 do
      Obj.Column(c,ColVisible,not f491);
     od;
  fi;
 od;
end;

Proc ЗаполнитьНаимЗаказчика_(Flag:L; Obj:Object; Val1:S; Val2:S);
var ww,w,s:i;
var tmp:S;
 Obj.Row(1,RowVisible,not Flag);
 Obj.Row(2,RowVisible,False);
 Obj.Row(3,RowVisible,False);
 Obj.Row(4,RowVisible,False);
 if not Flag: Exit; fi;
 if Length(Val1)+Length(Val2)<=255:
    Obj.Row(1,RowVisible,True);
   else
    Раб.Бюджет2005.BufS[1]=Val1;
    Раб.Бюджет2005.BufS[2]=Val2;
    ww=Раб.Бюджет2005.Str2Word(2," ");
    ww=Раб.Бюджет2005.Word2SingleStr(1,2,Obj,ww," ");
    s=0;
    ClearVariable(Buf);
    tmp=Раб.Бюджет2005.BufS[1];
    for w=2..ww do
     if Length(tmp)+1+Length(Раб.Бюджет2005.BufS[w])>255:
        s=s+1;
        Buf[s]=tmp;
        tmp=Раб.Бюджет2005.BufS[w];
       else
        tmp=tmp+" "+Раб.Бюджет2005.BufS[w];
     fi;
    od;
    s=s+1;
    Buf[s]=tmp;
    Obj.Cell(2,2,CellContents,Buf[1],True);
    Obj.Row(2,RowVisible,not Buf[1]="");
    Obj.CellLinks(2,2,2,2);
    Obj.Cell(3,2,CellContents,Buf[2],True);
    Obj.Row(3,RowVisible,not Buf[2]="");
    Obj.CellLinks(2,3,2,3);
    Obj.Cell(4,2,CellContents,Buf[3],True);
    Obj.Row(4,RowVisible,not Buf[3]="");
    Obj.CellLinks(2,4,2,4);
 fi;
end;

Proc ЗаполнитьНаимЗаказчика(Flag:L);
var Obj: Object;
 if f491: 
    if not FindObject("sНЗ_491",Obj): Exit; fi; 
   else
    if not FindObject("sНЗ_1191",Obj): Exit; fi;
 fi;
 ЗаполнитьНаимЗаказчика_(Flag,Obj,Заказчик_ПолнИмя1,Заказчик_ПолнИмя2);
end;

--Func КоррекцияР3(yy:i; y0:i):I;   --проблема не могу точно узнать координаты начала таблицы на печати (на экране известны) нужно обрабатывать переносы по листам внутри переодиических секций
--var Iter,y,l,h,z:i;
--var Obj:Object;
-- if not FindObject("S3_2",Obj): ^0; fi;
-- y=AsInteger(Obj.Row(1,RowTop,""));
-- for Iter=1..Упр3 do
--  if Iter=30:
--     z=z;
--  fi;
--  l=AsInteger(Obj.Cell(1,2,CellLinesCount,НаимТмц[Iter]))-1;
--  h=47+(37*l);
--  if y+h-y0>yy:
--     z=z+(yy-y0-y);
--     y0=y;
--    else
--     y=y+h;
--  fi;
-- od;
-- ^z;
--end;

Func РазбитьНаЛисты(Flag:L):I;
var y1,y2,p1,p2,yy,y0,pp,p,s:I;
var Obj1,Obj2:Object;
 pp=1;
 p=1;
 S1_1.Row(1,RowNewPage,False);
 S2_1.Row(1,RowNewPage,False);
 S3_1.Row(1,RowNewPage,False);
 S4_1.Row(1,RowNewPage,False);
 if not Flag: ^0; fi;
 Раб.Настр_Печать.ReadCfg("",SelfCfg);
 yy=Раб.Настр_Печать.Sheet(XS,YS);
 y0=200; --200 это первая не печатаемая строка
 for s=1..4 do
  if FindObject("s"+Str(s)+"_1",Obj1) and FindObject("s"+Str(s)+"_2",Obj2):
     y1=AsInteger(Obj1.Row(1,RowTop,""));
     y2=AsInteger(Obj2.Row(1,RowTop,""))+AsInteger(Obj2.Row(1,RowHeight,""));
     p1=Int(Trunc((y1-y0)/yy));
     p2=Int(Trunc((y2-y0)/yy));
     pp=Max(pp,p+p2);
     if not p1=p2: Obj1.Row(1,RowNewPage,True); y0=y1; 
        p=pp;
     fi;
  fi;
 od;
 --Висячий штамп
 if f491:
    y1=AsInteger(S5_1.Row(1,RowTop,""));
    y2=AsInteger(S5_2.Row(1,RowTop,""))+47;
    p1=Int(Trunc((y1-y0)/yy));
    p2=Int(Trunc((y2-y0)/yy));
    if not p1=p2: S4_1.Row(1,RowNewPage,True); pp=pp+1; fi;
 fi;
 ^pp;
end;

Proc Очистить;
 ClearVariable(Заказчик);
 ClearVariable(Заказчик_ПолнИмя1);
 ClearVariable(Заказчик_ПолнИмя2);
 ClearVariable(Заказчик_КБП);
 ClearVariable(Заказчик_ИНН);
 ClearVariable(Заказчик_КПП);
 ClearVariable(ТипСвед);
 ClearVariable(НППО);
 ClearVariable(НаимБюдж);
 ClearVariable(КодБюдж);
 ClearVariable(НаимВнеБюдж);
 ClearVariable(ВидВнеБюдж);
 ClearVariable(СпособРазмещЗаказ);
 ClearVariable(РазмещЗаказ);
 ClearVariable(ТипИзм);
 ClearVariable(ТипИзменения);
 ClearVariable(ДатаИтог);
 ClearVariable(РеквДокОсн);
 ClearVariable(ДатаДок);
 ClearVariable(НомерДок);
 ClearVariable(ОКВ);
 ClearVariable(СумДок);
 ClearVariable(ДатаК);
 ClearVariable(НомИзв);
 ClearVariable(Ном_Реестр_ОФК);

 ClearVariable(Год1);
 ClearVariable(Год2);

 ClearVariable(Упр1);
 ClearVariable(Р1_КБК);
 ClearVariable(Р1_Сум1);
 ClearVariable(Р1_Сум2);
 ClearVariable(Р1_Сум3);
 ClearVariable(Р1_Сум4);
 ClearVariable(Р1_Сум5);
 ClearVariable(Р1_Сум6);
 ClearVariable(Р1_Сум7);
 ClearVariable(Р1_Сум8);
 ClearVariable(Р1_Сум9);
 ClearVariable(Р1_Сум10);
 ClearVariable(Р1_Прим);

 ClearVariable(Упр2);
 ClearVariable(Р2_КБК);
 ClearVariable(Р2_Сум1);
 ClearVariable(Р2_Сум2);
 ClearVariable(Р2_Сум3);
 ClearVariable(Р2_Сум4);
 ClearVariable(Р2_Сум5);
 ClearVariable(Р2_Сум6);
 ClearVariable(Р2_Сум7);
 ClearVariable(Р2_Сум8);
 ClearVariable(Р2_Сум9);
 ClearVariable(Р2_Сум10);

 ClearVariable(Упр3);
 ClearVariable(НаимТмц);
 ClearVariable(ОКП);
 ClearVariable(ЕдИзм);
 ClearVariable(Цена);
 ClearVariable(Кол);
 ClearVariable(СумТМЦ);
 ClearVariable(ТМЦ);

 ClearVariable(Упр4);
 ClearVariable(Контр);
 ClearVariable(Контр_ПолнИмя);
 ClearVariable(Контр_Страна);
 ClearVariable(Контр_ОКСМ);
 ClearVariable(Контр_Адрес);
 ClearVariable(Контр_ИНН);
 ClearVariable(Контр_КПП);
 ClearVariable(Контр_Статус);
 ClearVariable(Контр_Телефон);
end;

Proc Пересчет (FieldName:S; Iter:I);
 if FieldName="Цена" or FieldName="Кол": СумТМЦ[Iter]=Round(Цена[Iter]*Кол[Iter],2);
   |FieldName="СумТМЦ": ОКП[Iter]=""; ЕдИзм[Iter]=""; Цена[Iter]=0; Кол[Iter]=0;
 fi;
end;

Proc Расчет (vДоговор:S);
var OWA1,OWA2,n,nr,z,OA,i,ii:I;
var tmp:S;
 Очистить;
 OWA1=OpenWorkArea("РПО_Договор","","UKey="+vДоговор);
 Try
  if Records(OWA1)=0: Message("Договор не найден",mtError); Exit; fi;
  Секрет=GetFieldI(OWA1,1,"Секрет");
  f491=Секрет>=2;
  if f491:
     тчнКол=3;
    else
     тчнКол=10;
     if Раб.Настр.Начать("ИНФО.ДОГОВОР",0,0,"",GetGUID):
        тчнКол=Int(Раб.Настр.ВзятьЗначение("тчнКол_"));
     fi;
  fi;
  ДатаСвед=GetFieldD(OWA1,1,"ДатаСвед");
  Заказчик=GetFieldR(OWA1,1,"Учр");
  Заказчик_ПолнИмя1=GetFieldS(OWA1,1,"Учр.ПолнИмя");
  Заказчик_ПолнИмя2=GetFieldS(OWA1,1,"Учр.РПО_ПолнИмя2");
  Заказчик_КБП=if(f491,GetFieldS(OWA1,1,"Учр.РПО_КБП"),"");
  Заказчик_ИНН=GetFieldS(OWA1,1,"Учр.ИНН");
  Заказчик_КПП=GetFieldS(OWA1,1,"Учр.КПП");
  ТипСвед=if(GetFieldI(OWA1,1,"ТипСвед")=0,"Первичные","Измененные");
  НППО=GetFieldS(OWA1,1,"ИстФин");
  НаимБюдж=GetFieldS(OWA1,1,"НаимБюдж");
  КодБюдж=GetFieldS(OWA1,1,"КодБюдж");
  ВидВнеБюдж=GetFieldS(OWA1,1,"ВидВнеБюдж");
  НаимВнеБюдж=Раб.Договор.ВидВнеБюджетныхСредств(ВидВнеБюдж,False,"");
  РазмещЗаказ=GetFieldS(OWA1,1,"РазмещЗаказ");
  if f491:
     СпособРазмещЗаказ=Раб.Договор.РазмещениеЗаказа491(РазмещЗаказ,False);
    else
     СпособРазмещЗаказ=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,False,if(f491,"491","1191"));
  fi;
  ТипИзм=GetFieldI(OWA1,1,"ТипИзм");
  if ТипИзм=3: ТипИзм=2;
    |ТипИзм=4: ТипИзм=1;
  fi;
  ТипИзменения=if(ТипИзм=1:"Изменение контракта"|ТипИзм=2:"Исправление сведений"|true:"");
  ДатаИтог=GetFieldD(OWA1,1,"ДатаИтог");
  РеквДокОсн=DateToString(GetFieldD(OWA1,1,"ДатаДокОсн"))+", "+GetFieldS(OWA1,1,"РеквДокОсн");
  ДатаДок=GetFieldD(OWA1,1,"ДатаДок");
  НомерДок=GetFieldS(OWA1,1,"НомерДок");
  ОКВ=GetFieldS(OWA1,1,"ОКВ");
  СумДок=GetFieldN(OWA1,1,"СумДок");
  ДатаК=GetFieldD(OWA1,1,"ДатаК");
  НомИзв=GetFieldS(OWA1,1,"НомИзв");
  Ном_Реестр_ОФК=if(ТипСвед="Первичные","",GetFieldS(OWA1,1,"Ном_Реестр_ОФК"));
  --
  OWA2=OpenWorkArea("РПО_ДОГОВОР_ПОЗИЦИИ","КБК","ДОГОВОР="+vДоговор);
  Try
   nr=Records(OWA2);
   for n=1..nr do
    Год1[1]=SubStr(GetFieldS(OWA2,n,"Год1"),3,2);
    Год1[2]=SubStr(GetFieldS(OWA2,n,"Год2"),3,2);
    Год1[3]=SubStr(GetFieldS(OWA2,n,"Год3"),3,2);
    Год1[4]=SubStr(GetFieldS(OWA2,n,"Год4"),3,2);
    Год1[5]=SubStr(GetFieldS(OWA2,n,"Год5"),3,2);
    Год1[6]=SubStr(GetFieldS(OWA2,n,"Год6"),3,2);
    tmp=GetFieldS(OWA2,n,"КБК");
    if GetFieldS(OWA2,n,"ВД")="1":
       tmp=Раб.Формат.ReplaceSubstr(tmp,".","");
       z=SearchInArray(Р1_КБК,tmp,False);
       if z=-1:
          z=1;
          InsertFrame(Упр1,z);
          Р1_КБК[z]=tmp;
          Р1_Сум1[z]=0;
          Р1_Сум2[z]=0;
          Р1_Сум3[z]=0;
          Р1_Сум4[z]=0;
          Р1_Сум5[z]=0;
          Р1_Сум6[z]=0;
          Р1_Прим[z]="";
       fi;
       Р1_Сум1[z]=Р1_Сум1[z]+GetFieldN(OWA2,n,"СумГод1");
       Р1_Сум2[z]=Р1_Сум2[z]+GetFieldN(OWA2,n,"СумГод2");
       Р1_Сум3[z]=Р1_Сум3[z]+GetFieldN(OWA2,n,"СумГод3");
       Р1_Сум4[z]=Р1_Сум4[z]+GetFieldN(OWA2,n,"СумГод4");
       Р1_Сум5[z]=Р1_Сум5[z]+GetFieldN(OWA2,n,"СумГод5");
       Р1_Сум6[z]=Р1_Сум6[z]+GetFieldN(OWA2,n,"СумГод6");
      else
       tmp=Раб.Бюджет2005.ВзятьКодКБК(tmp,"ФКР","КОСГУ",False);
       z=SearchInArray(Р2_КБК,tmp,False);
       if z=-1:
          z=1;
          InsertFrame(Упр2,z);
          Р2_КБК[z]=tmp;
          Р2_Сум1[z]=0;
          Р2_Сум2[z]=0;
          Р2_Сум3[z]=0;
          Р2_Сум4[z]=0;
          Р2_Сум5[z]=0;
          Р2_Сум6[z]=0;
       fi;
       Р2_Сум1[z]=Р2_Сум1[z]+GetFieldN(OWA2,n,"СумГод1");
       Р2_Сум2[z]=Р2_Сум2[z]+GetFieldN(OWA2,n,"СумГод2");
       Р2_Сум3[z]=Р2_Сум3[z]+GetFieldN(OWA2,n,"СумГод3");
       Р2_Сум4[z]=Р2_Сум4[z]+GetFieldN(OWA2,n,"СумГод4");
       Р2_Сум5[z]=Р2_Сум5[z]+GetFieldN(OWA2,n,"СумГод5");
       Р2_Сум6[z]=Р2_Сум6[z]+GetFieldN(OWA2,n,"СумГод6");
    fi;
   od;
   CopyArray(Год1,Год2);
  Finally
   CloseWorkArea(OWA2);
  end;
  SortSection(Упр1,1);
  SortSection(Упр2,1);
  if Round(Итог_Р1_Сум1+Итог_Р1_Сум2+Итог_Р1_Сум3+Итог_Р1_Сум4+Итог_Р1_Сум5+Итог_Р1_Сум6+Итог_Р1_Сум7+Итог_Р1_Сум8+Итог_Р1_Сум9+Итог_Р1_Сум10,2)=0: ClearVariable(Год1); fi;
  if Round(Итог_Р2_Сум1+Итог_Р2_Сум2+Итог_Р2_Сум3+Итог_Р2_Сум4+Итог_Р2_Сум5+Итог_Р2_Сум6+Итог_Р2_Сум7+Итог_Р2_Сум8+Итог_Р2_Сум9,2)=0: ClearVariable(Год2); fi;
  --Удаление первого года если он нулевой
  if not LengthOfArray(Р1_Сум1)=0:
     if Р1_Сум1[MaxInArray(Р1_Сум1)]=0 and Р1_Сум1[MinInArray(Р1_Сум1)]=0:
        for z=2..6 do
         Год1[z-1]=Год1[z];
        od;
        Год1[6]="";
        CopyArray(Р1_Сум2,Р1_Сум1);
        CopyArray(Р1_Сум3,Р1_Сум2);
        CopyArray(Р1_Сум4,Р1_Сум3);
        CopyArray(Р1_Сум5,Р1_Сум4);
        CopyArray(Р1_Сум6,Р1_Сум5);
        ClearVariable(Р1_Сум6);
     fi;
  fi;
  if not LengthOfArray(Р2_Сум1)=0:
     if Р2_Сум1[MaxInArray(Р2_Сум1)]=0 and Р2_Сум1[MinInArray(Р2_Сум1)]=0:
        for z=2..6 do
         Год2[z-1]=Год2[z];
        od;
        Год2[6]="";
        CopyArray(Р2_Сум2,Р2_Сум1);
        CopyArray(Р2_Сум3,Р2_Сум2);
        CopyArray(Р2_Сум4,Р2_Сум3);
        CopyArray(Р2_Сум5,Р2_Сум4);
        CopyArray(Р2_Сум6,Р2_Сум5);
        ClearVariable(Р2_Сум6);
     fi;
  fi;
  --
  OWA2=OpenWorkArea("РПО_ДОГОВОР_ПОЗИЦИИ_ТМЦ","НП","ДОГОВОР="+vДоговор);
  Try
   nr=Records(OWA2);
   for n=1..nr do
    InsertFrame(Упр3,n);
    НаимТМЦ[n]=GetFieldS(OWA2,n,"НаимТМЦ");
    ОКП[n]=GetFieldS(OWA2,n,"ОКП");
    ЕдИзм[n]=GetFieldS(OWA2,n,"ЕдИзм");
    Цена[n]=GetFieldN(OWA2,n,"Цена");
    Кол[n]=Round(GetFieldN(OWA2,n,"Кол"),тчнКол);
    СумТМЦ[n]=GetFieldN(OWA2,n,"Сум");
    ТМЦ[n]=GetFieldR(OWA2,n,"ТМЦ");
   od;
  Finally
   CloseWorkArea(OWA2);
  end;
  --
  InsertFrame(Упр4,1);
  Контр[Упр4]=GetFieldR(OWA1,1,"Контр");
  Контр_ПолнИмя[Упр4]=GetFieldS(OWA1,1,"Контр.ПолнИмя")+GetFieldS(OWA1,1,"Контр.РПО_ПолнИмя2");
  Контр_Страна[Упр4]=GetFieldS(OWA1,1,"Контр.РПО_Страна");
  Контр_ОКСМ[Упр4]=GetFieldS(OWA1,1,"Контр.РПО_ОКСМ");
  Контр_Адрес[Упр4]=GetFieldS(OWA1,1,"Контр.ПочтАдрес");
  Контр_ИНН[Упр4]=GetFieldS(OWA1,1,"Контр.ИНН");
  Контр_КПП[Упр4]=GetFieldS(OWA1,1,"Контр.КПП");
  Контр_Статус[Упр4]=GetFieldS(OWA1,1,"Контр.РПО_Статус");
  Контр_Телефон[Упр4]=GetFieldS(OWA1,1,"Контр.Телефон");
  if Контр_Телефон[Упр4]="": Контр_Телефон[Упр4]=GetFieldS(OWA1,1,"Контр.Факс"); fi;
  --
  OA=OpenArray(OWA1,1,"Контр2","");
  ii=Records(OA);
  for i=1..ii do
   InsertFrame(Упр4,Упр4+1);
   Контр[Упр4]=GetFieldR(OA,i,"Контр");
   Контр_ПолнИмя[Упр4]=GetFieldS(OA,i,"Контр.ПолнИмя")+GetFieldS(OA,i,"Контр.РПО_ПолнИмя2");
   Контр_Страна[Упр4]=GetFieldS(OA,i,"Контр.РПО_Страна");
   Контр_ОКСМ[Упр4]=GetFieldS(OA,i,"Контр.РПО_ОКСМ");
   Контр_Адрес[Упр4]=GetFieldS(OA,i,"Контр.ПочтАдрес");
   Контр_ИНН[Упр4]=GetFieldS(OA,i,"Контр.ИНН");
   Контр_КПП[Упр4]=GetFieldS(OA,i,"Контр.КПП");
   Контр_Статус[Упр4]=GetFieldS(OA,i,"Контр.РПО_Статус");
   Контр_Телефон[Упр4]=GetFieldS(OA,i,"Контр.Телефон");
   if Контр_Телефон[Упр4]="": Контр_Телефон[Упр4]=GetFieldS(OA,i,"Контр.Факс"); fi;
  od;
  CloseWorkArea(OA);
  --
  ФИОРук=GetFieldS(OWA1,1,"ФИОРук");
  ДатаРук=GetFieldD(OWA1,1,"ДатаРук");
 Finally
  CloseWorkArea(OWA1);
 end;
 Оформление;
 cb491.State=f491;
 Message("Расчет завершен");
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func Секрет_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="0 -- Не секретно";
 Buf[2]="1 -- ДСП";
 Buf[3]="2 -- Секретно";
 Buf[4]="3 -- Совершенно секретно";
 n=Alternate("Гриф секретности",Buf,-1,Секрет+1,12);
 if not n=0:
    Секрет=n-1;
 fi;
 Return False;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(AsString(Template.Field),tmp);
 Return Cur;
end;

Func Заказчик_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","--Наше",Заказчик,crdRecordOnly);
 if Rec=nil: ^False; fi;
 Заказчик=Rec;
 Заказчик_ПолнИмя1=GetCardFieldS("Контрагент",Rec,"ПолнИмя");
 Заказчик_ПолнИмя2=GetCardFieldS("Контрагент",Rec,"РПО_ПолнИмя2");
 Заказчик_КБП=GetCardFieldS("Контрагент",Rec,"РПО_КБП");
 Заказчик_ИНН=GetCardFieldS("Контрагент",Rec,"ИНН");
 Заказчик_КПП=GetCardFieldS("Контрагент",Rec,"КПП");
 ФИОРук=GetCardFieldS("Контрагент",Rec,"ФИОРук");
 Return False;
end;

Proc Заказчик_OnExit(FieldName: String; Iter: Integer);
 Заказчик=nil;
 Заказчик_ПолнИмя1="";
 Заказчик_ПолнИмя2="";
 Заказчик_КБП="";
 Заказчик_ИНН="";
 Заказчик_КПП="";
end;

Func ТипСвед_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Первичные";
 Buf[2]="Измененные";
 n=Alternate("Тип сведений",Buf,-1,SearchInArray(Buf,ТипСвед),12);
 if n=0: ^False; fi;
 ТипСвед=Buf[n];
 Return False;
end;

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

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

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

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

Func РазмещЗаказ_OnEnter(FieldName: String; Iter: Integer): logical;
 if ДатаДок=1.1.100: Message("Дата заключения контракта",mtError); Template.Field="ДатаДок"; ^False; fi;
 if f491:
    РазмещЗаказ=Раб.Договор.РазмещениеЗаказа491(РазмещЗаказ,True);
    СпособРазмещЗаказ=Раб.Договор.РазмещениеЗаказа491(РазмещЗаказ,False);
   else
    РазмещЗаказ=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,True,if(f491,"","1191"));
    СпособРазмещЗаказ=Раб.Договор.РазмещениеЗаказа(РазмещЗаказ,False,if(f491,"","1191"));
 fi;
Return False;
end;

Proc РазмещЗаказ_OnExit(FieldName: String; Iter: Integer);
 СпособРазмещЗаказ="";
end;

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

Proc ТипИзм_OnExit(FieldName: String; Iter: Integer);
 ClearVariable(ТипИзм);
 ClearVariable(ТипИзменения);
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 A_onEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="A1": InsertFrame(Упр1,Iter+1);
   |FieldName="A2": InsertFrame(Упр2,Iter+1);
   |FieldName="A3": InsertFrame(Упр3,Iter+1);
   |FieldName="A4": InsertFrame(Упр4,Iter+1);
 fi;
 Return False;
end;


Func D_onEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="D1": DeleteFrame(Упр1,Iter);
   |FieldName="D2": DeleteFrame(Упр2,Iter+1);
   |FieldName="D3": DeleteFrame(Упр3,Iter+1);
   |FieldName="D4": DeleteFrame(Упр4,Iter+1);
 fi;
 Return False;
end;

Func Год_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
 ClearVariable(Buf);
 for i=1..12 do Buf[i]=Str(Year(ToDay)+i-3); od;
 i=Alternate("Выбор года",Buf,30,3,12);
 if i=0: ^False; fi;
 FieldName=Раб.Формат.ReplaceSubstr(FieldName,"_","");
 PutVariableS(FieldName,SubStr(Buf[i],3,2));
 Return False;
end;

Proc Год_onExit(FieldName: String; Iter: Integer);
 FieldName=Раб.Формат.ReplaceSubstr(FieldName,"_","");
 PutVariableS(FieldName,"");
end;

Proc НаимТМЦ_OnExit(FieldName: String; Iter: Integer);
 ТМЦ[Iter]=nil;
end;

Func НаимТМЦ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
var Iter: I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if not ТМЦ[Iter]=nil:
    rec=OpenCardFile("ТМЦ","",ТМЦ[Iter],crdRecordOnly);
   else
    rec=Раб.Документы.ВыборСФильтром("ТМЦ","КОММЕНТ","");
 fi;
 if Rec=nil: ^Cur; fi;
 ТМЦ[Iter]=Rec;
 НаимТМЦ[Iter]=GetCardFieldS("ТМЦ",Rec,"КОММЕНТ");
 ОКП[Iter]=GetCardFieldS("ТМЦ",Rec,"ОКДП");
 ЕдИзм[Iter]=GetCardFieldS("ТМЦ",Rec,"ОКЕИ");
 if ЕдИзм[Iter]="": ЕдИзм[Iter]=GetCardFieldS("ТМЦ",Rec,"ЕдИзм"); fi;
 Return Cur;
end;

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

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

Proc Сум_OnExit(FieldName: String; Iter: Integer);
var a:i;
 a=if(FieldName="Кол",тчнКол,2);
 PutVariableN(FieldName,Round(GetVariableN(FieldName),a));
 Пересчет(FieldName,Iter);
end;

Func Контр_onEnter(FieldName: String; Iter: Integer): logical;
var rec:record;
 if not Контр[Iter]=nil:
    rec=OpenCardFile("Контрагент","",Контр[Iter],crdRecordOnly);
   else
    rec=Раб.Документы.ВыборСФильтром("Контрагент","ПолнИмя","");
 fi;
 if Rec=nil: ^False; fi;
 Контр[Iter]=Rec;
 Контр_ПолнИмя[Iter]=GetCardFieldS("Контрагент",Rec,"ПолнИмя")+GetCardFieldS("Контрагент",Rec,"РПО_ПолнИмя2");
 Контр_Страна[Iter]=GetCardFieldS("Контрагент",Rec,"РПО_Страна");
 Контр_ОКСМ[Iter]=GetCardFieldS("Контрагент",Rec,"РПО_ОКСМ");
 Контр_Адрес[Iter]=GetCardFieldS("Контрагент",Rec,"ПочтАдрес");
 Контр_ИНН[Iter]=GetCardFieldS("Контрагент",Rec,"ИНН");
 Контр_КПП[Iter]=GetCardFieldS("Контрагент",Rec,"КПП");
 Контр_Статус[Iter]=GetCardFieldS("Контрагент",Rec,"РПО_Статус");
 Контр_Телефон[Iter]=GetCardFieldS("Контрагент",Rec,"Телефон");
 if Контр_Телефон[Iter]="": Контр_Телефон[Iter]=GetCardFieldS("Контрагент",Rec,"Факс"); fi;
 Return False;
end;

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

Func Контр_Статус_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,Iter:i;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 ClearVariable(Buf);
 Buf[1]="Субъект малого предпринимательства";
 Buf[2]="Учреждение уголовно исправительной системы";
 Buf[3]="Общероссийские общественные организации инвалидов";
 n=Alternate("Статус поставщика",Buf,-1,Int(Контр_Статус[Iter]),12);
 if n=0: ^Cur; fi;
 Контр_Статус[Iter]=Str(n);
 Return Cur;
end;

Proc Контр_onExit(FieldName: String; Iter: Integer);
 Контр[Iter]=nil;
 Контр_ПолнИмя[Iter]="";
 Контр_Страна[Iter]="";
 Контр_ОКСМ[Iter]="";
 Контр_Адрес[Iter]="";
 Контр_ИНН[Iter]="";
 Контр_КПП[Iter]="";
 Контр_Статус[Iter]="";
 Контр_Телефон[Iter]="";
end;

Func ФИОРук_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec: Record;
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if Rec=nil: ^Cur; fi;
 ФИОРук=GetCardFieldS("Сотрудники",rec,"ФИОТ");
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
var Rec: Record;
 Rec=Раб.Документы.ВыборСФильтром("РПО_Договор","НомерДок","РЕГ and УЧЕТ_РЕЕСТР_ОФК and ФЗ=0");
 if Rec=nil: Exit; fi;
 Расчет(RecordToString(Rec));
end;

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Форма будет очищена, продолжить",mtWarning)=cmCancel: Exit; fi;
 Очистить;
 РазбитьНаЛисты(False);
end;

Proc btnПечать_OnClick(Sender: String);
var k,p,pp,z,Iter:i;
 if f491:
    for Iter=1..Упр3 do
     if Length(ОКП[Iter])<>6 and not ОКП[Iter]="":
        if EnqOkCancel("Код ОКП должен содержать 6 знаков, игнорировать ?",mtWarning)=cmCancel: Template.Field="ОКП"; Template.Frame=Iter; Exit; fi;
        Break;
     fi;
    od;
   else
    for Iter=1..Упр3 do
     if Length(ОКП[Iter])<>7 and not ОКП[Iter]="":
        if EnqOkCancel("Код ОКДП должен содержать 7 знаков, игнорировать ?",mtWarning)=cmCancel: Template.Field="ОКП"; Template.Frame=Iter;  Exit; fi;
        Break;
     fi;
    od;
 fi;
 ЗаполнитьНаимЗаказчика(True);
 pp=РазбитьНаЛисты(True);
 Try
  if fMDuplex and pp>1:
     Раб.Настр_Печать.Cfg("",SelfCfg);
     z=0;
     for p=1..pp do
      z=z+1;
      if z=2:
         Message("Переверните лист и вставте его в принтер. Для продолжения печати нажмите Ok");
         z=0;
      fi;
      for k=1..КолКопий do
       Print("",SelfCfg,"",True,p,p);
      od;
     od;
    else
     Раб.Настр_Печать.Prn("","",SelfCfg,"",КолКопий);
  fi;
 Finally
  РазбитьНаЛисты(False);
  ЗаполнитьНаимЗаказчика(False);
 end;
end;

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

Proc cb491_OnChange(Sender: String);
 if f491:
    тчнКол=3;
   else
    тчнКол=10;
    if Раб.Настр.Начать("ИНФО.ДОГОВОР",0,0,"",GetGUID):
       тчнКол=Int(Раб.Настр.ВзятьЗначение("тчнКол_"));
    fi;
 fi;
 Оформление;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 Оформление;
end;

Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("",SelfCfg);
 fОКВ=0;
 fОКП=0;
 fОКДП=0;
 fОКЕИ=0;
 fОКСМ=0;
 if Раб.Обмен.Recipient="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ1_СВЕДЕНИЯ":
    Расчет(Раб.Обмен.BufS1[1]);
 fi;
end;
--Обработчики событий шаблона -----
--




Конец
